Repository: dodyg/practical-aspnetcore Branch: net10.0 Commit: b4cbc46a91b5 Files: 3589 Total size: 9.3 MB Directory structure: gitextract_2f0r3q_a/ ├── .editorconfig ├── .gitattributes ├── .github/ │ └── FUNDING.yml ├── .gitignore ├── .vscode/ │ ├── launch.json │ ├── settings.json │ ├── tasks.json │ └── tasks.json.old ├── AGENTS.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── MIGRATION-PLAN.md ├── OUT-OF-DATE.md ├── README.md ├── STRUCTURE.md ├── build-log-after-prune.txt ├── build-log.txt ├── exercises/ │ └── pathway-1/ │ ├── README.md │ ├── exercise-1.md │ ├── exercise-2.md │ ├── exercise-3.md │ ├── exercise-4.md │ ├── exercise-5.md │ ├── exercise-6.md │ ├── exercise-7.md │ ├── exercise-8.md │ └── exercise-9.md ├── global.json ├── projects/ │ ├── application-environment/ │ │ ├── .vscode/ │ │ │ └── settings.json │ │ ├── Program.cs │ │ ├── README.md │ │ ├── application-environment.csproj │ │ └── application-environment.sln │ ├── authentication/ │ │ ├── authentication-1/ │ │ │ ├── Program.cs │ │ │ ├── Readme.md │ │ │ └── authentication-1.csproj │ │ ├── authentication-2/ │ │ │ ├── Program.cs │ │ │ ├── Readme.md │ │ │ └── authentication-2.csproj │ │ ├── authentication-3/ │ │ │ ├── Program.cs │ │ │ ├── Readme.md │ │ │ └── authentication-3.csproj │ │ ├── authentication-4/ │ │ │ ├── Controllers/ │ │ │ │ └── WeatherForecastController.cs │ │ │ ├── Program.cs │ │ │ ├── Readme.md │ │ │ ├── WeatherForecast.cs │ │ │ ├── appsettings.Development.json │ │ │ ├── appsettings.json │ │ │ └── authentication-4.csproj │ │ ├── authentication-5/ │ │ │ ├── Data/ │ │ │ │ └── ApplicationDBContext.cs │ │ │ ├── Entities/ │ │ │ │ └── ApplicationUser.cs │ │ │ ├── Migrations/ │ │ │ │ ├── 20240301175333_Init.Designer.cs │ │ │ │ ├── 20240301175333_Init.cs │ │ │ │ └── ApplicationDBContextModelSnapshot.cs │ │ │ ├── Program.cs │ │ │ ├── Readme.md │ │ │ ├── Requests/ │ │ │ │ └── Authentication.http │ │ │ ├── appsettings.Development.json │ │ │ ├── appsettings.json │ │ │ └── authentication-5.csproj │ │ ├── build.bat │ │ ├── build.sh │ │ └── readme.md │ ├── blazor-ss/ │ │ ├── ChatR/ │ │ │ ├── ChatR.csproj │ │ │ ├── Components/ │ │ │ │ ├── App.razor │ │ │ │ ├── Pages/ │ │ │ │ │ └── Index.razor │ │ │ │ └── _Imports.razor │ │ │ ├── NotificationHub.cs │ │ │ ├── Pages/ │ │ │ │ ├── Index.cshtml │ │ │ │ └── _ViewImports.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── Services/ │ │ │ │ └── NotificationService.cs │ │ │ └── wwwroot/ │ │ │ └── css/ │ │ │ └── site.css │ │ ├── ComponentEvents/ │ │ │ ├── AppState.cs │ │ │ ├── ComponentEvents.csproj │ │ │ ├── Components/ │ │ │ │ ├── App.razor │ │ │ │ ├── Child.razor │ │ │ │ ├── Notification.razor │ │ │ │ ├── Pages/ │ │ │ │ │ └── Index.razor │ │ │ │ ├── Shared/ │ │ │ │ │ └── MainLayout.razor │ │ │ │ └── _Imports.razor │ │ │ ├── Pages/ │ │ │ │ ├── Index.cshtml │ │ │ │ └── _ViewImports.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── wwwroot/ │ │ │ └── css/ │ │ │ └── site.css │ │ ├── ComponentEvents-2/ │ │ │ ├── AppState.cs │ │ │ ├── ComponentEvents.csproj │ │ │ ├── Components/ │ │ │ │ ├── App.razor │ │ │ │ ├── Child.razor │ │ │ │ ├── Notification.razor │ │ │ │ ├── Pages/ │ │ │ │ │ └── Index.razor │ │ │ │ ├── Shared/ │ │ │ │ │ └── MainLayout.razor │ │ │ │ └── _Imports.razor │ │ │ ├── Pages/ │ │ │ │ ├── Index.cshtml │ │ │ │ └── _ViewImports.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── wwwroot/ │ │ │ └── css/ │ │ │ └── site.css │ │ ├── DependencyInjection/ │ │ │ ├── Components/ │ │ │ │ ├── App.razor │ │ │ │ ├── Pages/ │ │ │ │ │ └── Index.razor │ │ │ │ └── _Imports.razor │ │ │ ├── DependencyInjection.csproj │ │ │ ├── Pages/ │ │ │ │ ├── Index.cshtml │ │ │ │ └── _ViewImports.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── Services/ │ │ │ │ ├── TheScopedClock.cs │ │ │ │ ├── TheSingletonClock.cs │ │ │ │ └── TheTransientClock.cs │ │ │ └── wwwroot/ │ │ │ └── css/ │ │ │ └── site.css │ │ ├── HelloWorld/ │ │ │ ├── Components/ │ │ │ │ ├── App.razor │ │ │ │ ├── Pages/ │ │ │ │ │ └── Index.razor │ │ │ │ └── _Imports.razor │ │ │ ├── HelloWorld.csproj │ │ │ ├── Pages/ │ │ │ │ ├── Index.cshtml │ │ │ │ └── _ViewImports.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── wwwroot/ │ │ │ └── css/ │ │ │ └── site.css │ │ ├── JsIntegration/ │ │ │ ├── Components/ │ │ │ │ ├── App.razor │ │ │ │ ├── Pages/ │ │ │ │ │ └── Index.razor │ │ │ │ └── _Imports.razor │ │ │ ├── JsIntegration.csproj │ │ │ ├── Pages/ │ │ │ │ ├── Index.cshtml │ │ │ │ └── _ViewImports.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── wwwroot/ │ │ │ └── css/ │ │ │ └── site.css │ │ ├── Layout/ │ │ │ ├── Components/ │ │ │ │ ├── App.razor │ │ │ │ ├── Pages/ │ │ │ │ │ ├── Index.razor │ │ │ │ │ ├── NestedLayout.razor │ │ │ │ │ ├── NestedLayout2.razor │ │ │ │ │ ├── PageUsingNestedLayout.razor │ │ │ │ │ ├── PageUsingNestedLayout2.razor │ │ │ │ │ └── TopLayout.razor │ │ │ │ └── _Imports.razor │ │ │ ├── Layout.csproj │ │ │ ├── Pages/ │ │ │ │ ├── Index.cshtml │ │ │ │ └── _ViewImports.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── wwwroot/ │ │ │ └── css/ │ │ │ └── site.css │ │ ├── Localization/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Components/ │ │ │ │ ├── App.razor │ │ │ │ ├── Pages/ │ │ │ │ │ └── Index.razor │ │ │ │ └── _Imports.razor │ │ │ ├── Localization.csproj │ │ │ ├── Localization.sln │ │ │ ├── Pages/ │ │ │ │ ├── Index.cshtml │ │ │ │ ├── Switch.cshtml │ │ │ │ └── _ViewImports.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── Resources/ │ │ │ │ ├── Global.en.resx │ │ │ │ └── Global.fr.resx │ │ │ └── wwwroot/ │ │ │ └── css/ │ │ │ └── site.css │ │ ├── Localization-2/ │ │ │ ├── Components/ │ │ │ │ ├── App.razor │ │ │ │ ├── Pages/ │ │ │ │ │ └── Index.razor │ │ │ │ └── _Imports.razor │ │ │ ├── Localization.csproj │ │ │ ├── Pages/ │ │ │ │ ├── Index.cshtml │ │ │ │ ├── Switch.cshtml │ │ │ │ └── _ViewImports.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── Resources/ │ │ │ │ ├── en.po │ │ │ │ └── fr.po │ │ │ └── wwwroot/ │ │ │ └── css/ │ │ │ └── site.css │ │ ├── Localization-3/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Components/ │ │ │ │ ├── App.razor │ │ │ │ ├── Pages/ │ │ │ │ │ └── Index.razor │ │ │ │ └── _Imports.razor │ │ │ ├── Localization.csproj │ │ │ ├── Pages/ │ │ │ │ ├── Index.cshtml │ │ │ │ ├── Switch.cshtml │ │ │ │ └── _ViewImports.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── Resources/ │ │ │ │ ├── en.po │ │ │ │ ├── fr.po │ │ │ │ ├── plural.en.po │ │ │ │ └── plural.fr.po │ │ │ └── wwwroot/ │ │ │ └── css/ │ │ │ └── site.css │ │ ├── Localization-4/ │ │ │ ├── Components/ │ │ │ │ ├── App.razor │ │ │ │ ├── Pages/ │ │ │ │ │ └── Index.razor │ │ │ │ └── _Imports.razor │ │ │ ├── Localization.csproj │ │ │ ├── Pages/ │ │ │ │ ├── Index.cshtml │ │ │ │ ├── Switch.cshtml │ │ │ │ └── _ViewImports.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── Resources/ │ │ │ │ ├── ar.po │ │ │ │ └── en.po │ │ │ └── wwwroot/ │ │ │ └── css/ │ │ │ └── site.css │ │ ├── README.md │ │ ├── RenderTreeBuilder/ │ │ │ ├── ListNames.cs │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── RenderTreeBuilder.csproj │ │ │ ├── appsettings.Development.json │ │ │ └── appsettings.json │ │ ├── RssReader/ │ │ │ ├── Components/ │ │ │ │ ├── App.razor │ │ │ │ ├── Pages/ │ │ │ │ │ ├── Index.razor │ │ │ │ │ └── RssBox.razor │ │ │ │ └── _Imports.razor │ │ │ ├── Pages/ │ │ │ │ ├── Index.cshtml │ │ │ │ └── _ViewImports.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── RssReader.csproj │ │ │ ├── Services/ │ │ │ │ └── RssNews.cs │ │ │ └── wwwroot/ │ │ │ └── css/ │ │ │ └── site.css │ │ ├── RssReader-2/ │ │ │ ├── Components/ │ │ │ │ ├── App.razor │ │ │ │ ├── Pages/ │ │ │ │ │ ├── Index.razor │ │ │ │ │ └── RssBox.razor │ │ │ │ └── _Imports.razor │ │ │ ├── Pages/ │ │ │ │ ├── Index.cshtml │ │ │ │ └── _ViewImports.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── RssReader.csproj │ │ │ ├── Services/ │ │ │ │ └── RssNews.cs │ │ │ └── wwwroot/ │ │ │ └── css/ │ │ │ └── site.css │ │ ├── StartingVariation/ │ │ │ ├── Components/ │ │ │ │ ├── App.razor │ │ │ │ ├── Pages/ │ │ │ │ │ ├── About.razor │ │ │ │ │ ├── Index.razor │ │ │ │ │ ├── Manage.razor │ │ │ │ │ └── Secure/ │ │ │ │ │ ├── Index.razor │ │ │ │ │ └── Screen.razor │ │ │ │ └── _Imports.razor │ │ │ ├── Pages/ │ │ │ │ ├── Admin/ │ │ │ │ │ └── Blazor.cshtml │ │ │ │ ├── Index.cshtml │ │ │ │ ├── Manage/ │ │ │ │ │ └── Index.cshtml │ │ │ │ ├── Secure.cshtml │ │ │ │ └── _ViewImports.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── StartingVariation.csproj │ │ │ └── wwwroot/ │ │ │ └── css/ │ │ │ └── site.css │ │ ├── WallOfCounters/ │ │ │ ├── Components/ │ │ │ │ ├── App.razor │ │ │ │ ├── Pages/ │ │ │ │ │ ├── Index.razor │ │ │ │ │ └── Index.razor.css │ │ │ │ └── _Imports.razor │ │ │ ├── Pages/ │ │ │ │ ├── Index.cshtml │ │ │ │ └── _ViewImports.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── WallOfCounters.csproj │ │ ├── build.bat │ │ └── build.sh │ ├── blazor-ssr/ │ │ ├── RazorComponentEight/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── README.md │ │ │ ├── RazorComponentEight/ │ │ │ │ ├── App.razor │ │ │ │ ├── Pages/ │ │ │ │ │ ├── Index.razor │ │ │ │ │ └── Numbers.razor │ │ │ │ ├── Program.cs │ │ │ │ ├── RazorComponentEight.csproj │ │ │ │ ├── RazorComponentEight.sln │ │ │ │ ├── Shared/ │ │ │ │ │ └── MainLayout.razor │ │ │ │ └── _Imports.razor │ │ │ ├── RazorComponentEight.sln │ │ │ └── Wasm/ │ │ │ ├── Counter.razor │ │ │ ├── Interactive.razor │ │ │ ├── Program.cs │ │ │ ├── Wasm.csproj │ │ │ └── _Imports.razor │ │ ├── RazorComponentEleven/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── App.razor │ │ │ ├── Pages/ │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── RazorComponentEleven.csproj │ │ │ ├── RazorComponentEleven.sln │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ └── _Imports.razor │ │ ├── RazorComponentFive/ │ │ │ ├── Pages/ │ │ │ │ └── Greetings.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── RazorComponentFive.csproj │ │ │ ├── RazorComponentFive.sln │ │ │ └── Shared/ │ │ │ └── MainLayout.razor │ │ ├── RazorComponentFour/ │ │ │ ├── Pages/ │ │ │ │ └── Greetings.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── RazorComponentFour.csproj │ │ │ └── VIews/ │ │ │ └── Home/ │ │ │ └── Index.cshtml │ │ ├── RazorComponentNine/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── App.razor │ │ │ ├── Pages/ │ │ │ │ ├── Greet.razor │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── RazorComponentNine.csproj │ │ │ ├── RazorComponentNine.sln │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ └── _Imports.razor │ │ ├── RazorComponentOne/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── App.razor │ │ │ ├── Pages/ │ │ │ │ ├── Egypt.razor │ │ │ │ ├── Greetings.razor │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── RazorComponentOne.csproj │ │ │ ├── RazorComponentOne.sln │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ └── _Imports.razor │ │ ├── RazorComponentSeven/ │ │ │ ├── App.razor │ │ │ ├── Pages/ │ │ │ │ ├── Index.razor │ │ │ │ ├── Interactive.razor │ │ │ │ └── Numbers.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── RazorComponentSeven.csproj │ │ │ ├── RazorComponentSeven.sln │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ └── _Imports.razor │ │ ├── RazorComponentSix/ │ │ │ ├── Pages/ │ │ │ │ └── Greetings.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── RazorComponentSix.csproj │ │ │ ├── RazorComponentSix.sln │ │ │ └── Shared/ │ │ │ └── MainLayout.razor │ │ ├── RazorComponentTen/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── README.md │ │ │ ├── RazorComponentTen/ │ │ │ │ ├── App.razor │ │ │ │ ├── Pages/ │ │ │ │ │ ├── Counter.razor │ │ │ │ │ ├── Index.razor │ │ │ │ │ └── Numbers.razor │ │ │ │ ├── Program.cs │ │ │ │ ├── RazorComponentTen.csproj │ │ │ │ ├── Shared/ │ │ │ │ │ └── MainLayout.razor │ │ │ │ └── _Imports.razor │ │ │ ├── RazorComponentTen.sln │ │ │ └── Wasm/ │ │ │ ├── Interactive.razor │ │ │ ├── Program.cs │ │ │ ├── Wasm.csproj │ │ │ └── _Imports.razor │ │ ├── RazorComponentThirteen/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── README.md │ │ │ ├── RazorComponentThirteen/ │ │ │ │ ├── App.razor │ │ │ │ ├── Pages/ │ │ │ │ │ └── SSR.razor │ │ │ │ ├── Program.cs │ │ │ │ ├── RazorComponentThirteen.csproj │ │ │ │ ├── Shared/ │ │ │ │ │ └── MainLayout.razor │ │ │ │ └── _Imports.razor │ │ │ ├── RazorComponentThirteen.sln │ │ │ └── Wasm/ │ │ │ ├── Pages/ │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── Wasm.csproj │ │ │ └── _Imports.razor │ │ ├── RazorComponentThree/ │ │ │ ├── Pages/ │ │ │ │ └── Greetings.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── RazorComponentThree.csproj │ │ │ ├── RazorComponentThree.sln │ │ │ └── Shared/ │ │ │ └── MainLayout.razor │ │ ├── RazorComponentTwelve/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── App.razor │ │ │ ├── Pages/ │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── RazorComponentTwelve.csproj │ │ │ ├── RazorComponentTwelve.sln │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ └── _Imports.razor │ │ ├── RazorComponentTwo/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Pages/ │ │ │ │ └── Greetings.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── RazorComponentTwo.csproj │ │ │ ├── RazorComponentTwo.sln │ │ │ └── Shared/ │ │ │ └── MainLayout.razor │ │ ├── RazorFormHandlingFive/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Pages/ │ │ │ │ ├── App.razor │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── RazorFormHandlingFive.csproj │ │ │ ├── RazorFormHandlingFive.sln │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ └── _Imports.razor │ │ ├── RazorFormHandlingFour/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Pages/ │ │ │ │ ├── App.razor │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── RazorFormHandlingFour.csproj │ │ │ ├── RazorFormHandlingFour.sln │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ └── _Imports.razor │ │ ├── RazorFormHandlingOne/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Pages/ │ │ │ │ ├── App.razor │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── RazorFormHandlingOne.csproj │ │ │ ├── RazorFormHandlingOne.sln │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ └── _Imports.razor │ │ ├── RazorFormHandlingThree/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Pages/ │ │ │ │ ├── App.razor │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── RazorFormHandlingThree.csproj │ │ │ ├── RazorFormHandlingThree.sln │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ └── _Imports.razor │ │ ├── RazorFormHandlingTwo/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Pages/ │ │ │ │ ├── App.razor │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── RazorFormHandlingTwo.csproj │ │ │ ├── RazorFormHandlingTwo.sln │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ └── _Imports.razor │ │ ├── RazorMixMatchFour/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── App.razor │ │ │ ├── Controllers/ │ │ │ │ └── HomeController.cs │ │ │ ├── Pages/ │ │ │ │ ├── Blazor.razor │ │ │ │ └── Index.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── RazorMixMatchOne.csproj │ │ │ ├── RazorMixMatchOne.sln │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── Views/ │ │ │ │ └── Home/ │ │ │ │ └── Index.cshtml │ │ │ └── _Imports.razor │ │ ├── RazorMixMatchOne/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── App.razor │ │ │ ├── Controllers/ │ │ │ │ └── HomeController.cs │ │ │ ├── Pages/ │ │ │ │ └── Blazor.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── RazorMixMatchOne.csproj │ │ │ ├── RazorMixMatchOne.sln │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── Views/ │ │ │ │ └── Home/ │ │ │ │ └── Index.cshtml │ │ │ └── _Imports.razor │ │ ├── RazorMixMatchThree/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── App.razor │ │ │ ├── Pages/ │ │ │ │ └── Blazor.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── RazorMixMatchThree.csproj │ │ │ ├── RazorMixMatchThree.sln │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ └── _Imports.razor │ │ ├── RazorMixMatchTwo/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── App.razor │ │ │ ├── Pages/ │ │ │ │ ├── Blazor.razor │ │ │ │ └── Index.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── RazorMixMatchTwo.csproj │ │ │ ├── RazorMixMatchTwo.sln │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ └── _Imports.razor │ │ ├── build.bat │ │ ├── build.sh │ │ └── readme.md │ ├── blazor-wasm/ │ │ ├── Component/ │ │ │ ├── App.razor │ │ │ ├── Component.csproj │ │ │ ├── Pages/ │ │ │ │ ├── Greeting.razor │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── ComponentEight/ │ │ │ ├── App.razor │ │ │ ├── ComponentEight.csproj │ │ │ ├── Pages/ │ │ │ │ ├── Increment.razor │ │ │ │ ├── Index.razor │ │ │ │ └── Show.razor │ │ │ ├── Program.cs │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── ComponentEighteen/ │ │ │ ├── App.razor │ │ │ ├── ComponentEighteen.csproj │ │ │ ├── Pages/ │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── ComponentEleven/ │ │ │ ├── App.razor │ │ │ ├── ComponentEleven.csproj │ │ │ ├── Pages/ │ │ │ │ ├── All.razor │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── ComponentFifteen/ │ │ │ ├── App.razor │ │ │ ├── ComponentFifteen.csproj │ │ │ ├── Pages/ │ │ │ │ ├── Greeting.razor │ │ │ │ ├── Greeting.razor.cs │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── ComponentFive/ │ │ │ ├── App.razor │ │ │ ├── ComponentFive.csproj │ │ │ ├── Pages/ │ │ │ │ ├── Greeting.razor │ │ │ │ ├── GreetingBase.cs │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── ComponentFour/ │ │ │ ├── App.razor │ │ │ ├── ComponentFour.csproj │ │ │ ├── Pages/ │ │ │ │ ├── Greeting.razor │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── ComponentFourteen/ │ │ │ ├── App.razor │ │ │ ├── ComponentFourteen.csproj │ │ │ ├── Pages/ │ │ │ │ ├── All.razor │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── ComponentNine/ │ │ │ ├── App.razor │ │ │ ├── ComponentNine.csproj │ │ │ ├── Pages/ │ │ │ │ ├── Increment.razor │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── ComponentNineteen/ │ │ │ ├── App.razor │ │ │ ├── ComponentNineteen.csproj │ │ │ ├── Pages/ │ │ │ │ ├── Form.razor │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── ComponentSeven/ │ │ │ ├── App.razor │ │ │ ├── Calculator/ │ │ │ │ └── Calculate.cs │ │ │ ├── ComponentSeven.csproj │ │ │ ├── Helper/ │ │ │ │ └── ConversationHelper.cs │ │ │ ├── Pages/ │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── ComponentSeventeen/ │ │ │ ├── App.razor │ │ │ ├── ComponentSeventeen.csproj │ │ │ ├── Pages/ │ │ │ │ ├── Greet.razor │ │ │ │ ├── Index.razor │ │ │ │ ├── Person.cs │ │ │ │ └── PersonDetails.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── ComponentSix/ │ │ │ ├── App.razor │ │ │ ├── ComponentSix.csproj │ │ │ ├── Pages/ │ │ │ │ ├── CounterProperty.razor │ │ │ │ ├── CounterVariable.razor │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── ComponentSixteen/ │ │ │ ├── App.razor │ │ │ ├── ComponentSixteen.csproj │ │ │ ├── Pages/ │ │ │ │ ├── Greet.razor │ │ │ │ ├── Index.razor │ │ │ │ └── Person.cs │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── ComponentTen/ │ │ │ ├── App.razor │ │ │ ├── ComponentTen.csproj │ │ │ ├── Pages/ │ │ │ │ ├── Increment.razor │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── ComponentThirteen/ │ │ │ ├── App.razor │ │ │ ├── ComponentThirteen.csproj │ │ │ ├── Pages/ │ │ │ │ ├── All.razor │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── ComponentThree/ │ │ │ ├── App.razor │ │ │ ├── ComponentThree.csproj │ │ │ ├── Pages/ │ │ │ │ ├── Greeting.razor │ │ │ │ ├── Index.razor │ │ │ │ ├── PrettyBox.razor │ │ │ │ └── Wave.razor │ │ │ ├── Program.cs │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── ComponentTwelve/ │ │ │ ├── App.razor │ │ │ ├── ComponentTwelve.csproj │ │ │ ├── Pages/ │ │ │ │ ├── All.razor │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── ComponentTwenty/ │ │ │ ├── CustomElement/ │ │ │ │ ├── CustomElement.csproj │ │ │ │ ├── Interaction.razor │ │ │ │ ├── Program.cs │ │ │ │ └── _Imports.razor │ │ │ ├── README.md │ │ │ └── Web/ │ │ │ ├── Pages/ │ │ │ │ ├── Index.cshtml │ │ │ │ └── _ViewImports.cshtml │ │ │ ├── Program.cs │ │ │ └── Web.csproj │ │ ├── ComponentTwentyFive/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── App.razor │ │ │ ├── ComponentTwentyFive.csproj │ │ │ ├── ComponentTwentyFive.sln │ │ │ ├── Pages/ │ │ │ │ ├── Index.razor │ │ │ │ ├── InnerComponentOne.razor │ │ │ │ └── InnerComponentTwo.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── ComponentTwentyFour/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── App.razor │ │ │ ├── ComponentTwentyFour.csproj │ │ │ ├── Pages/ │ │ │ │ ├── Index.razor │ │ │ │ ├── InnerComponentOne.razor │ │ │ │ └── InnerComponentTwo.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── ComponentTwentyOne/ │ │ │ ├── CustomElement/ │ │ │ │ ├── CustomElement.csproj │ │ │ │ ├── Interaction.razor │ │ │ │ ├── Program.cs │ │ │ │ └── _Imports.razor │ │ │ ├── README.md │ │ │ └── Web/ │ │ │ ├── Pages/ │ │ │ │ ├── Index.cshtml │ │ │ │ └── _ViewImports.cshtml │ │ │ ├── Program.cs │ │ │ └── Web.csproj │ │ ├── ComponentTwentySeven/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── App.razor │ │ │ ├── ComponentTwentySeven.csproj │ │ │ ├── ComponentTwentySeven.sln │ │ │ ├── Pages/ │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── ComponentTwentySix/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── App.razor │ │ │ ├── ComponentTwentySix.csproj │ │ │ ├── ComponentTwentySix.sln │ │ │ ├── Pages/ │ │ │ │ ├── Index.razor │ │ │ │ └── InnerComponentOne.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── ComponentTwentyThree/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── App.razor │ │ │ ├── ComponentTwentyThree.csproj │ │ │ ├── ComponentTwentyThree.sln │ │ │ ├── Pages/ │ │ │ │ ├── Index.razor │ │ │ │ ├── InnerComponentOne.razor │ │ │ │ └── InnerComponentTwo.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── ComponentTwentyTwo/ │ │ │ ├── CustomElement/ │ │ │ │ ├── CustomElement.csproj │ │ │ │ ├── Interaction.razor │ │ │ │ ├── Program.cs │ │ │ │ └── _Imports.razor │ │ │ ├── README.md │ │ │ └── Web/ │ │ │ ├── Pages/ │ │ │ │ ├── Index.cshtml │ │ │ │ └── _ViewImports.cshtml │ │ │ ├── Program.cs │ │ │ └── Web.csproj │ │ ├── ComponentTwo/ │ │ │ ├── App.razor │ │ │ ├── ComponentTwo.csproj │ │ │ ├── Pages/ │ │ │ │ ├── Greeting.razor │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── DataBinding/ │ │ │ ├── App.razor │ │ │ ├── DataBinding.csproj │ │ │ ├── Pages/ │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── DataBindingTwo/ │ │ │ ├── App.razor │ │ │ ├── Code/ │ │ │ │ └── Profile.cs │ │ │ ├── DataBindingTwo.csproj │ │ │ ├── Pages/ │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── README.MD │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── HelloWorld/ │ │ │ ├── App.razor │ │ │ ├── HelloWorld.csproj │ │ │ ├── Pages/ │ │ │ │ ├── Index.razor │ │ │ │ └── _Imports.razor │ │ │ ├── Program.cs │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── QuickGridOne/ │ │ │ ├── App.razor │ │ │ ├── Pages/ │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── QuickGridOne.csproj │ │ │ ├── README.md │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── README.md │ │ ├── RadioButton/ │ │ │ ├── App.razor │ │ │ ├── Pages/ │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── RadioButton.csproj │ │ │ ├── Shared/ │ │ │ │ └── MainLayout.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── RenderFragment/ │ │ │ ├── App.razor │ │ │ ├── Pages/ │ │ │ │ └── Index.razor │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── RenderFragment.csproj │ │ │ ├── Shared/ │ │ │ │ ├── MainLayout.razor │ │ │ │ └── TableTemplate.razor │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── build.bat │ │ ├── build.sh │ │ └── global.json │ ├── build.bat │ ├── build.sh │ ├── caching/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── caching-1/ │ │ │ ├── Program.cs │ │ │ └── caching.csproj │ │ ├── caching-2/ │ │ │ ├── Program.cs │ │ │ ├── cache-file.txt │ │ │ └── caching-2.csproj │ │ ├── caching-3/ │ │ │ ├── Program.cs │ │ │ └── caching-3.csproj │ │ ├── caching-4/ │ │ │ ├── Program.cs │ │ │ └── caching-4.csproj │ │ └── redis-cache/ │ │ ├── .vscode/ │ │ │ └── settings.json │ │ ├── Program.cs │ │ ├── appSettings.json │ │ ├── redis-cache.csproj │ │ └── redis-cache.sln │ ├── clean.bat │ ├── clean.sh │ ├── configurations/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── configuration-1/ │ │ │ ├── Program.cs │ │ │ └── configuration.csproj │ │ ├── configuration-IOption/ │ │ │ ├── Program.cs │ │ │ ├── appsettings.json │ │ │ └── configuration-IOption.csproj │ │ ├── configuration-IOption-array/ │ │ │ ├── Program.cs │ │ │ ├── appsettings.json │ │ │ └── configuration-ioption-array.csproj │ │ ├── configuration-bind-option/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── appSettings.json │ │ │ └── configuration-bind-option.csproj │ │ ├── configuration-environment-variables/ │ │ │ ├── Program.cs │ │ │ └── configuration-environment-variables.csproj │ │ ├── configuration-ini/ │ │ │ ├── Program.cs │ │ │ ├── configuration-ini.csproj │ │ │ └── settings.ini │ │ ├── configuration-ini-options/ │ │ │ ├── Program.cs │ │ │ ├── configuration-ini-options.csproj │ │ │ └── settings.ini │ │ ├── configuration-options/ │ │ │ ├── Program.cs │ │ │ └── configuration-options.csproj │ │ ├── configuration-xml/ │ │ │ ├── Program.cs │ │ │ ├── configuration-xml.csproj │ │ │ └── settings.xml │ │ └── configuration-xml-options/ │ │ ├── Program.cs │ │ ├── configuration-xml-options.csproj │ │ └── settings.xml │ ├── connection-info/ │ │ ├── Program.cs │ │ └── connection-info.csproj │ ├── corewcf/ │ │ ├── README.md │ │ └── corewcf-1/ │ │ ├── README.md │ │ ├── client/ │ │ │ ├── IEchoService.cs │ │ │ ├── Program.cs │ │ │ └── client.csproj │ │ └── server/ │ │ ├── EchoService.cs │ │ ├── IEchoService.cs │ │ ├── Program.cs │ │ └── server.csproj │ ├── datastar/ │ │ ├── README.md │ │ ├── backend-patch-signals/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── backend-patch-signals.csproj │ │ │ └── backend-patch-signals.sln │ │ ├── backend-patch-signals-2/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── backend-patch-signals-2.csproj │ │ │ └── backend-patch-signals-2.sln │ │ ├── backend-patch-signals-3/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── backend-patch-signals-3.csproj │ │ ├── backend-patch-signals-4/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── backend-patch-signals-4.csproj │ │ │ └── backend-patch-signals-4.sln │ │ ├── build.bat │ │ ├── build.sh │ │ ├── data-attr/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── data-attr.csproj │ │ │ └── data-attr.sln │ │ ├── data-bind/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── data-bind.csproj │ │ │ └── data-bind.sln │ │ ├── data-class/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── data-class.csproj │ │ │ └── data-class.sln │ │ ├── data-computed/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── data-computed.csproj │ │ │ └── data-computed.sln │ │ ├── data-effect/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── data-effect.csproj │ │ │ └── data-effect.sln │ │ ├── data-ignore/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── data-ignore.csproj │ │ │ └── data-ignore.sln │ │ ├── data-indicator/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── data-indicator.csproj │ │ │ └── data-indicator.sln │ │ ├── data-on-click/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── data-on-click.csproj │ │ │ └── data-on-click.sln │ │ ├── data-on-custom-event/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── data-on-custom-event.csproj │ │ │ └── data-on-custom-event.sln │ │ ├── data-on-interval/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── data-on-interval.csproj │ │ │ └── data-on-interval.sln │ │ ├── data-on-signal-patch/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── data-on-signal-patch.csproj │ │ │ └── data-on-signal-patch.sln │ │ ├── data-on-signal-patch-filter/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── data-on-signal-patch-filter.csproj │ │ │ └── data-on-signal-patch-filter.sln │ │ ├── data-patch-elements-outer/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── data-patch-elements-outer.csproj │ │ │ └── data-patch-elements-outer.sln │ │ ├── data-ref/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── data-ref.csproj │ │ │ └── data-ref.sln │ │ ├── data-show/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── data-show.csproj │ │ │ └── data-show.sln │ │ ├── data-style/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── data-style.csproj │ │ │ └── data-style.sln │ │ ├── global.json │ │ └── hello-world/ │ │ ├── .vscode/ │ │ │ └── settings.json │ │ ├── Program.cs │ │ ├── README.md │ │ ├── hello-world.csproj │ │ └── hello-world.sln │ ├── dependency-injection/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── dependency-injection-1/ │ │ │ ├── Program.cs │ │ │ └── dependency-injection-1.csproj │ │ ├── dependency-injection-2/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── dependency-injection-2.csproj │ │ ├── dependency-injection-3/ │ │ │ ├── Program.cs │ │ │ └── dependency-injection-3.csproj │ │ ├── dependency-injection-4/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── dependency-injection-4.csproj │ │ ├── keyed-service/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── keyed-service.csproj │ │ │ └── keyed-service.sln │ │ └── keyed-service-2/ │ │ ├── Program.cs │ │ ├── README.md │ │ ├── keyed-service-2.csproj │ │ └── keyed-service-2.sln │ ├── device-detection/ │ │ ├── .vscode/ │ │ │ └── settings.json │ │ ├── Program.cs │ │ ├── README.md │ │ ├── device-detection.csproj │ │ └── device-detection.sln │ ├── diagnostics/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── diagnostics-1/ │ │ │ ├── Program.cs │ │ │ └── diagnostics.csproj │ │ ├── diagnostics-2/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Program.cs │ │ │ └── diagnostics-2.csproj │ │ ├── diagnostics-3/ │ │ │ ├── Program.cs │ │ │ └── diagnostics-3.csproj │ │ ├── diagnostics-4/ │ │ │ ├── Program.cs │ │ │ └── diagnostics-4.csproj │ │ └── diagnostics-5/ │ │ ├── Program.cs │ │ └── diagnostics-5.csproj │ ├── elsa/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── composite-activity/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── composite-activity.csproj │ │ │ └── composite-activity.sln │ │ ├── for-activity/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── for-activity.csproj │ │ │ └── for-activity.sln │ │ ├── foreach-activity/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── foreach-activity.csproj │ │ │ └── foreach-activity.sln │ │ ├── fork-activity/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── fork-activity.csproj │ │ │ └── fork-activity.sln │ │ ├── fork-activity-2/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── fork-activity-2.csproj │ │ │ └── fork-activity-2.sln │ │ ├── global.json │ │ ├── if-activity/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── if-activity.csproj │ │ │ └── if-activity.sln │ │ ├── readline-activity/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── readline-activity.csproj │ │ │ └── readline-activity.sln │ │ ├── sequence-activity/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── sequence-activity.csproj │ │ │ └── sequence-activity.sln │ │ ├── setname-activity/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── setname-activity.csproj │ │ │ └── setname-activity.sln │ │ ├── setvariable-activity/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── setvariable-activity.csproj │ │ │ └── setvariable-activity.sln │ │ ├── while-activity/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── while-activity.csproj │ │ │ └── while-activity.sln │ │ ├── workflow/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── workflow.csproj │ │ │ └── workflow.sln │ │ ├── workflow-2/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── workflow.csproj │ │ ├── workflow-3/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── workflow-3.csproj │ │ │ └── workflow-3.sln │ │ ├── workflow-4/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── workflow-4.csproj │ │ │ └── workflow-4.sln │ │ ├── workflow-5/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── workflow-5.csproj │ │ │ └── workflow-5.sln │ │ └── writeline-activity/ │ │ ├── Program.cs │ │ ├── README.md │ │ ├── writeline-activity.csproj │ │ └── writeline-activity.sln │ ├── endpoint-routing/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── endpoint-routing/ │ │ │ ├── Program.cs │ │ │ └── endpoint-routing.csproj │ │ ├── endpoint-routing-2/ │ │ │ ├── Program.cs │ │ │ └── endpoint-routing-2.csproj │ │ ├── endpoint-routing-3/ │ │ │ ├── Program.cs │ │ │ └── endpoint-routing-3.csproj │ │ ├── endpoint-routing-4/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Program.cs │ │ │ └── endpoint-routing-4.csproj │ │ ├── endpoint-routing-6/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Program.cs │ │ │ └── endpoint-routing-6.csproj │ │ ├── new-routing/ │ │ │ ├── Pages/ │ │ │ │ └── Index.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── new-routing.csproj │ │ ├── new-routing-10/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Pages/ │ │ │ │ ├── about.cshtml │ │ │ │ └── index.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── new-routing-10.csproj │ │ ├── new-routing-11/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ ├── settings.json │ │ │ │ └── tasks.json │ │ │ ├── Pages/ │ │ │ │ ├── about.cshtml │ │ │ │ ├── about.cshtml.cs │ │ │ │ └── index.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── new-routing-11.csproj │ │ │ └── new-routing-11.sln │ │ ├── new-routing-12/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ ├── settings.json │ │ │ │ └── tasks.json │ │ │ ├── Pages/ │ │ │ │ ├── _ViewImports.cshtml │ │ │ │ ├── about.cshtml │ │ │ │ ├── about.cshtml.cs │ │ │ │ └── index.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── new-routing-12.csproj │ │ │ └── new-routing-12.sln │ │ ├── new-routing-13/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Controllers/ │ │ │ │ └── HomeController.cs │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── Views/ │ │ │ │ ├── Home/ │ │ │ │ │ ├── About.cshtml │ │ │ │ │ └── Index.cshtml │ │ │ │ └── _ViewImports.cshtml │ │ │ └── new-routing-13.csproj │ │ ├── new-routing-14/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── new-routing-14.csproj │ │ ├── new-routing-15/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── new-routing-15.csproj │ │ ├── new-routing-16/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Areas/ │ │ │ │ ├── Admin/ │ │ │ │ │ ├── Controllers/ │ │ │ │ │ │ └── HomeController.cs │ │ │ │ │ └── Views/ │ │ │ │ │ └── Home/ │ │ │ │ │ └── Index.cshtml │ │ │ │ └── Customer/ │ │ │ │ ├── Controllers/ │ │ │ │ │ └── HomeController.cs │ │ │ │ └── Views/ │ │ │ │ └── Home/ │ │ │ │ └── Index.cshtml │ │ │ ├── Controllers/ │ │ │ │ └── HomeController.cs │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── Views/ │ │ │ │ └── Home/ │ │ │ │ └── Index.cshtml │ │ │ └── new-routing-16.csproj │ │ ├── new-routing-17/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── new-routing-17.csproj │ │ ├── new-routing-18/ │ │ │ ├── Controllers/ │ │ │ │ └── HomeController.cs │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── Views/ │ │ │ │ └── Home/ │ │ │ │ └── Index.cshtml │ │ │ └── new-routing-18.csproj │ │ ├── new-routing-19/ │ │ │ ├── Pages/ │ │ │ │ └── Index.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── new-routing-19.csproj │ │ ├── new-routing-2/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── new-routing-2.csproj │ │ ├── new-routing-20/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Controllers/ │ │ │ │ ├── AdminController.cs │ │ │ │ └── HomeController.cs │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── Views/ │ │ │ │ └── Home/ │ │ │ │ └── Index.cshtml │ │ │ └── new-routing-20.csproj │ │ ├── new-routing-21/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── new-routing-21.csproj │ │ ├── new-routing-22/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── new-routing-22.csproj │ │ ├── new-routing-23/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── new-routing-23.csproj │ │ ├── new-routing-24/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── new-routing-24.csproj │ │ ├── new-routing-25/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── new-routing-25.csproj │ │ ├── new-routing-26/ │ │ │ ├── Pages/ │ │ │ │ ├── Index.cshtml │ │ │ │ ├── One.cshtml │ │ │ │ ├── Three.cshtml │ │ │ │ ├── Two.cshtml │ │ │ │ └── Undefined.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── new-routing-26.csproj │ │ ├── new-routing-27/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Areas/ │ │ │ │ ├── Admin/ │ │ │ │ │ └── Pages/ │ │ │ │ │ └── Index.cshtml │ │ │ │ └── Customer/ │ │ │ │ └── Pages/ │ │ │ │ └── Index.cshtml │ │ │ ├── Pages/ │ │ │ │ └── Index.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── new-routing-27.csproj │ │ ├── new-routing-28/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Areas/ │ │ │ │ ├── Admin/ │ │ │ │ │ └── Pages/ │ │ │ │ │ ├── Index.cshtml │ │ │ │ │ ├── Manage.cshtml │ │ │ │ │ └── Reports.cshtml │ │ │ │ └── Customer/ │ │ │ │ └── Pages/ │ │ │ │ ├── Index.cshtml │ │ │ │ └── Tickets.cshtml │ │ │ ├── Pages/ │ │ │ │ └── Index.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── new-routing-28.csproj │ │ ├── new-routing-29/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Areas/ │ │ │ │ ├── Admin/ │ │ │ │ │ └── Pages/ │ │ │ │ │ ├── Index.cshtml │ │ │ │ │ ├── Manage.cshtml │ │ │ │ │ ├── Other.cshtml │ │ │ │ │ └── Reports.cshtml │ │ │ │ └── Customer/ │ │ │ │ └── Pages/ │ │ │ │ ├── Index.cshtml │ │ │ │ └── Tickets.cshtml │ │ │ ├── Pages/ │ │ │ │ └── Index.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── new-routing-29.csproj │ │ ├── new-routing-3/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── new-routing-3.csproj │ │ ├── new-routing-30/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Areas/ │ │ │ │ ├── Admin/ │ │ │ │ │ └── Pages/ │ │ │ │ │ ├── Index.cshtml │ │ │ │ │ ├── Manage.cshtml │ │ │ │ │ ├── Other.cshtml │ │ │ │ │ ├── OtherLevel.cshtml │ │ │ │ │ ├── OtherNumber.cshtml │ │ │ │ │ └── Reports.cshtml │ │ │ │ └── Customer/ │ │ │ │ └── Pages/ │ │ │ │ ├── Index.cshtml │ │ │ │ └── Tickets.cshtml │ │ │ ├── Pages/ │ │ │ │ └── Index.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── new-routing-30.csproj │ │ ├── new-routing-31/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── new-routing-31.csproj │ │ ├── new-routing-4/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── new-routing-4.csproj │ │ ├── new-routing-5/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── new-routing-5.csproj │ │ ├── new-routing-6/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Pages/ │ │ │ │ └── About.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── new-routing-6.csproj │ │ ├── new-routing-7/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Pages/ │ │ │ │ └── About.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── new-routing-7.csproj │ │ ├── new-routing-8/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── new-routing-8.csproj │ │ │ └── static/ │ │ │ └── index.html │ │ ├── new-routing-9/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Pages/ │ │ │ │ └── index.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── new-routing-9.csproj │ │ └── parameter-transformer/ │ │ ├── Program.cs │ │ └── parameter-transformer.csproj │ ├── exception-handler-middleware/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── iexception-handler/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── iexception-handler.csproj │ │ │ └── iexception-handler.sln │ │ └── iexception-handler-2/ │ │ ├── Program.cs │ │ ├── README.md │ │ ├── iexception-handler-2.csproj │ │ └── iexception-handler-2.sln │ ├── features/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── features-connection/ │ │ │ ├── Program.cs │ │ │ └── features-connection.csproj │ │ ├── features-http-body-response/ │ │ │ ├── Program.cs │ │ │ ├── README.MD │ │ │ └── features-http-body-response.csproj │ │ ├── features-max-request-body-size/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── features-max-request-body-size.csproj │ │ ├── features-request-culture/ │ │ │ ├── Program.cs │ │ │ └── features-request-culture.csproj │ │ ├── features-server-addresses/ │ │ │ ├── Program.cs │ │ │ └── features-server-addresses.csproj │ │ ├── features-server-addresses-2/ │ │ │ ├── Program.cs │ │ │ └── features-server-addresses-2.csproj │ │ ├── features-server-custom/ │ │ │ ├── Program.cs │ │ │ └── features-server-custom.csproj │ │ ├── features-server-custom-override/ │ │ │ ├── Program.cs │ │ │ └── features-server-custom-override.csproj │ │ ├── features-server-request/ │ │ │ ├── Program.cs │ │ │ └── features-server-request.csproj │ │ ├── features-session/ │ │ │ ├── Program.cs │ │ │ └── features-session.csproj │ │ └── features-session-redis-2/ │ │ ├── Program.cs │ │ ├── appSettings.json │ │ └── features-session-redis-2.csproj │ ├── file-provider/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── file-provider-custom/ │ │ │ ├── Program.cs │ │ │ └── file-provider-custom.csproj │ │ ├── file-provider-physical/ │ │ │ ├── Program.cs │ │ │ ├── file-provider-physical.csproj │ │ │ └── wwwroot/ │ │ │ └── hello-world.txt │ │ ├── serve-static-files-1/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── serve-static-files.csproj │ │ │ └── wwwroot/ │ │ │ ├── hello.css │ │ │ └── index.html │ │ ├── serve-static-files-2/ │ │ │ ├── Program.cs │ │ │ ├── serve-static-files-2.csproj │ │ │ └── wwwroot/ │ │ │ ├── hello.css │ │ │ ├── index.html │ │ │ └── secrets/ │ │ │ └── one.txt │ │ ├── serve-static-files-3/ │ │ │ ├── Program.cs │ │ │ ├── serve-static-files-3.csproj │ │ │ └── wwwroot/ │ │ │ ├── hello.css │ │ │ ├── index2.html │ │ │ └── secrets/ │ │ │ └── one.txt │ │ ├── serve-static-files-4/ │ │ │ ├── Program.cs │ │ │ ├── serve-static-files-4.csproj │ │ │ └── wwwroot/ │ │ │ ├── hello.css │ │ │ └── index.html │ │ ├── serve-static-files-5/ │ │ │ ├── Program.cs │ │ │ ├── serve-static-files-5.csproj │ │ │ └── wwwroot/ │ │ │ ├── hello.css │ │ │ └── index.html │ │ ├── serve-static-files-6/ │ │ │ ├── Program.cs │ │ │ ├── serve-static-files-6.csproj │ │ │ └── wwwroot/ │ │ │ ├── hello.css │ │ │ ├── index.html │ │ │ └── secrets/ │ │ │ └── one.txt │ │ ├── serve-static-files-7/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── serve-static-files-7.csproj │ │ └── serve-static-files-8/ │ │ ├── Program.cs │ │ ├── README.md │ │ └── serve-static-files-7.csproj │ ├── generic-host/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── generic-host-1/ │ │ │ ├── Program.cs │ │ │ └── generic-host.csproj │ │ ├── generic-host-2/ │ │ │ ├── Program.cs │ │ │ └── generic-host-2.csproj │ │ ├── generic-host-3/ │ │ │ ├── Program.cs │ │ │ └── generic-host-3.csproj │ │ ├── generic-host-4/ │ │ │ ├── Program.cs │ │ │ └── generic-host-4.csproj │ │ ├── generic-host-5/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Program.cs │ │ │ └── generic-host-5.csproj │ │ ├── generic-host-configure-app/ │ │ │ ├── Program.cs │ │ │ └── generic-host-configure-app.csproj │ │ ├── generic-host-configure-host/ │ │ │ ├── Program.cs │ │ │ └── generic-host-configure-host.csproj │ │ ├── generic-host-configure-logging/ │ │ │ ├── Program.cs │ │ │ └── generic-host-configure-logging.csproj │ │ ├── generic-host-environment/ │ │ │ ├── Program.cs │ │ │ └── generic-host-environment.csproj │ │ └── generic-host-ihostapplicationlifetime/ │ │ ├── Program.cs │ │ └── generic-host-ihostapplicationlifetime.csproj │ ├── grpc/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── grpc/ │ │ │ ├── README.md │ │ │ ├── client/ │ │ │ │ ├── Program.cs │ │ │ │ ├── billboard.proto │ │ │ │ └── grpc-client.csproj │ │ │ └── server/ │ │ │ ├── Program.cs │ │ │ ├── billboard.proto │ │ │ └── grpc-server.csproj │ │ ├── grpc-10/ │ │ │ ├── README.md │ │ │ ├── client/ │ │ │ │ ├── .vscode/ │ │ │ │ │ └── settings.json │ │ │ │ ├── Program.cs │ │ │ │ ├── billboard.proto │ │ │ │ └── grpc-client.csproj │ │ │ └── server/ │ │ │ ├── Program.cs │ │ │ ├── billboard.proto │ │ │ └── grpc-server.csproj │ │ ├── grpc-11/ │ │ │ ├── README.md │ │ │ ├── client/ │ │ │ │ ├── Program.cs │ │ │ │ ├── billboard.proto │ │ │ │ └── grpc-client.csproj │ │ │ └── server/ │ │ │ ├── Program.cs │ │ │ ├── billboard.proto │ │ │ └── grpc-server.csproj │ │ ├── grpc-12/ │ │ │ ├── README.md │ │ │ ├── client/ │ │ │ │ ├── App.razor │ │ │ │ ├── GrpcClient.csproj │ │ │ │ ├── Pages/ │ │ │ │ │ └── Index.razor │ │ │ │ ├── Program.cs │ │ │ │ ├── Shared/ │ │ │ │ │ └── MainLayout.razor │ │ │ │ ├── _Imports.razor │ │ │ │ ├── billboard.proto │ │ │ │ └── wwwroot/ │ │ │ │ └── index.html │ │ │ └── server/ │ │ │ ├── Program.cs │ │ │ ├── billboard.proto │ │ │ └── grpc-server.csproj │ │ ├── grpc-13/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── billboard.proto │ │ │ ├── google/ │ │ │ │ └── api/ │ │ │ │ ├── annotations.proto │ │ │ │ └── http.proto │ │ │ └── grpc-server.csproj │ │ ├── grpc-14/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── billboard.proto │ │ │ ├── google/ │ │ │ │ └── api/ │ │ │ │ ├── annotations.proto │ │ │ │ └── http.proto │ │ │ └── grpc-server.csproj │ │ ├── grpc-15/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── billboard.proto │ │ │ ├── google/ │ │ │ │ └── api/ │ │ │ │ ├── annotations.proto │ │ │ │ └── http.proto │ │ │ └── grpc-server.csproj │ │ ├── grpc-16/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── billboard.proto │ │ │ ├── google/ │ │ │ │ └── api/ │ │ │ │ ├── annotations.proto │ │ │ │ └── http.proto │ │ │ └── grpc-server.csproj │ │ ├── grpc-17/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── billboard.proto │ │ │ ├── google/ │ │ │ │ └── api/ │ │ │ │ ├── annotations.proto │ │ │ │ └── http.proto │ │ │ └── grpc-server.csproj │ │ ├── grpc-2/ │ │ │ ├── README.md │ │ │ ├── client/ │ │ │ │ ├── Program.cs │ │ │ │ ├── billboard.proto │ │ │ │ └── grpc-client.csproj │ │ │ └── server/ │ │ │ ├── Program.cs │ │ │ ├── billboard.proto │ │ │ └── grpc-server.csproj │ │ ├── grpc-3/ │ │ │ ├── README.md │ │ │ ├── client/ │ │ │ │ ├── Program.cs │ │ │ │ ├── billboard.proto │ │ │ │ └── grpc-client.csproj │ │ │ └── server/ │ │ │ ├── Program.cs │ │ │ ├── billboard.proto │ │ │ └── grpc-server.csproj │ │ ├── grpc-4/ │ │ │ ├── README.md │ │ │ ├── client/ │ │ │ │ ├── Program.cs │ │ │ │ ├── billboard.proto │ │ │ │ └── grpc-client.csproj │ │ │ └── server/ │ │ │ ├── Program.cs │ │ │ ├── billboard.proto │ │ │ └── grpc-server.csproj │ │ ├── grpc-5/ │ │ │ ├── README.md │ │ │ ├── client/ │ │ │ │ ├── Program.cs │ │ │ │ ├── billboard.proto │ │ │ │ └── grpc-client.csproj │ │ │ └── server/ │ │ │ ├── Program.cs │ │ │ ├── billboard.proto │ │ │ └── grpc-server.csproj │ │ ├── grpc-6/ │ │ │ ├── README.md │ │ │ ├── client/ │ │ │ │ ├── Program.cs │ │ │ │ ├── billboard.proto │ │ │ │ └── grpc-client.csproj │ │ │ └── server/ │ │ │ ├── Program.cs │ │ │ ├── billboard.proto │ │ │ └── grpc-server.csproj │ │ ├── grpc-7/ │ │ │ ├── README.md │ │ │ ├── client/ │ │ │ │ ├── Program.cs │ │ │ │ ├── billboard.proto │ │ │ │ └── grpc-client.csproj │ │ │ └── server/ │ │ │ ├── Program.cs │ │ │ ├── billboard.proto │ │ │ └── grpc-server.csproj │ │ ├── grpc-8/ │ │ │ ├── README.md │ │ │ ├── client/ │ │ │ │ ├── Program.cs │ │ │ │ ├── billboard.proto │ │ │ │ └── grpc-client.csproj │ │ │ └── server/ │ │ │ ├── Program.cs │ │ │ ├── billboard.proto │ │ │ └── grpc-server.csproj │ │ └── grpc-9/ │ │ ├── README.md │ │ ├── client/ │ │ │ ├── Program.cs │ │ │ ├── billboard.proto │ │ │ └── grpc-client.csproj │ │ └── server/ │ │ ├── Program.cs │ │ ├── billboard.proto │ │ └── grpc-server.csproj │ ├── health-check/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── health-check-1/ │ │ │ ├── Program.cs │ │ │ └── health-check.csproj │ │ ├── health-check-2/ │ │ │ ├── Program.cs │ │ │ └── health-check-2.csproj │ │ ├── health-check-3/ │ │ │ ├── Program.cs │ │ │ └── health-check-3.csproj │ │ ├── health-check-4/ │ │ │ ├── Program.cs │ │ │ └── health-check-4.csproj │ │ ├── health-check-5/ │ │ │ ├── Program.cs │ │ │ └── health-check-5.csproj │ │ └── health-check-6/ │ │ ├── Program.cs │ │ └── health-check-6.csproj │ ├── htmx/ │ │ ├── Readme.md │ │ ├── all-verbs/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── all-verbs.csproj │ │ │ └── all-verbs.sln │ │ ├── boost/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── boost.csproj │ │ │ └── boost.sln │ │ ├── form/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── form.csproj │ │ │ └── form.sln │ │ ├── form-2/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── form-2.csproj │ │ │ └── form-2.sln │ │ ├── header-hx-refresh/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── header-hx-refresh.csproj │ │ ├── header-hx-replace-url/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── header-hx-replace-url.csproj │ │ │ └── header-hx-replace-url.sln │ │ ├── header-hx-reselect/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── header-hx-reselect.csproj │ │ ├── header-hx-retarget/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── header-hx-retarget.csproj │ │ │ └── header-hx-retarget.sln │ │ ├── header-hx-trigger/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── header-hx-trigger.csproj │ │ │ └── header-hx-trigger.sln │ │ ├── header-hx-trigger-2/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── header-hx-trigger-2.csproj │ │ │ └── header-hx-trigger-2.sln │ │ ├── header-hx-trigger-3/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── header-hx-trigger-3.csproj │ │ │ └── header-hx-trigger-3.sln │ │ ├── header-hx-trigger-4/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── header-hx-trigger-4.csproj │ │ │ └── header-hx-trigger-4.sln │ │ ├── htmx-after-on-load/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── htmx-after-on-load.csproj │ │ ├── htmx-config-request/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── htmx-config-request.csproj │ │ │ └── htmx-config-request.sln │ │ ├── htmx-response-error/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── htmx-response-error.csproj │ │ │ └── htmx-response-error.sln │ │ ├── hx-confirm/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── hx-confirm.csproj │ │ │ └── hx-confirm.sln │ │ ├── hx-headers/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── hx-headers.csproj │ │ │ └── hx-headers.sln │ │ ├── hx-include/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── hx-include.csproj │ │ │ └── hx-include.sln │ │ ├── hx-indicator/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── hx-indicator.csproj │ │ │ └── hx-indicator.sln │ │ ├── hx-on/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── hx-on.csproj │ │ │ └── hx-on.sln │ │ ├── hx-on-2/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── all-verbs.csproj │ │ │ └── all-verbs.sln │ │ ├── hx-preserve/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── hx-preserve.csproj │ │ │ └── hx-preserve.sln │ │ ├── hx-prompt/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── hx-prompt.csproj │ │ │ └── hx-prompt.sln │ │ ├── hx-replace-url/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── hx-replace-url.csproj │ │ │ └── hx-replace-url.sln │ │ ├── hx-replace-url-2/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── hx-replace-url-2.csproj │ │ │ └── hx-replace-url-2.sln │ │ ├── hx-sync-queue/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── hx-sync-queue.csproj │ │ ├── hx-vals/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── hx-vals.csproj │ │ ├── modal-bootstrap/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── modal-bootstrap.csproj │ │ │ └── modal-bootstrap.sln │ │ ├── push-url/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── push-url.csproj │ │ │ └── push-url.sln │ │ ├── query-string/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── query-string.csproj │ │ ├── select/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── select.csproj │ │ │ └── select.sln │ │ ├── select-2/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── select.csproj │ │ │ └── select.sln │ │ ├── select-oob/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── select-oob.csproj │ │ │ └── select-oob.sln │ │ ├── swap/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── swap.csproj │ │ ├── swap-2/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── swap-2.csproj │ │ │ └── swap-2.sln │ │ ├── target/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── target.csproj │ │ │ └── target.sln │ │ ├── trigger-every/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── trigger-every.csproj │ │ │ └── trigger-every.sln │ │ ├── trigger-load/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── Readme.md │ │ │ ├── trigger-load.csproj │ │ │ └── trigger-load.sln │ │ ├── trigger-load-2/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── trigger-load-2.csproj │ │ │ └── trigger-load-2.sln │ │ └── trigger-once/ │ │ ├── .vscode/ │ │ │ └── settings.json │ │ ├── Program.cs │ │ ├── README.md │ │ ├── trigger-once.csproj │ │ └── trigger-once.sln │ ├── httpclientfactory/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── httpclientfactory-1/ │ │ │ ├── Program.cs │ │ │ └── httpclientfactory.csproj │ │ ├── httpclientfactory-2/ │ │ │ ├── Program.cs │ │ │ └── httpclientfactory-2.csproj │ │ ├── httpclientfactory-3/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Program.cs │ │ │ └── httpclientfactory-3.csproj │ │ └── httpclientfactory-4/ │ │ ├── .vscode/ │ │ │ ├── launch.json │ │ │ └── tasks.json │ │ ├── Program.cs │ │ └── httpclientfactory-4.csproj │ ├── hydro/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── component-1/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Pages/ │ │ │ │ ├── Components/ │ │ │ │ │ ├── Container.cshtml │ │ │ │ │ ├── Container.cshtml.cs │ │ │ │ │ ├── Message.cshtml │ │ │ │ │ └── Message.cshtml.cs │ │ │ │ ├── Index.cshtml │ │ │ │ ├── Shared/ │ │ │ │ │ └── _Layout.cshtml │ │ │ │ └── _ViewImports.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── component-1.csproj │ │ │ └── component-1.sln │ │ ├── component-2/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Pages/ │ │ │ │ ├── Components/ │ │ │ │ │ ├── Container.cshtml │ │ │ │ │ ├── Container.cshtml.cs │ │ │ │ │ ├── InnerMessage.cs │ │ │ │ │ ├── InnerMessage.cshtml │ │ │ │ │ ├── Message.cshtml │ │ │ │ │ └── Message.cshtml.cs │ │ │ │ ├── Index.cshtml │ │ │ │ ├── Shared/ │ │ │ │ │ └── _Layout.cshtml │ │ │ │ └── _ViewImports.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── component-1.csproj │ │ │ └── component-1.sln │ │ ├── component-3/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Pages/ │ │ │ │ ├── Components/ │ │ │ │ │ ├── Container.cshtml │ │ │ │ │ ├── Container.cshtml.cs │ │ │ │ │ ├── Message.cshtml │ │ │ │ │ ├── Message.cshtml.cs │ │ │ │ │ ├── Message2.cshtml │ │ │ │ │ └── Message2.cshtml.cs │ │ │ │ ├── Index.cshtml │ │ │ │ ├── Shared/ │ │ │ │ │ └── _Layout.cshtml │ │ │ │ └── _ViewImports.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── component-3.csproj │ │ ├── cookies/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Pages/ │ │ │ │ ├── Components/ │ │ │ │ │ ├── CookieControl.cshtml │ │ │ │ │ ├── CookieControl.cshtml.cs │ │ │ │ │ ├── Message.cshtml │ │ │ │ │ ├── Message.cshtml.cs │ │ │ │ │ └── MessageUpdatedEvent.cs │ │ │ │ ├── Index.cshtml │ │ │ │ ├── Shared/ │ │ │ │ │ └── _Layout.cshtml │ │ │ │ └── _ViewImports.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── cookies.csproj │ │ │ └── cookies.sln │ │ ├── event-child-parent/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Pages/ │ │ │ │ ├── Components/ │ │ │ │ │ ├── Message.cshtml │ │ │ │ │ ├── Message.cshtml.cs │ │ │ │ │ ├── MessageButton.cshtml │ │ │ │ │ ├── MessageButton.cshtml.cs │ │ │ │ │ └── MessageChangedEvent.cs │ │ │ │ ├── Index.cshtml │ │ │ │ ├── Shared/ │ │ │ │ │ └── _Layout.cshtml │ │ │ │ └── _ViewImports.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── event-child-parent.csproj │ │ │ └── event-child-parent.sln │ │ ├── event-global/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Pages/ │ │ │ │ ├── Components/ │ │ │ │ │ ├── Message.cshtml │ │ │ │ │ ├── Message.cshtml.cs │ │ │ │ │ ├── MessageButton.cshtml │ │ │ │ │ ├── MessageButton.cshtml.cs │ │ │ │ │ └── MessageChangedEvent.cs │ │ │ │ ├── Index.cshtml │ │ │ │ ├── Shared/ │ │ │ │ │ └── _Layout.cshtml │ │ │ │ └── _ViewImports.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── event-global.csproj │ │ │ └── event-global.sln │ │ ├── event-global-subject/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Pages/ │ │ │ │ ├── Components/ │ │ │ │ │ ├── Message.cshtml │ │ │ │ │ ├── Message.cshtml.cs │ │ │ │ │ ├── MessageButton.cshtml │ │ │ │ │ ├── MessageButton.cshtml.cs │ │ │ │ │ └── MessageChangedEvent.cs │ │ │ │ ├── Index.cshtml │ │ │ │ ├── Shared/ │ │ │ │ │ └── _Layout.cshtml │ │ │ │ └── _ViewImports.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── event-global-subject.csproj │ │ │ └── event-global-subject.sln │ │ └── hello-world/ │ │ ├── .vscode/ │ │ │ └── settings.json │ │ ├── Pages/ │ │ │ ├── Components/ │ │ │ │ ├── Message.cshtml │ │ │ │ └── Message.cshtml.cs │ │ │ ├── Index.cshtml │ │ │ ├── Shared/ │ │ │ │ └── _Layout.cshtml │ │ │ └── _ViewImports.cshtml │ │ ├── Program.cs │ │ ├── README.md │ │ ├── hello-world.csproj │ │ └── hello-world.sln │ ├── i-application-lifetime/ │ │ ├── Program.cs │ │ └── i-application-lifetime.csproj │ ├── ihosted-service/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── ihosted-service-1/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── ihosted-service-1.csproj │ │ └── ihosted-service-2/ │ │ ├── Program.cs │ │ ├── README.md │ │ └── ihosted-service-2.csproj │ ├── image-sharp/ │ │ ├── ImageSharp.csproj │ │ └── Program.cs │ ├── json/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── json/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── json.csproj │ │ ├── json-10/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── json-10.csproj │ │ ├── json-11/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── json-11.csproj │ │ │ └── person.json │ │ ├── json-12/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── json-12.csproj │ │ ├── json-13/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── json-13.csproj │ │ ├── json-14/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── json-14.csproj │ │ ├── json-15/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── json-15.csproj │ │ ├── json-16/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── json-16.csproj │ │ ├── json-17/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── json-17.csproj │ │ ├── json-18/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── json-18.csproj │ │ ├── json-19/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── json-19.csproj │ │ ├── json-2/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── json-2.csproj │ │ ├── json-20/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── json-20.csproj │ │ ├── json-21/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── json-21.csproj │ │ ├── json-22/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── json-22.csproj │ │ ├── json-23/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── json-23.csproj │ │ ├── json-24/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── json-24.csproj │ │ ├── json-25/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── json-25.csproj │ │ ├── json-26/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── json-26.csproj │ │ ├── json-3/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── json-3.csproj │ │ ├── json-4/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── json-4.csproj │ │ ├── json-5/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── json-5.csproj │ │ ├── json-6/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── json-6.csproj │ │ ├── json-7/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── json-7.csproj │ │ ├── json-8/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── json-8.csproj │ │ └── json-9/ │ │ ├── Program.cs │ │ ├── README.md │ │ └── json-9.csproj │ ├── localization/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── localization-1/ │ │ │ ├── Program.cs │ │ │ ├── localization.csproj │ │ │ └── resources/ │ │ │ └── Common.fr-FR.resx │ │ ├── localization-2/ │ │ │ ├── Program.cs │ │ │ ├── localization-2.csproj │ │ │ └── resources/ │ │ │ ├── Common.en-US.resx │ │ │ └── Common.fr-FR.resx │ │ ├── localization-3/ │ │ │ ├── Program.cs │ │ │ ├── localization-3.csproj │ │ │ └── resources/ │ │ │ └── Common.en-US.resx │ │ ├── localization-4/ │ │ │ ├── Program.cs │ │ │ ├── localization-4.csproj │ │ │ └── resources/ │ │ │ ├── Common.en-US.resx │ │ │ └── Common.fr-FR.resx │ │ ├── localization-5/ │ │ │ ├── Program.cs │ │ │ ├── en.po │ │ │ ├── fr.po │ │ │ ├── it.po │ │ │ └── localization-5.csproj │ │ └── localization-6/ │ │ ├── Program.cs │ │ ├── en.po │ │ ├── fr.po │ │ ├── it.po │ │ └── localization-6.csproj │ ├── logging/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── logging-1/ │ │ │ ├── Program.cs │ │ │ └── logging-1.csproj │ │ ├── logging-2/ │ │ │ ├── Program.cs │ │ │ ├── appSettings.json │ │ │ └── logging-2.csproj │ │ ├── logging-3/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── logging-3.csproj │ │ ├── logging-4/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── logging-4.csproj │ │ │ └── logging-4.sln │ │ ├── logging-5/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── logging-5.csproj │ │ │ └── logging-5.sln │ │ └── logging-Loki/ │ │ ├── Program.cs │ │ ├── README.md │ │ ├── docker-compose.yml │ │ └── logging-Loki.csproj │ ├── mailkit/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── mailkit-1/ │ │ │ ├── Email.csproj │ │ │ ├── Program.cs │ │ │ └── Views/ │ │ │ └── Home/ │ │ │ └── Index.cshtml │ │ └── mailkit-2/ │ │ ├── Email.csproj │ │ ├── Program.cs │ │ └── Views/ │ │ └── Mailkit/ │ │ └── Index.cshtml │ ├── map-short-circuit/ │ │ ├── Program.cs │ │ ├── README.md │ │ └── map-short-circuit.csproj │ ├── markdown-server/ │ │ ├── Program.cs │ │ ├── markdown/ │ │ │ ├── about/ │ │ │ │ └── us.md │ │ │ ├── hello.md │ │ │ └── index.md │ │ └── markdown-server.csproj │ ├── markdown-server-middleware/ │ │ ├── Program.cs │ │ ├── markdown/ │ │ │ ├── about/ │ │ │ │ └── us.md │ │ │ ├── hello.md │ │ │ └── index.md │ │ └── markdown-server-middleware.csproj │ ├── middleware/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── middleware-0/ │ │ │ ├── Program.cs │ │ │ └── middleware-0.csproj │ │ ├── middleware-1/ │ │ │ ├── Program.cs │ │ │ └── middleware-1.csproj │ │ ├── middleware-10/ │ │ │ ├── Program.cs │ │ │ └── middleware-10.csproj │ │ ├── middleware-11/ │ │ │ ├── Program.cs │ │ │ └── middleware-11.csproj │ │ ├── middleware-12/ │ │ │ ├── Program.cs │ │ │ └── middleware-12.csproj │ │ ├── middleware-13/ │ │ │ ├── Program.cs │ │ │ └── middleware-13.csproj │ │ ├── middleware-2/ │ │ │ ├── Program.cs │ │ │ └── middleware-2.csproj │ │ ├── middleware-3/ │ │ │ ├── Program.cs │ │ │ └── middleware-3.csproj │ │ ├── middleware-4/ │ │ │ ├── Program.cs │ │ │ └── middleware-4.csproj │ │ ├── middleware-5/ │ │ │ ├── Program.cs │ │ │ └── middleware-5.csproj │ │ ├── middleware-6/ │ │ │ ├── Program.cs │ │ │ └── middleware-6.csproj │ │ ├── middleware-7/ │ │ │ ├── Program.cs │ │ │ └── middleware-7.csproj │ │ ├── middleware-8/ │ │ │ ├── Program.cs │ │ │ └── middleware-8.csproj │ │ └── middleware-9/ │ │ ├── Program.cs │ │ └── middleware-9.csproj │ ├── mini/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── minimal-api-pokedex/ │ │ │ ├── Minimal.Api.Pokedex.sln │ │ │ ├── Readme.md │ │ │ └── src/ │ │ │ └── Minimal.Api.Pokedex/ │ │ │ ├── .dockerignore │ │ │ ├── Data/ │ │ │ │ └── pokemon.json │ │ │ ├── Dockerfile │ │ │ ├── Extensions/ │ │ │ │ └── DependencyInjection.cs │ │ │ ├── Minimal.Api.Pokedex.csproj │ │ │ ├── Models/ │ │ │ │ ├── PokedexPagedResponse.cs │ │ │ │ ├── PokedexResponse.cs │ │ │ │ ├── PokemonEntity.cs │ │ │ │ ├── PokemonListItemEntity.cs │ │ │ │ └── RouteConstants.cs │ │ │ ├── PokedexApiEndpoint.cs │ │ │ ├── Program.cs │ │ │ ├── Services/ │ │ │ │ ├── IPokedexRepository.cs │ │ │ │ ├── IPokedexService.cs │ │ │ │ ├── PokedexRepository.cs │ │ │ │ └── PokedexService.cs │ │ │ ├── appsettings.Development.json │ │ │ └── appsettings.json │ │ └── pdf-viewer/ │ │ ├── Pages/ │ │ │ └── Index.cshtml │ │ ├── Program.cs │ │ ├── README.md │ │ ├── pdf-viewer.csproj │ │ └── wwwroot/ │ │ └── js/ │ │ └── pdfjs-viewer/ │ │ ├── cmaps/ │ │ │ ├── 78-EUC-H.bcmap │ │ │ ├── 78-EUC-V.bcmap │ │ │ ├── 78-H.bcmap │ │ │ ├── 78-RKSJ-H.bcmap │ │ │ ├── 78-RKSJ-V.bcmap │ │ │ ├── 78-V.bcmap │ │ │ ├── 78ms-RKSJ-H.bcmap │ │ │ ├── 78ms-RKSJ-V.bcmap │ │ │ ├── 83pv-RKSJ-H.bcmap │ │ │ ├── 90ms-RKSJ-H.bcmap │ │ │ ├── 90ms-RKSJ-V.bcmap │ │ │ ├── 90msp-RKSJ-H.bcmap │ │ │ ├── 90msp-RKSJ-V.bcmap │ │ │ ├── 90pv-RKSJ-H.bcmap │ │ │ ├── 90pv-RKSJ-V.bcmap │ │ │ ├── Add-H.bcmap │ │ │ ├── Add-RKSJ-H.bcmap │ │ │ ├── Add-RKSJ-V.bcmap │ │ │ ├── Add-V.bcmap │ │ │ ├── Adobe-CNS1-0.bcmap │ │ │ ├── Adobe-CNS1-1.bcmap │ │ │ ├── Adobe-CNS1-2.bcmap │ │ │ ├── Adobe-CNS1-3.bcmap │ │ │ ├── Adobe-CNS1-4.bcmap │ │ │ ├── Adobe-CNS1-5.bcmap │ │ │ ├── Adobe-CNS1-6.bcmap │ │ │ ├── Adobe-CNS1-UCS2.bcmap │ │ │ ├── Adobe-GB1-0.bcmap │ │ │ ├── Adobe-GB1-1.bcmap │ │ │ ├── Adobe-GB1-2.bcmap │ │ │ ├── Adobe-GB1-3.bcmap │ │ │ ├── Adobe-GB1-4.bcmap │ │ │ ├── Adobe-GB1-5.bcmap │ │ │ ├── Adobe-GB1-UCS2.bcmap │ │ │ ├── Adobe-Japan1-0.bcmap │ │ │ ├── Adobe-Japan1-1.bcmap │ │ │ ├── Adobe-Japan1-2.bcmap │ │ │ ├── Adobe-Japan1-3.bcmap │ │ │ ├── Adobe-Japan1-4.bcmap │ │ │ ├── Adobe-Japan1-5.bcmap │ │ │ ├── Adobe-Japan1-6.bcmap │ │ │ ├── Adobe-Japan1-UCS2.bcmap │ │ │ ├── Adobe-Korea1-0.bcmap │ │ │ ├── Adobe-Korea1-1.bcmap │ │ │ ├── Adobe-Korea1-2.bcmap │ │ │ ├── Adobe-Korea1-UCS2.bcmap │ │ │ ├── B5-H.bcmap │ │ │ ├── B5-V.bcmap │ │ │ ├── B5pc-H.bcmap │ │ │ ├── B5pc-V.bcmap │ │ │ ├── CNS-EUC-H.bcmap │ │ │ ├── CNS-EUC-V.bcmap │ │ │ ├── CNS1-H.bcmap │ │ │ ├── CNS1-V.bcmap │ │ │ ├── CNS2-H.bcmap │ │ │ ├── CNS2-V.bcmap │ │ │ ├── ETHK-B5-H.bcmap │ │ │ ├── ETHK-B5-V.bcmap │ │ │ ├── ETen-B5-H.bcmap │ │ │ ├── ETen-B5-V.bcmap │ │ │ ├── ETenms-B5-H.bcmap │ │ │ ├── ETenms-B5-V.bcmap │ │ │ ├── EUC-H.bcmap │ │ │ ├── EUC-V.bcmap │ │ │ ├── Ext-H.bcmap │ │ │ ├── Ext-RKSJ-H.bcmap │ │ │ ├── Ext-RKSJ-V.bcmap │ │ │ ├── Ext-V.bcmap │ │ │ ├── GB-EUC-H.bcmap │ │ │ ├── GB-EUC-V.bcmap │ │ │ ├── GB-H.bcmap │ │ │ ├── GB-V.bcmap │ │ │ ├── GBK-EUC-H.bcmap │ │ │ ├── GBK-EUC-V.bcmap │ │ │ ├── GBK2K-H.bcmap │ │ │ ├── GBK2K-V.bcmap │ │ │ ├── GBKp-EUC-H.bcmap │ │ │ ├── GBKp-EUC-V.bcmap │ │ │ ├── GBT-EUC-H.bcmap │ │ │ ├── GBT-EUC-V.bcmap │ │ │ ├── GBT-H.bcmap │ │ │ ├── GBT-V.bcmap │ │ │ ├── GBTpc-EUC-H.bcmap │ │ │ ├── GBTpc-EUC-V.bcmap │ │ │ ├── GBpc-EUC-H.bcmap │ │ │ ├── GBpc-EUC-V.bcmap │ │ │ ├── H.bcmap │ │ │ ├── HKdla-B5-H.bcmap │ │ │ ├── HKdla-B5-V.bcmap │ │ │ ├── HKdlb-B5-H.bcmap │ │ │ ├── HKdlb-B5-V.bcmap │ │ │ ├── HKgccs-B5-H.bcmap │ │ │ ├── HKgccs-B5-V.bcmap │ │ │ ├── HKm314-B5-H.bcmap │ │ │ ├── HKm314-B5-V.bcmap │ │ │ ├── HKm471-B5-H.bcmap │ │ │ ├── HKm471-B5-V.bcmap │ │ │ ├── HKscs-B5-H.bcmap │ │ │ ├── HKscs-B5-V.bcmap │ │ │ ├── Hankaku.bcmap │ │ │ ├── Hiragana.bcmap │ │ │ ├── KSC-EUC-H.bcmap │ │ │ ├── KSC-EUC-V.bcmap │ │ │ ├── KSC-H.bcmap │ │ │ ├── KSC-Johab-H.bcmap │ │ │ ├── KSC-Johab-V.bcmap │ │ │ ├── KSC-V.bcmap │ │ │ ├── KSCms-UHC-H.bcmap │ │ │ ├── KSCms-UHC-HW-H.bcmap │ │ │ ├── KSCms-UHC-HW-V.bcmap │ │ │ ├── KSCms-UHC-V.bcmap │ │ │ ├── KSCpc-EUC-H.bcmap │ │ │ ├── KSCpc-EUC-V.bcmap │ │ │ ├── Katakana.bcmap │ │ │ ├── LICENSE │ │ │ ├── NWP-H.bcmap │ │ │ ├── NWP-V.bcmap │ │ │ ├── RKSJ-H.bcmap │ │ │ ├── RKSJ-V.bcmap │ │ │ ├── Roman.bcmap │ │ │ ├── UniCNS-UCS2-H.bcmap │ │ │ ├── UniCNS-UCS2-V.bcmap │ │ │ ├── UniCNS-UTF16-H.bcmap │ │ │ ├── UniCNS-UTF16-V.bcmap │ │ │ ├── UniCNS-UTF32-H.bcmap │ │ │ ├── UniCNS-UTF32-V.bcmap │ │ │ ├── UniCNS-UTF8-H.bcmap │ │ │ ├── UniCNS-UTF8-V.bcmap │ │ │ ├── UniGB-UCS2-H.bcmap │ │ │ ├── UniGB-UCS2-V.bcmap │ │ │ ├── UniGB-UTF16-H.bcmap │ │ │ ├── UniGB-UTF16-V.bcmap │ │ │ ├── UniGB-UTF32-H.bcmap │ │ │ ├── UniGB-UTF32-V.bcmap │ │ │ ├── UniGB-UTF8-H.bcmap │ │ │ ├── UniGB-UTF8-V.bcmap │ │ │ ├── UniJIS-UCS2-H.bcmap │ │ │ ├── UniJIS-UCS2-HW-H.bcmap │ │ │ ├── UniJIS-UCS2-HW-V.bcmap │ │ │ ├── UniJIS-UCS2-V.bcmap │ │ │ ├── UniJIS-UTF16-H.bcmap │ │ │ ├── UniJIS-UTF16-V.bcmap │ │ │ ├── UniJIS-UTF32-H.bcmap │ │ │ ├── UniJIS-UTF32-V.bcmap │ │ │ ├── UniJIS-UTF8-H.bcmap │ │ │ ├── UniJIS-UTF8-V.bcmap │ │ │ ├── UniJIS2004-UTF16-H.bcmap │ │ │ ├── UniJIS2004-UTF16-V.bcmap │ │ │ ├── UniJIS2004-UTF32-H.bcmap │ │ │ ├── UniJIS2004-UTF32-V.bcmap │ │ │ ├── UniJIS2004-UTF8-H.bcmap │ │ │ ├── UniJIS2004-UTF8-V.bcmap │ │ │ ├── UniJISPro-UCS2-HW-V.bcmap │ │ │ ├── UniJISPro-UCS2-V.bcmap │ │ │ ├── UniJISPro-UTF8-V.bcmap │ │ │ ├── UniJISX0213-UTF32-H.bcmap │ │ │ ├── UniJISX0213-UTF32-V.bcmap │ │ │ ├── UniJISX02132004-UTF32-H.bcmap │ │ │ ├── UniJISX02132004-UTF32-V.bcmap │ │ │ ├── UniKS-UCS2-H.bcmap │ │ │ ├── UniKS-UCS2-V.bcmap │ │ │ ├── UniKS-UTF16-H.bcmap │ │ │ ├── UniKS-UTF16-V.bcmap │ │ │ ├── UniKS-UTF32-H.bcmap │ │ │ ├── UniKS-UTF32-V.bcmap │ │ │ ├── UniKS-UTF8-H.bcmap │ │ │ ├── UniKS-UTF8-V.bcmap │ │ │ ├── V.bcmap │ │ │ └── WP-Symbol.bcmap │ │ ├── debugger.js │ │ ├── images/ │ │ │ ├── grab.cur │ │ │ └── grabbing.cur │ │ ├── locale/ │ │ │ ├── ach/ │ │ │ │ └── viewer.properties │ │ │ ├── af/ │ │ │ │ └── viewer.properties │ │ │ ├── an/ │ │ │ │ └── viewer.properties │ │ │ ├── ar/ │ │ │ │ └── viewer.properties │ │ │ ├── ast/ │ │ │ │ └── viewer.properties │ │ │ ├── az/ │ │ │ │ └── viewer.properties │ │ │ ├── be/ │ │ │ │ └── viewer.properties │ │ │ ├── bg/ │ │ │ │ └── viewer.properties │ │ │ ├── bn/ │ │ │ │ └── viewer.properties │ │ │ ├── bo/ │ │ │ │ └── viewer.properties │ │ │ ├── br/ │ │ │ │ └── viewer.properties │ │ │ ├── brx/ │ │ │ │ └── viewer.properties │ │ │ ├── bs/ │ │ │ │ └── viewer.properties │ │ │ ├── ca/ │ │ │ │ └── viewer.properties │ │ │ ├── cak/ │ │ │ │ └── viewer.properties │ │ │ ├── ckb/ │ │ │ │ └── viewer.properties │ │ │ ├── cs/ │ │ │ │ └── viewer.properties │ │ │ ├── cy/ │ │ │ │ └── viewer.properties │ │ │ ├── da/ │ │ │ │ └── viewer.properties │ │ │ ├── de/ │ │ │ │ └── viewer.properties │ │ │ ├── dsb/ │ │ │ │ └── viewer.properties │ │ │ ├── el/ │ │ │ │ └── viewer.properties │ │ │ ├── en-CA/ │ │ │ │ └── viewer.properties │ │ │ ├── en-GB/ │ │ │ │ └── viewer.properties │ │ │ ├── en-US/ │ │ │ │ └── viewer.properties │ │ │ ├── eo/ │ │ │ │ └── viewer.properties │ │ │ ├── es-AR/ │ │ │ │ └── viewer.properties │ │ │ ├── es-CL/ │ │ │ │ └── viewer.properties │ │ │ ├── es-ES/ │ │ │ │ └── viewer.properties │ │ │ ├── es-MX/ │ │ │ │ └── viewer.properties │ │ │ ├── et/ │ │ │ │ └── viewer.properties │ │ │ ├── eu/ │ │ │ │ └── viewer.properties │ │ │ ├── fa/ │ │ │ │ └── viewer.properties │ │ │ ├── ff/ │ │ │ │ └── viewer.properties │ │ │ ├── fi/ │ │ │ │ └── viewer.properties │ │ │ ├── fr/ │ │ │ │ └── viewer.properties │ │ │ ├── fy-NL/ │ │ │ │ └── viewer.properties │ │ │ ├── ga-IE/ │ │ │ │ └── viewer.properties │ │ │ ├── gd/ │ │ │ │ └── viewer.properties │ │ │ ├── gl/ │ │ │ │ └── viewer.properties │ │ │ ├── gn/ │ │ │ │ └── viewer.properties │ │ │ ├── gu-IN/ │ │ │ │ └── viewer.properties │ │ │ ├── he/ │ │ │ │ └── viewer.properties │ │ │ ├── hi-IN/ │ │ │ │ └── viewer.properties │ │ │ ├── hr/ │ │ │ │ └── viewer.properties │ │ │ ├── hsb/ │ │ │ │ └── viewer.properties │ │ │ ├── hu/ │ │ │ │ └── viewer.properties │ │ │ ├── hy-AM/ │ │ │ │ └── viewer.properties │ │ │ ├── hye/ │ │ │ │ └── viewer.properties │ │ │ ├── ia/ │ │ │ │ └── viewer.properties │ │ │ ├── id/ │ │ │ │ └── viewer.properties │ │ │ ├── is/ │ │ │ │ └── viewer.properties │ │ │ ├── it/ │ │ │ │ └── viewer.properties │ │ │ ├── ja/ │ │ │ │ └── viewer.properties │ │ │ ├── ka/ │ │ │ │ └── viewer.properties │ │ │ ├── kab/ │ │ │ │ └── viewer.properties │ │ │ ├── kk/ │ │ │ │ └── viewer.properties │ │ │ ├── km/ │ │ │ │ └── viewer.properties │ │ │ ├── kn/ │ │ │ │ └── viewer.properties │ │ │ ├── ko/ │ │ │ │ └── viewer.properties │ │ │ ├── lij/ │ │ │ │ └── viewer.properties │ │ │ ├── lo/ │ │ │ │ └── viewer.properties │ │ │ ├── locale.properties │ │ │ ├── lt/ │ │ │ │ └── viewer.properties │ │ │ ├── ltg/ │ │ │ │ └── viewer.properties │ │ │ ├── lv/ │ │ │ │ └── viewer.properties │ │ │ ├── meh/ │ │ │ │ └── viewer.properties │ │ │ ├── mk/ │ │ │ │ └── viewer.properties │ │ │ ├── mr/ │ │ │ │ └── viewer.properties │ │ │ ├── ms/ │ │ │ │ └── viewer.properties │ │ │ ├── my/ │ │ │ │ └── viewer.properties │ │ │ ├── nb-NO/ │ │ │ │ └── viewer.properties │ │ │ ├── ne-NP/ │ │ │ │ └── viewer.properties │ │ │ ├── nl/ │ │ │ │ └── viewer.properties │ │ │ ├── nn-NO/ │ │ │ │ └── viewer.properties │ │ │ ├── oc/ │ │ │ │ └── viewer.properties │ │ │ ├── pa-IN/ │ │ │ │ └── viewer.properties │ │ │ ├── pl/ │ │ │ │ └── viewer.properties │ │ │ ├── pt-BR/ │ │ │ │ └── viewer.properties │ │ │ ├── pt-PT/ │ │ │ │ └── viewer.properties │ │ │ ├── rm/ │ │ │ │ └── viewer.properties │ │ │ ├── ro/ │ │ │ │ └── viewer.properties │ │ │ ├── ru/ │ │ │ │ └── viewer.properties │ │ │ ├── scn/ │ │ │ │ └── viewer.properties │ │ │ ├── si/ │ │ │ │ └── viewer.properties │ │ │ ├── sk/ │ │ │ │ └── viewer.properties │ │ │ ├── sl/ │ │ │ │ └── viewer.properties │ │ │ ├── son/ │ │ │ │ └── viewer.properties │ │ │ ├── sq/ │ │ │ │ └── viewer.properties │ │ │ ├── sr/ │ │ │ │ └── viewer.properties │ │ │ ├── sv-SE/ │ │ │ │ └── viewer.properties │ │ │ ├── szl/ │ │ │ │ └── viewer.properties │ │ │ ├── ta/ │ │ │ │ └── viewer.properties │ │ │ ├── te/ │ │ │ │ └── viewer.properties │ │ │ ├── th/ │ │ │ │ └── viewer.properties │ │ │ ├── tl/ │ │ │ │ └── viewer.properties │ │ │ ├── tr/ │ │ │ │ └── viewer.properties │ │ │ ├── trs/ │ │ │ │ └── viewer.properties │ │ │ ├── uk/ │ │ │ │ └── viewer.properties │ │ │ ├── ur/ │ │ │ │ └── viewer.properties │ │ │ ├── uz/ │ │ │ │ └── viewer.properties │ │ │ ├── vi/ │ │ │ │ └── viewer.properties │ │ │ ├── wo/ │ │ │ │ └── viewer.properties │ │ │ ├── xh/ │ │ │ │ └── viewer.properties │ │ │ ├── zh-CN/ │ │ │ │ └── viewer.properties │ │ │ └── zh-TW/ │ │ │ └── viewer.properties │ │ ├── pdf.js │ │ ├── pdf.worker.js │ │ ├── viewer.css │ │ ├── viewer.html │ │ └── viewer.js │ ├── minimal-api/ │ │ ├── README.md │ │ ├── anti-forgery-1/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── anti-forgery-1.csproj │ │ ├── anti-forgery-2/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── anti-forgery-2.csproj │ │ ├── anti-forgery-3/ │ │ │ ├── README.md │ │ │ ├── api/ │ │ │ │ ├── Program.cs │ │ │ │ ├── api.csproj │ │ │ │ └── appsettings.json │ │ │ └── frontend/ │ │ │ ├── Pages/ │ │ │ │ └── Index.cshtml │ │ │ ├── Program.cs │ │ │ ├── appsettings.json │ │ │ └── frontend.csproj │ │ ├── build.bat │ │ ├── build.sh │ │ ├── endpoint-filter-1/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── endpoint-filter-1.csproj │ │ ├── endpoint-filter-2/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── endpoint-filter-2.csproj │ │ ├── endpoint-filter-3/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── endpoint-filter-3.csproj │ │ ├── endpoint-filter-4/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── endpoint-filter-4.csproj │ │ ├── hello-world/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── hello-world.csproj │ │ ├── iform-file/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── i-form-file.csproj │ │ ├── iform-file-collection/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── i-form-file-collection.csproj │ │ ├── link-generator-path-by-route-name/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── link-generator-path-by-route-name.csproj │ │ ├── map/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── map.csproj │ │ ├── map-2/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── map-2.csproj │ │ ├── map-3/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── map-3.csproj │ │ ├── map-4/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── map-4.csproj │ │ ├── map-5/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── map-5.csproj │ │ ├── map-6/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── map-6.csproj │ │ ├── map-group-1/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── map-group-1.csproj │ │ ├── map-group-2/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── map-group-2.csproj │ │ ├── map-group-3/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── map-group-3.csproj │ │ ├── map-methods/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── map-methods.csproj │ │ ├── map-post/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── map-post.csproj │ │ ├── map-post-2/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── map-post-2.csproj │ │ ├── minimal-api-form-model-binding/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── minimal-api-form-model-binding.csproj │ │ │ └── minimal-api-form-model-binding.sln │ │ ├── open-api-1/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── open-api-1.csproj │ │ │ └── open-api-1.sln │ │ ├── open-api-2/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── open-api-2.csproj │ │ │ └── open-api-2.sln │ │ ├── parameter-binding-custom-bind-async/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── parameter-binder-custom-bind-async.csproj │ │ ├── parameter-binding-custom-try-parse/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── parameter-binder-custom-try-parse.csproj │ │ ├── parameter-binding-header-explicit/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── parameter-binding-header-explicit.csproj │ │ ├── parameter-binding-json-explicit/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── parameter-binding-json-explicit.csproj │ │ ├── parameter-binding-json-implicit/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── parameter-binding-json-implicit.csproj │ │ ├── parameter-binding-query-string-explicit/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── parameter-binding-query-string-explicit.csproj │ │ ├── parameter-binding-query-string-implicit/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── parameter-binding-query-string-implicit.csproj │ │ ├── parameter-binding-route-explicit/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── parameter-binding-route-explicit.csproj │ │ ├── parameter-binding-route-implicit/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── parameter-binding-route-implicit.csproj │ │ ├── parameter-binding-special-types/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── parameter-binding-special-types.csproj │ │ ├── route-constraints-decimal/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── route-constraints-decimal.csproj │ │ ├── route-constraints-int/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── route-constraints-int.csproj │ │ └── typed-results-1/ │ │ ├── Program.cs │ │ ├── README.md │ │ └── typed-results-1.csproj │ ├── minimal-hosting/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── empty-builder/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── empty-builder.csproj │ │ ├── slim-builder/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── slim-builder.csproj │ │ ├── web-application-builder-change-default-web-root-folder/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── web-application-builder-change-default-web-root-folder.csproj │ │ ├── web-application-builder-change-environment/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── web-application-builder-change-environment.csproj │ │ ├── web-application-builder-logging-set-minimum-level/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── web-application-builder-logging-set-minimum-level.csproj │ │ ├── web-application-builder-mvc/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── web-application-builder-mvc.csproj │ │ ├── web-application-builder-razor-pages/ │ │ │ ├── Pages/ │ │ │ │ └── Index.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── web-application-builder-razor-pages.csproj │ │ ├── web-application-configuration/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── web-application-configuration.csproj │ │ ├── web-application-configuration-json/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── web-application-configuration-json.csproj │ │ ├── web-application-lifetime-events/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── web-application-lifetime-events.csproj │ │ ├── web-application-logging/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── web-application-logging.csproj │ │ ├── web-application-middleware/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── web-application-middleware.csproj │ │ ├── web-application-middleware-pipeline/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── web-application-middleware-pipeline.csproj │ │ ├── web-application-middleware-pipeline-2/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── web-application-middleware-pipeline-2.csproj │ │ ├── web-application-options-change-content-root-path/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── web-application-options-change-content-root-path.csproj │ │ ├── web-application-options-set-environment/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── web-application-options-set-environment.csproj │ │ ├── web-application-server-aspnetcore-urls/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── web-application-server-aspnetcore-urls.csproj │ │ ├── web-application-server-default-urls/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── web-application-server-default-urls.csproj │ │ ├── web-application-server-listen-all/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── web-application-server-listen-all.csproj │ │ ├── web-application-server-multiple-urls-ports/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── web-application-server-multiple-urls-ports.csproj │ │ ├── web-application-server-port-env-variable/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── web-application-server-port-env-variable.csproj │ │ ├── web-application-server-specific-url-port/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── web-application-server-specific-url-port.csproj │ │ ├── web-application-use-file-server/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── web-application-use-file-server.csproj │ │ │ └── wwwroot/ │ │ │ └── index.html │ │ ├── web-application-use-web-sockets/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── web-application-use-web-sockets.csproj │ │ └── web-application-welcome-page/ │ │ ├── Program.cs │ │ ├── README.md │ │ └── web-application-welcome-page.csproj │ ├── mvc/ │ │ ├── README.md │ │ ├── api/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── api.csproj │ │ ├── api-problem-details/ │ │ │ ├── Program.cs │ │ │ └── api-problem-details.csproj │ │ ├── api-problem-details-2/ │ │ │ ├── Program.cs │ │ │ └── api-problem-details-2.csproj │ │ ├── api-versioning/ │ │ │ ├── Program.cs │ │ │ └── api-versioning.csproj │ │ ├── build.bat │ │ ├── build.sh │ │ ├── hello-world/ │ │ │ ├── Program.cs │ │ │ └── hello-world.csproj │ │ ├── jwt/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── jwt.csproj │ │ │ └── jwt.sln │ │ ├── localization/ │ │ │ ├── README.md │ │ │ ├── mvc-localization-1/ │ │ │ │ ├── .vscode/ │ │ │ │ │ ├── launch.json │ │ │ │ │ └── tasks.json │ │ │ │ ├── Program.cs │ │ │ │ ├── Resources/ │ │ │ │ │ └── MvcLocalization.HomeController.fr.resx │ │ │ │ └── mvc-localization.csproj │ │ │ ├── mvc-localization-10/ │ │ │ │ ├── Program.cs │ │ │ │ ├── README.md │ │ │ │ ├── Resources/ │ │ │ │ │ └── MvcLocalization/ │ │ │ │ │ ├── Global.en-US.resx │ │ │ │ │ ├── Global.en.resx │ │ │ │ │ └── Global.fr.resx │ │ │ │ ├── Views/ │ │ │ │ │ └── Home/ │ │ │ │ │ └── Index.cshtml │ │ │ │ └── mvc-localization-10.csproj │ │ │ ├── mvc-localization-2/ │ │ │ │ ├── .vscode/ │ │ │ │ │ ├── launch.json │ │ │ │ │ └── tasks.json │ │ │ │ ├── Program.cs │ │ │ │ ├── Resources/ │ │ │ │ │ └── MvcLocalization/ │ │ │ │ │ └── HomeController.fr.resx │ │ │ │ └── mvc-localization-2.csproj │ │ │ ├── mvc-localization-3/ │ │ │ │ ├── .vscode/ │ │ │ │ │ ├── launch.json │ │ │ │ │ └── tasks.json │ │ │ │ ├── Program.cs │ │ │ │ ├── Resources/ │ │ │ │ │ └── MvcLocalization/ │ │ │ │ │ └── Global.fr.resx │ │ │ │ └── mvc-localization-3.csproj │ │ │ ├── mvc-localization-4/ │ │ │ │ ├── .vscode/ │ │ │ │ │ ├── launch.json │ │ │ │ │ └── tasks.json │ │ │ │ ├── MvcLocalization.csproj │ │ │ │ ├── Program.cs │ │ │ │ └── Resources/ │ │ │ │ └── Global.fr.resx │ │ │ ├── mvc-localization-5/ │ │ │ │ ├── .vscode/ │ │ │ │ │ ├── launch.json │ │ │ │ │ └── tasks.json │ │ │ │ ├── Program.cs │ │ │ │ ├── Resources/ │ │ │ │ │ └── MvcLocalization/ │ │ │ │ │ └── Global.fr.resx │ │ │ │ ├── Views/ │ │ │ │ │ └── Home/ │ │ │ │ │ └── Index.cshtml │ │ │ │ └── mvc-localization-5.csproj │ │ │ ├── mvc-localization-6/ │ │ │ │ ├── Program.cs │ │ │ │ ├── Resources/ │ │ │ │ │ └── MvcLocalization/ │ │ │ │ │ ├── Global.en.resx │ │ │ │ │ └── Global.fr.resx │ │ │ │ ├── Views/ │ │ │ │ │ └── Home/ │ │ │ │ │ └── Index.cshtml │ │ │ │ └── mvc-localization-6.csproj │ │ │ ├── mvc-localization-7/ │ │ │ │ ├── .vscode/ │ │ │ │ │ ├── launch.json │ │ │ │ │ └── tasks.json │ │ │ │ ├── ProjectWithResources/ │ │ │ │ │ ├── ClassLibrary.csproj │ │ │ │ │ ├── Messages.cs │ │ │ │ │ ├── Messages.resx │ │ │ │ │ └── Resources/ │ │ │ │ │ ├── Global.cs │ │ │ │ │ └── Global.fr.resx │ │ │ │ └── Web/ │ │ │ │ ├── Program.cs │ │ │ │ └── mvc-localization-7.csproj │ │ │ ├── mvc-localization-8/ │ │ │ │ ├── Program.cs │ │ │ │ ├── README.md │ │ │ │ ├── Resources/ │ │ │ │ │ ├── Global.en.resx │ │ │ │ │ └── Global.fr.resx │ │ │ │ ├── Views/ │ │ │ │ │ └── Home/ │ │ │ │ │ └── Index.cshtml │ │ │ │ └── mvc-localization-8.csproj │ │ │ └── mvc-localization-9/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── Resources/ │ │ │ │ └── MvcLocalization/ │ │ │ │ ├── Global.en-US.resx │ │ │ │ ├── Global.en.resx │ │ │ │ └── Global.fr.resx │ │ │ ├── Views/ │ │ │ │ └── Home/ │ │ │ │ └── Index.cshtml │ │ │ └── mvc-localization-9.csproj │ │ ├── model-binding-from-query/ │ │ │ ├── Program.cs │ │ │ └── model-binding-from-query.csproj │ │ ├── model-binding-from-route/ │ │ │ ├── Program.cs │ │ │ └── model-binding-from-route.csproj │ │ ├── mvc-infer-dependency-from-action/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── mvc-infer-dependency-from-action.csproj │ │ ├── mvc-output-xml/ │ │ │ ├── Program.cs │ │ │ └── mvc-output-xml.csproj │ │ ├── newtonsoft-json/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── newtonsoft-json.csproj │ │ ├── nswag/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── nswag.csproj │ │ │ └── nswag.sln │ │ ├── nswag-2/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── nswag-2.csproj │ │ │ └── nswag-2.sln │ │ ├── output-formatter-syndication/ │ │ │ ├── Program.cs │ │ │ ├── RssOutputFormatter.cs │ │ │ └── output-formatter-syndication.csproj │ │ ├── razor-class-library/ │ │ │ ├── README.md │ │ │ ├── razor-class-library-1/ │ │ │ │ ├── README.md │ │ │ │ └── src/ │ │ │ │ ├── RazorClassLibrary1/ │ │ │ │ │ ├── Areas/ │ │ │ │ │ │ └── Module1/ │ │ │ │ │ │ └── Pages/ │ │ │ │ │ │ ├── Index.cshtml │ │ │ │ │ │ └── Index.cshtml.cs │ │ │ │ │ └── RazorClassLibrary1.csproj │ │ │ │ ├── RazorClassLibrary2/ │ │ │ │ │ ├── Areas/ │ │ │ │ │ │ └── Module2/ │ │ │ │ │ │ └── Pages/ │ │ │ │ │ │ ├── Index.cshtml │ │ │ │ │ │ └── Index.cshtml.cs │ │ │ │ │ └── RazorClassLibrary2.csproj │ │ │ │ └── WebApplication/ │ │ │ │ ├── Program.cs │ │ │ │ ├── WebApplication.csproj │ │ │ │ ├── appsettings.Development.json │ │ │ │ └── appsettings.json │ │ │ ├── razor-class-library-with-controllers/ │ │ │ │ ├── README.md │ │ │ │ └── src/ │ │ │ │ ├── RazorClassLibrary1/ │ │ │ │ │ ├── Areas/ │ │ │ │ │ │ └── MyFeature/ │ │ │ │ │ │ ├── Controllers/ │ │ │ │ │ │ │ ├── AboutController.cs │ │ │ │ │ │ │ └── HomeController.cs │ │ │ │ │ │ └── Views/ │ │ │ │ │ │ ├── About/ │ │ │ │ │ │ │ └── Index.cshtml │ │ │ │ │ │ └── Home/ │ │ │ │ │ │ └── Index.cshtml │ │ │ │ │ └── RazorClassLibrary1.csproj │ │ │ │ └── WebApplication/ │ │ │ │ ├── Program.cs │ │ │ │ ├── WebApplication.csproj │ │ │ │ ├── appsettings.Development.json │ │ │ │ └── appsettings.json │ │ │ └── razor-class-library-with-static-files/ │ │ │ ├── README.md │ │ │ └── src/ │ │ │ ├── RazorClassLibraries.Mvc.Core/ │ │ │ │ ├── BaseModuleUiConfigureOptions.cs │ │ │ │ └── RazorClassLibraries.Mvc.Core.csproj │ │ │ ├── RazorClassLibrary1/ │ │ │ │ ├── Areas/ │ │ │ │ │ └── Module1/ │ │ │ │ │ └── Pages/ │ │ │ │ │ ├── Index.cshtml │ │ │ │ │ └── Index.cshtml.cs │ │ │ │ ├── RazorClassLibrary1.csproj │ │ │ │ ├── UiConfigureOptions.cs │ │ │ │ └── wwwroot/ │ │ │ │ ├── css/ │ │ │ │ │ └── module1.css │ │ │ │ └── js/ │ │ │ │ └── script.js │ │ │ ├── RazorClassLibrary2/ │ │ │ │ ├── Areas/ │ │ │ │ │ └── Module2/ │ │ │ │ │ └── Pages/ │ │ │ │ │ ├── Index.cshtml │ │ │ │ │ └── Index.cshtml.cs │ │ │ │ ├── RazorClassLibrary2.csproj │ │ │ │ ├── UiConfigureOptions.cs │ │ │ │ └── wwwroot/ │ │ │ │ ├── css/ │ │ │ │ │ └── module2.css │ │ │ │ └── js/ │ │ │ │ └── script.js │ │ │ └── WebApplication/ │ │ │ ├── Program.cs │ │ │ ├── WebApplication.csproj │ │ │ ├── appsettings.Development.json │ │ │ └── appsettings.json │ │ ├── result-filestream/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── result-filestream.csproj │ │ ├── result-json/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── result-json.csproj │ │ ├── result-physicalfile/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── result-physicalpath.csproj │ │ ├── routing/ │ │ │ ├── README.md │ │ │ ├── routing-1/ │ │ │ │ ├── Program.cs │ │ │ │ └── routing-1.csproj │ │ │ ├── routing-2/ │ │ │ │ ├── Program.cs │ │ │ │ └── routing-2.csproj │ │ │ ├── routing-3/ │ │ │ │ ├── .vscode/ │ │ │ │ │ ├── launch.json │ │ │ │ │ └── tasks.json │ │ │ │ ├── Program.cs │ │ │ │ └── routing-3.csproj │ │ │ ├── routing-4/ │ │ │ │ ├── .vscode/ │ │ │ │ │ ├── launch.json │ │ │ │ │ └── tasks.json │ │ │ │ ├── Program.cs │ │ │ │ └── routing-4.csproj │ │ │ ├── routing-5/ │ │ │ │ ├── .vscode/ │ │ │ │ │ ├── launch.json │ │ │ │ │ └── tasks.json │ │ │ │ ├── Program.cs │ │ │ │ └── routing-5.csproj │ │ │ ├── routing-6/ │ │ │ │ ├── .vscode/ │ │ │ │ │ ├── launch.json │ │ │ │ │ └── tasks.json │ │ │ │ ├── Program.cs │ │ │ │ └── routing-6.csproj │ │ │ ├── routing-7/ │ │ │ │ ├── .vscode/ │ │ │ │ │ ├── launch.json │ │ │ │ │ └── tasks.json │ │ │ │ ├── Program.cs │ │ │ │ └── routing-7.csproj │ │ │ ├── routing-8/ │ │ │ │ ├── .vscode/ │ │ │ │ │ ├── launch.json │ │ │ │ │ └── tasks.json │ │ │ │ ├── Program.cs │ │ │ │ └── routing-8.csproj │ │ │ └── routing-9/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Program.cs │ │ │ └── routing-9.csproj │ │ ├── tag-helper/ │ │ │ ├── README.md │ │ │ ├── tag-helper-1/ │ │ │ │ ├── Program.cs │ │ │ │ ├── Views/ │ │ │ │ │ └── Home/ │ │ │ │ │ └── Index.cshtml │ │ │ │ └── tag-helper.csproj │ │ │ ├── tag-helper-2/ │ │ │ │ ├── Program.cs │ │ │ │ ├── Views/ │ │ │ │ │ └── Home/ │ │ │ │ │ └── Index.cshtml │ │ │ │ └── tag-helper-2.csproj │ │ │ ├── tag-helper-3/ │ │ │ │ ├── Program.cs │ │ │ │ ├── Views/ │ │ │ │ │ └── Home/ │ │ │ │ │ └── Index.cshtml │ │ │ │ └── tag-helper-3.csproj │ │ │ ├── tag-helper-4/ │ │ │ │ ├── Program.cs │ │ │ │ ├── Views/ │ │ │ │ │ └── Home/ │ │ │ │ │ └── Index.cshtml │ │ │ │ └── tag-helper-4.csproj │ │ │ ├── tag-helper-5/ │ │ │ │ ├── Program.cs │ │ │ │ ├── Views/ │ │ │ │ │ └── Home/ │ │ │ │ │ └── Index.cshtml │ │ │ │ └── tag-helper-5.csproj │ │ │ ├── tag-helper-img/ │ │ │ │ ├── Program.cs │ │ │ │ ├── Views/ │ │ │ │ │ └── Home/ │ │ │ │ │ └── Index.cshtml │ │ │ │ └── tag-helper-img.csproj │ │ │ └── tag-helper-link/ │ │ │ ├── Program.cs │ │ │ ├── Views/ │ │ │ │ └── Home/ │ │ │ │ └── Index.cshtml │ │ │ ├── tag-helper-link.csproj │ │ │ └── wwwroot/ │ │ │ ├── hello.js │ │ │ └── style.css │ │ └── view-component/ │ │ ├── README.md │ │ ├── view-component-1/ │ │ │ ├── Program.cs │ │ │ ├── Views/ │ │ │ │ ├── Home/ │ │ │ │ │ └── Index.cshtml │ │ │ │ └── Shared/ │ │ │ │ └── Components/ │ │ │ │ └── HelloWorld/ │ │ │ │ ├── Default.cshtml │ │ │ │ └── HelloWorld.cs │ │ │ └── view-component.csproj │ │ ├── view-component-2/ │ │ │ ├── Program.cs │ │ │ ├── Views/ │ │ │ │ ├── Home/ │ │ │ │ │ └── Index.cshtml │ │ │ │ └── Shared/ │ │ │ │ └── Components/ │ │ │ │ └── HelloWorld/ │ │ │ │ ├── Default.cshtml │ │ │ │ └── HelloWorld.cs │ │ │ └── view-component-2.csproj │ │ ├── view-component-3/ │ │ │ ├── Program.cs │ │ │ ├── Views/ │ │ │ │ ├── Home/ │ │ │ │ │ └── Index.cshtml │ │ │ │ └── Shared/ │ │ │ │ └── Components/ │ │ │ │ └── HelloWorld/ │ │ │ │ ├── Default.cshtml │ │ │ │ └── HelloWorld.cs │ │ │ └── view-component-3.csproj │ │ └── view-component-4/ │ │ ├── Program.cs │ │ ├── Views/ │ │ │ ├── Home/ │ │ │ │ └── Index.cshtml │ │ │ └── Shared/ │ │ │ └── Components/ │ │ │ └── HelloWorld/ │ │ │ ├── Default.cshtml │ │ │ └── HelloWorld.cs │ │ └── view-component-4.csproj │ ├── net10/ │ │ ├── .vscode/ │ │ │ └── settings.json │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── dotnet-run/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ └── README.md │ │ ├── global.json │ │ ├── open-api-10/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── open-api-10.csproj │ │ │ └── open-api-10.sln │ │ ├── open-api-11/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── open-api-11.csproj │ │ │ └── open-api-11.sln │ │ ├── open-api-8/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── open-api-8.csproj │ │ │ └── open-api-8.sln │ │ ├── open-api-9/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── open-api-9.csproj │ │ │ └── open-api-9.sln │ │ ├── redirect-http-result-is-local-url/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── redirect-http-result-is-local-url.csproj │ │ │ └── redirect-http-result-is-local-url.sln │ │ ├── sse-2/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── sse-2.csproj │ │ │ └── sse-2.sln │ │ ├── sse-3/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── sse-3.csproj │ │ │ └── sse-3.sln │ │ ├── sse-4/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── sse-4.csproj │ │ │ └── sse-4.sln │ │ ├── validation-1/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── validation-1.csproj │ │ │ └── validation-1.sln │ │ ├── validation-2/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── validation-2.csproj │ │ │ └── validation-2.sln │ │ └── validation-3/ │ │ ├── .vscode/ │ │ │ └── settings.json │ │ ├── Program.cs │ │ ├── README.md │ │ ├── validation-3.csproj │ │ └── validation-3.sln │ ├── net9/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── global.json │ │ ├── open-api-3/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── open-api-3.csproj │ │ │ └── open-api-3.sln │ │ ├── open-api-4/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── open-api-4.csproj │ │ │ └── open-api-4.sln │ │ └── typed-results-2/ │ │ ├── .vscode/ │ │ │ └── settings.json │ │ ├── Program.cs │ │ ├── README.md │ │ ├── typed-results-2.csproj │ │ └── typed-results-2.sln │ ├── open-telemetry/ │ │ ├── Readme.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── open-telemetry-1/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── Readme.md │ │ │ ├── open-telemetry-1.csproj │ │ │ └── open-telemetry-1.sln │ │ ├── open-telemetry-2/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── Readme.md │ │ │ ├── open-telemetry-2.csproj │ │ │ └── open-telemetry-2.sln │ │ ├── open-telemetry-3/ │ │ │ ├── Program.cs │ │ │ ├── Readme.md │ │ │ └── open-telemetry-3.csproj │ │ └── open-telemetry-4/ │ │ ├── Program.cs │ │ ├── Readme.md │ │ └── open-telemetry-4.csproj │ ├── orchard-core/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── decoupled-cms/ │ │ │ ├── Pages/ │ │ │ │ └── Index.cshtml │ │ │ ├── Program.cs │ │ │ ├── Views/ │ │ │ │ └── Layout-Frontend.cshtml │ │ │ ├── decouple-cms.csproj │ │ │ └── wwwroot/ │ │ │ └── .placeholder │ │ ├── multi-tenant/ │ │ │ ├── Host/ │ │ │ │ ├── App_Data/ │ │ │ │ │ ├── Sites/ │ │ │ │ │ │ ├── CustomerA/ │ │ │ │ │ │ │ ├── DataProtection-Keys/ │ │ │ │ │ │ │ │ └── key-806fccc8-1694-40a4-a114-b937a4f5f8bb.xml │ │ │ │ │ │ │ └── appSettings.json │ │ │ │ │ │ ├── CustomerB/ │ │ │ │ │ │ │ ├── DataProtection-Keys/ │ │ │ │ │ │ │ │ └── key-72549719-b179-4c21-8730-4e4789c067cd.xml │ │ │ │ │ │ │ └── appSettings.json │ │ │ │ │ │ └── Default/ │ │ │ │ │ │ ├── DataProtection-Keys/ │ │ │ │ │ │ │ └── key-f9f0a416-65d2-47d5-80f3-4f0272b538fe.xml │ │ │ │ │ │ └── appSettings.json │ │ │ │ │ └── tenants.json │ │ │ │ ├── Host.csproj │ │ │ │ ├── Pages/ │ │ │ │ │ └── Index.cshtml │ │ │ │ ├── Program.cs │ │ │ │ ├── Views/ │ │ │ │ │ └── Shared/ │ │ │ │ │ └── _Layout.cshtml │ │ │ │ ├── _ViewImports.cshtml │ │ │ │ ├── _ViewStart.cshtml │ │ │ │ └── appsettings.json │ │ │ └── README.md │ │ ├── routing/ │ │ │ ├── ForumModule/ │ │ │ │ ├── Controllers/ │ │ │ │ │ └── HomeController.cs │ │ │ │ ├── ForumModule.csproj │ │ │ │ ├── Manifest.cs │ │ │ │ ├── Startup.cs │ │ │ │ └── Views/ │ │ │ │ └── Home/ │ │ │ │ └── Index.cshtml │ │ │ ├── Host/ │ │ │ │ ├── App_Data/ │ │ │ │ │ └── Sites/ │ │ │ │ │ └── Default/ │ │ │ │ │ └── DataProtection-Keys/ │ │ │ │ │ └── key-f9f0a416-65d2-47d5-80f3-4f0272b538fe.xml │ │ │ │ ├── Controllers/ │ │ │ │ │ └── HomeController.cs │ │ │ │ ├── Host.csproj │ │ │ │ ├── Pages/ │ │ │ │ │ └── Routes.cshtml │ │ │ │ ├── Program.cs │ │ │ │ ├── Views/ │ │ │ │ │ ├── Home/ │ │ │ │ │ │ └── Index.cshtml │ │ │ │ │ └── Shared/ │ │ │ │ │ └── _Layout.cshtml │ │ │ │ ├── _ViewImports.cshtml │ │ │ │ ├── _ViewStart.cshtml │ │ │ │ └── appsettings.json │ │ │ ├── README.md │ │ │ └── TicketModule/ │ │ │ ├── Controllers/ │ │ │ │ ├── HomeController.cs │ │ │ │ └── LoginController.cs │ │ │ ├── Manifest.cs │ │ │ ├── Startup.cs │ │ │ └── TicketModule.csproj │ │ ├── routing-2/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── ForumModule/ │ │ │ │ ├── ForumModule.csproj │ │ │ │ ├── Manifest.cs │ │ │ │ ├── Pages/ │ │ │ │ │ ├── Index.cshtml │ │ │ │ │ ├── Products.cshtml │ │ │ │ │ └── Users.cshtml │ │ │ │ └── Startup.cs │ │ │ ├── Host/ │ │ │ │ ├── App_Data/ │ │ │ │ │ └── Sites/ │ │ │ │ │ └── Default/ │ │ │ │ │ └── DataProtection-Keys/ │ │ │ │ │ └── key-f9f0a416-65d2-47d5-80f3-4f0272b538fe.xml │ │ │ │ ├── Controllers/ │ │ │ │ │ └── HomeController.cs │ │ │ │ ├── Host.csproj │ │ │ │ ├── Program.cs │ │ │ │ ├── Views/ │ │ │ │ │ ├── Home/ │ │ │ │ │ │ └── Index.cshtml │ │ │ │ │ └── Shared/ │ │ │ │ │ └── _Layout.cshtml │ │ │ │ ├── _ViewImports.cshtml │ │ │ │ ├── _ViewStart.cshtml │ │ │ │ └── appsettings.json │ │ │ ├── README.md │ │ │ └── TicketModule/ │ │ │ ├── Manifest.cs │ │ │ ├── Pages/ │ │ │ │ ├── Index.cshtml │ │ │ │ ├── Privacy.cshtml │ │ │ │ └── Users.cshtml │ │ │ ├── Startup.cs │ │ │ └── TicketModule.csproj │ │ └── static-files/ │ │ ├── ForumModule/ │ │ │ ├── Controllers/ │ │ │ │ └── HomeController.cs │ │ │ ├── ForumModule.csproj │ │ │ ├── Manifest.cs │ │ │ ├── Startup.cs │ │ │ ├── Views/ │ │ │ │ └── Home/ │ │ │ │ └── Index.cshtml │ │ │ └── wwwroot/ │ │ │ └── site.css │ │ ├── Host/ │ │ │ ├── App_Data/ │ │ │ │ └── Sites/ │ │ │ │ └── Default/ │ │ │ │ └── DataProtection-Keys/ │ │ │ │ └── key-f9f0a416-65d2-47d5-80f3-4f0272b538fe.xml │ │ │ ├── Host.csproj │ │ │ ├── Pages/ │ │ │ │ └── Index.cshtml │ │ │ ├── Program.cs │ │ │ ├── Views/ │ │ │ │ └── Shared/ │ │ │ │ └── _Layout.cshtml │ │ │ ├── _ViewImports.cshtml │ │ │ ├── _ViewStart.cshtml │ │ │ └── appsettings.json │ │ └── README.md │ ├── orleans/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── global.json │ │ ├── orleans-1/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── orleans-1.csproj │ │ ├── orleans-2/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── orleans-2.csproj │ │ │ └── orleans-2.sln │ │ ├── orleans-3/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── orleans-3.csproj │ │ │ └── orleans-3.sln │ │ ├── orleans-4/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── orleans-4.csproj │ │ │ └── orleans-4.sln │ │ ├── orleans-5/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── orleans-5.csproj │ │ │ └── orleans-5.sln │ │ ├── reminder/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── reminder.csproj │ │ │ └── reminder.sln │ │ ├── rss-reader/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── rss-reader.csproj │ │ ├── rss-reader-2/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── rss-reader-2.csproj │ │ ├── rss-reader-3/ │ │ │ ├── Feed.cs │ │ │ ├── Opml.cs │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── rss-reader-3.csproj │ │ ├── rss-reader-4/ │ │ │ ├── Feed.cs │ │ │ ├── Opml.cs │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── rss-reader-4.csproj │ │ ├── rss-reader-5/ │ │ │ ├── Feed.cs │ │ │ ├── Interfaces.cs │ │ │ ├── Opml.cs │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── rss-reader-5.csproj │ │ ├── rss-reader-6/ │ │ │ ├── Feed.cs │ │ │ ├── Interfaces.cs │ │ │ ├── Opml.cs │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── rss-reader-6.csproj │ │ └── timer/ │ │ ├── Program.cs │ │ ├── README.md │ │ └── timer.csproj │ ├── output-cache-middleware/ │ │ ├── build.bat │ │ ├── build.sh │ │ ├── output-cache-1/ │ │ │ ├── Program.cs │ │ │ ├── Readme.md │ │ │ └── output-cache-1.csproj │ │ ├── output-cache-2/ │ │ │ ├── Program.cs │ │ │ ├── Readme.md │ │ │ └── output-cache-2.csproj │ │ ├── output-cache-3/ │ │ │ ├── Program.cs │ │ │ ├── Readme.md │ │ │ └── output-cache-3.csproj │ │ ├── output-cache-4/ │ │ │ ├── Program.cs │ │ │ ├── Readme.md │ │ │ └── output-cache-4.csproj │ │ ├── output-cache-5/ │ │ │ ├── Program.cs │ │ │ ├── Readme.md │ │ │ └── output-cache-5.csproj │ │ ├── output-cache-6/ │ │ │ ├── Program.cs │ │ │ ├── Readme.md │ │ │ └── output-cache-6.csproj │ │ ├── output-cache-7/ │ │ │ ├── Program.cs │ │ │ ├── Readme.md │ │ │ └── output-cache-7.csproj │ │ ├── output-cache-8/ │ │ │ ├── Program.cs │ │ │ ├── Readme.md │ │ │ └── output-cache-8.csproj │ │ └── readme.md │ ├── password-hasher/ │ │ ├── Program.cs │ │ └── password-hasher.csproj │ ├── path-string/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ └── path-string-1/ │ │ ├── .vscode/ │ │ │ ├── launch.json │ │ │ └── tasks.json │ │ ├── Program.cs │ │ ├── README.md │ │ └── path-string-1.csproj │ ├── polly/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ └── rate-limiter-http-client/ │ │ ├── .vscode/ │ │ │ └── settings.json │ │ ├── Pages/ │ │ │ ├── Index.cshtml │ │ │ └── Index.cshtml.cs │ │ ├── Program.cs │ │ ├── README.md │ │ ├── rate-limiter-http-client.csproj │ │ └── rate-limiter-http-client.sln │ ├── problem-details-middleware/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── problem-details/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── problem-details.csproj │ │ ├── problem-details-2/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── problem-details-2.csproj │ │ └── problem-details-3/ │ │ ├── Program.cs │ │ ├── README.md │ │ └── problem-details-3.csproj │ ├── razor-pages/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── custom-html-generator/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── LowerCaseIdHtmlGenerator.cs │ │ │ ├── Pages/ │ │ │ │ ├── Index.cshtml │ │ │ │ ├── Index.cshtml.cs │ │ │ │ └── _ViewImports.cshtml │ │ │ ├── PersonInput.cs │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── custom-html-generator.csproj │ │ ├── handler/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Pages/ │ │ │ │ └── Index.cshtml │ │ │ ├── Program.cs │ │ │ └── handler.csproj │ │ ├── hello-world/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Pages/ │ │ │ │ └── Index.cshtml │ │ │ ├── Program.cs │ │ │ └── hello-world.csproj │ │ ├── razor/ │ │ │ ├── README.md │ │ │ ├── razor-1/ │ │ │ │ ├── Pages/ │ │ │ │ │ └── Index.cshtml │ │ │ │ ├── Program.cs │ │ │ │ ├── README.md │ │ │ │ └── razor-1.csproj │ │ │ └── razor-2/ │ │ │ ├── Pages/ │ │ │ │ └── Index.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── razor.csproj │ │ ├── razor-pages-basic/ │ │ │ ├── Pages/ │ │ │ │ ├── Index.cshtml │ │ │ │ ├── InlineCodebehindFile.cshtml │ │ │ │ ├── SeparateCodebehindFile.cshtml │ │ │ │ └── SeparateCodebehindFile.cshtml.cs │ │ │ ├── Program.cs │ │ │ └── razor-pages-basic.csproj │ │ ├── razor-pages-mvc/ │ │ │ ├── Controllers/ │ │ │ │ └── EntryController.cs │ │ │ ├── Data/ │ │ │ │ ├── Entry.cs │ │ │ │ └── GuestbookContext.cs │ │ │ ├── Pages/ │ │ │ │ ├── Index.cshtml │ │ │ │ └── RazorPages/ │ │ │ │ ├── Create.cshtml │ │ │ │ ├── Create.cshtml.cs │ │ │ │ ├── Edit.cshtml │ │ │ │ ├── Edit.cshtml.cs │ │ │ │ ├── Index.cshtml │ │ │ │ └── Index.cshtml.cs │ │ │ ├── Program.cs │ │ │ ├── Views/ │ │ │ │ └── Entry/ │ │ │ │ ├── Create.cshtml │ │ │ │ ├── Edit.cshtml │ │ │ │ └── Index.cshtml │ │ │ └── razor-pages-mvc.csproj │ │ ├── routing/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Pages/ │ │ │ │ ├── About.cshtml │ │ │ │ ├── Blog.cshtml │ │ │ │ ├── Contact.cshtml │ │ │ │ └── Index.cshtml │ │ │ ├── Program.cs │ │ │ └── routing.csproj │ │ ├── routing-2/ │ │ │ ├── .vscode/ │ │ │ │ ├── launch.json │ │ │ │ └── tasks.json │ │ │ ├── Pages/ │ │ │ │ ├── About.cshtml │ │ │ │ ├── Blog.cshtml │ │ │ │ ├── Catalog.cshtml │ │ │ │ ├── Contact.cshtml │ │ │ │ └── Index.cshtml │ │ │ ├── Program.cs │ │ │ └── routing-2.csproj │ │ └── temp-data/ │ │ ├── Pages/ │ │ │ ├── Index.cshtml │ │ │ ├── Index.cshtml.cs │ │ │ ├── SetTempData.cshtml │ │ │ └── SetTempData.cshtml.cs │ │ ├── Program.cs │ │ ├── README.md │ │ └── temp-data.csproj │ ├── razor-slices/ │ │ ├── README.MD │ │ └── hello-world/ │ │ ├── .vscode/ │ │ │ └── settings.json │ │ ├── Program.cs │ │ ├── README.md │ │ ├── Slices/ │ │ │ ├── Index.cshtml │ │ │ └── _ViewImports.cshtml │ │ └── hello-world.csproj │ ├── request/ │ │ ├── README.md │ │ ├── anti-forgery/ │ │ │ ├── Program.cs │ │ │ └── anti-forgery.csproj │ │ ├── build.bat │ │ ├── build.sh │ │ ├── cookies-1/ │ │ │ ├── Program.cs │ │ │ └── cookies-1.csproj │ │ ├── cookies-2/ │ │ │ ├── Program.cs │ │ │ └── cookies-2.csproj │ │ ├── cookies-3/ │ │ │ ├── README.md │ │ │ ├── api/ │ │ │ │ ├── Program.cs │ │ │ │ ├── api.csproj │ │ │ │ └── appsettings.json │ │ │ └── frontend/ │ │ │ ├── Pages/ │ │ │ │ └── Index.cshtml │ │ │ ├── Program.cs │ │ │ ├── appsettings.json │ │ │ └── frontend.csproj │ │ ├── form-upload-file/ │ │ │ ├── Program.cs │ │ │ └── form-upload-file.csproj │ │ ├── form-url-encoded-content/ │ │ │ ├── Program.cs │ │ │ ├── README.MD │ │ │ └── form-url-encoded-content.csproj │ │ ├── form-values/ │ │ │ ├── Program.cs │ │ │ └── form-values.csproj │ │ ├── query-string-1/ │ │ │ ├── Program.cs │ │ │ └── query-string-1.csproj │ │ ├── query-string-2/ │ │ │ ├── Program.cs │ │ │ └── query-string-2.csproj │ │ ├── query-string-3/ │ │ │ ├── Program.cs │ │ │ └── query-string-3.csproj │ │ ├── query-string-create/ │ │ │ ├── Program.cs │ │ │ ├── README.MD │ │ │ └── query-string-create.csproj │ │ ├── request-headers/ │ │ │ ├── Program.cs │ │ │ └── request-headers.csproj │ │ ├── request-headers-names/ │ │ │ ├── Program.cs │ │ │ ├── README.MD │ │ │ └── request-headers-names.csproj │ │ ├── request-headers-typed/ │ │ │ ├── Program.cs │ │ │ └── request-headers-typed.csproj │ │ └── request-verb/ │ │ ├── Program.cs │ │ └── request-verb.csproj │ ├── request-timeouts-middleware/ │ │ ├── build.bat │ │ ├── build.sh │ │ ├── readme.md │ │ ├── request-timeout/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── request-timeout.csproj │ │ ├── request-timeout-2/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── request-timeout-2.csproj │ │ ├── request-timeout-3/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── request-timeout-3.csproj │ │ │ └── request-timeout-3.sln │ │ ├── request-timeout-4/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── request-timeout-4.csproj │ │ │ └── request-timeout-4.sln │ │ ├── request-timeout-5/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── request-timeout-5.csproj │ │ │ └── request-timeout-5.sln │ │ └── request-timeout-6/ │ │ ├── Program.cs │ │ ├── README.md │ │ ├── request-timeout-6.csproj │ │ └── request-timeout-6.sln │ ├── response/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── compression-response/ │ │ │ ├── Program.cs │ │ │ └── compression-response.csproj │ │ ├── response-header/ │ │ │ ├── Program.cs │ │ │ └── response-header.csproj │ │ └── trailing-headers/ │ │ ├── Program.cs │ │ ├── README.MD │ │ └── trailing-headers.csproj │ ├── restore.bat │ ├── restore.sh │ ├── rewrite/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── rewrite-1/ │ │ │ ├── Program.cs │ │ │ └── rewrite.csproj │ │ ├── rewrite-2/ │ │ │ ├── Program.cs │ │ │ └── rewrite-2.csproj │ │ ├── rewrite-3/ │ │ │ ├── Program.cs │ │ │ └── rewrite-3.csproj │ │ ├── rewrite-4/ │ │ │ ├── Program.cs │ │ │ └── rewrite-4.csproj │ │ ├── rewrite-5/ │ │ │ ├── Program.cs │ │ │ └── rewrite-5.csproj │ │ └── rewrite-6/ │ │ ├── Program.cs │ │ └── rewrite-6.csproj │ ├── route-debugger-web/ │ │ ├── RouteDebugger/ │ │ │ ├── RouteDebugger.cs │ │ │ └── RouteDebugger.csproj │ │ ├── route-debugger-web/ │ │ │ ├── Program.cs │ │ │ ├── RouteDebuggerWeb.csproj │ │ │ ├── appsettings.Development.json │ │ │ └── appsettings.json │ │ └── route-debugger-web.sln │ ├── security/ │ │ ├── README.md │ │ ├── authentication-with-identity/ │ │ │ ├── README.md │ │ │ └── src/ │ │ │ ├── Controllers/ │ │ │ │ ├── AccountController.cs │ │ │ │ ├── HomeController.cs │ │ │ │ └── RestrictedAreaController.cs │ │ │ ├── Data/ │ │ │ │ └── ApplicationDbContext.cs │ │ │ ├── Program.cs │ │ │ ├── Services/ │ │ │ │ ├── EmailSender.cs │ │ │ │ └── IEmailSender.cs │ │ │ ├── ViewModels/ │ │ │ │ ├── AccountViewModels/ │ │ │ │ │ ├── LoginViewModel.cs │ │ │ │ │ └── RegisterViewModel.cs │ │ │ │ └── RestrictedAreaViewModels/ │ │ │ │ └── IndexViewModel.cs │ │ │ ├── Views/ │ │ │ │ ├── Account/ │ │ │ │ │ ├── ConfirmEmail.cshtml │ │ │ │ │ ├── Login.cshtml │ │ │ │ │ └── Register.cshtml │ │ │ │ ├── Home/ │ │ │ │ │ └── Index.cshtml │ │ │ │ ├── RestrictedArea/ │ │ │ │ │ └── Index.cshtml │ │ │ │ ├── Shared/ │ │ │ │ │ ├── _Layout.cshtml │ │ │ │ │ └── _LoginPartial.cshtml │ │ │ │ ├── _ViewImports.cshtml │ │ │ │ └── _ViewStart.cshtml │ │ │ └── authentication-with-identity.csproj │ │ ├── build.bat │ │ ├── build.sh │ │ └── dataprotection/ │ │ ├── README.md │ │ ├── azure-keyvault-storage-blob-key-store/ │ │ │ ├── AzKeyVaultStorageBlobKeyStore.sln │ │ │ ├── README.md │ │ │ └── src/ │ │ │ ├── AzKeyVaultStorageBlobKeyStore.csproj │ │ │ ├── Pages/ │ │ │ │ ├── Error.cshtml │ │ │ │ ├── Error.cshtml.cs │ │ │ │ ├── Index.cshtml │ │ │ │ ├── Index.cshtml.cs │ │ │ │ ├── Shared/ │ │ │ │ │ └── _Layout.cshtml │ │ │ │ ├── _ViewImports.cshtml │ │ │ │ └── _ViewStart.cshtml │ │ │ ├── Program.cs │ │ │ ├── Startup.cs │ │ │ ├── appsettings.Development.json │ │ │ └── appsettings.json │ │ ├── azure-storage-blob-key-store/ │ │ │ ├── AzStorageBlobKeyStore.sln │ │ │ ├── README.md │ │ │ └── src/ │ │ │ ├── AzStorageBlobKeyStore.csproj │ │ │ ├── Pages/ │ │ │ │ ├── Error.cshtml │ │ │ │ ├── Error.cshtml.cs │ │ │ │ ├── Index.cshtml │ │ │ │ ├── Index.cshtml.cs │ │ │ │ ├── Shared/ │ │ │ │ │ └── _Layout.cshtml │ │ │ │ ├── _ViewImports.cshtml │ │ │ │ └── _ViewStart.cshtml │ │ │ ├── Program.cs │ │ │ ├── Startup.cs │ │ │ ├── appsettings.Development.json │ │ │ └── appsettings.json │ │ ├── custom-encryptor/ │ │ │ ├── CustomEncryptor.csproj │ │ │ ├── Extensions/ │ │ │ │ └── DependencyInjection.cs │ │ │ ├── Pages/ │ │ │ │ ├── Error.cshtml │ │ │ │ ├── Error.cshtml.cs │ │ │ │ ├── Index.cshtml │ │ │ │ ├── Index.cshtml.cs │ │ │ │ ├── Shared/ │ │ │ │ │ └── _Layout.cshtml │ │ │ │ ├── _ViewImports.cshtml │ │ │ │ └── _ViewStart.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── Services/ │ │ │ │ ├── CustomXmlDecryptor.cs │ │ │ │ └── CustomXmlEncryptor.cs │ │ │ ├── Startup.cs │ │ │ ├── appsettings.Development.json │ │ │ ├── appsettings.json │ │ │ └── temp-keys/ │ │ │ └── key-7c2fc905-2a4b-4da4-b168-c0764b406eff.xml │ │ ├── default-settings/ │ │ │ ├── DataProtectionDefaultSettings.csproj │ │ │ ├── Pages/ │ │ │ │ ├── Error.cshtml │ │ │ │ ├── Error.cshtml.cs │ │ │ │ ├── Index.cshtml │ │ │ │ ├── Index.cshtml.cs │ │ │ │ ├── Shared/ │ │ │ │ │ └── _Layout.cshtml │ │ │ │ ├── _ViewImports.cshtml │ │ │ │ └── _ViewStart.cshtml │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── appsettings.Development.json │ │ │ └── appsettings.json │ │ ├── ef-key-store/ │ │ │ ├── EFCoreKeyStore.sln │ │ │ ├── README.md │ │ │ └── src/ │ │ │ ├── Data/ │ │ │ │ ├── DataProtectionKeyContext.cs │ │ │ │ └── Migrations/ │ │ │ │ ├── 20210610013150_AddDataProtectionKeys.Designer.cs │ │ │ │ ├── 20210610013150_AddDataProtectionKeys.cs │ │ │ │ └── DataProtectionKeyContextModelSnapshot.cs │ │ │ ├── EFCoreKeyStore.csproj │ │ │ ├── Pages/ │ │ │ │ ├── Error.cshtml │ │ │ │ ├── Error.cshtml.cs │ │ │ │ ├── Index.cshtml │ │ │ │ ├── Index.cshtml.cs │ │ │ │ ├── Shared/ │ │ │ │ │ └── _Layout.cshtml │ │ │ │ ├── _ViewImports.cshtml │ │ │ │ └── _ViewStart.cshtml │ │ │ ├── Program.cs │ │ │ ├── Startup.cs │ │ │ ├── appsettings.Development.json │ │ │ └── appsettings.json │ │ └── redis-key-store/ │ │ ├── Pages/ │ │ │ ├── Error.cshtml │ │ │ ├── Error.cshtml.cs │ │ │ ├── Index.cshtml │ │ │ ├── Index.cshtml.cs │ │ │ ├── Shared/ │ │ │ │ └── _Layout.cshtml │ │ │ ├── _ViewImports.cshtml │ │ │ └── _ViewStart.cshtml │ │ ├── Program.cs │ │ ├── README.md │ │ ├── RedisKeyStore.csproj │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ ├── sfa/ │ │ ├── README.md │ │ ├── remaining-time/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── remaining-time.csproj │ │ └── wiki/ │ │ ├── Program.cs │ │ ├── README.md │ │ ├── wiki.csproj │ │ └── wiki.sln │ ├── signalr/ │ │ ├── README.md │ │ └── signalr-1/ │ │ ├── .gitignore │ │ ├── Client/ │ │ │ ├── Client.csproj │ │ │ ├── Controllers/ │ │ │ │ └── HomeController.cs │ │ │ ├── Program.cs │ │ │ ├── Views/ │ │ │ │ ├── Home/ │ │ │ │ │ └── Index.cshtml │ │ │ │ ├── Shared/ │ │ │ │ │ └── _Layout.cshtml │ │ │ │ └── _ViewStart.cshtml │ │ │ └── package.json │ │ ├── Readme.md │ │ └── Server/ │ │ ├── Program.cs │ │ └── signalr.csproj │ ├── sse/ │ │ ├── Program.cs │ │ ├── README.md │ │ ├── sse.csproj │ │ └── sse.sln │ ├── starting-developer/ │ │ └── README.md │ ├── syndications/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── newsserver-mvc/ │ │ │ ├── Controllers/ │ │ │ │ └── HomeController.cs │ │ │ ├── Models/ │ │ │ │ ├── ErrorViewModel.cs │ │ │ │ ├── IndexViewModel.cs │ │ │ │ └── NewsServerOptions.cs │ │ │ ├── NewsServer.csproj │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── Views/ │ │ │ │ ├── Home/ │ │ │ │ │ └── Index.cshtml │ │ │ │ ├── Shared/ │ │ │ │ │ ├── Error.cshtml │ │ │ │ │ └── _Layout.cshtml │ │ │ │ ├── _ViewImports.cshtml │ │ │ │ └── _ViewStart.cshtml │ │ │ ├── appsettings.Development.json │ │ │ └── appsettings.json │ │ ├── syndication-1/ │ │ │ ├── Program.cs │ │ │ └── syndication.csproj │ │ └── syndication-2/ │ │ ├── Program.cs │ │ └── syndication-2.csproj │ ├── testing/ │ │ ├── README.md │ │ └── nunit-1/ │ │ ├── README.md │ │ ├── src/ │ │ │ ├── Program.cs │ │ │ └── Src.csproj │ │ └── tests/ │ │ ├── Tests.csproj │ │ └── UnitTest1.cs │ ├── unpoly/ │ │ ├── README.md │ │ ├── up-flashes/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── up-flashes.csproj │ │ │ └── up-flashes.sln │ │ ├── up-hungry/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── up-hungry.csproj │ │ │ └── up-hungry.sln │ │ ├── up-poll/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── up-poll.csproj │ │ │ └── up-poll.sln │ │ ├── up-target/ │ │ │ ├── .vscode/ │ │ │ │ └── settings.json │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ ├── up-target.csproj │ │ │ └── up-target.sln │ │ └── up-target-2/ │ │ ├── .vscode/ │ │ │ └── settings.json │ │ ├── Program.cs │ │ ├── README.md │ │ ├── up-target-2.csproj │ │ └── up-target-2.sln │ ├── uri-helper/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── uri-helper-build-absolute/ │ │ │ ├── Program.cs │ │ │ ├── README.MD │ │ │ └── uri-helper-build-absolute.csproj │ │ ├── uri-helper-from-absolute/ │ │ │ ├── Program.cs │ │ │ ├── README.MD │ │ │ └── uri-helper-from-absolute.csproj │ │ ├── uri-helper-get-display-url/ │ │ │ ├── Program.cs │ │ │ └── uri-helper-get-display-url.csproj │ │ ├── uri-helper-get-encoded-path-and-query/ │ │ │ ├── Program.cs │ │ │ ├── README.MD │ │ │ └── uri-helper-get-encoded-path-and-query.csproj │ │ └── uri-helper-get-encoded-url/ │ │ ├── Program.cs │ │ ├── README.md │ │ └── uri-helper-get-encoded-url.csproj │ ├── utils/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── http-status-codes/ │ │ │ ├── Program.cs │ │ │ ├── README.MD │ │ │ └── http-status-codes.csproj │ │ ├── media-type-names/ │ │ │ ├── Program.cs │ │ │ ├── README.MD │ │ │ └── media-type-names.csproj │ │ └── media-type-names-2/ │ │ ├── Program.cs │ │ ├── README.MD │ │ └── media-type-names-2.csproj │ ├── version/ │ │ ├── Program.cs │ │ ├── README.md │ │ └── version.csproj │ ├── web-sockets/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── web-sockets-1/ │ │ │ ├── Program.cs │ │ │ └── web-sockets.csproj │ │ ├── web-sockets-2/ │ │ │ ├── Program.cs │ │ │ └── web-sockets-2.csproj │ │ ├── web-sockets-3/ │ │ │ ├── Program.cs │ │ │ └── web-sockets-3.csproj │ │ ├── web-sockets-4/ │ │ │ ├── Program.cs │ │ │ └── web-sockets-4.csproj │ │ ├── web-sockets-5/ │ │ │ ├── Program.cs │ │ │ └── web-sockets-5.csproj │ │ └── web-sockets-6/ │ │ ├── Program.cs │ │ ├── README.md │ │ └── web-sockets-6.csproj │ ├── web-utilities/ │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── web-utilities-query-helpers/ │ │ │ ├── Program.cs │ │ │ └── web-utilities-query-helper.csproj │ │ ├── web-utilities-query-helpers-2/ │ │ │ ├── Program.cs │ │ │ ├── README.md │ │ │ └── web-utilities-query-helper-2.csproj │ │ └── web-utilities-reason-phrases/ │ │ ├── Program.cs │ │ └── web-utilities-reason-phrases.csproj │ ├── windows-service/ │ │ ├── README.md │ │ └── windows-service-1/ │ │ ├── Program.cs │ │ ├── README.md │ │ └── windows-service-1.csproj │ ├── xml/ │ │ ├── README.md │ │ └── xml-validation/ │ │ ├── Controllers/ │ │ │ └── HomeController.cs │ │ ├── Models/ │ │ │ ├── ErrorViewModel.cs │ │ │ └── IndexViewModel.cs │ │ ├── Program.cs │ │ ├── README.md │ │ ├── ViewComponents/ │ │ │ ├── DangerAlertViewComponent.cs │ │ │ └── SuccessAlertViewComponent.cs │ │ ├── Views/ │ │ │ ├── Home/ │ │ │ │ ├── Index.cshtml │ │ │ │ └── Privacy.cshtml │ │ │ ├── Shared/ │ │ │ │ ├── Components/ │ │ │ │ │ ├── DangerAlert/ │ │ │ │ │ │ └── Default.cshtml │ │ │ │ │ └── SuccessAlert/ │ │ │ │ │ └── Default.cshtml │ │ │ │ ├── Error.cshtml │ │ │ │ ├── _Layout.cshtml │ │ │ │ └── _ValidationScriptsPartial.cshtml │ │ │ ├── _ViewImports.cshtml │ │ │ └── _ViewStart.cshtml │ │ ├── XmlValidation.csproj │ │ ├── XmlValidation.sln │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ └── yarp/ │ ├── Readme.md │ └── basic-demo/ │ ├── Readme.md │ ├── Yarp.Demo.BackEnd/ │ │ ├── Controllers/ │ │ │ └── WeatherForecastController.cs │ │ ├── Program.cs │ │ ├── WeatherForecast.cs │ │ ├── Yarp.Demo.BackEnd.csproj │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ ├── Yarp.Demo.FrontEnd/ │ │ ├── App.razor │ │ ├── Pages/ │ │ │ ├── Counter.razor │ │ │ ├── FetchData.razor │ │ │ └── Index.razor │ │ ├── Program.cs │ │ ├── Shared/ │ │ │ ├── MainLayout.razor │ │ │ ├── MainLayout.razor.css │ │ │ ├── NavMenu.razor │ │ │ ├── NavMenu.razor.css │ │ │ └── SurveyPrompt.razor │ │ ├── Yarp.Demo.FrontEnd.csproj │ │ ├── _Imports.razor │ │ └── wwwroot/ │ │ ├── css/ │ │ │ ├── app.css │ │ │ └── open-iconic/ │ │ │ ├── FONT-LICENSE │ │ │ ├── ICON-LICENSE │ │ │ ├── README.md │ │ │ └── font/ │ │ │ └── fonts/ │ │ │ └── open-iconic.otf │ │ ├── index.html │ │ └── sample-data/ │ │ └── weather.json │ ├── Yarp.Demo.Proxy/ │ │ ├── Program.cs │ │ ├── Yarp.Demo.Proxy.csproj │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ └── Yarp.Demo.sln └── skills-checklist.md ================================================ FILE CONTENTS ================================================ ================================================ FILE: .editorconfig ================================================ csharp_style_namespace_declarations = file_scoped dotnet_diagnostic.IDE0161.severity = error ================================================ FILE: .gitattributes ================================================ *.cs linguist-detectable=true *.cshtml linguist-detectable=true *.html linguist-detectable=false *.js linguist-detectable=false *.ts linguist-detectable=false *.css linguist-detectable=false ================================================ FILE: .github/FUNDING.yml ================================================ # These are supported funding model platforms github: [dodyg] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] patreon: # Replace with a single Patreon username open_collective: # Replace with a single Open Collective username ko_fi: # Replace with a single Ko-fi username tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry liberapay: # Replace with a single Liberapay username issuehunt: # Replace with a single IssueHunt username otechie: # Replace with a single Otechie username lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] ================================================ FILE: .gitignore ================================================ [Oo]bj/ [Bb]in/ node_modules/ project.lock.json *.user *.suo *.cache *.docstates *.db .vs/ Properties/ ================================================ FILE: .vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceRoot}/projects/aspnet-core-2/anti-forgery/bin/Debug/netcoreapp2.0/Anti Forgery.dll", "args": [], "cwd": "${workspaceRoot}/projects/aspnet-core-2/anti-forgery", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart", "launchBrowser": { "enabled": true, "args": "${auto-detect-url}", "windows": { "command": "cmd.exe", "args": "/C start ${auto-detect-url}" }, "osx": { "command": "open" }, "linux": { "command": "xdg-open" } }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceRoot}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: .vscode/settings.json ================================================ { "gitdoc.enabled": false, "dotnet.defaultSolution": "disable", "workbench.colorCustomizations": { "activityBar.activeBackground": "#3399ff", "activityBar.background": "#3399ff", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#bf0060", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#3399ff", "statusBar.background": "#007fff", "statusBar.debuggingBackground": "#ff8000", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#3399ff", "statusBarItem.remoteBackground": "#007fff", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#007fff", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#007fff99", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#007fff", "github.copilot.chat.generateTests.codeLens": true } ================================================ FILE: .vscode/tasks.json ================================================ { "version": "2.0.0", "command": "dotnet", "args": [], "tasks": [ { "label": "build", "type": "shell", "command": "dotnet", "args": [ "build", "${workspaceRoot}/projects/aspnet-core-2/anti-forgery/anti-forgery.csproj" ], "problemMatcher": "$msCompile", "group": "build" } ] } ================================================ FILE: .vscode/tasks.json.old ================================================ { "version": "0.1.0", "command": "dotnet", "isShellCommand": true, "args": [], "tasks": [ { "taskName": "build", "args": [ "${workspaceRoot}/projects/aspnet-core-2/anti-forgery/anti-forgery.csproj" ], "isBuildCommand": true, "problemMatcher": "$msCompile" } ] } ================================================ FILE: AGENTS.md ================================================ # Coding Agent Onboarding Guide This guide helps a coding agent work efficiently with the **practical-aspnetcore** repository from the very first interaction. --- ## What This Repository Is A large, community-driven collection of **practical ASP.NET Core code samples** organized by topic. Each sample is intentionally small and focused on demonstrating one concept clearly. The repository is used as a learning resource for developers at all levels. --- ## Technology Stack | Item | Value | |------|-------| | Runtime | .NET 10 (RC – see `global.json`) | | SDK rollForward | `major` with `allowPrerelease: true` | | Web SDK | `Microsoft.NET.Sdk.Web` | | Language version | `preview` (`preview`) | | Implicit usings | Enabled (`true`) | | Target framework | `net10.0` | The `global.json` at the repository root pins the SDK version. Any newer major SDK will also work because `rollForward` is set to `major`. --- ## Directory Layout ``` practical-aspnetcore/ ├── projects/ # All sample projects live here │ ├── minimal-api/ # One directory per topic category │ │ ├── README.md # Index of samples in this category │ │ ├── build.bat # Optional batch helper │ │ ├── hello-world/ # One sub-directory per sample │ │ │ ├── Program.cs # ALL application code goes here │ │ │ ├── README.md # Description of this sample │ │ │ └── hello-world.csproj │ │ └── ... │ ├── mvc/ │ ├── blazor-wasm/ │ └── ... # 60+ topic categories ├── exercises/ # Learning exercises (separate from samples) ├── scripts/ # Utility scripts (e.g., upgrade-to-net10.ps1) ├── .github/ │ └── FUNDING.yml # GitHub Sponsors config – no CI workflows ├── global.json # SDK version pinning ├── README.md # Main index of all samples (update when adding) ├── CONTRIBUTING.md # Contribution guidelines (read before adding samples) ├── CODE_OF_CONDUCT.md └── skills-checklist.md # WIP skills checklist ``` --- ## Running a Sample ```bash cd projects// dotnet watch run ``` Open `http://localhost:5000` in a browser (or the port shown in the terminal). There is **no solution file** and no global build command. Every sample is an independent project that is built and run individually. --- ## How to Add a New Sample Follow these steps every time a new sample is created: ### 1. Create the sample directory ``` projects/// ``` Use lowercase kebab-case for both the category name and the sample name. ### 2. Create the `.csproj` file Name the file `.csproj`. Use this minimal template: ```xml net10.0 true preview ``` Add `` entries inside `` only if the sample requires NuGet packages. ### 3. Write all code in `Program.cs` **All application code must live in `Program.cs`.** This is the most important convention in this repository. Do not create additional `.cs` files, controllers, or class files unless it is absolutely impossible to demonstrate the concept in a single file (e.g., a Razor Pages `.cshtml` + code-behind pair). Typical structure: ```csharp // using statements if not covered by implicit usings var builder = WebApplication.CreateBuilder(args); // Register services var app = builder.Build(); // Configure middleware / map routes app.Run(); ``` For the simplest samples `WebApplication.Create()` is enough (no explicit builder needed): ```csharp WebApplication app = WebApplication.Create(); app.Run(async context => { await context.Response.WriteAsync("Hello world"); }); await app.RunAsync(); ``` ### 4. Create a `README.md` for the sample Keep it concise. Include: - A one-sentence description of what the sample demonstrates. - Any notable code snippets if useful for comprehension. - Links to relevant official documentation when helpful. ### 5. Update the category `README.md` Add a line for the new sample to the category-level `README.md` (e.g., `projects/minimal-api/README.md`). ### 6. Update the root `README.md` - Find the relevant section in the table and **increment the sample count**. - Add a bullet point describing the sample in the appropriate section further down the file. --- ## Conventions & Rules (from `CONTRIBUTING.md`) 1. **All code in `Program.cs`** – makes it easy to read online without chasing types across files. 2. **Keep samples small and specific** – one concept per sample. 3. **No sample is too small** – if it shows one useful thing, it belongs. 4. **Update the README** and increment the sample count when adding a new sample. --- ## Project File Conventions - **SDK**: Always `Microsoft.NET.Sdk.Web` - **TargetFramework**: `net10.0` - **ImplicitUsings**: `true` (so `Microsoft.AspNetCore.*` and other common namespaces are available without explicit `using` directives) - **LangVersion**: `preview` - **No `enable`** – samples typically omit this for brevity - Project file is named after the sample directory (e.g., `hello-world.csproj` in `hello-world/`) --- ## No CI/CD Pipelines There are **no GitHub Actions workflows** in this repository. The `.github/` directory contains only `FUNDING.yml`. Validation is done manually by running each sample locally with `dotnet watch run`. --- ## Common Pitfalls & Known Issues | Issue | Workaround | |-------|-----------| | SDK version mismatch | `global.json` has `rollForward: major` so any .NET 10+ SDK works. If you only have .NET 8/9, some samples targeting `net10.0` won't build. | | `allowPrerelease: true` required | The SDK version is a release-candidate. Ensure your local SDK installation includes preview/RC versions. | | No solution file | There is no `.sln` file. Load individual `.csproj` files in your IDE or run `dotnet watch run` directly inside the sample directory. | | Samples reference older APIs | A few older samples still use `IHostBuilder` patterns. New samples should use the modern `WebApplication` / `WebApplicationBuilder` pattern. | | Implicit usings | Many `using` statements (e.g., `Microsoft.AspNetCore.Builder`, `Microsoft.AspNetCore.Http`) are provided by implicit usings and should not need to be explicitly listed in new samples, though older samples may still include them. | --- ## Useful Reference Samples | Goal | Sample location | |------|----------------| | Simplest possible web app | `projects/minimal-api/hello-world/` | | Using builder pattern | `projects/minimal-hosting/` | | Razor Pages | `projects/razor-pages/` | | MVC controllers | `projects/mvc/` | | gRPC | `projects/grpc/` | | Blazor WASM | `projects/blazor-wasm/` | | Blazor SSR | `projects/blazor-ssr/` | | HTMX integration | `projects/htmx/` | | Generic Host (non-web) | `projects/generic-host/` | | Dependency Injection | `projects/dependency-injection/` | --- ## Summary Checklist for Adding a Sample - [ ] Create `projects///` directory - [ ] Add `.csproj` with `net10.0` target - [ ] Put ALL code in `Program.cs` - [ ] Add `README.md` describing the sample - [ ] Update `projects//README.md` - [ ] Increment count and add bullet in root `README.md` - [ ] Verify with `dotnet watch run` inside the sample directory ================================================ FILE: CODE_OF_CONDUCT.md ================================================ # Contributor Covenant Code of Conduct ## Our Pledge In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. ## Our Standards Examples of behavior that contributes to creating a positive environment include: * Using welcoming and inclusive language * Being respectful of differing viewpoints and experiences * Gracefully accepting constructive criticism * Focusing on what is best for the community * Showing empathy towards other community members Examples of unacceptable behavior by participants include: * The use of sexualized language or imagery and unwelcome sexual attention or advances * Trolling, insulting/derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or electronic address, without explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. ## Scope This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at dodyg@silverkeytech.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] [homepage]: http://contributor-covenant.org [version]: http://contributor-covenant.org/version/1/4/ ================================================ FILE: CONTRIBUTING.md ================================================ ## Contributor Guidelines * Put all the code inside Program.cs. It makes it easier for casual users to read the code online and learn something. Sometimes it is too cumbersome to chase down types using browser. * Keep your sample very simple and specific. Try to minimise the amount of concept that people need to know in order to understand your code. * There is no sample that is too small. If it shows one single interesting and useful knoweldge, add it in.* * When you are ready, update readme and add the link to the project with a paragraph or two. Do not forget to increment the sample count at the beginning of this document. ================================================ FILE: LICENSE ================================================ The MIT License (MIT) Copyright (c) 2016 Dody Gunawinata Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: MIGRATION-PLAN.md ================================================ # .NET 10 Migration Plan **Generated:** 2026-03-06 **Status:** Ready for Execution **Estimated Time:** 3.5 hours **Total Commits:** 13 (12 samples + 1 documentation) --- ## Overview This plan addresses **13 outdated samples** identified in `OUT-OF-DATE.md`, migrating them to use modern .NET 10 APIs. ### Migration Strategy - **Approach:** Update in-place (replace old code with modern patterns) - **OpenAPI UI:** Scalar UI (modern, clean, AOT-compatible) - **Scope:** HIGH + MEDIUM priority items - **Git:** One atomic commit per sample migration ### What's Being Migrated | Priority | Category | Samples | Effort | |----------|----------|---------|--------| | HIGH | Swashbuckle → Built-in OpenAPI | 10 | 2 hours | | HIGH | Manual SSE → Built-in SSE | 1 | 15 min | | MEDIUM | NSwag → Built-in OpenAPI (MVC) | 1 | 15 min | | MEDIUM | Custom IHostedService → BackgroundService | 1 | 15 min | | FINAL | Documentation updates | 1 | 30 min | --- ## For Next Agent Session ### Before You Start 1. **Read this file completely** before executing any migrations 2. **Check git status:** `git status` should show clean working directory 3. **Choose branch strategy:** ```bash # Option 1: Work on main (if you have push access) git checkout main git pull origin main # Option 2: Create feature branch (recommended) git checkout -b migrate-to-net10-patterns ``` ### Execution Order Follow this order for best results: 1. **Phase 1: OpenAPI Samples (10 samples, ~2 hours)** - Start with `open-api-1` (establishes pattern) - Continue with `open-api-2`, then `map-group-*`, `map-4` - Then `pokedex`, `authentication-*` samples - Finally `nswag` and `nswag-2` 2. **Phase 2: SSE Sample (1 sample, ~15 min)** - Migrate `sse` to use `Results.ServerSentEvents()` 3. **Phase 3: IHostedService Sample (1 sample, ~15 min)** - Simplify `ihosted-service-1` to use `BackgroundService` 4. **Phase 4: Documentation (1 commit, ~30 min)** - Update all README files - Mark OUT-OF-DATE.md as completed ### For Each Sample Migration **Follow this workflow:** ```bash # 1. Navigate to sample cd projects// # 2. Read current implementation cat Program.cs cat .csproj cat README.md # 3. Make changes (see Migration Patterns below) # - Update .csproj # - Update Program.cs # - Update README.md # 4. Test thoroughly dotnet build dotnet watch run # Test in browser (see Testing Checklist) # 5. Stop the app (Ctrl+C) # 6. Return to root cd /mnt/d/GitHub/practical-aspnetcore # 7. Review changes git status git diff projects/// # 8. Stage changes git add projects/// # 9. Commit with message (see Commit Messages below) git commit -m "..." # 10. Verify commit git log -1 --stat # 11. Repeat for next sample ``` --- ## Migration Patterns ### Pattern A: OpenAPI Migration (Swashbuckle → Built-in) **Applies to:** `open-api-1`, `open-api-2`, `map-group-2`, `map-group-3`, `map-4`, `pokedex`, `authentication-4`, `authentication-5`, `nswag`, `nswag-2` #### Step 1: Update .csproj File **Location:** `projects///.csproj` **Remove:** ```xml ``` **Add:** ```xml net10.0 true true $(NoWarn);1591 ``` #### Step 2: Update Program.cs **Location:** `projects///Program.cs` **Add at top:** ```csharp using Scalar.AspNetCore; ``` **Remove:** ```csharp // These using statements using Microsoft.AspNetCore.OpenApi; using Microsoft.OpenApi.Models; // Service registration builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(setup => setup.SwaggerDoc("v1", new OpenApiInfo() { ... })); // Middleware app.UseSwagger(); app.UseSwaggerUI(); // For NSwag samples builder.Services.AddSwaggerDocument(settings => { ... }); app.UseOpenApi(); app.UseSwaggerUi(settings => { ... }); // Extension method on endpoints .WithOpenApi(op => { op.OperationId = "..."; op.Summary = "..."; return op; }); ``` **Add:** ```csharp // Service registration (after other services) builder.Services.AddOpenApi(); // Middleware (after app.Build(), before endpoints) app.MapOpenApi(); app.MapScalarApiReference(); ``` **Replace `.WithOpenApi()` with XML comments:** ```csharp // BEFORE app.MapGet("/greeting", Hello.GetGreeting).WithOpenApi(op => { op.OperationId = "GetGreetings"; op.Summary = "Return greeting given name"; return op; }); // AFTER /// /// Return greeting given name /// /// The name of the person to greet app.MapGet("/greeting", Hello.GetGreeting); ``` **For MVC controllers (NSwag samples):** ```csharp // Add XML comments to controller actions: /// /// Returns a hello world message /// /// The greeting message [HttpGet("")] public ActionResult Index() { return new Greeting { Message = "Hello World" }; } ``` #### Step 3: Update README.md **Location:** `projects///README.md` **Replace content with:** ```markdown # Built-in OpenAPI with Scalar UI This sample demonstrates ASP.NET Core 10's built-in OpenAPI 3.1 support. ## Key Features - No external packages required (Swashbuckle/NSwag removed) - OpenAPI 3.1 document generated automatically - XML doc comments populate API descriptions - Modern Scalar UI for interactive documentation - AOT-compatible ## Running the Sample ```bash dotnet watch run ``` ## Viewing the Documentation - **Scalar UI:** Navigate to `/scalar` - **OpenAPI JSON:** Navigate to `/openapi/v1.json` ## Migration Notes This sample was migrated from Swashbuckle to .NET 10's built-in OpenAPI support. **Changes:** - Removed `Swashbuckle.AspNetCore` package dependency - Added `Microsoft.AspNetCore.OpenApi` (built-in) - Added `Scalar.AspNetCore` for modern UI - Replaced `WithOpenApi()` with XML documentation comments - Enabled `GenerateDocumentationFile` in .csproj See `OUT-OF-DATE.md` for migration details. ``` **For NSwag samples, adjust to mention NSwag:** ```markdown # Built-in OpenAPI with MVC Controllers This sample demonstrates ASP.NET Core 10's built-in OpenAPI support with MVC controllers. ## Migration Notes This sample was migrated from NSwag to .NET 10's built-in OpenAPI support. ``` --- ### Pattern B: SSE Migration (Manual → Built-in) **Applies to:** `sse` #### Step 1: Update Program.cs **Location:** `projects/sse/Program.cs` **Add at top:** ```csharp using System.Runtime.CompilerServices; ``` **Replace the entire `/sse` endpoint (lines 6-38) with:** ```csharp app.MapGet("/sse", (HttpContext context, CancellationToken cancellationToken) => { async IAsyncEnumerable CounterAsync([EnumeratorCancellation] CancellationToken ct) { int count = 0; while (!ct.IsCancellationRequested) { yield return $"hello world {++count}"; await Task.Delay(3000, ct); } } if (context.Request.Headers.Accept == "text/event-stream") { return Results.ServerSentEvents(CounterAsync(cancellationToken), eventType: "message"); } else { return Results.BadRequest("Unsupported Accept header. Use 'text/event-stream'."); } }); ``` **Remove the `Counter()` method at the bottom (lines 69-76) - no longer needed** #### Step 2: Update README.md **Location:** `projects/sse/README.md` **Replace content with:** ```markdown # Built-in Server-Sent Events This sample demonstrates ASP.NET Core 10's built-in Server-Sent Events (SSE) support using `Results.ServerSentEvents()`. ## Running the Sample ```bash dotnet watch run ``` Navigate to `http://localhost:5000/` to see the SSE client in action. ## Key Features - Built-in SSE support via `Results.ServerSentEvents()` - Type-safe with `IAsyncEnumerable` - Automatic flush management - Proper cancellation token handling - No manual protocol implementation needed ## How It Works The endpoint returns `Results.ServerSentEvents()` with an `IAsyncEnumerable`: ```csharp app.MapGet("/sse", (HttpContext context, CancellationToken cancellationToken) => { async IAsyncEnumerable CounterAsync([EnumeratorCancellation] CancellationToken ct) { int count = 0; while (!ct.IsCancellationRequested) { yield return $"hello world {++count}"; await Task.Delay(3000, ct); } } if (context.Request.Headers.Accept == "text/event-stream") { return Results.ServerSentEvents(CounterAsync(cancellationToken), eventType: "message"); } return Results.BadRequest("Use Accept: text/event-stream"); }); ``` ## Migration Notes This sample was migrated from manual SSE implementation to .NET 10's built-in support. **Changes:** - Removed manual SSE protocol implementation (data/id/event formatting) - Removed manual `Response.WriteAsync()` and `FlushAsync()` calls - Added `Results.ServerSentEvents()` with `IAsyncEnumerable` - Added proper cancellation token handling with `[EnumeratorCancellation]` See `OUT-OF-DATE.md` for migration details. ## Related Samples - `projects/net10/sse-2/` - Basic SSE - `projects/net10/sse-3/` - SSE with event types - `projects/net10/sse-4/` - SSE with mixed events using `SseItem` ``` --- ### Pattern C: IHostedService Migration (Custom → BackgroundService) **Applies to:** `ihosted-service-1` #### Step 1: Update Program.cs **Location:** `projects/ihosted-service/ihosted-service-1/Program.cs` **Add at top:** ```csharp using Microsoft.Extensions.Hosting; ``` **Remove the entire `HostedService` abstract class (lines 15-51)** **Replace the `GreeterUpdaterService` class (lines 53-69) with:** ```csharp public class GreeterUpdaterService : BackgroundService { private readonly Greeter _greeter; public GreeterUpdaterService(Greeter greeter) { _greeter = greeter; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { _greeter.Counter++; await Task.Delay(TimeSpan.FromSeconds(1), stoppingToken); } } } ``` **Update the service registration (line 3):** ```csharp // BEFORE builder.Services.AddSingleton(); // AFTER builder.Services.AddHostedService(); ``` #### Step 2: Update README.md **Location:** `projects/ihosted-service/ihosted-service-1/README.md` **Replace content with:** ```markdown # BackgroundService Pattern This sample demonstrates using the `BackgroundService` base class for background tasks in ASP.NET Core. ## Running the Sample ```bash dotnet watch run ``` Navigate to `http://localhost:5000/` and reload the page to see the counter incrementing. ## How It Works A `GreeterUpdaterService` inherits from `BackgroundService` and updates a `Greeter` singleton every second: ```csharp public class GreeterUpdaterService : BackgroundService { private readonly Greeter _greeter; public GreeterUpdaterService(Greeter greeter) { _greeter = greeter; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { _greeter.Counter++; await Task.Delay(TimeSpan.FromSeconds(1), stoppingToken); } } } ``` ## Registration ```csharp builder.Services.AddSingleton(); builder.Services.AddHostedService(); ``` ## Migration Notes This sample was simplified from a custom `IHostedService` implementation to using the built-in `BackgroundService` base class. **Changes:** - Removed custom `HostedService` abstract base class (40+ lines of boilerplate) - Inherited from `Microsoft.Extensions.Hosting.BackgroundService` - Simplified cancellation token handling - Cleaner, more maintainable code **Benefits:** - Much less code to maintain - `BackgroundService` handles all the boilerplate - Built into `Microsoft.Extensions.Hosting` - Standard pattern recommended by Microsoft See `OUT-OF-DATE.md` for migration details. ``` --- ## Testing Checklist ### For OpenAPI Samples **Before each commit, verify:** ```bash # 1. Build succeeds cd projects// dotnet build # Should see: Build succeeded. 0 Warning(s). 0 Error(s). # 2. Run succeeds dotnet watch run # Should see: Now listening on: http://localhost:5000 # 3. Test in browser # Open browser to http://localhost:5000/scalar # - Scalar UI should load # - Endpoints should be listed # - Click on endpoint, should see parameters and descriptions # 4. Test OpenAPI document # Navigate to http://localhost:5000/openapi/v1.json # - Should see valid JSON # - Should include endpoint descriptions from XML comments # 5. Stop the app # Press Ctrl+C in terminal # 6. Return to root cd /mnt/d/GitHub/practical-aspnetcore ``` **Common issues:** - **Error:** "XML documentation file not found" → Check `GenerateDocumentationFile` in .csproj - **Error:** "Scalar UI not found" → Check `Scalar.AspNetCore` package is installed - **Error:** "OpenAPI document empty" → Check `builder.Services.AddOpenApi()` is called ### For SSE Sample ```bash # 1. Build and run cd projects/sse dotnet build dotnet watch run # 2. Test in browser # Navigate to http://localhost:5000/ # - Page should load with empty list # - Open browser console (F12) # - Should see: "Connecting to SSE..." # - Should see: "Connection opened:" # - List items should appear every 3 seconds # - Each item should say "hello world X" # 3. Stop the app # Press Ctrl+C # 4. Return to root cd /mnt/d/GitHub/practical-aspnetcore ``` ### For IHostedService Sample ```bash # 1. Build and run cd projects/ihosted-service/ihosted-service-1 dotnet build dotnet watch run # 2. Test in browser # Navigate to http://localhost:5000/ # - Should see: "Please reload page (greeting updated every 1 second in the background) Hello world 0" # - Reload the page # - Counter should have incremented # - Example: "Hello world 5" (if 5 seconds passed) # 3. Stop the app # Press Ctrl+C # 4. Return to root cd /mnt/d/GitHub/practical-aspnetcore ``` --- ## Commit Messages ### Message Format ``` to .NET 10 - - - Refs: OUT-OF-DATE.md - ``` ### Individual Commit Messages #### Commit 1: open-api-1 ```bash git commit -m "Migrate minimal-api/open-api-1 to .NET 10 built-in OpenAPI - Replace Swashbuckle.AspNetCore with Microsoft.AspNetCore.OpenApi 10.0.0-preview - Add Scalar.AspNetCore for modern API documentation UI - Remove deprecated WithOpenApi() extension method - Add XML doc comments for endpoint descriptions - Update .csproj: enable GenerateDocumentationFile - Update README.md with built-in OpenAPI notes Refs: OUT-OF-DATE.md - Category 1: Swashbuckle/OpenAPI Samples" ``` #### Commit 2: open-api-2 ```bash git commit -m "Migrate minimal-api/open-api-2 to .NET 10 built-in OpenAPI - Replace Swashbuckle.AspNetCore with Microsoft.AspNetCore.OpenApi 10.0.0-preview - Add Scalar.AspNetCore for modern API documentation UI - Remove deprecated WithOpenApi() extension method - Add XML doc comments for endpoint descriptions and responses - Update .csproj: enable GenerateDocumentationFile - Update README.md with built-in OpenAPI notes Refs: OUT-OF-DATE.md - Category 1: Swashbuckle/OpenAPI Samples" ``` #### Commit 3: map-group-2 ```bash git commit -m "Migrate minimal-api/map-group-2 to .NET 10 built-in OpenAPI - Replace Swashbuckle.AspNetCore with Microsoft.AspNetCore.OpenApi 10.0.0-preview - Add Scalar.AspNetCore for modern API documentation UI - Update .csproj: enable GenerateDocumentationFile - Update README.md with built-in OpenAPI notes Refs: OUT-OF-DATE.md - Category 1: Swashbuckle/OpenAPI Samples" ``` #### Commit 4: map-group-3 ```bash git commit -m "Migrate minimal-api/map-group-3 to .NET 10 built-in OpenAPI - Replace Swashbuckle.AspNetCore with Microsoft.AspNetCore.OpenApi 10.0.0-preview - Add Scalar.AspNetCore for modern API documentation UI - Update .csproj: enable GenerateDocumentationFile - Update README.md with built-in OpenAPI notes Refs: OUT-OF-DATE.md - Category 1: Swashbuckle/OpenAPI Samples" ``` #### Commit 5: map-4 ```bash git commit -m "Migrate minimal-api/map-4 to .NET 10 built-in OpenAPI - Replace Swashbuckle.AspNetCore with Microsoft.AspNetCore.OpenApi 10.0.0-preview - Add Scalar.AspNetCore for modern API documentation UI - Update .csproj: enable GenerateDocumentationFile - Update README.md with built-in OpenAPI notes Refs: OUT-OF-DATE.md - Category 1: Swashbuckle/OpenAPI Samples" ``` #### Commit 6: pokedex ```bash git commit -m "Migrate pokedex to .NET 10 built-in OpenAPI - Replace Swashbuckle.AspNetCore with Microsoft.AspNetCore.OpenApi 10.0.0-preview - Add Scalar.AspNetCore for modern API documentation UI - Update .csproj: enable GenerateDocumentationFile - Update README.md with built-in OpenAPI notes Refs: OUT-OF-DATE.md - Category 1: Swashbuckle/OpenAPI Samples" ``` #### Commit 7: authentication-4 ```bash git commit -m "Migrate authentication-4 to .NET 10 built-in OpenAPI - Replace Swashbuckle.AspNetCore with Microsoft.AspNetCore.OpenApi 10.0.0-preview - Add Scalar.AspNetCore for modern API documentation UI - Update .csproj: enable GenerateDocumentationFile - Update README.md with built-in OpenAPI notes Refs: OUT-OF-DATE.md - Category 1: Swashbuckle/OpenAPI Samples" ``` #### Commit 8: authentication-5 ```bash git commit -m "Migrate authentication-5 to .NET 10 built-in OpenAPI - Replace Swashbuckle.AspNetCore with Microsoft.AspNetCore.OpenApi 10.0.0-preview - Add Scalar.AspNetCore for modern API documentation UI - Remove deprecated WithOpenApi() extension method - Add XML doc comments for endpoint descriptions - Update .csproj: enable GenerateDocumentationFile - Update README.md with built-in OpenAPI notes Refs: OUT-OF-DATE.md - Category 1: Swashbuckle/OpenAPI Samples" ``` #### Commit 9: nswag ```bash git commit -m "Migrate mvc/nswag to .NET 10 built-in OpenAPI with MVC - Replace NSwag.AspNetCore with Microsoft.AspNetCore.OpenApi 10.0.0-preview - Add Scalar.AspNetCore for modern API documentation UI - Add XML doc comments to controller actions - Update .csproj: enable GenerateDocumentationFile - Update README.md with built-in OpenAPI notes Refs: OUT-OF-DATE.md - Category 1: Swashbuckle/OpenAPI Samples" ``` #### Commit 10: nswag-2 ```bash git commit -m "Migrate mvc/nswag-2 to .NET 10 built-in OpenAPI with MVC - Replace NSwag.AspNetCore with Microsoft.AspNetCore.OpenApi 10.0.0-preview - Add Scalar.AspNetCore for modern API documentation UI - Add XML doc comments to controller actions - Update .csproj: enable GenerateDocumentationFile - Update README.md with built-in OpenAPI notes Refs: OUT-OF-DATE.md - Category 1: Swashbuckle/OpenAPI Samples" ``` #### Commit 11: sse ```bash git commit -m "Migrate sse sample to .NET 10 built-in Server-Sent Events - Replace manual SSE protocol implementation with Results.ServerSentEvents() - Use IAsyncEnumerable with proper cancellation token handling - Add [EnumeratorCancellation] attribute for proper cancellation - Remove manual Response.WriteAsync() and FlushAsync() calls - Simplify code with automatic flush management - Update README.md with built-in SSE notes Refs: OUT-OF-DATE.md - Category 2: Server-Sent Events" ``` #### Commit 12: ihosted-service-1 ```bash git commit -m "Simplify ihosted-service-1 using BackgroundService base class - Remove custom HostedService abstract base class (40+ lines of boilerplate) - Inherit from Microsoft.Extensions.Hosting.BackgroundService - Update service registration to use AddHostedService() - Cleaner cancellation token handling via stoppingToken parameter - Update README.md with BackgroundService pattern notes Refs: OUT-OF-DATE.md - Category 3: IHostedService Patterns" ``` #### Commit 13: Documentation Update ```bash git commit -m "Update documentation to reflect .NET 10 migrations - Update root README.md with note about .NET 10 modern patterns - Update projects/minimal-api/README.md with OpenAPI migration notes - Update projects/authentication/README.md with OpenAPI migration notes - Update projects/sse/README.md with built-in SSE notes - Update projects/mvc/README.md with NSwag alternative notes - Update projects/ihosted-service/README.md with BackgroundService pattern notes - Mark OUT-OF-DATE.md as completed Refs: OUT-OF-DATE.md" ``` --- ## Sample-by-Sample Execution Guide ### Sample 1: minimal-api/open-api-1 **Location:** `projects/minimal-api/open-api-1/` **Files to update:** - `open-api-1.csproj` - `Program.cs` - `README.md` **Steps:** ```bash cd projects/minimal-api/open-api-1 # Read current files cat open-api-1.csproj cat Program.cs cat README.md # Update .csproj (see Pattern A, Step 1) # Update Program.cs (see Pattern A, Step 2) # Update README.md (see Pattern A, Step 3) # Test dotnet build dotnet watch run # Test in browser: /scalar and /openapi/v1.json # Press Ctrl+C to stop cd /mnt/d/GitHub/practical-aspnetcore # Commit git add projects/minimal-api/open-api-1/ git commit -m "Migrate minimal-api/open-api-1 to .NET 10 built-in OpenAPI - Replace Swashbuckle.AspNetCore with Microsoft.AspNetCore.OpenApi 10.0.0-preview - Add Scalar.AspNetCore for modern API documentation UI - Remove deprecated WithOpenApi() extension method - Add XML doc comments for endpoint descriptions - Update .csproj: enable GenerateDocumentationFile - Update README.md with built-in OpenAPI notes Refs: OUT-OF-DATE.md - Category 1: Swashbuckle/OpenAPI Samples" # Verify git log -1 --stat ``` ### Sample 2: minimal-api/open-api-2 **Location:** `projects/minimal-api/open-api-2/` **Steps:** Same as Sample 1, but use commit message for open-api-2 ### Sample 3: minimal-api/map-group-2 **Location:** `projects/minimal-api/map-group-2/` **Steps:** Same as Sample 1, but use commit message for map-group-2 ### Sample 4: minimal-api/map-group-3 **Location:** `projects/minimal-api/map-group-3/` **Steps:** Same as Sample 1, but use commit message for map-group-3 ### Sample 5: minimal-api/map-4 **Location:** `projects/minimal-api/map-4/` **Steps:** Same as Sample 1, but use commit message for map-4 ### Sample 6: pokedex **Location:** `projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/` **Note:** This is a multi-project sample. Update the main API project. **Steps:** ```bash cd projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex # Read current files cat Minimal.Api.Pokedex.csproj cat Program.cs # Update .csproj and Program.cs using Pattern A # Test dotnet build dotnet watch run # Test in browser # Press Ctrl+C cd /mnt/d/GitHub/practical-aspnetcore # Commit git add projects/mini/minimal-api-pokedex/ git commit -m "Migrate pokedex to .NET 10 built-in OpenAPI - Replace Swashbuckle.AspNetCore with Microsoft.AspNetCore.OpenApi 10.0.0-preview - Add Scalar.AspNetCore for modern API documentation UI - Update .csproj: enable GenerateDocumentationFile - Update README.md with built-in OpenAPI notes Refs: OUT-OF-DATE.md - Category 1: Swashbuckle/OpenAPI Samples" ``` ### Sample 7: authentication/authentication-4 **Location:** `projects/authentication/authentication-4/` **Steps:** Same as Sample 1, but use commit message for authentication-4 ### Sample 8: authentication/authentication-5 **Location:** `projects/authentication/authentication-5/` **Steps:** Same as Sample 1, but use commit message for authentication-5 ### Sample 9: mvc/nswag **Location:** `projects/mvc/nswag/` **Steps:** ```bash cd projects/mvc/nswag # Read current files cat nswag.csproj cat Program.cs # Update .csproj (see Pattern A, Step 1 - remove NSwag, add Scalar) # Update Program.cs (see Pattern A, Step 2 - for MVC) # Add XML comments to controller actions # Test dotnet build dotnet watch run # Test in browser: /scalar # Press Ctrl+C cd /mnt/d/GitHub/practical-aspnetcore # Commit git add projects/mvc/nswag/ git commit -m "Migrate mvc/nswag to .NET 10 built-in OpenAPI with MVC - Replace NSwag.AspNetCore with Microsoft.AspNetCore.OpenApi 10.0.0-preview - Add Scalar.AspNetCore for modern API documentation UI - Add XML doc comments to controller actions - Update .csproj: enable GenerateDocumentationFile - Update README.md with built-in OpenAPI notes Refs: OUT-OF-DATE.md - Category 1: Swashbuckle/OpenAPI Samples" ``` ### Sample 10: mvc/nswag-2 **Location:** `projects/mvc/nswag-2/` **Steps:** Same as Sample 9, but use commit message for nswag-2 ### Sample 11: sse **Location:** `projects/sse/` **Steps:** ```bash cd projects/sse # Read current file cat Program.cs # Update Program.cs (see Pattern B, Step 1) # Update README.md (see Pattern B, Step 2) # Test dotnet build dotnet watch run # Test in browser: http://localhost:5000/ # Open console, verify SSE events # Press Ctrl+C cd /mnt/d/GitHub/practical-aspnetcore # Commit git add projects/sse/ git commit -m "Migrate sse sample to .NET 10 built-in Server-Sent Events - Replace manual SSE protocol implementation with Results.ServerSentEvents() - Use IAsyncEnumerable with proper cancellation token handling - Add [EnumeratorCancellation] attribute for proper cancellation - Remove manual Response.WriteAsync() and FlushAsync() calls - Simplify code with automatic flush management - Update README.md with built-in SSE notes Refs: OUT-OF-DATE.md - Category 2: Server-Sent Events" ``` ### Sample 12: ihosted-service/ihosted-service-1 **Location:** `projects/ihosted-service/ihosted-service-1/` **Steps:** ```bash cd projects/ihosted-service/ihosted-service-1 # Read current file cat Program.cs # Update Program.cs (see Pattern C, Step 1) # Update README.md (see Pattern C, Step 2) # Test dotnet build dotnet watch run # Test in browser: http://localhost:5000/ # Reload page, counter should increment # Press Ctrl+C cd /mnt/d/GitHub/practical-aspnetcore # Commit git add projects/ihosted-service/ihosted-service-1/ git commit -m "Simplify ihosted-service-1 using BackgroundService base class - Remove custom HostedService abstract base class (40+ lines of boilerplate) - Inherit from Microsoft.Extensions.Hosting.BackgroundService - Update service registration to use AddHostedService() - Cleaner cancellation token handling via stoppingToken parameter - Update README.md with BackgroundService pattern notes Refs: OUT-OF-DATE.md - Category 3: IHostedService Patterns" ``` ### Sample 13: Documentation Update **Location:** Root and category READMEs **Steps:** ```bash # Update root README.md # Add a section about .NET 10 modern patterns after the introduction # Update category READMEs: # - projects/minimal-api/README.md # - projects/authentication/README.md # - projects/sse/README.md # - projects/mvc/README.md # - projects/ihosted-service/README.md # For each category README, add a note: # "Note: Samples have been migrated to use .NET 10 built-in features. See MIGRATION-PLAN.md for details." # Update or remove OUT-OF-DATE.md # Option 1: Add at top: "STATUS: MIGRATION COMPLETED (2026-03-06)" # Option 2: Delete the file # Commit git add README.md git add projects/*/README.md git add OUT-OF-DATE.md git commit -m "Update documentation to reflect .NET 10 migrations - Update root README.md with note about .NET 10 modern patterns - Update projects/minimal-api/README.md with OpenAPI migration notes - Update projects/authentication/README.md with OpenAPI migration notes - Update projects/sse/README.md with built-in SSE notes - Update projects/mvc/README.md with NSwag alternative notes - Update projects/ihosted-service/README.md with BackgroundService pattern notes - Mark OUT-OF-DATE.md as completed Refs: OUT-OF-DATE.md" ``` --- ## Final Verification ### After All 13 Commits ```bash # 1. Check commit history git log --oneline -13 # Should see all 13 commits in reverse chronological order # 2. Verify no uncommitted changes git status # Should say: "nothing to commit, working tree clean" # 3. Optional: Build all migrated samples cd projects/minimal-api/open-api-1 && dotnet build && cd ../../.. cd projects/minimal-api/open-api-2 && dotnet build && cd ../../.. cd projects/minimal-api/map-group-2 && dotnet build && cd ../../.. cd projects/minimal-api/map-group-3 && dotnet build && cd ../../.. cd projects/minimal-api/map-4 && dotnet build && cd ../../.. cd projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex && dotnet build && cd ../../../../.. cd projects/authentication/authentication-4 && dotnet build && cd ../../.. cd projects/authentication/authentication-5 && dotnet build && cd ../../.. cd projects/mvc/nswag && dotnet build && cd ../.. cd projects/mvc/nswag-2 && dotnet build && cd ../.. cd projects/sse && dotnet build && cd ../.. cd projects/ihosted-service/ihosted-service-1 && dotnet build && cd ../../.. # 4. If using feature branch, push to remote git push origin migrate-to-net10-patterns # 5. If ready to merge to main git checkout main git merge migrate-to-net10-patterns git push origin main ``` --- ## Success Criteria Before marking this migration as complete, verify: - [ ] All 13 commits created with descriptive messages - [ ] Each commit is atomic (all files for that sample in one commit) - [ ] All 12 samples build without warnings (`dotnet build` succeeds) - [ ] All 12 samples run correctly (`dotnet watch run` succeeds) - [ ] OpenAPI samples: `/scalar` and `/openapi/v1.json` accessible (10 samples) - [ ] SSE sample: Events received in browser every 3 seconds - [ ] IHostedService sample: Counter increments every second - [ ] No deprecated `WithOpenApi()` usage remains - [ ] No `Swashbuckle.AspNetCore` or `NSwag.AspNetCore` packages remain - [ ] All READMEs updated with migration notes - [ ] Git history shows clear, traceable progression - [ ] `git log --oneline -13` shows all commits - [ ] `git status` shows clean working tree - [ ] Root README and category READMEs updated in final commit - [ ] OUT-OF-DATE.md marked as completed or removed --- ## Troubleshooting ### Common Issues #### Issue: "Cannot find type 'BackgroundService'" **Solution:** Add `using Microsoft.Extensions.Hosting;` at top of Program.cs #### Issue: "XML documentation file not found" **Solution:** Add to .csproj: ```xml true ``` #### Issue: "Scalar UI not loading" **Solution:** Check that: 1. `Scalar.AspNetCore` package is installed 2. `app.MapScalarApiReference();` is called after `app.Build()` 3. Navigate to `/scalar` (not `/swagger`) #### Issue: "OpenAPI document is empty" **Solution:** Check that: 1. `builder.Services.AddOpenApi();` is called 2. `app.MapOpenApi();` is called 3. At least one endpoint is mapped #### Issue: "SSE events not appearing" **Solution:** Check that: 1. `using System.Runtime.CompilerServices;` is added 2. `[EnumeratorCancellation]` attribute is on the cancellation token parameter 3. Browser is sending `Accept: text/event-stream` header #### Issue: "Build fails after migration" **Solution:** 1. Check .csproj for correct package versions 2. Run `dotnet restore` 3. Delete `bin/` and `obj/` folders and rebuild --- ## Reference Links ### Official Documentation - [.NET 10 What's New](https://learn.microsoft.com/dotnet/core/whats-new/dotnet-10) - [ASP.NET Core 10 What's New](https://learn.microsoft.com/aspnet/core/release-notes/aspnetcore-10) - [Built-in OpenAPI Support](https://learn.microsoft.com/aspnet/core/fundamentals/openapi/aspnetcore-openapi) - [Server-Sent Events](https://learn.microsoft.com/aspnet/core/fundamentals/server-sent-events) - [BackgroundService Class](https://learn.microsoft.com/dotnet/api/microsoft.extensions.hosting.backgroundservice) ### Internal References - `OUT-OF-DATE.md` - Original analysis of outdated samples - `projects/net10/README.md` - .NET 10 feature samples index - `projects/net10/open-api-8/` - Reference for built-in OpenAPI pattern - `projects/net10/sse-2/` - Reference for built-in SSE pattern - `AGENTS.md` - Repository conventions and guidelines --- ## Notes for Future Agents 1. **This plan is self-contained** - All information needed to execute the migration is in this file. 2. **Follow the order** - Execute samples in the order listed (1-13) for best results. 3. **Test before commit** - Always run `dotnet build` and `dotnet watch run` before committing. 4. **Use the exact commit messages** - Copy-paste the commit messages to ensure consistency. 5. **One sample at a time** - Don't try to batch multiple samples in one commit. 6. **Reference existing .NET 10 samples** - If unsure, look at `projects/net10/open-api-8/` or `projects/net10/sse-2/` for patterns. 7. **Keep it simple** - The goal is to demonstrate modern patterns with minimal code. 8. **Update READMEs** - Don't skip updating README.md files - they help users understand the changes. 9. **Mark complete** - After finishing, update this file with completion status. --- ## Completion Checklist When finished, update this section: - [ ] **Started:** (date) - [ ] **Completed:** (date) - [ ] **Commits created:** X/13 - [ ] **Samples migrated:** X/12 - [ ] **Documentation updated:** Yes/No - [ ] **Tested all samples:** Yes/No - [ ] **Pushed to remote:** Yes/No (branch name: ________) - [ ] **Merged to main:** Yes/No **Notes:** (Add any notes about issues encountered, deviations from plan, etc.) --- **End of Migration Plan** ================================================ FILE: OUT-OF-DATE.md ================================================ # Outdated ASP.NET Core 10 Samples Report **Generated:** 2026-03-06 **Repository:** practical-aspnetcore **Total Samples Analyzed:** 637 **Outdated Samples Identified:** 14 **Migrated:** 12 ✅ **Remaining:** 2 --- ## Migration Status ### Completed Migrations ✅ | Sample | Category | Migration | |--------|----------|-----------| | `minimal-api/open-api-1` | OpenAPI | Swashbuckle → Built-in | | `minimal-api/open-api-2` | OpenAPI | Swashbuckle → Built-in | | `minimal-api/map-group-2` | OpenAPI | Swashbuckle → Built-in | | `minimal-api/map-group-3` | OpenAPI | Swashbuckle → Built-in | | `minimal-api/map-4` | OpenAPI | Swashbuckle → Built-in | | `authentication/authentication-4` | OpenAPI | Swashbuckle → Built-in | | `authentication/authentication-5` | OpenAPI | Swashbuckle → Built-in | | `mini/minimal-api-pokedex` | OpenAPI | Swashbuckle → Built-in | | `mvc/nswag` | OpenAPI | NSwag → Built-in | | `sse` | SSE | Manual → Built-in | | `ihosted-service/ihosted-service-1` | Background | Custom base → BackgroundService | ### Remaining Samples | Sample | Priority | Notes | |--------|----------|-------| | `mvc/nswag-2` | LOW | Alternative approach, kept for reference | | `generic-host/generic-host-1/2` | LOW | Still valid for non-web scenarios | --- ## Executive Summary This report identifies samples that were outdated due to new APIs and features available in .NET 10 / ASP.NET Core 10. **12 samples have been successfully migrated** to use modern patterns. ### Key Migrations Completed 1. **OpenAPI/Swagger** - 9 samples migrated from Swashbuckle to built-in OpenAPI 2. **Server-Sent Events** - 1 sample migrated from manual implementation to built-in SSE 3. **IHostedService** - 1 sample simplified using `BackgroundService` base class --- ## Migration Patterns Applied ### OpenAPI Migration **Before (Swashbuckle):** ```csharp builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); var app = builder.Build(); app.UseSwagger(); app.UseSwaggerUI(); app.MapGet("/greeting", Hello.GetGreeting).WithOpenApi(op => { ... }); ``` **After (Built-in OpenAPI):** ```csharp builder.Services.AddOpenApi(); var app = builder.Build(); app.MapOpenApi(); app.MapScalarApiReference(); /// /// Return greeting given name /// app.MapGet("/greeting", Hello.GetGreeting); ``` ### SSE Migration **Before (Manual):** ```csharp app.MapGet("/sse", async context => { context.Response.ContentType = "text/event-stream"; await context.Response.WriteAsync($"data: {data}\n"); await context.Response.Body.FlushAsync(); }); ``` **After (Built-in):** ```csharp app.MapGet("/sse", (CancellationToken ct) => { async IAsyncEnumerable GetEvents([EnumeratorCancellation] CancellationToken ct) { while (!ct.IsCancellationRequested) { yield return $"Event at {DateTime.UtcNow}"; await Task.Delay(1000, ct); } } return Results.ServerSentEvents(GetEvents(ct)); }); ``` ### BackgroundService Migration **Before (Custom base):** ```csharp public abstract class HostedService : IHostedService, IDisposable { /* 20+ lines */ } ``` **After (BackgroundService):** ```csharp public class MyService : BackgroundService { protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { // Do work await Task.Delay(TimeSpan.FromSeconds(1), stoppingToken); } } } ``` --- ## Benefits of Migration | Aspect | Before | After | |--------|--------|-------| | Dependencies | Swashbuckle.AspNetCore | Built-in (no package) | | OpenAPI Version | 3.0 | 3.1 | | AOT Compatible | No | Yes | | Code Simplicity | More boilerplate | XML comments | | Performance | Good | Better (source generators) | --- ## References - `projects/net10/README.md` - .NET 10 feature samples - `projects/net10/open-api-*` - Built-in OpenAPI examples - `projects/net10/sse-*` - Built-in SSE examples ================================================ FILE: README.md ================================================ # Samples for ASP.NET Core 10.0 Greetings from Cairo, Egypt. You can [sponsor](https://github.com/sponsors/dodyg) this project [here](https://github.com/sponsors/dodyg). ## Whats' new on ASP.NET Core 10 You can find samples on new features available in ASP.NET Core 10(12) [here](/projects/net10). Datastar examples (20) can be found [here](/projects/datastar). ## ASP.NET Core 9 You can find samples on new features available in ASP.NET Core 9(3) [here](/projects/net9). ## Previous versions [6.0](https://github.com/dodyg/practical-aspnetcore/tree/net6.0/), [5.0](https://github.com/dodyg/practical-aspnetcore/tree/net5.0/), [3.1 LTS](https://github.com/dodyg/practical-aspnetcore/tree/3.1-LTS/), [2.1 LTS](https://github.com/dodyg/practical-aspnetcore/tree/2.1-LTS) ## Other Samples - For ATProtocol (the underlying open protocol for Bluesky) related samples, you can find them [here](https://github.com/dodyg/bluenile). - For Hydro Framework (Razor Pages compatible), you can find them [here](/projects/hydro/)(8). - [Official .NET Aspire samples](https://github.com/dotnet/aspire-samples). - For Data Access samples, go to the excellent [ORM Cookbook](https://github.com/Grauenwolf/DotNet-ORM-Cookbook). - .NET team also has [a sample repository](https://github.com/dotnet/samples). ## Sections | Section | | | |-------------------------------------------------------------------------|----|------------------------------------------------------------------------------| | [Authentication](/projects/authentication) | 5 | | | [Blazor Client Side (Web Assembly)](/projects/blazor-wasm) | 22 | .NET8 (WIP), Components, Data Binding | | [Blazor Server](/projects/blazor-ss) | 16 | Localization | | [Blazor Server Side Render](/projects/blazor-ssr) | 22 | | | [Caching](/projects/caching) | 5 | | | [Configurations](/projects/configurations) | 10 | | | [CoreWCF](/projects/corewcf) | 1 | | | [Dependency Injection](/projects/dependency-injection/) | 4 | | | [Diagnostics](/projects/diagnostics) | 5 | | | [Endpoint Routing](/projects/endpoint-routing) | 32 | | | [Email](/projects/mailkit) | 2 | | | [Elsa Workflow](/projects/elsa) | 14 | .NET8 | | [Exception Handler Middleware](/projects/exception-handler-middleware/) | 2 | | | [Features](/projects/features) | 11 | | | [Generic Hosting](/projects/generic-host) | 9 | | | [gRPC](/projects/grpc) (including grpc-Web) | 12 | | | [Health Check](/projects/health-check) | 6 | | | [HTMX](/projects/htmx) | 40 | | | [IHttpClientFactory](/projects/httpclientfactory) | 4 | | | [IHostedService](/projects/ihosted-service) | 2 | | | [Logging](/projects/logging) | 6 | | | [Localization and Globalization](/projects/localization) | 6 | | | [Middleware](/projects/middleware) | 14 | | | [Mini Apps](/projects/mini) | 2 | | | [Minimal API](/projects/minimal-api) | 36 | Routing, Parameter Bindings, etc | | [Minimal Hosting](/projects/minimal-hosting) | 23 | | | [MVC](/projects/mvc) | 47 | Localization, Routing, Razor Class Library, Tag Helpers, View Component, etc | | [Output Cache Middleware](/projects/output-cache-middleware) | | | | [Open Telemetry](/projects/open-telemetry/) | 3 | | | [Orchard Core](/projects/orchard-core) | 4 | | | [Path String (HttpContext.Request.Path)](/projects/path-string) | 1 | | | [Polly](/projects/polly/) | 1 | | | [Problem Details Middleware](/projects/problem-details-middleware/) | 3 | | | [Razor Pages](/projects/razor-pages) | 10 | TempData | | [RazorSlices](/projects/razor-slices) | 1 | | | [Request](/projects/request) | 15 | Form, Cookies, Query String, Headers | | [Request Timeouts Middleware](/projets/request-timeouts-middleware) | 6 | | | [Response](/projects/response) | 3 | | | [SignalR](/projects/signalr) | 1 | | | [Security](/projects/security) | 7 | | | [Single File Application](/projects/sfa) | 2 | | | [Static Files and File Provider](/projects/file-provider) | 10 | | | [System.Text.Json](/projects/json) | 23 | | | [Syndications](/projects/syndications) | 3 | | | [Testing](/projects/testing) | 1 | | | [Unpoly](/projects/unpoly) | 5 | | | [URL Redirect/Rewrite](/projects/rewrite) | 6 | | | [Uri Helper](/projects/uri-helper) | 5 | | | [Windows Service](/projects/windows-service) | 1 | | | [Web Sockets](/projects/web-sockets) | 6 | | | [Web Utilities](/projects/web-utilities) | 3 | | | [Orleans](/projects/orleans) | 5 | .NET.8 | | [Xml](/projects/xml) | 1 | | | [YARP](/projects/yarp) | 1 | | ## How to run these samples To run these samples, simply open your command line console, go to each folder and execute `dotnet watch run`. ### Misc (6) - [Application Environment](/projects/application-environment) This sample shows how to obtain application environment information (target framework, etc). - [Show Connection info](/projects/connection-info) Enumerate the connection information of a HTTP request. - [Password Hasher server](/projects/password-hasher) Give it a string and it will generate a secure hash for you, e.g. `localhost:5000?password=mypassword`. - [Version info](/projects/version) Show various version info of the framework your system is running on. - [IApplicationLifetime](/projects/i-application-lifetime) Responds to application startup and shutdown. We are using `IApplicationLifetime` that trigger events during application startup and shutdown. - [Short Circuit](map-short-circuit) Use `MapShortCircuit` or `.ShortCircuit()` to efficiently respond to a request without going through a middleware pipeline run. ### Server-Sent Events (1) - [Forever Server](/projects/sse) This server will send a 'hello world' greeting forever using .NET 10 built-in SSE support. ### Markdown (2) - [Markdown server](/projects/markdown-server) Serve markdown file as html file. You will see how you can create useful app using a few basic facilities in aspnetcore. We take `"Markdig"` as dependency. - [Markdown server - implemented as middleware component](/projects/markdown-server-middleware) Serve markdown file as html file. It has the same exact functionality as [Markdown server](/projects/markdown-server) but implemented using middleware component. We take `"Markdig"` as dependency. ### Utils (3) - [Status Codes](/projects/utils/http-status-codes) Here we contrast between the usage of `Microsoft.AspNetCore.Http.StatusCodes` and `System.Net.HttpStatusCode`. - [MediaTypeNames](/projects/utils/media-type-names) This class provides convenient constants for some common MIME types. It's not extensive by any means however `MediaTypeNames.Text.Html` and `MediaTypeNames.Application.Json` come handy. - [MediaTypeNames - 2](/projects/utils/media-type-names-2) Using `FileExtensionContentTypeProvider` to obtain the correct MIME type of a filename extension. ### Device Detection (1) The samples in this section rely on [Wangkanai.Detection](https://github.com/wangkanai/wangkanai/tree/main/Detection) library. - [Device Detection](/projects/device-detection) This is the most basic device detection. You will be able to detect whether the client is a desktop or a mobile client. ### Image Sharp (1) All these samples require `SixLabors.ImageSharp.Web` middleware package. This middleware is an excelent tool to process your day to day image processing need. - [Image-Sharp](/projects/image-sharp) This example shows how to enable image resizing functionality to your site. It's super easy and the middleware takes care of caching, etc. ## Misc - [Contributor Guidelines](https://github.com/dodyg/practical-aspnetcore/blob/master/CONTRIBUTING.md) - [Code of Conduct](https://github.com/dodyg/practical-aspnetcore/blob/master/CODE_OF_CONDUCT.md) ================================================ FILE: STRUCTURE.md ================================================ # Practical ASP.NET Core - Repository Structure Generated on: 2026-03-06 ## Overview This repository contains practical ASP.NET Core code samples organized by topic. - **Total Samples**: 637 - **Total Categories**: 72 - **Primary .NET Version**: .NET 10.0 (net10.0) ## Build Status | Category | Status | |----------|--------| | authentication | SUCCESS | | blazor-ss | SUCCESS | | blazor-ssr | SUCCESS | | blazor-wasm | SUCCESS | | caching | SUCCESS | | configurations | SUCCESS | | datastar | SUCCESS | | dependency-injection | SUCCESS | | diagnostics | SUCCESS | | elsa | SUCCESS | | endpoint-routing | SUCCESS | | exception-handler-middleware | SUCCESS | | features | SUCCESS | | file-provider | SUCCESS | | generic-host | SUCCESS | | grpc | SUCCESS | | health-check | SUCCESS | | httpclientfactory | SUCCESS | | hydro | SUCCESS | | ihosted-service | SUCCESS | | json | SUCCESS | | localization | SUCCESS | | logging | SUCCESS | | mailkit | SUCCESS | | middleware | SUCCESS | | mini | SUCCESS | | minimal-api | SUCCESS | | minimal-hosting | SUCCESS | | mvc | SUCCESS | | net10 | SUCCESS | | net9 | SUCCESS | | open-telemetry | SUCCESS | | orchard-core | SUCCESS | | orleans | SUCCESS | | output-cache-middleware | SUCCESS | | path-string | SUCCESS | | polly | SUCCESS | | problem-details-middleware | SUCCESS | | razor-pages | SUCCESS | | request-timeouts-middleware | SUCCESS | | request | SUCCESS | | response | SUCCESS | | rewrite | SUCCESS | | security | SUCCESS | | syndications | SUCCESS | | uri-helper | SUCCESS | | utils | SUCCESS | | web-sockets | SUCCESS | | web-utilities | SUCCESS | ## .NET Version Distribution All samples target **.NET 10.0 (net10.0)** as specified in the root `global.json`: ```json { "sdk": { "version": "10.0.0", "rollForward": "major", "allowPrerelease": true } } ``` ### Special Cases with Custom SDK Versions Some categories have their own `global.json` to override the SDK version: #### blazor-wasm ```json { "sdk": { "version": "8.0.100", "rollForward": "major" } }``` #### datastar ```json { "sdk": { "version": "10.0.100", "rollForward": "major" } }``` #### elsa ```json { "sdk": { "version": "8.0.100", "rollForward": "major" } }``` #### net10 ```json { "sdk": { "version": "10.0.100", "rollForward": "major" } }``` #### net9 ```json { "sdk": { "version": "9.0.100", "rollForward": "major" } }``` #### orleans ```json { "sdk": { "version": "10.0.0-rc.1.25451.107", "rollForward": "major", "allowPrerelease": true } }``` ## Projects Structure ### application-environment (1 samples) ### authentication (5 samples) - authentication-1 - authentication-2 - authentication-3 - authentication-4 - authentication-5 ### blazor-ss (16 samples) - ChatR - ComponentEvents - ComponentEvents-2 - DependencyInjection - HelloWorld - JsIntegration - Layout - Localization - Localization-2 - Localization-3 - Localization-4 - RenderTreeBuilder - RssReader - RssReader-2 - StartingVariation - WallOfCounters ### blazor-ssr (25 samples) - **RazorComponentEight** (multi-project) - RazorComponentEleven - RazorComponentFive - RazorComponentFour - RazorComponentNine - RazorComponentOne - RazorComponentSeven - RazorComponentSix - **RazorComponentTen** (multi-project) - **RazorComponentThirteen** (multi-project) - RazorComponentThree - RazorComponentTwelve - RazorComponentTwo - RazorFormHandlingFive - RazorFormHandlingFour - RazorFormHandlingOne - RazorFormHandlingThree - RazorFormHandlingTwo - RazorMixMatchFour - RazorMixMatchOne - RazorMixMatchThree - RazorMixMatchTwo ### blazor-wasm (36 samples) - Component - ComponentEight - ComponentEighteen - ComponentEleven - ComponentFifteen - ComponentFive - ComponentFour - ComponentFourteen - ComponentNine - ComponentNineteen - ComponentSeven - ComponentSeventeen - ComponentSix - ComponentSixteen - ComponentTen - ComponentThirteen - ComponentThree - ComponentTwelve - **ComponentTwenty** (multi-project) - ComponentTwentyFive - ComponentTwentyFour - **ComponentTwentyOne** (multi-project) - ComponentTwentySeven - ComponentTwentySix - ComponentTwentyThree - **ComponentTwentyTwo** (multi-project) - ComponentTwo - DataBinding - DataBindingTwo - HelloWorld - QuickGridOne - RadioButton - RenderFragment ### caching (5 samples) - caching-1 - caching-2 - caching-3 - caching-4 - redis-cache ### configurations (10 samples) - configuration-1 - configuration-IOption - configuration-IOption-array - configuration-bind-option - configuration-environment-variables - configuration-ini - configuration-ini-options - configuration-options - configuration-xml - configuration-xml-options ### connection-info (1 samples) ### corewcf (2 samples) - **corewcf-1** (multi-project) ### datastar (21 samples) - backend-patch-signals - backend-patch-signals-2 - backend-patch-signals-3 - backend-patch-signals-4 - data-attr - data-bind - data-class - data-computed - data-effect - data-ignore - data-indicator - data-on-click - data-on-custom-event - data-on-interval - data-on-signal-patch - data-on-signal-patch-filter - data-patch-elements-outer - data-ref - data-show - data-style - hello-world ### dependency-injection (6 samples) - dependency-injection-1 - dependency-injection-2 - dependency-injection-3 - dependency-injection-4 - keyed-service - keyed-service-2 ### device-detection (1 samples) ### diagnostics (5 samples) - diagnostics-1 - diagnostics-2 - diagnostics-3 - diagnostics-4 - diagnostics-5 ### elsa (17 samples) - composite-activity - for-activity - foreach-activity - fork-activity - fork-activity-2 - if-activity - readline-activity - sequence-activity - setname-activity - setvariable-activity - while-activity - workflow - workflow-2 - workflow-3 - workflow-4 - workflow-5 - writeline-activity ### endpoint-routing (37 samples) - endpoint-routing - endpoint-routing-2 - endpoint-routing-3 - endpoint-routing-4 - endpoint-routing-6 - new-routing - new-routing-10 - new-routing-11 - new-routing-12 - new-routing-13 - new-routing-14 - new-routing-15 - new-routing-16 - new-routing-17 - new-routing-18 - new-routing-19 - new-routing-2 - new-routing-20 - new-routing-21 - new-routing-22 - new-routing-23 - new-routing-24 - new-routing-25 - new-routing-26 - new-routing-27 - new-routing-28 - new-routing-29 - new-routing-3 - new-routing-30 - new-routing-31 - new-routing-4 - new-routing-5 - new-routing-6 - new-routing-7 - new-routing-8 - new-routing-9 - parameter-transformer ### exception-handler-middleware (2 samples) - iexception-handler - iexception-handler-2 ### features (11 samples) - features-connection - features-http-body-response - features-max-request-body-size - features-request-culture - features-server-addresses - features-server-addresses-2 - features-server-custom - features-server-custom-override - features-server-request - features-session - features-session-redis-2 ### file-provider (10 samples) - file-provider-custom - file-provider-physical - serve-static-files-1 - serve-static-files-2 - serve-static-files-3 - serve-static-files-4 - serve-static-files-5 - serve-static-files-6 - serve-static-files-7 - serve-static-files-8 ### generic-host (10 samples) - generic-host-1 - generic-host-2 - generic-host-3 - generic-host-4 - generic-host-5 - generic-host-configure-app - generic-host-configure-host - generic-host-configure-logging - generic-host-environment - generic-host-ihostapplicationlifetime ### grpc (29 samples) - **grpc-10** (multi-project) - **grpc-11** (multi-project) - **grpc-12** (multi-project) - grpc-13 - grpc-14 - grpc-15 - grpc-16 - grpc-17 - **grpc-2** (multi-project) - **grpc-3** (multi-project) - **grpc-4** (multi-project) - **grpc-5** (multi-project) - **grpc-6** (multi-project) - **grpc-7** (multi-project) - **grpc-8** (multi-project) - **grpc-9** (multi-project) - **grpc** (multi-project) ### health-check (6 samples) - health-check-1 - health-check-2 - health-check-3 - health-check-4 - health-check-5 - health-check-6 ### htmx (40 samples) - all-verbs - boost - form - form-2 - header-hx-refresh - header-hx-replace-url - header-hx-reselect - header-hx-retarget - header-hx-trigger - header-hx-trigger-2 - header-hx-trigger-3 - header-hx-trigger-4 - htmx-after-on-load - htmx-config-request - htmx-response-error - hx-confirm - hx-headers - hx-include - hx-indicator - hx-on - hx-on-2 - hx-preserve - hx-prompt - hx-replace-url - hx-replace-url-2 - hx-sync-queue - hx-vals - modal-bootstrap - push-url - query-string - select - select-2 - select-oob - swap - swap-2 - target - trigger-every - trigger-load - trigger-load-2 - trigger-once ### httpclientfactory (4 samples) - httpclientfactory-1 - httpclientfactory-2 - httpclientfactory-3 - httpclientfactory-4 ### hydro (8 samples) - component-1 - component-2 - component-3 - cookies - event-child-parent - event-global - event-global-subject - hello-world ### i-application-lifetime (1 samples) ### ihosted-service (2 samples) - ihosted-service-1 - ihosted-service-2 ### image-sharp (1 samples) ### json (26 samples) - json - json-10 - json-11 - json-12 - json-13 - json-14 - json-15 - json-16 - json-17 - json-18 - json-19 - json-2 - json-20 - json-21 - json-22 - json-23 - json-24 - json-25 - json-26 - json-3 - json-4 - json-5 - json-6 - json-7 - json-8 - json-9 ### localization (6 samples) - localization-1 - localization-2 - localization-3 - localization-4 - localization-5 - localization-6 ### logging (6 samples) - logging-1 - logging-2 - logging-3 - logging-4 - logging-5 - logging-Loki ### mailkit (2 samples) - mailkit-1 - mailkit-2 ### map-short-circuit (1 samples) ### markdown-server-middleware (1 samples) ### markdown-server (1 samples) ### middleware (14 samples) - middleware-0 - middleware-1 - middleware-10 - middleware-11 - middleware-12 - middleware-13 - middleware-2 - middleware-3 - middleware-4 - middleware-5 - middleware-6 - middleware-7 - middleware-8 - middleware-9 ### mini (2 samples) - **minimal-api-pokedex** (multi-project) - pdf-viewer ### minimal-api (40 samples) - anti-forgery-1 - anti-forgery-2 - **anti-forgery-3** (multi-project) - endpoint-filter-1 - endpoint-filter-2 - endpoint-filter-3 - endpoint-filter-4 - hello-world - iform-file - iform-file-collection - link-generator-path-by-route-name - map - map-2 - map-3 - map-4 - map-5 - map-6 - map-group-1 - map-group-2 - map-group-3 - map-methods - map-post - map-post-2 - minimal-api-form-model-binding - open-api-1 - open-api-2 - parameter-binding-custom-bind-async - parameter-binding-custom-try-parse - parameter-binding-header-explicit - parameter-binding-json-explicit - parameter-binding-json-implicit - parameter-binding-query-string-explicit - parameter-binding-query-string-implicit - parameter-binding-route-explicit - parameter-binding-route-implicit - parameter-binding-special-types - route-constraints-decimal - route-constraints-int - typed-results-1 ### minimal-hosting (25 samples) - empty-builder - slim-builder - web-application-builder-change-default-web-root-folder - web-application-builder-change-environment - web-application-builder-logging-set-minimum-level - web-application-builder-mvc - web-application-builder-razor-pages - web-application-configuration - web-application-configuration-json - web-application-lifetime-events - web-application-logging - web-application-middleware - web-application-middleware-pipeline - web-application-middleware-pipeline-2 - web-application-options-change-content-root-path - web-application-options-set-environment - web-application-server-aspnetcore-urls - web-application-server-default-urls - web-application-server-listen-all - web-application-server-multiple-urls-ports - web-application-server-port-env-variable - web-application-server-specific-url-port - web-application-use-file-server - web-application-use-web-sockets - web-application-welcome-page ### mvc (57 samples) - api - api-problem-details - api-problem-details-2 - api-versioning - hello-world - jwt - **localization** (multi-project) - model-binding-from-query - model-binding-from-route - mvc-infer-dependency-from-action - mvc-output-xml - newtonsoft-json - nswag - nswag-2 - output-formatter-syndication - **razor-class-library** (multi-project) - result-filestream - result-json - result-physicalfile - **routing** (multi-project) - **tag-helper** (multi-project) - **view-component** (multi-project) ### net10 (11 samples) - open-api-10 - open-api-11 - open-api-8 - open-api-9 - redirect-http-result-is-local-url - sse-2 - sse-3 - sse-4 - validation-1 - validation-2 - validation-3 ### net9 (3 samples) - open-api-3 - open-api-4 - typed-results-2 ### open-telemetry (4 samples) - open-telemetry-1 - open-telemetry-2 - open-telemetry-3 - open-telemetry-4 ### orchard-core (10 samples) - decoupled-cms - **multi-tenant** (multi-project) - **routing-2** (multi-project) - **routing** (multi-project) - **static-files** (multi-project) ### orleans (13 samples) - orleans-1 - orleans-2 - orleans-3 - orleans-4 - orleans-5 - reminder - rss-reader - rss-reader-2 - rss-reader-3 - rss-reader-4 - rss-reader-5 - rss-reader-6 - timer ### output-cache-middleware (8 samples) - output-cache-1 - output-cache-2 - output-cache-3 - output-cache-4 - output-cache-5 - output-cache-6 - output-cache-7 - output-cache-8 ### password-hasher (1 samples) ### path-string (1 samples) - path-string-1 ### polly (1 samples) - rate-limiter-http-client ### problem-details-middleware (3 samples) - problem-details - problem-details-2 - problem-details-3 ### razor-pages (10 samples) - custom-html-generator - handler - hello-world - razor-pages-basic - razor-pages-mvc - **razor** (multi-project) - routing - routing-2 - temp-data ### razor-slices (1 samples) - hello-world ### request-timeouts-middleware (6 samples) - request-timeout - request-timeout-2 - request-timeout-3 - request-timeout-4 - request-timeout-5 - request-timeout-6 ### request (16 samples) - anti-forgery - cookies-1 - cookies-2 - **cookies-3** (multi-project) - form-upload-file - form-url-encoded-content - form-values - query-string-1 - query-string-2 - query-string-3 - query-string-create - request-headers - request-headers-names - request-headers-typed - request-verb ### response (3 samples) - compression-response - response-header - trailing-headers ### rewrite (6 samples) - rewrite-1 - rewrite-2 - rewrite-3 - rewrite-4 - rewrite-5 - rewrite-6 ### route-debugger-web (2 samples) - RouteDebugger - route-debugger-web ### security (7 samples) - **authentication-with-identity** (multi-project) - **dataprotection** (multi-project) ### sfa (2 samples) - remaining-time - wiki ### signalr (2 samples) - **signalr-1** (multi-project) ### sse (1 samples) ### syndications (3 samples) - newsserver-mvc - syndication-1 - syndication-2 ### testing (2 samples) - **nunit-1** (multi-project) ### unpoly (5 samples) - up-flashes - up-hungry - up-poll - up-target - up-target-2 ### uri-helper (5 samples) - uri-helper-build-absolute - uri-helper-from-absolute - uri-helper-get-display-url - uri-helper-get-encoded-path-and-query - uri-helper-get-encoded-url ### utils (3 samples) - http-status-codes - media-type-names - media-type-names-2 ### version (1 samples) ### web-sockets (6 samples) - web-sockets-1 - web-sockets-2 - web-sockets-3 - web-sockets-4 - web-sockets-5 - web-sockets-6 ### web-utilities (3 samples) - web-utilities-query-helpers - web-utilities-query-helpers-2 - web-utilities-reason-phrases ### windows-service (1 samples) - windows-service-1 ### xml (1 samples) - xml-validation ### yarp (3 samples) - **basic-demo** (multi-project) ## Exercises The `exercises/` directory contains learning exercises: ### pathway-1 Contains markdown files with exercise instructions: - README.md - exercise-1.md - exercise-2.md - exercise-3.md - exercise-4.md - exercise-5.md - exercise-6.md - exercise-7.md - exercise-8.md - exercise-9.md ================================================ FILE: build-log-after-prune.txt ================================================ D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>REM Removed obsolete/invalid entries: anonymous-id, basic\*, bedrock\echo, and non-existent blazor folder (was causing recursive calls). D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.31 D:\GitHub\practical-aspnetcore\projects>cd blazor-ss\ D:\GitHub\practical-aspnetcore\projects\blazor-ss>call build.bat D:\GitHub\practical-aspnetcore\projects\blazor-ss>dotnet build ChatR Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\blazor-ss\ChatR\ChatR.csproj (in 3.76 sec). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\blazor-ss\ChatR\ChatR.csproj] D:\GitHub\practical-aspnetcore\projects\blazor-ss\ChatR\Components\Pages\Index.razor(82,9): warning CS4014: Because this call is not awaited, execution of the current method continues before the call is completed. Consider applying the 'await' operator to the result of the call. [D:\GitHub\practical-aspnetcore\projects\blazor-ss\ChatR\ChatR.csproj] ChatR -> D:\GitHub\practical-aspnetcore\projects\blazor-ss\ChatR\bin\Debug\net10.0\ChatR.dll Build succeeded. D:\GitHub\practical-aspnetcore\projects\blazor-ss\ChatR\Components\Pages\Index.razor(82,9): warning CS4014: Because this call is not awaited, execution of the current method continues before the call is completed. Consider applying the 'await' operator to the result of the call. [D:\GitHub\practical-aspnetcore\projects\blazor-ss\ChatR\ChatR.csproj] 1 Warning(s) 0 Error(s) Time Elapsed 00:00:09.10 D:\GitHub\practical-aspnetcore\projects\blazor-ss>dotnet build ComponentEvents Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\blazor-ss\ComponentEvents\ComponentEvents.csproj (in 210 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\blazor-ss\ComponentEvents\ComponentEvents.csproj] ComponentEvents -> D:\GitHub\practical-aspnetcore\projects\blazor-ss\ComponentEvents\bin\Debug\net10.0\ComponentEvents.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.27 D:\GitHub\practical-aspnetcore\projects\blazor-ss>dotnet build ComponentEvents-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\blazor-ss\ComponentEvents-2\ComponentEvents.csproj (in 1.9 sec). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\blazor-ss\ComponentEvents-2\ComponentEvents.csproj] ComponentEvents -> D:\GitHub\practical-aspnetcore\projects\blazor-ss\ComponentEvents-2\bin\Debug\net10.0\ComponentEvents.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:03.80 D:\GitHub\practical-aspnetcore\projects\blazor-ss>dotnet build DependencyInjection Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\blazor-ss\DependencyInjection\DependencyInjection.csproj (in 291 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\blazor-ss\DependencyInjection\DependencyInjection.csproj] DependencyInjection -> D:\GitHub\practical-aspnetcore\projects\blazor-ss\DependencyInjection\bin\Debug\net10.0\DependencyInjection.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.38 D:\GitHub\practical-aspnetcore\projects\blazor-ss>dotnet build HelloWorld Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\blazor-ss\HelloWorld\HelloWorld.csproj (in 179 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\blazor-ss\HelloWorld\HelloWorld.csproj] HelloWorld -> D:\GitHub\practical-aspnetcore\projects\blazor-ss\HelloWorld\bin\Debug\net10.0\HelloWorld.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.94 D:\GitHub\practical-aspnetcore\projects\blazor-ss>dotnet build JsIntegration Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\blazor-ss\JsIntegration\JsIntegration.csproj (in 176 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\blazor-ss\JsIntegration\JsIntegration.csproj] JsIntegration -> D:\GitHub\practical-aspnetcore\projects\blazor-ss\JsIntegration\bin\Debug\net10.0\JsIntegration.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.81 D:\GitHub\practical-aspnetcore\projects\blazor-ss>dotnet build Layout Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\blazor-ss\Layout\Layout.csproj (in 248 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\blazor-ss\Layout\Layout.csproj] Layout -> D:\GitHub\practical-aspnetcore\projects\blazor-ss\Layout\bin\Debug\net10.0\Layout.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.08 D:\GitHub\practical-aspnetcore\projects\blazor-ss>dotnet build Localization Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\blazor-ss\Localization\Localization.csproj (in 172 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\blazor-ss\Localization\Localization.csproj] Localization -> D:\GitHub\practical-aspnetcore\projects\blazor-ss\Localization\bin\Debug\net10.0\Localization.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.02 D:\GitHub\practical-aspnetcore\projects\blazor-ss>dotnet build Localization-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\blazor-ss\Localization-2\Localization.csproj (in 1.86 sec). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\blazor-ss\Localization-2\Localization.csproj] Localization -> D:\GitHub\practical-aspnetcore\projects\blazor-ss\Localization-2\bin\Debug\net10.0\Localization.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:03.69 D:\GitHub\practical-aspnetcore\projects\blazor-ss>dotnet build Localization-3 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\blazor-ss\Localization-3\Localization.csproj (in 193 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\blazor-ss\Localization-3\Localization.csproj] Localization -> D:\GitHub\practical-aspnetcore\projects\blazor-ss\Localization-3\bin\Debug\net10.0\Localization.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.89 D:\GitHub\practical-aspnetcore\projects\blazor-ss>dotnet build Localization-4 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\blazor-ss\Localization-4\Localization.csproj (in 198 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\blazor-ss\Localization-4\Localization.csproj] Localization -> D:\GitHub\practical-aspnetcore\projects\blazor-ss\Localization-4\bin\Debug\net10.0\Localization.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.90 D:\GitHub\practical-aspnetcore\projects\blazor-ss>dotnet build RenderTreeBuilder Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\blazor-ss\RenderTreeBuilder\RenderTreeBuilder.csproj (in 56 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\blazor-ss\RenderTreeBuilder\RenderTreeBuilder.csproj] RenderTreeBuilder -> D:\GitHub\practical-aspnetcore\projects\blazor-ss\RenderTreeBuilder\bin\Debug\net10.0\RenderTreeBuilder.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.72 D:\GitHub\practical-aspnetcore\projects\blazor-ss>dotnet build RssReader Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\blazor-ss\RssReader\RssReader.csproj (in 1.19 sec). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\blazor-ss\RssReader\RssReader.csproj] RssReader -> D:\GitHub\practical-aspnetcore\projects\blazor-ss\RssReader\bin\Debug\net10.0\RssReader.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:03.01 D:\GitHub\practical-aspnetcore\projects\blazor-ss>dotnet build RssReader-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\blazor-ss\RssReader-2\RssReader.csproj (in 215 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\blazor-ss\RssReader-2\RssReader.csproj] RssReader -> D:\GitHub\practical-aspnetcore\projects\blazor-ss\RssReader-2\bin\Debug\net10.0\RssReader.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.94 D:\GitHub\practical-aspnetcore\projects\blazor-ss>dotnet build StartingVariation Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\blazor-ss\StartingVariation\StartingVariation.csproj (in 185 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\blazor-ss\StartingVariation\StartingVariation.csproj] StartingVariation -> D:\GitHub\practical-aspnetcore\projects\blazor-ss\StartingVariation\bin\Debug\net10.0\StartingVariation.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.91 D:\GitHub\practical-aspnetcore\projects\blazor-ss>dotnet build WallOfCounters Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\blazor-ss\WallOfCounters\WallOfCounters.csproj (in 178 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\blazor-ss\WallOfCounters\WallOfCounters.csproj] WallOfCounters -> D:\GitHub\practical-aspnetcore\projects\blazor-ss\WallOfCounters\bin\Debug\net10.0\WallOfCounters.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.95 D:\GitHub\practical-aspnetcore\projects\blazor-ss>cd .. D:\GitHub\practical-aspnetcore\projects>dotnet build caching\caching-1 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\caching\caching-1\caching.csproj (in 52 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\caching\caching-1\caching.csproj] caching -> D:\GitHub\practical-aspnetcore\projects\caching\caching-1\bin\Debug\net10.0\caching.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.61 D:\GitHub\practical-aspnetcore\projects>dotnet build caching\caching-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\caching\caching-2\caching-2.csproj (in 72 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\caching\caching-2\caching-2.csproj] caching-2 -> D:\GitHub\practical-aspnetcore\projects\caching\caching-2\bin\Debug\net10.0\caching-2.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.58 D:\GitHub\practical-aspnetcore\projects>dotnet build caching\caching-3 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\caching\caching-3\caching-3.csproj (in 62 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\caching\caching-3\caching-3.csproj] caching-3 -> D:\GitHub\practical-aspnetcore\projects\caching\caching-3\bin\Debug\net10.0\caching-3.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.70 D:\GitHub\practical-aspnetcore\projects>dotnet build caching\caching-4 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\caching\caching-4\caching-4.csproj (in 56 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\caching\caching-4\caching-4.csproj] caching-4 -> D:\GitHub\practical-aspnetcore\projects\caching\caching-4\bin\Debug\net10.0\caching-4.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.64 D:\GitHub\practical-aspnetcore\projects>dotnet build caching\redis-cache Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\caching\redis-cache\redis-cache.csproj (in 2.36 sec). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\caching\redis-cache\redis-cache.csproj] redis-cache -> D:\GitHub\practical-aspnetcore\projects\caching\redis-cache\bin\Debug\net10.0\redis-cache.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:03.89 D:\GitHub\practical-aspnetcore\projects>dotnet build configurations\configuration-1 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\configurations\configuration-1\configuration.csproj (in 67 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\configurations\configuration-1\configuration.csproj] configuration -> D:\GitHub\practical-aspnetcore\projects\configurations\configuration-1\bin\Debug\net10.0\configuration.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.62 D:\GitHub\practical-aspnetcore\projects>dotnet build configurations\configuration-environment-variables Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\configurations\configuration-environment-variables\configuration-environment-variables.csproj (in 56 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\configurations\configuration-environment-variables\configuration-environment-variables.csproj] configuration-environment-variables -> D:\GitHub\practical-aspnetcore\projects\configurations\configuration-environment-variables\bin\Debug\net10.0\configuration-environment-variables.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.64 D:\GitHub\practical-aspnetcore\projects>dotnet build configurations\configuration-ini Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\configurations\configuration-ini\configuration-ini.csproj (in 68 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\configurations\configuration-ini\configuration-ini.csproj] configuration-ini -> D:\GitHub\practical-aspnetcore\projects\configurations\configuration-ini\bin\Debug\net10.0\configuration-ini.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.60 D:\GitHub\practical-aspnetcore\projects>dotnet build configurations\configuration-ini-options Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\configurations\configuration-ini-options\configuration-ini-options.csproj (in 65 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\configurations\configuration-ini-options\configuration-ini-options.csproj] configuration-ini-options -> D:\GitHub\practical-aspnetcore\projects\configurations\configuration-ini-options\bin\Debug\net10.0\configuration-ini-options.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.63 D:\GitHub\practical-aspnetcore\projects>dotnet build configurations\configuration-options Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\configurations\configuration-options\configuration-options.csproj (in 62 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\configurations\configuration-options\configuration-options.csproj] configuration-options -> D:\GitHub\practical-aspnetcore\projects\configurations\configuration-options\bin\Debug\net10.0\configuration-options.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.56 D:\GitHub\practical-aspnetcore\projects>dotnet build configurations\configuration-xml Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\configurations\configuration-xml\configuration-xml.csproj (in 66 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\configurations\configuration-xml\configuration-xml.csproj] configuration-xml -> D:\GitHub\practical-aspnetcore\projects\configurations\configuration-xml\bin\Debug\net10.0\configuration-xml.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.61 D:\GitHub\practical-aspnetcore\projects>dotnet build configurations\configuration-xml-options Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\configurations\configuration-xml-options\configuration-xml-options.csproj (in 52 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\configurations\configuration-xml-options\configuration-xml-options.csproj] configuration-xml-options -> D:\GitHub\practical-aspnetcore\projects\configurations\configuration-xml-options\bin\Debug\net10.0\configuration-xml-options.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.62 D:\GitHub\practical-aspnetcore\projects>dotnet build connection-info Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\connection-info\connection-info.csproj (in 53 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\connection-info\connection-info.csproj] connection-info -> D:\GitHub\practical-aspnetcore\projects\connection-info\bin\Debug\net10.0\connection-info.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.61 D:\GitHub\practical-aspnetcore\projects>dotnet build dependency-injection\dependency-injection-1 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\dependency-injection\dependency-injection-1\dependency-injection-1.csproj (in 55 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\dependency-injection\dependency-injection-1\dependency-injection-1.csproj] dependency-injection-1 -> D:\GitHub\practical-aspnetcore\projects\dependency-injection\dependency-injection-1\bin\Debug\net10.0\dependency-injection-1.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.51 D:\GitHub\practical-aspnetcore\projects>dotnet build dependency-injection\dependency-injection-3 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\dependency-injection\dependency-injection-3\dependency-injection-3.csproj (in 66 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\dependency-injection\dependency-injection-3\dependency-injection-3.csproj] dependency-injection-3 -> D:\GitHub\practical-aspnetcore\projects\dependency-injection\dependency-injection-3\bin\Debug\net10.0\dependency-injection-3.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.57 D:\GitHub\practical-aspnetcore\projects>dotnet build device-detection Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\device-detection\device-detection.csproj (in 2.83 sec). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\device-detection\device-detection.csproj] device-detection -> D:\GitHub\practical-aspnetcore\projects\device-detection\bin\Debug\net10.0\device-detection.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:04.29 D:\GitHub\practical-aspnetcore\projects>dotnet build diagnostics\diagnostics-1 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\diagnostics\diagnostics-1\diagnostics.csproj (in 53 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\diagnostics\diagnostics-1\diagnostics.csproj] diagnostics -> D:\GitHub\practical-aspnetcore\projects\diagnostics\diagnostics-1\bin\Debug\net10.0\diagnostics.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.55 D:\GitHub\practical-aspnetcore\projects>dotnet build diagnostics\diagnostics-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\diagnostics\diagnostics-2\diagnostics-2.csproj (in 50 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\diagnostics\diagnostics-2\diagnostics-2.csproj] diagnostics-2 -> D:\GitHub\practical-aspnetcore\projects\diagnostics\diagnostics-2\bin\Debug\net10.0\diagnostics-2.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.56 D:\GitHub\practical-aspnetcore\projects>dotnet build diagnostics\diagnostics-3 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\diagnostics\diagnostics-3\diagnostics-3.csproj (in 55 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\diagnostics\diagnostics-3\diagnostics-3.csproj] diagnostics-3 -> D:\GitHub\practical-aspnetcore\projects\diagnostics\diagnostics-3\bin\Debug\net10.0\diagnostics-3.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.70 D:\GitHub\practical-aspnetcore\projects>dotnet build diagnostics\diagnostics-4 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\diagnostics\diagnostics-4\diagnostics-4.csproj (in 68 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\diagnostics\diagnostics-4\diagnostics-4.csproj] diagnostics-4 -> D:\GitHub\practical-aspnetcore\projects\diagnostics\diagnostics-4\bin\Debug\net10.0\diagnostics-4.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.66 D:\GitHub\practical-aspnetcore\projects>dotnet build diagnostics\diagnostics-5 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\diagnostics\diagnostics-5\diagnostics-5.csproj (in 64 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\diagnostics\diagnostics-5\diagnostics-5.csproj] diagnostics-5 -> D:\GitHub\practical-aspnetcore\projects\diagnostics\diagnostics-5\bin\Debug\net10.0\diagnostics-5.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.71 D:\GitHub\practical-aspnetcore\projects>dotnet build diagnostics\diagnostics-6 MSBUILD : error MSB1009: Project file does not exist. Switch: diagnostics\diagnostics-6 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\endpoint-routing Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\endpoint-routing\endpoint-routing.csproj (in 67 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\endpoint-routing\endpoint-routing.csproj] endpoint-routing -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\endpoint-routing\bin\Debug\net10.0\endpoint-routing.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.87 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\endpoint-routing-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\endpoint-routing-2\endpoint-routing-2.csproj (in 66 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\endpoint-routing-2\endpoint-routing-2.csproj] endpoint-routing-2 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\endpoint-routing-2\bin\Debug\net10.0\endpoint-routing-2.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.76 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\endpoint-routing-3 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\endpoint-routing-3\endpoint-routing-3.csproj (in 65 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\endpoint-routing-3\endpoint-routing-3.csproj] endpoint-routing-3 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\endpoint-routing-3\bin\Debug\net10.0\endpoint-routing-3.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.69 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\endpoint-routing-4 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\endpoint-routing-4\endpoint-routing-4.csproj (in 59 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\endpoint-routing-4\endpoint-routing-4.csproj] endpoint-routing-4 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\endpoint-routing-4\bin\Debug\net10.0\endpoint-routing-4.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.71 D:\GitHub\practical-aspnetcore\projects>REM dotnet build endpoint-routing\endpoint-routing-5 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\endpoint-routing-6 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\endpoint-routing-6\endpoint-routing-6.csproj (in 65 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\endpoint-routing-6\endpoint-routing-6.csproj] endpoint-routing-6 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\endpoint-routing-6\bin\Debug\net10.0\endpoint-routing-6.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.68 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing\new-routing.csproj (in 59 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing\new-routing.csproj] new-routing -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing\bin\Debug\net10.0\new-routing.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.54 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-10 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-10\new-routing-10.csproj (in 61 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-10\new-routing-10.csproj] new-routing-10 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-10\bin\Debug\net10.0\new-routing-10.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.60 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-11 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-11\new-routing-11.csproj (in 60 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-11\new-routing-11.csproj] new-routing-11 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-11\bin\Debug\net10.0\new-routing-11.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.73 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-12 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-12\new-routing-12.csproj (in 64 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-12\new-routing-12.csproj] new-routing-12 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-12\bin\Debug\net10.0\new-routing-12.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.71 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-13 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-13\new-routing-13.csproj (in 66 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-13\new-routing-13.csproj] new-routing-13 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-13\bin\Debug\net10.0\new-routing-13.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.61 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-14 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-14\new-routing-14.csproj (in 54 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-14\new-routing-14.csproj] new-routing-14 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-14\bin\Debug\net10.0\new-routing-14.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.57 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-15 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-15\new-routing-15.csproj (in 64 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-15\new-routing-15.csproj] new-routing-15 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-15\bin\Debug\net10.0\new-routing-15.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.61 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-16 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-16\new-routing-16.csproj (in 60 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-16\new-routing-16.csproj] new-routing-16 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-16\bin\Debug\net10.0\new-routing-16.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.70 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-17 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-17\new-routing-17.csproj (in 57 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-17\new-routing-17.csproj] new-routing-17 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-17\bin\Debug\net10.0\new-routing-17.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.63 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-18 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-18\new-routing-18.csproj (in 61 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-18\new-routing-18.csproj] new-routing-18 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-18\bin\Debug\net10.0\new-routing-18.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.71 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-19 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-19\new-routing-19.csproj (in 59 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-19\new-routing-19.csproj] new-routing-19 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-19\bin\Debug\net10.0\new-routing-19.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.66 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-2\new-routing-2.csproj (in 64 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-2\new-routing-2.csproj] new-routing-2 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-2\bin\Debug\net10.0\new-routing-2.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.81 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-20 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-20\new-routing-20.csproj (in 68 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-20\new-routing-20.csproj] new-routing-20 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-20\bin\Debug\net10.0\new-routing-20.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.82 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-21 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-21\new-routing-21.csproj (in 63 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-21\new-routing-21.csproj] new-routing-21 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-21\bin\Debug\net10.0\new-routing-21.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.62 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-22 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-22\new-routing-22.csproj (in 75 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-22\new-routing-22.csproj] new-routing-22 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-22\bin\Debug\net10.0\new-routing-22.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.77 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-23 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-23\new-routing-23.csproj (in 65 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-23\new-routing-23.csproj] new-routing-23 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-23\bin\Debug\net10.0\new-routing-23.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.85 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-24 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-24\new-routing-24.csproj (in 65 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-24\new-routing-24.csproj] new-routing-24 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-24\bin\Debug\net10.0\new-routing-24.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.87 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-25 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-25\new-routing-25.csproj (in 62 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-25\new-routing-25.csproj] new-routing-25 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-25\bin\Debug\net10.0\new-routing-25.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.65 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-26 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-26\new-routing-26.csproj (in 71 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-26\new-routing-26.csproj] new-routing-26 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-26\bin\Debug\net10.0\new-routing-26.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.77 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-27 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-27\new-routing-27.csproj (in 62 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-27\new-routing-27.csproj] new-routing-27 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-27\bin\Debug\net10.0\new-routing-27.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.73 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-28 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-28\new-routing-28.csproj (in 68 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-28\new-routing-28.csproj] new-routing-28 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-28\bin\Debug\net10.0\new-routing-28.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.78 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-29 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-29\new-routing-29.csproj (in 61 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-29\new-routing-29.csproj] new-routing-29 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-29\bin\Debug\net10.0\new-routing-29.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.78 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-3 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-3\new-routing-3.csproj (in 69 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-3\new-routing-3.csproj] new-routing-3 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-3\bin\Debug\net10.0\new-routing-3.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.69 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-30 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-30\new-routing-30.csproj (in 64 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-30\new-routing-30.csproj] new-routing-30 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-30\bin\Debug\net10.0\new-routing-29.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.72 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-4 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-4\new-routing-4.csproj (in 60 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-4\new-routing-4.csproj] new-routing-4 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-4\bin\Debug\net10.0\new-routing-4.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.67 D:\GitHub\practical-aspnetcore\projects># Removed due to API changes '#' is not recognized as an internal or external command, operable program or batch file. D:\GitHub\practical-aspnetcore\projects># dotnet build endpoint-routing\new-routing-5 '#' is not recognized as an internal or external command, operable program or batch file. D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-6 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-6\new-routing-6.csproj (in 64 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-6\new-routing-6.csproj] new-routing-6 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-6\bin\Debug\net10.0\new-routing-6.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.81 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-7 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-7\new-routing-7.csproj (in 69 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-7\new-routing-7.csproj] new-routing-7 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-7\bin\Debug\net10.0\new-routing-7.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.87 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-8 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-8\new-routing-8.csproj (in 66 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-8\new-routing-8.csproj] new-routing-8 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-8\bin\Debug\net10.0\new-routing-8.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.77 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\new-routing-9 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-9\new-routing-9.csproj (in 75 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-9\new-routing-9.csproj] new-routing-9 -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\new-routing-9\bin\Debug\net10.0\new-routing-9.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.86 D:\GitHub\practical-aspnetcore\projects>dotnet build endpoint-routing\parameter-transformer Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\endpoint-routing\parameter-transformer\parameter-transformer.csproj (in 55 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\endpoint-routing\parameter-transformer\parameter-transformer.csproj] parameter-transformer -> D:\GitHub\practical-aspnetcore\projects\endpoint-routing\parameter-transformer\bin\Debug\net10.0\parameter-transformer.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.73 D:\GitHub\practical-aspnetcore\projects>dotnet build features\features-connection Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\features\features-connection\features-connection.csproj (in 55 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\features\features-connection\features-connection.csproj] features-connection -> D:\GitHub\practical-aspnetcore\projects\features\features-connection\bin\Debug\net10.0\features-connection.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.60 D:\GitHub\practical-aspnetcore\projects>dotnet build features\features-http-body-response Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\features\features-http-body-response\features-http-body-response.csproj (in 63 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\features\features-http-body-response\features-http-body-response.csproj] features-http-body-response -> D:\GitHub\practical-aspnetcore\projects\features\features-http-body-response\bin\Debug\net10.0\features-http-body-response.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.57 D:\GitHub\practical-aspnetcore\projects>dotnet build features\features-max-request-body-size Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\features\features-max-request-body-size\features-max-request-body-size.csproj (in 68 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\features\features-max-request-body-size\features-max-request-body-size.csproj] features-max-request-body-size -> D:\GitHub\practical-aspnetcore\projects\features\features-max-request-body-size\bin\Debug\net10.0\features-max-request-body-size.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.62 D:\GitHub\practical-aspnetcore\projects>dotnet build features\features-request-culture Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\features\features-request-culture\features-request-culture.csproj (in 59 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\features\features-request-culture\features-request-culture.csproj] features-request-culture -> D:\GitHub\practical-aspnetcore\projects\features\features-request-culture\bin\Debug\net10.0\features-request-culture.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.63 D:\GitHub\practical-aspnetcore\projects>dotnet build features\features-server-addresses Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\features\features-server-addresses\features-server-addresses.csproj (in 71 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\features\features-server-addresses\features-server-addresses.csproj] features-server-addresses -> D:\GitHub\practical-aspnetcore\projects\features\features-server-addresses\bin\Debug\net10.0\features-server-addresses.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.62 D:\GitHub\practical-aspnetcore\projects>dotnet build features\features-server-addresses-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\features\features-server-addresses-2\features-server-addresses-2.csproj (in 61 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\features\features-server-addresses-2\features-server-addresses-2.csproj] features-server-addresses-2 -> D:\GitHub\practical-aspnetcore\projects\features\features-server-addresses-2\bin\Debug\net10.0\features-server-addresses-2.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.58 D:\GitHub\practical-aspnetcore\projects>dotnet build features\features-server-custom Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\features\features-server-custom\features-server-custom.csproj (in 84 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\features\features-server-custom\features-server-custom.csproj] features-server-custom -> D:\GitHub\practical-aspnetcore\projects\features\features-server-custom\bin\Debug\net10.0\features-server-custom.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.59 D:\GitHub\practical-aspnetcore\projects>dotnet build features\features-server-custom-override Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\features\features-server-custom-override\features-server-custom-override.csproj (in 58 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\features\features-server-custom-override\features-server-custom-override.csproj] features-server-custom-override -> D:\GitHub\practical-aspnetcore\projects\features\features-server-custom-override\bin\Debug\net10.0\features-server-custom-override.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.59 D:\GitHub\practical-aspnetcore\projects>dotnet build features\features-server-request Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\features\features-server-request\features-server-request.csproj (in 63 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\features\features-server-request\features-server-request.csproj] features-server-request -> D:\GitHub\practical-aspnetcore\projects\features\features-server-request\bin\Debug\net10.0\features-server-request.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.62 D:\GitHub\practical-aspnetcore\projects>dotnet build features\features-session Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\features\features-session\features-session.csproj (in 63 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\features\features-session\features-session.csproj] features-session -> D:\GitHub\practical-aspnetcore\projects\features\features-session\bin\Debug\net10.0\features-session.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.63 D:\GitHub\practical-aspnetcore\projects>dotnet build features\features-session-redis-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\features\features-session-redis-2\features-session-redis-2.csproj (in 190 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\features\features-session-redis-2\features-session-redis-2.csproj] features-session-redis-2 -> D:\GitHub\practical-aspnetcore\projects\features\features-session-redis-2\bin\Debug\net10.0\features-session-redis-2.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.75 D:\GitHub\practical-aspnetcore\projects>dotnet build file-provider\file-provider-custom Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\file-provider\file-provider-custom\file-provider-custom.csproj (in 56 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\file-provider\file-provider-custom\file-provider-custom.csproj] file-provider-custom -> D:\GitHub\practical-aspnetcore\projects\file-provider\file-provider-custom\bin\Debug\net10.0\file-provider-custom.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.56 D:\GitHub\practical-aspnetcore\projects>dotnet build file-provider\file-provider-physical Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\file-provider\file-provider-physical\file-provider-physical.csproj (in 58 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\file-provider\file-provider-physical\file-provider-physical.csproj] file-provider-physical -> D:\GitHub\practical-aspnetcore\projects\file-provider\file-provider-physical\bin\Debug\net10.0\file-provider-physical.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.70 D:\GitHub\practical-aspnetcore\projects>dotnet build file-provider\serve-static-files-1 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\file-provider\serve-static-files-1\serve-static-files.csproj (in 70 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\file-provider\serve-static-files-1\serve-static-files.csproj] serve-static-files -> D:\GitHub\practical-aspnetcore\projects\file-provider\serve-static-files-1\bin\Debug\net10.0\serve-static-files.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.66 D:\GitHub\practical-aspnetcore\projects>dotnet build file-provider\serve-static-files-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\file-provider\serve-static-files-2\serve-static-files-2.csproj (in 68 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\file-provider\serve-static-files-2\serve-static-files-2.csproj] serve-static-files-2 -> D:\GitHub\practical-aspnetcore\projects\file-provider\serve-static-files-2\bin\Debug\net10.0\serve-static-files-2.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.66 D:\GitHub\practical-aspnetcore\projects>dotnet build file-provider\serve-static-files-3 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\file-provider\serve-static-files-3\serve-static-files-3.csproj (in 64 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\file-provider\serve-static-files-3\serve-static-files-3.csproj] serve-static-files-3 -> D:\GitHub\practical-aspnetcore\projects\file-provider\serve-static-files-3\bin\Debug\net10.0\serve-static-files-3.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.67 D:\GitHub\practical-aspnetcore\projects>dotnet build file-provider\serve-static-files-4 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\file-provider\serve-static-files-4\serve-static-files-4.csproj (in 61 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\file-provider\serve-static-files-4\serve-static-files-4.csproj] serve-static-files-4 -> D:\GitHub\practical-aspnetcore\projects\file-provider\serve-static-files-4\bin\Debug\net10.0\serve-static-files-4.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.65 D:\GitHub\practical-aspnetcore\projects>dotnet build file-provider\serve-static-files-5 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\file-provider\serve-static-files-5\serve-static-files-5.csproj (in 53 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\file-provider\serve-static-files-5\serve-static-files-5.csproj] serve-static-files-5 -> D:\GitHub\practical-aspnetcore\projects\file-provider\serve-static-files-5\bin\Debug\net10.0\serve-static-files-5.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.65 D:\GitHub\practical-aspnetcore\projects>dotnet build file-provider\serve-static-files-6 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\file-provider\serve-static-files-6\serve-static-files-6.csproj (in 57 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\file-provider\serve-static-files-6\serve-static-files-6.csproj] serve-static-files-6 -> D:\GitHub\practical-aspnetcore\projects\file-provider\serve-static-files-6\bin\Debug\net10.0\serve-static-files-6.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.61 D:\GitHub\practical-aspnetcore\projects>dotnet build generic-host\generic-host-1 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-1\generic-host.csproj (in 67 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-1\generic-host.csproj] generic-host -> D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-1\bin\Debug\net10.0\generic-host.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.58 D:\GitHub\practical-aspnetcore\projects>dotnet build generic-host\generic-host-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-2\generic-host-2.csproj (in 75 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-2\generic-host-2.csproj] generic-host-2 -> D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-2\bin\Debug\net10.0\generic-host-2.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.63 D:\GitHub\practical-aspnetcore\projects>dotnet build generic-host\generic-host-3 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-3\generic-host-3.csproj (in 69 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-3\generic-host-3.csproj] generic-host-3 -> D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-3\bin\Debug\net10.0\generic-host-3.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.62 D:\GitHub\practical-aspnetcore\projects>dotnet build generic-host\generic-host-4 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-4\generic-host-4.csproj (in 62 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-4\generic-host-4.csproj] generic-host-4 -> D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-4\bin\Debug\net10.0\generic-host-4.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.56 D:\GitHub\practical-aspnetcore\projects>dotnet build generic-host\generic-host-5 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-5\generic-host-5.csproj (in 65 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-5\generic-host-5.csproj] generic-host-5 -> D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-5\bin\Debug\net10.0\generic-host-5.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.63 D:\GitHub\practical-aspnetcore\projects>dotnet build generic-host\generic-host-configure-app Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-configure-app\generic-host-configure-app.csproj (in 71 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-configure-app\generic-host-configure-app.csproj] generic-host-configure-app -> D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-configure-app\bin\Debug\net10.0\generic-host-configure-app.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.58 D:\GitHub\practical-aspnetcore\projects>dotnet build generic-host\generic-host-configure-host Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-configure-host\generic-host-configure-host.csproj (in 54 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-configure-host\generic-host-configure-host.csproj] generic-host-configure-host -> D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-configure-host\bin\Debug\net10.0\generic-host-configure-host.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.58 D:\GitHub\practical-aspnetcore\projects>dotnet build generic-host\generic-host-configure-logging Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-configure-logging\generic-host-configure-logging.csproj (in 57 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-configure-logging\generic-host-configure-logging.csproj] generic-host-configure-logging -> D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-configure-logging\bin\Debug\net10.0\generic-host-configure-logging.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.56 D:\GitHub\practical-aspnetcore\projects>dotnet build generic-host\generic-host-environment Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-environment\generic-host-environment.csproj (in 56 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-environment\generic-host-environment.csproj] generic-host-environment -> D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-environment\bin\Debug\net10.0\generic-host-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.57 D:\GitHub\practical-aspnetcore\projects>dotnet build generic-host\generic-host-ihostapplicationlifetime Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-ihostapplicationlifetime\generic-host-ihostapplicationlifetime.csproj (in 59 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-ihostapplicationlifetime\generic-host-ihostapplicationlifetime.csproj] generic-host-ihostapplicationlifetime -> D:\GitHub\practical-aspnetcore\projects\generic-host\generic-host-ihostapplicationlifetime\bin\Debug\net10.0\generic-host-ihostapplicationlifetime.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.56 D:\GitHub\practical-aspnetcore\projects>dotnet build grpc\grpc\client Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\grpc\grpc\client\grpc-client.csproj (in 1.31 sec). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\grpc\grpc\client\grpc-client.csproj] grpc-client -> D:\GitHub\practical-aspnetcore\projects\grpc\grpc\client\bin\Debug\net10.0\grpc-client.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:03.12 D:\GitHub\practical-aspnetcore\projects>dotnet build grpc\grpc\server Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\grpc\grpc\server\grpc-server.csproj] grpc-server -> D:\GitHub\practical-aspnetcore\projects\grpc\grpc\server\bin\Debug\net10.0\grpc-server.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.72 D:\GitHub\practical-aspnetcore\projects>dotnet build grpc\grpc-10\client Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\grpc\grpc-10\client\grpc-client.csproj (in 1.91 sec). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\grpc\grpc-10\client\grpc-client.csproj] grpc-client -> D:\GitHub\practical-aspnetcore\projects\grpc\grpc-10\client\bin\Debug\net10.0\grpc-client.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:03.65 D:\GitHub\practical-aspnetcore\projects>dotnet build grpc\grpc-10\server Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\grpc\grpc-10\server\grpc-server.csproj (in 1.16 sec). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\grpc\grpc-10\server\grpc-server.csproj] grpc-server -> D:\GitHub\practical-aspnetcore\projects\grpc\grpc-10\server\bin\Debug\net10.0\grpc-server.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:03.00 D:\GitHub\practical-aspnetcore\projects>dotnet build grpc\grpc-11\client Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\grpc\grpc-11\client\grpc-client.csproj (in 239 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\grpc\grpc-11\client\grpc-client.csproj] grpc-client -> D:\GitHub\practical-aspnetcore\projects\grpc\grpc-11\client\bin\Debug\net10.0\grpc-client.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.02 D:\GitHub\practical-aspnetcore\projects>dotnet build grpc\grpc-11\server Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\grpc\grpc-11\server\grpc-server.csproj (in 205 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\grpc\grpc-11\server\grpc-server.csproj] grpc-server -> D:\GitHub\practical-aspnetcore\projects\grpc\grpc-11\server\bin\Debug\net10.0\grpc-server.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.02 D:\GitHub\practical-aspnetcore\projects>dotnet build grpc\grpc-2\client Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\grpc\grpc-2\client\grpc-client.csproj (in 216 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\grpc\grpc-2\client\grpc-client.csproj] grpc-client -> D:\GitHub\practical-aspnetcore\projects\grpc\grpc-2\client\bin\Debug\net10.0\grpc-client.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.99 D:\GitHub\practical-aspnetcore\projects>dotnet build grpc\grpc-2\server Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\grpc\grpc-2\server\grpc-server.csproj (in 226 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\grpc\grpc-2\server\grpc-server.csproj] grpc-server -> D:\GitHub\practical-aspnetcore\projects\grpc\grpc-2\server\bin\Debug\net10.0\grpc-server.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.03 D:\GitHub\practical-aspnetcore\projects>dotnet build grpc\grpc-3\client Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\grpc\grpc-3\client\grpc-client.csproj (in 222 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\grpc\grpc-3\client\grpc-client.csproj] grpc-client -> D:\GitHub\practical-aspnetcore\projects\grpc\grpc-3\client\bin\Debug\net10.0\grpc-client.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.01 D:\GitHub\practical-aspnetcore\projects>dotnet build grpc\grpc-3\server Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\grpc\grpc-3\server\grpc-server.csproj (in 217 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\grpc\grpc-3\server\grpc-server.csproj] grpc-server -> D:\GitHub\practical-aspnetcore\projects\grpc\grpc-3\server\bin\Debug\net10.0\grpc-server.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.10 D:\GitHub\practical-aspnetcore\projects>dotnet build grpc\grpc-4\client Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\grpc\grpc-4\client\grpc-client.csproj (in 226 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\grpc\grpc-4\client\grpc-client.csproj] grpc-client -> D:\GitHub\practical-aspnetcore\projects\grpc\grpc-4\client\bin\Debug\net10.0\grpc-client.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.98 D:\GitHub\practical-aspnetcore\projects>dotnet build grpc\grpc-4\server Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\grpc\grpc-4\server\grpc-server.csproj (in 237 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\grpc\grpc-4\server\grpc-server.csproj] grpc-server -> D:\GitHub\practical-aspnetcore\projects\grpc\grpc-4\server\bin\Debug\net10.0\grpc-server.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.90 D:\GitHub\practical-aspnetcore\projects>dotnet build grpc\grpc-5\client Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\grpc\grpc-5\client\grpc-client.csproj (in 211 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\grpc\grpc-5\client\grpc-client.csproj] grpc-client -> D:\GitHub\practical-aspnetcore\projects\grpc\grpc-5\client\bin\Debug\net10.0\grpc-client.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.92 D:\GitHub\practical-aspnetcore\projects>dotnet build grpc\grpc-5\server Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\grpc\grpc-5\server\grpc-server.csproj (in 227 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\grpc\grpc-5\server\grpc-server.csproj] grpc-server -> D:\GitHub\practical-aspnetcore\projects\grpc\grpc-5\server\bin\Debug\net10.0\grpc-server.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.90 D:\GitHub\practical-aspnetcore\projects>dotnet build grpc\grpc-6\client Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\grpc\grpc-6\client\grpc-client.csproj (in 219 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\grpc\grpc-6\client\grpc-client.csproj] grpc-client -> D:\GitHub\practical-aspnetcore\projects\grpc\grpc-6\client\bin\Debug\net10.0\grpc-client.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.88 D:\GitHub\practical-aspnetcore\projects>dotnet build grpc\grpc-6\server Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\grpc\grpc-6\server\grpc-server.csproj (in 216 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\grpc\grpc-6\server\grpc-server.csproj] grpc-server -> D:\GitHub\practical-aspnetcore\projects\grpc\grpc-6\server\bin\Debug\net10.0\grpc-server.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.87 D:\GitHub\practical-aspnetcore\projects>dotnet build grpc\grpc-7\client Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\grpc\grpc-7\client\grpc-client.csproj (in 211 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\grpc\grpc-7\client\grpc-client.csproj] grpc-client -> D:\GitHub\practical-aspnetcore\projects\grpc\grpc-7\client\bin\Debug\net10.0\grpc-client.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.91 D:\GitHub\practical-aspnetcore\projects>dotnet build grpc\grpc-7\server Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\grpc\grpc-7\server\grpc-server.csproj (in 238 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\grpc\grpc-7\server\grpc-server.csproj] grpc-server -> D:\GitHub\practical-aspnetcore\projects\grpc\grpc-7\server\bin\Debug\net10.0\grpc-server.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.89 D:\GitHub\practical-aspnetcore\projects>dotnet build grpc\grpc-8\client Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\grpc\grpc-8\client\grpc-client.csproj (in 215 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\grpc\grpc-8\client\grpc-client.csproj] grpc-client -> D:\GitHub\practical-aspnetcore\projects\grpc\grpc-8\client\bin\Debug\net10.0\grpc-client.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.89 D:\GitHub\practical-aspnetcore\projects>dotnet build grpc\grpc-8\server Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\grpc\grpc-8\server\grpc-server.csproj (in 213 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\grpc\grpc-8\server\grpc-server.csproj] grpc-server -> D:\GitHub\practical-aspnetcore\projects\grpc\grpc-8\server\bin\Debug\net10.0\grpc-server.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.87 D:\GitHub\practical-aspnetcore\projects>dotnet build grpc\grpc-9\client Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\grpc\grpc-9\client\grpc-client.csproj (in 222 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\grpc\grpc-9\client\grpc-client.csproj] grpc-client -> D:\GitHub\practical-aspnetcore\projects\grpc\grpc-9\client\bin\Debug\net10.0\grpc-client.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.96 D:\GitHub\practical-aspnetcore\projects>dotnet build grpc\grpc-9\server Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\grpc\grpc-9\server\grpc-server.csproj (in 210 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\grpc\grpc-9\server\grpc-server.csproj] grpc-server -> D:\GitHub\practical-aspnetcore\projects\grpc\grpc-9\server\bin\Debug\net10.0\grpc-server.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.92 D:\GitHub\practical-aspnetcore\projects>dotnet build health-check\health-check-1 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\health-check\health-check-1\health-check.csproj (in 62 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\health-check\health-check-1\health-check.csproj] health-check -> D:\GitHub\practical-aspnetcore\projects\health-check\health-check-1\bin\Debug\net10.0\health-check.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.59 D:\GitHub\practical-aspnetcore\projects>dotnet build health-check\health-check-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\health-check\health-check-2\health-check-2.csproj (in 56 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\health-check\health-check-2\health-check-2.csproj] health-check-2 -> D:\GitHub\practical-aspnetcore\projects\health-check\health-check-2\bin\Debug\net10.0\health-check-2.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.55 D:\GitHub\practical-aspnetcore\projects>dotnet build health-check\health-check-3 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\health-check\health-check-3\health-check-3.csproj (in 54 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\health-check\health-check-3\health-check-3.csproj] health-check-3 -> D:\GitHub\practical-aspnetcore\projects\health-check\health-check-3\bin\Debug\net10.0\health-check-3.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.61 D:\GitHub\practical-aspnetcore\projects>dotnet build health-check\health-check-4 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\health-check\health-check-4\health-check-4.csproj (in 65 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\health-check\health-check-4\health-check-4.csproj] health-check-4 -> D:\GitHub\practical-aspnetcore\projects\health-check\health-check-4\bin\Debug\net10.0\health-check-4.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.58 D:\GitHub\practical-aspnetcore\projects>dotnet build health-check\health-check-5 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\health-check\health-check-5\health-check-5.csproj (in 57 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\health-check\health-check-5\health-check-5.csproj] health-check-5 -> D:\GitHub\practical-aspnetcore\projects\health-check\health-check-5\bin\Debug\net10.0\health-check-5.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.65 D:\GitHub\practical-aspnetcore\projects>dotnet build health-check\health-check-6 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\health-check\health-check-6\health-check-6.csproj (in 58 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\health-check\health-check-6\health-check-6.csproj] health-check-6 -> D:\GitHub\practical-aspnetcore\projects\health-check\health-check-6\bin\Debug\net10.0\health-check-6.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.59 D:\GitHub\practical-aspnetcore\projects>dotnet build utils\http-status-codes Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\utils\http-status-codes\http-status-codes.csproj (in 55 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\utils\http-status-codes\http-status-codes.csproj] http-status-codes -> D:\GitHub\practical-aspnetcore\projects\utils\http-status-codes\bin\Debug\net10.0\http-status-codes.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.59 D:\GitHub\practical-aspnetcore\projects>dotnet build httpclientfactory\httpclientfactory-1 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\httpclientfactory\httpclientfactory-1\httpclientfactory.csproj (in 71 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\httpclientfactory\httpclientfactory-1\httpclientfactory.csproj] httpclientfactory -> D:\GitHub\practical-aspnetcore\projects\httpclientfactory\httpclientfactory-1\bin\Debug\net10.0\httpclientfactory.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.57 D:\GitHub\practical-aspnetcore\projects>dotnet build httpclientfactory\httpclientfactory-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\httpclientfactory\httpclientfactory-2\httpclientfactory-2.csproj (in 54 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\httpclientfactory\httpclientfactory-2\httpclientfactory-2.csproj] httpclientfactory-2 -> D:\GitHub\practical-aspnetcore\projects\httpclientfactory\httpclientfactory-2\bin\Debug\net10.0\httpclientfactory-2.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.53 D:\GitHub\practical-aspnetcore\projects>dotnet build httpclientfactory\httpclientfactory-3 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\httpclientfactory\httpclientfactory-3\httpclientfactory-3.csproj (in 54 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\httpclientfactory\httpclientfactory-3\httpclientfactory-3.csproj] httpclientfactory-3 -> D:\GitHub\practical-aspnetcore\projects\httpclientfactory\httpclientfactory-3\bin\Debug\net10.0\httpclientfactory-3.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.61 D:\GitHub\practical-aspnetcore\projects>dotnet build httpclientfactory\httpclientfactory-4 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\httpclientfactory\httpclientfactory-4\httpclientfactory-4.csproj (in 69 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\httpclientfactory\httpclientfactory-4\httpclientfactory-4.csproj] httpclientfactory-4 -> D:\GitHub\practical-aspnetcore\projects\httpclientfactory\httpclientfactory-4\bin\Debug\net10.0\httpclientfactory-4.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.59 D:\GitHub\practical-aspnetcore\projects>dotnet build i-application-lifetime Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\i-application-lifetime\i-application-lifetime.csproj (in 66 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\i-application-lifetime\i-application-lifetime.csproj] i-application-lifetime -> D:\GitHub\practical-aspnetcore\projects\i-application-lifetime\bin\Debug\net10.0\i-application-lifetime.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.57 D:\GitHub\practical-aspnetcore\projects>dotnet build ihosted-service\ihosted-service-1 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\ihosted-service\ihosted-service-1\ihosted-service-1.csproj (in 62 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\ihosted-service\ihosted-service-1\ihosted-service-1.csproj] ihosted-service-1 -> D:\GitHub\practical-aspnetcore\projects\ihosted-service\ihosted-service-1\bin\Debug\net10.0\ihosted-service-1.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.58 D:\GitHub\practical-aspnetcore\projects>dotnet build image-sharp Determining projects to restore... D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1903: Package 'SixLabors.ImageSharp' 1.0.4 has a known high severity vulnerability, https://github.com/advisories/GHSA-2cmq-823j-5qj8 D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-5x7m-6737-26cr D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1903: Package 'SixLabors.ImageSharp' 1.0.4 has a known high severity vulnerability, https://github.com/advisories/GHSA-63p8-c4ww-9cg7 D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1903: Package 'SixLabors.ImageSharp' 1.0.4 has a known high severity vulnerability, https://github.com/advisories/GHSA-65x7-c272-7g7r D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-g85r-6x2q-45w7 D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-qxrv-gp6x-rc23 D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-rxmq-m78w-7wmc Restored D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj (in 2.63 sec). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj] D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1903: Package 'SixLabors.ImageSharp' 1.0.4 has a known high severity vulnerability, https://github.com/advisories/GHSA-2cmq-823j-5qj8 D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-5x7m-6737-26cr D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1903: Package 'SixLabors.ImageSharp' 1.0.4 has a known high severity vulnerability, https://github.com/advisories/GHSA-63p8-c4ww-9cg7 D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1903: Package 'SixLabors.ImageSharp' 1.0.4 has a known high severity vulnerability, https://github.com/advisories/GHSA-65x7-c272-7g7r D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-g85r-6x2q-45w7 D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-qxrv-gp6x-rc23 D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-rxmq-m78w-7wmc ImageSharp -> D:\GitHub\practical-aspnetcore\projects\image-sharp\bin\Debug\net10.0\ImageSharp.dll Build succeeded. D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1903: Package 'SixLabors.ImageSharp' 1.0.4 has a known high severity vulnerability, https://github.com/advisories/GHSA-2cmq-823j-5qj8 D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-5x7m-6737-26cr D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1903: Package 'SixLabors.ImageSharp' 1.0.4 has a known high severity vulnerability, https://github.com/advisories/GHSA-63p8-c4ww-9cg7 D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1903: Package 'SixLabors.ImageSharp' 1.0.4 has a known high severity vulnerability, https://github.com/advisories/GHSA-65x7-c272-7g7r D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-g85r-6x2q-45w7 D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-qxrv-gp6x-rc23 D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-rxmq-m78w-7wmc D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1903: Package 'SixLabors.ImageSharp' 1.0.4 has a known high severity vulnerability, https://github.com/advisories/GHSA-2cmq-823j-5qj8 D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-5x7m-6737-26cr D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1903: Package 'SixLabors.ImageSharp' 1.0.4 has a known high severity vulnerability, https://github.com/advisories/GHSA-63p8-c4ww-9cg7 D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1903: Package 'SixLabors.ImageSharp' 1.0.4 has a known high severity vulnerability, https://github.com/advisories/GHSA-65x7-c272-7g7r D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-g85r-6x2q-45w7 D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-qxrv-gp6x-rc23 D:\GitHub\practical-aspnetcore\projects\image-sharp\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-rxmq-m78w-7wmc 14 Warning(s) 0 Error(s) Time Elapsed 00:00:04.31 D:\GitHub\practical-aspnetcore\projects>dotnet build json\json Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\json\json\json.csproj (in 68 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\json\json\json.csproj] json -> D:\GitHub\practical-aspnetcore\projects\json\json\bin\Debug\net10.0\json.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.61 D:\GitHub\practical-aspnetcore\projects>dotnet build json\json-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\json\json-2\json-2.csproj (in 58 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\json\json-2\json-2.csproj] json-2 -> D:\GitHub\practical-aspnetcore\projects\json\json-2\bin\Debug\net10.0\json-2.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.54 D:\GitHub\practical-aspnetcore\projects>dotnet build json\json-3 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\json\json-3\json-3.csproj (in 60 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\json\json-3\json-3.csproj] json-3 -> D:\GitHub\practical-aspnetcore\projects\json\json-3\bin\Debug\net10.0\json-3.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.58 D:\GitHub\practical-aspnetcore\projects>dotnet build json\json-4 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\json\json-4\json-4.csproj (in 64 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\json\json-4\json-4.csproj] json-4 -> D:\GitHub\practical-aspnetcore\projects\json\json-4\bin\Debug\net10.0\json-4.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.55 D:\GitHub\practical-aspnetcore\projects>dotnet build json\json-5 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\json\json-5\json-5.csproj (in 71 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\json\json-5\json-5.csproj] json-5 -> D:\GitHub\practical-aspnetcore\projects\json\json-5\bin\Debug\net10.0\json-5.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.61 D:\GitHub\practical-aspnetcore\projects>dotnet build json\json-6 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\json\json-6\json-6.csproj (in 70 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\json\json-6\json-6.csproj] json-6 -> D:\GitHub\practical-aspnetcore\projects\json\json-6\bin\Debug\net10.0\json-6.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.59 D:\GitHub\practical-aspnetcore\projects>dotnet build json\json-7 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\json\json-7\json-7.csproj (in 60 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\json\json-7\json-7.csproj] json-7 -> D:\GitHub\practical-aspnetcore\projects\json\json-7\bin\Debug\net10.0\json-7.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.58 D:\GitHub\practical-aspnetcore\projects>dotnet build json\json-8 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\json\json-8\json-8.csproj (in 5.65 sec). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\json\json-8\json-8.csproj] json-8 -> D:\GitHub\practical-aspnetcore\projects\json\json-8\bin\Debug\net10.0\json-8.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:07.32 D:\GitHub\practical-aspnetcore\projects>dotnet build json\json-9 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\json\json-9\json-9.csproj (in 56 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\json\json-9\json-9.csproj] json-9 -> D:\GitHub\practical-aspnetcore\projects\json\json-9\bin\Debug\net10.0\json-9.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.51 D:\GitHub\practical-aspnetcore\projects>dotnet build json\json-10 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\json\json-10\json-10.csproj (in 55 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\json\json-10\json-10.csproj] json-10 -> D:\GitHub\practical-aspnetcore\projects\json\json-10\bin\Debug\net10.0\json-10.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.57 D:\GitHub\practical-aspnetcore\projects>dotnet build json\json-11 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\json\json-11\json-11.csproj (in 57 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\json\json-11\json-11.csproj] json-11 -> D:\GitHub\practical-aspnetcore\projects\json\json-11\bin\Debug\net10.0\json-11.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.52 D:\GitHub\practical-aspnetcore\projects>dotnet build localization\localization-1 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\localization\localization-1\localization.csproj (in 58 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\localization\localization-1\localization.csproj] localization -> D:\GitHub\practical-aspnetcore\projects\localization\localization-1\bin\Debug\net10.0\localization.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.57 D:\GitHub\practical-aspnetcore\projects>dotnet build localization\localization-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\localization\localization-2\localization-2.csproj (in 61 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\localization\localization-2\localization-2.csproj] localization-2 -> D:\GitHub\practical-aspnetcore\projects\localization\localization-2\bin\Debug\net10.0\localization-2.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.80 D:\GitHub\practical-aspnetcore\projects>dotnet build localization\localization-3 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\localization\localization-3\localization-3.csproj (in 55 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\localization\localization-3\localization-3.csproj] localization-3 -> D:\GitHub\practical-aspnetcore\projects\localization\localization-3\bin\Debug\net10.0\localization-3.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.67 D:\GitHub\practical-aspnetcore\projects>dotnet build localization\localization-4 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\localization\localization-4\localization-4.csproj (in 68 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\localization\localization-4\localization-4.csproj] localization-4 -> D:\GitHub\practical-aspnetcore\projects\localization\localization-4\bin\Debug\net10.0\localization-4.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.80 D:\GitHub\practical-aspnetcore\projects>dotnet build localization\localization-5 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\localization\localization-5\localization-5.csproj (in 1.02 sec). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\localization\localization-5\localization-5.csproj] localization-5 -> D:\GitHub\practical-aspnetcore\projects\localization\localization-5\bin\Debug\net10.0\localization-5.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:03.02 D:\GitHub\practical-aspnetcore\projects>dotnet build localization\localization-6 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\localization\localization-6\localization-6.csproj (in 218 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\localization\localization-6\localization-6.csproj] localization-6 -> D:\GitHub\practical-aspnetcore\projects\localization\localization-6\bin\Debug\net10.0\localization-6.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.99 D:\GitHub\practical-aspnetcore\projects>dotnet build logging\logging-1 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\logging\logging-1\logging-1.csproj (in 53 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\logging\logging-1\logging-1.csproj] logging-1 -> D:\GitHub\practical-aspnetcore\projects\logging\logging-1\bin\Debug\net10.0\logging-1.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.67 D:\GitHub\practical-aspnetcore\projects>dotnet build logging\logging-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\logging\logging-2\logging-2.csproj (in 62 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\logging\logging-2\logging-2.csproj] logging-2 -> D:\GitHub\practical-aspnetcore\projects\logging\logging-2\bin\Debug\net10.0\logging-with-filter.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.63 D:\GitHub\practical-aspnetcore\projects>dotnet build mailkit\mailkit-1 Determining projects to restore... D:\GitHub\practical-aspnetcore\projects\mailkit\mailkit-1\Email.csproj : warning NU1902: Package 'BouncyCastle.Cryptography' 2.3.0 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-8xfc-gm6g-vgpv D:\GitHub\practical-aspnetcore\projects\mailkit\mailkit-1\Email.csproj : warning NU1902: Package 'BouncyCastle.Cryptography' 2.3.0 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-m44j-cfrm-g8qc D:\GitHub\practical-aspnetcore\projects\mailkit\mailkit-1\Email.csproj : warning NU1902: Package 'BouncyCastle.Cryptography' 2.3.0 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-v435-xc8x-wvr9 D:\GitHub\practical-aspnetcore\projects\mailkit\mailkit-1\Email.csproj : warning NU1903: Package 'MimeKit' 4.4.0 has a known high severity vulnerability, https://github.com/advisories/GHSA-gmc6-fwg3-75m5 Restored D:\GitHub\practical-aspnetcore\projects\mailkit\mailkit-1\Email.csproj (in 3.5 sec). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mailkit\mailkit-1\Email.csproj] D:\GitHub\practical-aspnetcore\projects\mailkit\mailkit-1\Email.csproj : warning NU1902: Package 'BouncyCastle.Cryptography' 2.3.0 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-8xfc-gm6g-vgpv D:\GitHub\practical-aspnetcore\projects\mailkit\mailkit-1\Email.csproj : warning NU1902: Package 'BouncyCastle.Cryptography' 2.3.0 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-m44j-cfrm-g8qc D:\GitHub\practical-aspnetcore\projects\mailkit\mailkit-1\Email.csproj : warning NU1902: Package 'BouncyCastle.Cryptography' 2.3.0 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-v435-xc8x-wvr9 D:\GitHub\practical-aspnetcore\projects\mailkit\mailkit-1\Email.csproj : warning NU1903: Package 'MimeKit' 4.4.0 has a known high severity vulnerability, https://github.com/advisories/GHSA-gmc6-fwg3-75m5 Email -> D:\GitHub\practical-aspnetcore\projects\mailkit\mailkit-1\bin\Debug\net10.0\Email.dll Build succeeded. D:\GitHub\practical-aspnetcore\projects\mailkit\mailkit-1\Email.csproj : warning NU1902: Package 'BouncyCastle.Cryptography' 2.3.0 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-8xfc-gm6g-vgpv D:\GitHub\practical-aspnetcore\projects\mailkit\mailkit-1\Email.csproj : warning NU1902: Package 'BouncyCastle.Cryptography' 2.3.0 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-m44j-cfrm-g8qc D:\GitHub\practical-aspnetcore\projects\mailkit\mailkit-1\Email.csproj : warning NU1902: Package 'BouncyCastle.Cryptography' 2.3.0 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-v435-xc8x-wvr9 D:\GitHub\practical-aspnetcore\projects\mailkit\mailkit-1\Email.csproj : warning NU1903: Package 'MimeKit' 4.4.0 has a known high severity vulnerability, https://github.com/advisories/GHSA-gmc6-fwg3-75m5 D:\GitHub\practical-aspnetcore\projects\mailkit\mailkit-1\Email.csproj : warning NU1902: Package 'BouncyCastle.Cryptography' 2.3.0 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-8xfc-gm6g-vgpv D:\GitHub\practical-aspnetcore\projects\mailkit\mailkit-1\Email.csproj : warning NU1902: Package 'BouncyCastle.Cryptography' 2.3.0 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-m44j-cfrm-g8qc D:\GitHub\practical-aspnetcore\projects\mailkit\mailkit-1\Email.csproj : warning NU1902: Package 'BouncyCastle.Cryptography' 2.3.0 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-v435-xc8x-wvr9 D:\GitHub\practical-aspnetcore\projects\mailkit\mailkit-1\Email.csproj : warning NU1903: Package 'MimeKit' 4.4.0 has a known high severity vulnerability, https://github.com/advisories/GHSA-gmc6-fwg3-75m5 8 Warning(s) 0 Error(s) Time Elapsed 00:00:05.17 D:\GitHub\practical-aspnetcore\projects>dotnet build mailkit\mailkit-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mailkit\mailkit-2\Email.csproj (in 201 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mailkit\mailkit-2\Email.csproj] Email -> D:\GitHub\practical-aspnetcore\projects\mailkit\mailkit-2\bin\Debug\net10.0\Email.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.91 D:\GitHub\practical-aspnetcore\projects>dotnet build markdown-server Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\markdown-server\markdown-server.csproj (in 1.35 sec). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\markdown-server\markdown-server.csproj] markdown-server -> D:\GitHub\practical-aspnetcore\projects\markdown-server\bin\Debug\net10.0\markdown-server.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.92 D:\GitHub\practical-aspnetcore\projects>dotnet build markdown-server-middleware Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\markdown-server-middleware\markdown-server-middleware.csproj (in 1.09 sec). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\markdown-server-middleware\markdown-server-middleware.csproj] markdown-server-middleware -> D:\GitHub\practical-aspnetcore\projects\markdown-server-middleware\bin\Debug\net10.0\markdown-server-middleware.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.67 D:\GitHub\practical-aspnetcore\projects>dotnet build utils\media-type-names Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\utils\media-type-names\media-type-names.csproj (in 68 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\utils\media-type-names\media-type-names.csproj] media-type-names -> D:\GitHub\practical-aspnetcore\projects\utils\media-type-names\bin\Debug\net10.0\media-type-names.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.57 D:\GitHub\practical-aspnetcore\projects>dotnet build utils\media-type-names-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\utils\media-type-names-2\media-type-names-2.csproj (in 54 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\utils\media-type-names-2\media-type-names-2.csproj] media-type-names-2 -> D:\GitHub\practical-aspnetcore\projects\utils\media-type-names-2\bin\Debug\net10.0\media-type-names-2.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.60 D:\GitHub\practical-aspnetcore\projects>dotnet build middleware\middleware-0 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\middleware\middleware-0\middleware-0.csproj (in 71 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\middleware\middleware-0\middleware-0.csproj] middleware-0 -> D:\GitHub\practical-aspnetcore\projects\middleware\middleware-0\bin\Debug\net10.0\middleware-0.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.57 D:\GitHub\practical-aspnetcore\projects>dotnet build middleware\middleware-1 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\middleware\middleware-1\middleware-1.csproj (in 61 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\middleware\middleware-1\middleware-1.csproj] middleware-1 -> D:\GitHub\practical-aspnetcore\projects\middleware\middleware-1\bin\Debug\net10.0\middleware-1.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.59 D:\GitHub\practical-aspnetcore\projects>dotnet build middleware\middleware-10 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\middleware\middleware-10\middleware-10.csproj (in 64 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\middleware\middleware-10\middleware-10.csproj] middleware-10 -> D:\GitHub\practical-aspnetcore\projects\middleware\middleware-10\bin\Debug\net10.0\middleware-10.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.57 D:\GitHub\practical-aspnetcore\projects>dotnet build middleware\middleware-11 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\middleware\middleware-11\middleware-11.csproj (in 63 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\middleware\middleware-11\middleware-11.csproj] middleware-11 -> D:\GitHub\practical-aspnetcore\projects\middleware\middleware-11\bin\Debug\net10.0\middleware-11.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.53 D:\GitHub\practical-aspnetcore\projects>dotnet build middleware\middleware-12 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\middleware\middleware-12\middleware-12.csproj (in 71 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\middleware\middleware-12\middleware-12.csproj] middleware-12 -> D:\GitHub\practical-aspnetcore\projects\middleware\middleware-12\bin\Debug\net10.0\middleware-12.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.63 D:\GitHub\practical-aspnetcore\projects>dotnet build middleware\middleware-13 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\middleware\middleware-13\middleware-13.csproj (in 62 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\middleware\middleware-13\middleware-13.csproj] middleware-13 -> D:\GitHub\practical-aspnetcore\projects\middleware\middleware-13\bin\Debug\net10.0\middleware-13.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.53 D:\GitHub\practical-aspnetcore\projects>dotnet build middleware\middleware-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\middleware\middleware-2\middleware-2.csproj (in 59 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\middleware\middleware-2\middleware-2.csproj] middleware-2 -> D:\GitHub\practical-aspnetcore\projects\middleware\middleware-2\bin\Debug\net10.0\middleware-2.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.56 D:\GitHub\practical-aspnetcore\projects>dotnet build middleware\middleware-3 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\middleware\middleware-3\middleware-3.csproj (in 64 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\middleware\middleware-3\middleware-3.csproj] middleware-3 -> D:\GitHub\practical-aspnetcore\projects\middleware\middleware-3\bin\Debug\net10.0\middleware-3.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.56 D:\GitHub\practical-aspnetcore\projects>dotnet build middleware\middleware-4 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\middleware\middleware-4\middleware-4.csproj (in 65 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\middleware\middleware-4\middleware-4.csproj] middleware-4 -> D:\GitHub\practical-aspnetcore\projects\middleware\middleware-4\bin\Debug\net10.0\middleware-4.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.54 D:\GitHub\practical-aspnetcore\projects>dotnet build middleware\middleware-5 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\middleware\middleware-5\middleware-5.csproj (in 61 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\middleware\middleware-5\middleware-5.csproj] middleware-5 -> D:\GitHub\practical-aspnetcore\projects\middleware\middleware-5\bin\Debug\net10.0\middleware-5.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.57 D:\GitHub\practical-aspnetcore\projects>dotnet build middleware\middleware-6 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\middleware\middleware-6\middleware-6.csproj (in 53 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\middleware\middleware-6\middleware-6.csproj] middleware-6 -> D:\GitHub\practical-aspnetcore\projects\middleware\middleware-6\bin\Debug\net10.0\middleware-6.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.59 D:\GitHub\practical-aspnetcore\projects>dotnet build middleware\middleware-7 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\middleware\middleware-7\middleware-7.csproj (in 64 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\middleware\middleware-7\middleware-7.csproj] middleware-7 -> D:\GitHub\practical-aspnetcore\projects\middleware\middleware-7\bin\Debug\net10.0\middleware-7.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.52 D:\GitHub\practical-aspnetcore\projects>dotnet build middleware\middleware-8 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\middleware\middleware-8\middleware-8.csproj (in 61 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\middleware\middleware-8\middleware-8.csproj] middleware-8 -> D:\GitHub\practical-aspnetcore\projects\middleware\middleware-8\bin\Debug\net10.0\middleware-8.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.58 D:\GitHub\practical-aspnetcore\projects>dotnet build middleware\middleware-9 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\middleware\middleware-9\middleware-9.csproj (in 63 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\middleware\middleware-9\middleware-9.csproj] middleware-9 -> D:\GitHub\practical-aspnetcore\projects\middleware\middleware-9\bin\Debug\net10.0\middleware-9.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.54 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\api-problem-details Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\api-problem-details\api-problem-details.csproj (in 58 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\api-problem-details\api-problem-details.csproj] D:\GitHub\practical-aspnetcore\projects\mvc\api-problem-details\Program.cs(21,26): warning CS0168: The variable 'ex' is declared but never used [D:\GitHub\practical-aspnetcore\projects\mvc\api-problem-details\api-problem-details.csproj] api-problem-details -> D:\GitHub\practical-aspnetcore\projects\mvc\api-problem-details\bin\Debug\net10.0\api-problem-details.dll Build succeeded. D:\GitHub\practical-aspnetcore\projects\mvc\api-problem-details\Program.cs(21,26): warning CS0168: The variable 'ex' is declared but never used [D:\GitHub\practical-aspnetcore\projects\mvc\api-problem-details\api-problem-details.csproj] 1 Warning(s) 0 Error(s) Time Elapsed 00:00:01.61 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\api-problem-details-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\api-problem-details-2\api-problem-details-2.csproj (in 69 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\api-problem-details-2\api-problem-details-2.csproj] api-problem-details-2 -> D:\GitHub\practical-aspnetcore\projects\mvc\api-problem-details-2\bin\Debug\net10.0\api-problem-details-2.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.54 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\api-versioning Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\api-versioning\api-versioning.csproj (in 1.2 sec). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\api-versioning\api-versioning.csproj] api-versioning -> D:\GitHub\practical-aspnetcore\projects\mvc\api-versioning\bin\Debug\net10.0\api-versioning.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.79 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\hello-world Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\hello-world\hello-world.csproj] hello-world -> D:\GitHub\practical-aspnetcore\projects\mvc\hello-world\bin\Debug\net10.0\hello-world.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.49 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\jwt Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\jwt\jwt.csproj (in 2.11 sec). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\jwt\jwt.csproj] jwt -> D:\GitHub\practical-aspnetcore\projects\mvc\jwt\bin\Debug\net10.0\jwt.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:03.56 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\localization\mvc-localization-1 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\localization\mvc-localization-1\mvc-localization.csproj (in 67 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\localization\mvc-localization-1\mvc-localization.csproj] mvc-localization -> D:\GitHub\practical-aspnetcore\projects\mvc\localization\mvc-localization-1\bin\Debug\net10.0\mvc-localization.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.61 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\localization\mvc-localization-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\localization\mvc-localization-2\mvc-localization-2.csproj (in 65 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\localization\mvc-localization-2\mvc-localization-2.csproj] mvc-localization-2 -> D:\GitHub\practical-aspnetcore\projects\mvc\localization\mvc-localization-2\bin\Debug\net10.0\mvc-localization-2.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.64 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\localization\mvc-localization-3 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\localization\mvc-localization-3\mvc-localization-3.csproj (in 77 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\localization\mvc-localization-3\mvc-localization-3.csproj] mvc-localization-3 -> D:\GitHub\practical-aspnetcore\projects\mvc\localization\mvc-localization-3\bin\Debug\net10.0\mvc-localization-3.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.71 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\localization\mvc-localization-4 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\localization\mvc-localization-4\MvcLocalization.csproj (in 62 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\localization\mvc-localization-4\MvcLocalization.csproj] MvcLocalization -> D:\GitHub\practical-aspnetcore\projects\mvc\localization\mvc-localization-4\bin\Debug\net10.0\MvcLocalization.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.67 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\localization\mvc-localization-5 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\localization\mvc-localization-5\mvc-localization-5.csproj (in 62 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\localization\mvc-localization-5\mvc-localization-5.csproj] mvc-localization-5 -> D:\GitHub\practical-aspnetcore\projects\mvc\localization\mvc-localization-5\bin\Debug\net10.0\mvc-localization-5.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.71 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\localization\mvc-localization-6 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\localization\mvc-localization-6\mvc-localization-6.csproj (in 59 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\localization\mvc-localization-6\mvc-localization-6.csproj] mvc-localization-6 -> D:\GitHub\practical-aspnetcore\projects\mvc\localization\mvc-localization-6\bin\Debug\net10.0\mvc-localization-6.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.63 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\localization\mvc-localization-7\src\ProjectWithResources MSBUILD : error MSB1009: Project file does not exist. Switch: mvc\localization\mvc-localization-7\src\ProjectWithResources D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\localization\mvc-localization-7\src\Web MSBUILD : error MSB1009: Project file does not exist. Switch: mvc\localization\mvc-localization-7\src\Web D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\localization\mvc-localization-8 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\localization\mvc-localization-8\mvc-localization-8.csproj (in 52 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\localization\mvc-localization-8\mvc-localization-8.csproj] mvc-localization-8 -> D:\GitHub\practical-aspnetcore\projects\mvc\localization\mvc-localization-8\bin\Debug\net10.0\mvc-localization-8.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.63 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\localization\mvc-localization-9 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\localization\mvc-localization-9\mvc-localization-9.csproj (in 61 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\localization\mvc-localization-9\mvc-localization-9.csproj] mvc-localization-9 -> D:\GitHub\practical-aspnetcore\projects\mvc\localization\mvc-localization-9\bin\Debug\net10.0\mvc-localization-9.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.66 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\model-binding-from-query Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\model-binding-from-query\model-binding-from-query.csproj (in 57 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\model-binding-from-query\model-binding-from-query.csproj] model-binding-from-query -> D:\GitHub\practical-aspnetcore\projects\mvc\model-binding-from-query\bin\Debug\net10.0\model-binding-from-query.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.52 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\model-binding-from-route Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\model-binding-from-route\model-binding-from-route.csproj (in 60 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\model-binding-from-route\model-binding-from-route.csproj] model-binding-from-route -> D:\GitHub\practical-aspnetcore\projects\mvc\model-binding-from-route\bin\Debug\net10.0\model-binding-from-route.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.55 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\mvc-output-xml Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\mvc-output-xml\mvc-output-xml.csproj (in 59 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\mvc-output-xml\mvc-output-xml.csproj] mvc-output-xml -> D:\GitHub\practical-aspnetcore\projects\mvc\mvc-output-xml\bin\Debug\net10.0\mvc-output-xml.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.60 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\nswag Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\nswag\nswag.csproj (in 3.35 sec). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\nswag\nswag.csproj] nswag -> D:\GitHub\practical-aspnetcore\projects\mvc\nswag\bin\Debug\net10.0\nswag.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:04.97 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\nswag-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\nswag-2\nswag-2.csproj (in 218 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\nswag-2\nswag-2.csproj] nswag-2 -> D:\GitHub\practical-aspnetcore\projects\mvc\nswag-2\bin\Debug\net10.0\nswag-2.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.84 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\output-formatter-syndication Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\output-formatter-syndication\output-formatter-syndication.csproj (in 226 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\output-formatter-syndication\output-formatter-syndication.csproj] output-formatter-syndication -> D:\GitHub\practical-aspnetcore\projects\mvc\output-formatter-syndication\bin\Debug\net10.0\output-formatter-syndication.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.91 D:\GitHub\practical-aspnetcore\projects>REM dotnet build mvc\razor-class-library\razor-class-library-1\src\RazorClassLibrary1 D:\GitHub\practical-aspnetcore\projects>REM dotnet build mvc\razor-class-library\razor-class-library-1\src\RazorClassLibrary2 D:\GitHub\practical-aspnetcore\projects>REM dotnet build mvc\razor-class-library\razor-class-library-1\src\WebApplication D:\GitHub\practical-aspnetcore\projects>REM dotnet build mvc\razor-class-library\razor-class-library-with-controllers\src\RazorClassLibrary1 D:\GitHub\practical-aspnetcore\projects>REM dotnet build mvc\razor-class-library\razor-class-library-with-controllers\src\WebApplication D:\GitHub\practical-aspnetcore\projects>REM dotnet build mvc\razor-class-library\razor-class-library-with-static-files\src\RazorClassLibrary1 D:\GitHub\practical-aspnetcore\projects>REM dotnet build mvc\razor-class-library\razor-class-library-with-static-files\src\RazorClassLibrary2 D:\GitHub\practical-aspnetcore\projects>REM dotnet build mvc\razor-class-library\razor-class-library-with-static-files\src\RazorClassLibraries.Mvc.Core D:\GitHub\practical-aspnetcore\projects>REM dotnet build mvc\razor-class-library\razor-class-library-with-static-files\src\WebApplication D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\result-filestream Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\result-filestream\result-filestream.csproj (in 68 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\result-filestream\result-filestream.csproj] result-filestream -> D:\GitHub\practical-aspnetcore\projects\mvc\result-filestream\bin\Debug\net10.0\result.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.70 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\result-physicalfile Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\result-physicalfile\result-physicalpath.csproj (in 68 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\result-physicalfile\result-physicalpath.csproj] result-physicalpath -> D:\GitHub\practical-aspnetcore\projects\mvc\result-physicalfile\bin\Debug\net10.0\result-physicalpath.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.74 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\routing\routing-1 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\routing\routing-1\routing-1.csproj (in 66 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\routing\routing-1\routing-1.csproj] routing-1 -> D:\GitHub\practical-aspnetcore\projects\mvc\routing\routing-1\bin\Debug\net10.0\routing-1.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.58 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\routing\routing-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\routing\routing-2\routing-2.csproj (in 59 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\routing\routing-2\routing-2.csproj] routing-2 -> D:\GitHub\practical-aspnetcore\projects\mvc\routing\routing-2\bin\Debug\net10.0\routing-2.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.55 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\routing\routing-3 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\routing\routing-3\routing-3.csproj (in 62 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\routing\routing-3\routing-3.csproj] routing-3 -> D:\GitHub\practical-aspnetcore\projects\mvc\routing\routing-3\bin\Debug\net10.0\routing-3.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.71 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\routing\routing-4 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\routing\routing-4\routing-4.csproj (in 65 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\routing\routing-4\routing-4.csproj] routing-4 -> D:\GitHub\practical-aspnetcore\projects\mvc\routing\routing-4\bin\Debug\net10.0\routing-4.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.65 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\routing\routing-5 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\routing\routing-5\routing-5.csproj (in 59 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\routing\routing-5\routing-5.csproj] routing-5 -> D:\GitHub\practical-aspnetcore\projects\mvc\routing\routing-5\bin\Debug\net10.0\routing-5.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.61 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\routing\routing-6 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\routing\routing-6\routing-6.csproj (in 61 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\routing\routing-6\routing-6.csproj] routing-6 -> D:\GitHub\practical-aspnetcore\projects\mvc\routing\routing-6\bin\Debug\net10.0\routing-6.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.59 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\routing\routing-7 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\routing\routing-7\routing-7.csproj (in 60 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\routing\routing-7\routing-7.csproj] routing-7 -> D:\GitHub\practical-aspnetcore\projects\mvc\routing\routing-7\bin\Debug\net10.0\routing-7.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.56 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\routing\routing-8 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\routing\routing-8\routing-8.csproj (in 59 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\routing\routing-8\routing-8.csproj] routing-8 -> D:\GitHub\practical-aspnetcore\projects\mvc\routing\routing-8\bin\Debug\net10.0\routing-8.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.54 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\routing\routing-9 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\routing\routing-9\routing-9.csproj (in 61 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\routing\routing-9\routing-9.csproj] routing-9 -> D:\GitHub\practical-aspnetcore\projects\mvc\routing\routing-9\bin\Debug\net10.0\routing-9.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.57 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\tag-helper\tag-helper-1 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\tag-helper\tag-helper-1\tag-helper.csproj (in 65 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\tag-helper\tag-helper-1\tag-helper.csproj] tag-helper -> D:\GitHub\practical-aspnetcore\projects\mvc\tag-helper\tag-helper-1\bin\Debug\net10.0\TagHelpers.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.63 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\tag-helper\tag-helper-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\tag-helper\tag-helper-2\tag-helper-2.csproj (in 66 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\tag-helper\tag-helper-2\tag-helper-2.csproj] tag-helper-2 -> D:\GitHub\practical-aspnetcore\projects\mvc\tag-helper\tag-helper-2\bin\Debug\net10.0\TagHelpers.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.64 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\tag-helper\tag-helper-3 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\tag-helper\tag-helper-3\tag-helper-3.csproj (in 59 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\tag-helper\tag-helper-3\tag-helper-3.csproj] tag-helper-3 -> D:\GitHub\practical-aspnetcore\projects\mvc\tag-helper\tag-helper-3\bin\Debug\net10.0\TagHelpers.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.69 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\tag-helper\tag-helper-4 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\tag-helper\tag-helper-4\tag-helper-4.csproj (in 53 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\tag-helper\tag-helper-4\tag-helper-4.csproj] tag-helper-4 -> D:\GitHub\practical-aspnetcore\projects\mvc\tag-helper\tag-helper-4\bin\Debug\net10.0\TagHelpers.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.63 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\tag-helper\tag-helper-5 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\tag-helper\tag-helper-5\tag-helper-5.csproj (in 64 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\tag-helper\tag-helper-5\tag-helper-5.csproj] tag-helper-5 -> D:\GitHub\practical-aspnetcore\projects\mvc\tag-helper\tag-helper-5\bin\Debug\net10.0\TagHelpers.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.62 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\tag-helper\tag-helper-img Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\tag-helper\tag-helper-img\tag-helper-img.csproj (in 56 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\tag-helper\tag-helper-img\tag-helper-img.csproj] tag-helper-img -> D:\GitHub\practical-aspnetcore\projects\mvc\tag-helper\tag-helper-img\bin\Debug\net10.0\tag-helper-img.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.71 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\tag-helper\tag-helper-link Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\tag-helper\tag-helper-link\tag-helper-link.csproj (in 69 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\tag-helper\tag-helper-link\tag-helper-link.csproj] tag-helper-link -> D:\GitHub\practical-aspnetcore\projects\mvc\tag-helper\tag-helper-link\bin\Debug\net10.0\TagHelpers.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.72 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\utf8json-formatter MSBUILD : error MSB1009: Project file does not exist. Switch: mvc\utf8json-formatter D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\view-component\view-component-1 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\view-component\view-component-1\view-component.csproj (in 67 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\view-component\view-component-1\view-component.csproj] view-component -> D:\GitHub\practical-aspnetcore\projects\mvc\view-component\view-component-1\bin\Debug\net10.0\view-component.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.59 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\view-component\view-component-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\view-component\view-component-2\view-component-2.csproj (in 58 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\view-component\view-component-2\view-component-2.csproj] view-component-2 -> D:\GitHub\practical-aspnetcore\projects\mvc\view-component\view-component-2\bin\Debug\net10.0\view-component-2.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.65 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\view-component\view-component-3 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\view-component\view-component-3\view-component-3.csproj (in 56 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\view-component\view-component-3\view-component-3.csproj] D:\GitHub\practical-aspnetcore\projects\mvc\view-component\view-component-3\Views\Shared\Components\HelloWorld\HelloWorld.cs(13,45): warning CS1998: This async method lacks 'await' operators and will run synchronously. Consider using the 'await' operator to await non-blocking API calls, or 'await Task.Run(...)' to do CPU-bound work on a background thread. [D:\GitHub\practical-aspnetcore\projects\mvc\view-component\view-component-3\view-component-3.csproj] view-component-3 -> D:\GitHub\practical-aspnetcore\projects\mvc\view-component\view-component-3\bin\Debug\net10.0\view-component-3.dll Build succeeded. D:\GitHub\practical-aspnetcore\projects\mvc\view-component\view-component-3\Views\Shared\Components\HelloWorld\HelloWorld.cs(13,45): warning CS1998: This async method lacks 'await' operators and will run synchronously. Consider using the 'await' operator to await non-blocking API calls, or 'await Task.Run(...)' to do CPU-bound work on a background thread. [D:\GitHub\practical-aspnetcore\projects\mvc\view-component\view-component-3\view-component-3.csproj] 1 Warning(s) 0 Error(s) Time Elapsed 00:00:01.59 D:\GitHub\practical-aspnetcore\projects>dotnet build mvc\view-component\view-component-4 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\mvc\view-component\view-component-4\view-component-4.csproj (in 62 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\mvc\view-component\view-component-4\view-component-4.csproj] view-component-4 -> D:\GitHub\practical-aspnetcore\projects\mvc\view-component\view-component-4\bin\Debug\net10.0\view-component-4.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.58 D:\GitHub\practical-aspnetcore\projects>REM Root-level newtonsoft-json project removed; using mvc\newtonsoft-json below. D:\GitHub\practical-aspnetcore\projects>dotnet build orchard-core\multi-tenant\Host Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\orchard-core\multi-tenant\Host\Host.csproj (in 5.58 sec). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\orchard-core\multi-tenant\Host\Host.csproj] Host -> D:\GitHub\practical-aspnetcore\projects\orchard-core\multi-tenant\Host\bin\Debug\net10.0\Host.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:07.60 D:\GitHub\practical-aspnetcore\projects>dotnet build orchard-core\routing\ForumModule Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\orchard-core\routing\ForumModule\ForumModule.csproj (in 1.23 sec). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\orchard-core\routing\ForumModule\ForumModule.csproj] ForumModule -> D:\GitHub\practical-aspnetcore\projects\orchard-core\routing\ForumModule\bin\Debug\net10.0\ForumModule.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.87 D:\GitHub\practical-aspnetcore\projects>dotnet build orchard-core\routing\Host Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\orchard-core\routing\Host\Host.csproj (in 234 ms). Restored D:\GitHub\practical-aspnetcore\projects\orchard-core\routing\TicketModule\TicketModule.csproj (in 234 ms). 1 of 3 projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\orchard-core\routing\Host\Host.csproj] C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\orchard-core\routing\TicketModule\TicketModule.csproj] ForumModule -> D:\GitHub\practical-aspnetcore\projects\orchard-core\routing\ForumModule\bin\Debug\net10.0\ForumModule.dll TicketModule -> D:\GitHub\practical-aspnetcore\projects\orchard-core\routing\TicketModule\bin\Debug\net10.0\TicketModule.dll Host -> D:\GitHub\practical-aspnetcore\projects\orchard-core\routing\Host\bin\Debug\net10.0\Host.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:03.31 D:\GitHub\practical-aspnetcore\projects>dotnet build orchard-core\routing\TicketModule Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\orchard-core\routing\TicketModule\TicketModule.csproj] TicketModule -> D:\GitHub\practical-aspnetcore\projects\orchard-core\routing\TicketModule\bin\Debug\net10.0\TicketModule.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.26 D:\GitHub\practical-aspnetcore\projects>dotnet build orchard-core\routing-2\ForumModule Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\orchard-core\routing-2\ForumModule\ForumModule.csproj (in 210 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\orchard-core\routing-2\ForumModule\ForumModule.csproj] ForumModule -> D:\GitHub\practical-aspnetcore\projects\orchard-core\routing-2\ForumModule\bin\Debug\net10.0\ForumModule.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.70 D:\GitHub\practical-aspnetcore\projects>dotnet build orchard-core\routing-2\Host Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\orchard-core\routing-2\TicketModule\TicketModule.csproj (in 221 ms). Restored D:\GitHub\practical-aspnetcore\projects\orchard-core\routing-2\Host\Host.csproj (in 221 ms). 1 of 3 projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\orchard-core\routing-2\Host\Host.csproj] C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\orchard-core\routing-2\TicketModule\TicketModule.csproj] ForumModule -> D:\GitHub\practical-aspnetcore\projects\orchard-core\routing-2\ForumModule\bin\Debug\net10.0\ForumModule.dll TicketModule -> D:\GitHub\practical-aspnetcore\projects\orchard-core\routing-2\TicketModule\bin\Debug\net10.0\TicketModule.dll Host -> D:\GitHub\practical-aspnetcore\projects\orchard-core\routing-2\Host\bin\Debug\net10.0\Host.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.30 D:\GitHub\practical-aspnetcore\projects>dotnet build orchard-core\routing-2\TicketModule Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\orchard-core\routing-2\TicketModule\TicketModule.csproj] TicketModule -> D:\GitHub\practical-aspnetcore\projects\orchard-core\routing-2\TicketModule\bin\Debug\net10.0\TicketModule.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.20 D:\GitHub\practical-aspnetcore\projects>dotnet build orchard-core\static-files\ForumModule Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\orchard-core\static-files\ForumModule\ForumModule.csproj (in 181 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\orchard-core\static-files\ForumModule\ForumModule.csproj] ForumModule -> D:\GitHub\practical-aspnetcore\projects\orchard-core\static-files\ForumModule\bin\Debug\net10.0\ForumModule.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.60 D:\GitHub\practical-aspnetcore\projects>dotnet build orchard-core\static-files\Host Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\orchard-core\static-files\Host\Host.csproj (in 227 ms). 1 of 2 projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\orchard-core\static-files\Host\Host.csproj] ForumModule -> D:\GitHub\practical-aspnetcore\projects\orchard-core\static-files\ForumModule\bin\Debug\net10.0\ForumModule.dll Host -> D:\GitHub\practical-aspnetcore\projects\orchard-core\static-files\Host\bin\Debug\net10.0\Host.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.28 D:\GitHub\practical-aspnetcore\projects>dotnet build password-hasher Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\password-hasher\password-hasher.csproj (in 62 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\password-hasher\password-hasher.csproj] password-hasher -> D:\GitHub\practical-aspnetcore\projects\password-hasher\bin\Debug\net10.0\password-hasher.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.54 D:\GitHub\practical-aspnetcore\projects>dotnet build razor-pages\custom-html-generator Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\razor-pages\custom-html-generator\custom-html-generator.csproj (in 57 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\razor-pages\custom-html-generator\custom-html-generator.csproj] custom-html-generator -> D:\GitHub\practical-aspnetcore\projects\razor-pages\custom-html-generator\bin\Debug\net10.0\custom-html-generator.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.69 D:\GitHub\practical-aspnetcore\projects>dotnet build razor-pages\hello-world Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\razor-pages\hello-world\hello-world.csproj (in 60 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\razor-pages\hello-world\hello-world.csproj] hello-world -> D:\GitHub\practical-aspnetcore\projects\razor-pages\hello-world\bin\Debug\net10.0\hello-world.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.56 D:\GitHub\practical-aspnetcore\projects>dotnet build razor-pages\razor\razor-1 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\razor-pages\razor\razor-1\razor-1.csproj (in 62 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\razor-pages\razor\razor-1\razor-1.csproj] razor-1 -> D:\GitHub\practical-aspnetcore\projects\razor-pages\razor\razor-1\bin\Debug\net10.0\razor-1.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.78 D:\GitHub\practical-aspnetcore\projects>dotnet build razor-pages\razor\razor-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\razor-pages\razor\razor-2\razor.csproj (in 67 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\razor-pages\razor\razor-2\razor.csproj] razor -> D:\GitHub\practical-aspnetcore\projects\razor-pages\razor\razor-2\bin\Debug\net10.0\razor.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.62 D:\GitHub\practical-aspnetcore\projects>dotnet build razor-pages\razor-pages-basic Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\razor-pages\razor-pages-basic\razor-pages-basic.csproj (in 81 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\razor-pages\razor-pages-basic\razor-pages-basic.csproj] razor-pages-basic -> D:\GitHub\practical-aspnetcore\projects\razor-pages\razor-pages-basic\bin\Debug\net10.0\razor-pages-basic.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.77 D:\GitHub\practical-aspnetcore\projects>dotnet build razor-pages\razor-pages-mvc Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\razor-pages\razor-pages-mvc\razor-pages-mvc.csproj (in 2.31 sec). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\razor-pages\razor-pages-mvc\razor-pages-mvc.csproj] razor-pages-mvc -> D:\GitHub\practical-aspnetcore\projects\razor-pages\razor-pages-mvc\bin\Debug\net10.0\razor-pages-mvc.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:04.44 D:\GitHub\practical-aspnetcore\projects>dotnet build razor-pages\routing Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\razor-pages\routing\routing.csproj (in 115 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\razor-pages\routing\routing.csproj] routing -> D:\GitHub\practical-aspnetcore\projects\razor-pages\routing\bin\Debug\net10.0\routing.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.94 D:\GitHub\practical-aspnetcore\projects>dotnet build razor-pages\routing-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\razor-pages\routing-2\routing-2.csproj (in 84 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\razor-pages\routing-2\routing-2.csproj] routing-2 -> D:\GitHub\practical-aspnetcore\projects\razor-pages\routing-2\bin\Debug\net10.0\routing-2.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.38 D:\GitHub\practical-aspnetcore\projects>dotnet build request\anti-forgery Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\request\anti-forgery\anti-forgery.csproj (in 80 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\request\anti-forgery\anti-forgery.csproj] anti-forgery -> D:\GitHub\practical-aspnetcore\projects\request\anti-forgery\bin\Debug\net10.0\anti-forgery.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.33 D:\GitHub\practical-aspnetcore\projects>dotnet build request\cookies-1 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\request\cookies-1\cookies-1.csproj (in 56 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\request\cookies-1\cookies-1.csproj] cookies-1 -> D:\GitHub\practical-aspnetcore\projects\request\cookies-1\bin\Debug\net10.0\cookies-1.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.75 D:\GitHub\practical-aspnetcore\projects>dotnet build request\cookies-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\request\cookies-2\cookies-2.csproj (in 55 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\request\cookies-2\cookies-2.csproj] cookies-2 -> D:\GitHub\practical-aspnetcore\projects\request\cookies-2\bin\Debug\net10.0\cookies-2.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.68 D:\GitHub\practical-aspnetcore\projects>dotnet build request\form-upload-file Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\request\form-upload-file\form-upload-file.csproj (in 71 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\request\form-upload-file\form-upload-file.csproj] form-upload-file -> D:\GitHub\practical-aspnetcore\projects\request\form-upload-file\bin\Debug\net10.0\form-upload-file.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.65 D:\GitHub\practical-aspnetcore\projects>dotnet build request\form-values Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\request\form-values\form-values.csproj (in 67 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\request\form-values\form-values.csproj] form-values -> D:\GitHub\practical-aspnetcore\projects\request\form-values\bin\Debug\net10.0\form-values.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.66 D:\GitHub\practical-aspnetcore\projects>dotnet build request\query-string-1 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\request\query-string-1\query-string-1.csproj (in 62 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\request\query-string-1\query-string-1.csproj] query-string-1 -> D:\GitHub\practical-aspnetcore\projects\request\query-string-1\bin\Debug\net10.0\query-string-1.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.65 D:\GitHub\practical-aspnetcore\projects>dotnet build request\query-string-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\request\query-string-2\query-string-2.csproj (in 61 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\request\query-string-2\query-string-2.csproj] query-string-2 -> D:\GitHub\practical-aspnetcore\projects\request\query-string-2\bin\Debug\net10.0\query-string-2.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.61 D:\GitHub\practical-aspnetcore\projects>dotnet build request\query-string-3 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\request\query-string-3\query-string-3.csproj (in 55 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\request\query-string-3\query-string-3.csproj] query-string-3 -> D:\GitHub\practical-aspnetcore\projects\request\query-string-3\bin\Debug\net10.0\query-string-3.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.62 D:\GitHub\practical-aspnetcore\projects>dotnet build request\request-headers Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\request\request-headers\request-headers.csproj (in 59 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\request\request-headers\request-headers.csproj] request-headers -> D:\GitHub\practical-aspnetcore\projects\request\request-headers\bin\Debug\net10.0\request-headers.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.55 D:\GitHub\practical-aspnetcore\projects>dotnet build request\request-headers-names Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\request\request-headers-names\request-headers-names.csproj (in 61 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\request\request-headers-names\request-headers-names.csproj] request-headers-names -> D:\GitHub\practical-aspnetcore\projects\request\request-headers-names\bin\Debug\net10.0\request-headers-names.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.53 D:\GitHub\practical-aspnetcore\projects>dotnet build request\request-headers-typed Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\request\request-headers-typed\request-headers-typed.csproj (in 64 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\request\request-headers-typed\request-headers-typed.csproj] request-headers-typed -> D:\GitHub\practical-aspnetcore\projects\request\request-headers-typed\bin\Debug\net10.0\request-headers-typed.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.53 D:\GitHub\practical-aspnetcore\projects>dotnet build request\request-verb Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\request\request-verb\request-verb.csproj (in 66 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\request\request-verb\request-verb.csproj] request-verb -> D:\GitHub\practical-aspnetcore\projects\request\request-verb\bin\Debug\net10.0\request-verb.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.53 D:\GitHub\practical-aspnetcore\projects>dotnet build response\compression-response Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\response\compression-response\compression-response.csproj (in 77 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\response\compression-response\compression-response.csproj] compression-response -> D:\GitHub\practical-aspnetcore\projects\response\compression-response\bin\Debug\net10.0\compression-response.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.53 D:\GitHub\practical-aspnetcore\projects>dotnet build response\response-buffering MSBUILD : error MSB1009: Project file does not exist. Switch: response\response-buffering D:\GitHub\practical-aspnetcore\projects>dotnet build response\response-header Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\response\response-header\response-header.csproj (in 54 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\response\response-header\response-header.csproj] response-header -> D:\GitHub\practical-aspnetcore\projects\response\response-header\bin\Debug\net10.0\response-header.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.57 D:\GitHub\practical-aspnetcore\projects>dotnet build response\trailing-headers Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\response\trailing-headers\trailing-headers.csproj (in 58 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\response\trailing-headers\trailing-headers.csproj] trailing-headers -> D:\GitHub\practical-aspnetcore\projects\response\trailing-headers\bin\Debug\net10.0\trailing-headers.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.57 D:\GitHub\practical-aspnetcore\projects>dotnet build rewrite\rewrite-1 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\rewrite\rewrite-1\rewrite.csproj (in 70 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\rewrite\rewrite-1\rewrite.csproj] rewrite -> D:\GitHub\practical-aspnetcore\projects\rewrite\rewrite-1\bin\Debug\net10.0\rewrite.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.62 D:\GitHub\practical-aspnetcore\projects>dotnet build rewrite\rewrite-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\rewrite\rewrite-2\rewrite-2.csproj (in 61 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\rewrite\rewrite-2\rewrite-2.csproj] rewrite-2 -> D:\GitHub\practical-aspnetcore\projects\rewrite\rewrite-2\bin\Debug\net10.0\rewrite-2.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.53 D:\GitHub\practical-aspnetcore\projects>dotnet build rewrite\rewrite-3 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\rewrite\rewrite-3\rewrite-3.csproj (in 75 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\rewrite\rewrite-3\rewrite-3.csproj] rewrite-3 -> D:\GitHub\practical-aspnetcore\projects\rewrite\rewrite-3\bin\Debug\net10.0\rewrite-3.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.67 D:\GitHub\practical-aspnetcore\projects>dotnet build rewrite\rewrite-4 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\rewrite\rewrite-4\rewrite-4.csproj (in 63 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\rewrite\rewrite-4\rewrite-4.csproj] rewrite-4 -> D:\GitHub\practical-aspnetcore\projects\rewrite\rewrite-4\bin\Debug\net10.0\rewrite-4.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.75 D:\GitHub\practical-aspnetcore\projects>dotnet build rewrite\rewrite-5 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\rewrite\rewrite-5\rewrite-5.csproj (in 71 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\rewrite\rewrite-5\rewrite-5.csproj] rewrite-5 -> D:\GitHub\practical-aspnetcore\projects\rewrite\rewrite-5\bin\Debug\net10.0\rewrite-5.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.27 D:\GitHub\practical-aspnetcore\projects>dotnet build rewrite\rewrite-6 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\rewrite\rewrite-6\rewrite-6.csproj (in 73 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\rewrite\rewrite-6\rewrite-6.csproj] rewrite-6 -> D:\GitHub\practical-aspnetcore\projects\rewrite\rewrite-6\bin\Debug\net10.0\rewrite-6.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:03.76 D:\GitHub\practical-aspnetcore\projects>dotnet build security\authentication-with-identity\src Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\security\authentication-with-identity\src\authentication-with-identity.csproj] C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.targets(305,5): warning NETSDK1206: Found version-specific or distribution-specific runtime identifier(s): alpine-x64. Affected libraries: SQLitePCLRaw.lib.e_sqlite3. In .NET 8.0 and higher, assets for version-specific and distribution-specific runtime identifiers will not be found by default. See https://aka.ms/dotnet/rid-usage for details. [D:\GitHub\practical-aspnetcore\projects\security\authentication-with-identity\src\authentication-with-identity.csproj] authentication-with-identity -> D:\GitHub\practical-aspnetcore\projects\security\authentication-with-identity\src\bin\Debug\net10.0\authentication-with-identity.dll Build succeeded. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.targets(305,5): warning NETSDK1206: Found version-specific or distribution-specific runtime identifier(s): alpine-x64. Affected libraries: SQLitePCLRaw.lib.e_sqlite3. In .NET 8.0 and higher, assets for version-specific and distribution-specific runtime identifiers will not be found by default. See https://aka.ms/dotnet/rid-usage for details. [D:\GitHub\practical-aspnetcore\projects\security\authentication-with-identity\src\authentication-with-identity.csproj] 1 Warning(s) 0 Error(s) Time Elapsed 00:00:05.68 D:\GitHub\practical-aspnetcore\projects>dotnet build signalr\signalr-1\Client Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\signalr\signalr-1\Client\Client.csproj (in 154 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\signalr\signalr-1\Client\Client.csproj] Client -> D:\GitHub\practical-aspnetcore\projects\signalr\signalr-1\Client\bin\Debug\net10.0\Client.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:08.64 D:\GitHub\practical-aspnetcore\projects>dotnet build signalr\signalr-1\Server Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\signalr\signalr-1\Server\signalr.csproj (in 107 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\signalr\signalr-1\Server\signalr.csproj] signalr -> D:\GitHub\practical-aspnetcore\projects\signalr\signalr-1\Server\bin\Debug\net10.0\signalr.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:05.85 D:\GitHub\practical-aspnetcore\projects>dotnet build sse Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\sse\sse.csproj (in 73 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\sse\sse.csproj] sse -> D:\GitHub\practical-aspnetcore\projects\sse\bin\Debug\net10.0\sse.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.17 D:\GitHub\practical-aspnetcore\projects>REM Removed deprecated startup\* samples (folder no longer present). D:\GitHub\practical-aspnetcore\projects>dotnet build syndications\syndication-1 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\syndications\syndication-1\syndication.csproj (in 249 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\syndications\syndication-1\syndication.csproj] syndication -> D:\GitHub\practical-aspnetcore\projects\syndications\syndication-1\bin\Debug\net10.0\syndication.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.20 D:\GitHub\practical-aspnetcore\projects>dotnet build syndications\syndication-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\syndications\syndication-2\syndication-2.csproj (in 686 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\syndications\syndication-2\syndication-2.csproj] syndication-2 -> D:\GitHub\practical-aspnetcore\projects\syndications\syndication-2\bin\Debug\net10.0\syndication-2.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.29 D:\GitHub\practical-aspnetcore\projects>REM syndications\syndication-3 removed (no project). D:\GitHub\practical-aspnetcore\projects>dotnet build uri-helper\uri-helper-build-absolute Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\uri-helper\uri-helper-build-absolute\uri-helper-build-absolute.csproj (in 57 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\uri-helper\uri-helper-build-absolute\uri-helper-build-absolute.csproj] uri-helper-build-absolute -> D:\GitHub\practical-aspnetcore\projects\uri-helper\uri-helper-build-absolute\bin\Debug\net10.0\uri-helper-build-absolute.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.93 D:\GitHub\practical-aspnetcore\projects>dotnet build uri-helper\uri-helper-from-absolute Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\uri-helper\uri-helper-from-absolute\uri-helper-from-absolute.csproj (in 79 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\uri-helper\uri-helper-from-absolute\uri-helper-from-absolute.csproj] uri-helper-from-absolute -> D:\GitHub\practical-aspnetcore\projects\uri-helper\uri-helper-from-absolute\bin\Debug\net10.0\uri-helper-from-absolute.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.13 D:\GitHub\practical-aspnetcore\projects>dotnet build uri-helper\uri-helper-get-display-url Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\uri-helper\uri-helper-get-display-url\uri-helper-get-display-url.csproj (in 82 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\uri-helper\uri-helper-get-display-url\uri-helper-get-display-url.csproj] uri-helper-get-display-url -> D:\GitHub\practical-aspnetcore\projects\uri-helper\uri-helper-get-display-url\bin\Debug\net10.0\uri-helper-get-display-url.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.86 D:\GitHub\practical-aspnetcore\projects>dotnet build uri-helper\uri-helper-get-encoded-path-and-query Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\uri-helper\uri-helper-get-encoded-path-and-query\uri-helper-get-encoded-path-and-query.csproj (in 74 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\uri-helper\uri-helper-get-encoded-path-and-query\uri-helper-get-encoded-path-and-query.csproj] uri-helper-get-encoded-path-and-query -> D:\GitHub\practical-aspnetcore\projects\uri-helper\uri-helper-get-encoded-path-and-query\bin\Debug\net10.0\uri-helper-get-encoded-path-and-query.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.57 D:\GitHub\practical-aspnetcore\projects>dotnet build uri-helper\uri-helper-get-encoded-url Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\uri-helper\uri-helper-get-encoded-url\uri-helper-get-encoded-url.csproj (in 57 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\uri-helper\uri-helper-get-encoded-url\uri-helper-get-encoded-url.csproj] uri-helper-get-encoded-url -> D:\GitHub\practical-aspnetcore\projects\uri-helper\uri-helper-get-encoded-url\bin\Debug\net10.0\uri-helper-get-encoded-url.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.48 D:\GitHub\practical-aspnetcore\projects>dotnet build version Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\version\version.csproj (in 57 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\version\version.csproj] version -> D:\GitHub\practical-aspnetcore\projects\version\bin\Debug\net10.0\version.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.56 D:\GitHub\practical-aspnetcore\projects>dotnet build web-sockets\web-sockets-1 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\web-sockets\web-sockets-1\web-sockets.csproj (in 53 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\web-sockets\web-sockets-1\web-sockets.csproj] web-sockets -> D:\GitHub\practical-aspnetcore\projects\web-sockets\web-sockets-1\bin\Debug\net10.0\web-sockets.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.50 D:\GitHub\practical-aspnetcore\projects>dotnet build web-sockets\web-sockets-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\web-sockets\web-sockets-2\web-sockets-2.csproj (in 55 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\web-sockets\web-sockets-2\web-sockets-2.csproj] web-sockets-2 -> D:\GitHub\practical-aspnetcore\projects\web-sockets\web-sockets-2\bin\Debug\net10.0\web-sockets-2.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.54 D:\GitHub\practical-aspnetcore\projects>dotnet build web-sockets\web-sockets-3 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\web-sockets\web-sockets-3\web-sockets-3.csproj (in 55 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\web-sockets\web-sockets-3\web-sockets-3.csproj] web-sockets-3 -> D:\GitHub\practical-aspnetcore\projects\web-sockets\web-sockets-3\bin\Debug\net10.0\web-sockets-3.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.55 D:\GitHub\practical-aspnetcore\projects>dotnet build web-sockets\web-sockets-4 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\web-sockets\web-sockets-4\web-sockets-4.csproj (in 109 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\web-sockets\web-sockets-4\web-sockets-4.csproj] web-sockets-4 -> D:\GitHub\practical-aspnetcore\projects\web-sockets\web-sockets-4\bin\Debug\net10.0\web-sockets-4.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.66 D:\GitHub\practical-aspnetcore\projects>dotnet build web-sockets\web-sockets-5 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\web-sockets\web-sockets-5\web-sockets-5.csproj (in 70 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\web-sockets\web-sockets-5\web-sockets-5.csproj] web-sockets-5 -> D:\GitHub\practical-aspnetcore\projects\web-sockets\web-sockets-5\bin\Debug\net10.0\web-sockets-5.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.67 D:\GitHub\practical-aspnetcore\projects>dotnet build web-utilities\web-utilities-query-helpers Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\web-utilities\web-utilities-query-helpers\web-utilities-query-helper.csproj (in 65 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\web-utilities\web-utilities-query-helpers\web-utilities-query-helper.csproj] web-utilities-query-helper -> D:\GitHub\practical-aspnetcore\projects\web-utilities\web-utilities-query-helpers\bin\Debug\net10.0\web-utilities-query-helper.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.68 D:\GitHub\practical-aspnetcore\projects>dotnet build web-utilities\web-utilities-query-helpers-2 Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\web-utilities\web-utilities-query-helpers-2\web-utilities-query-helper-2.csproj (in 69 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\web-utilities\web-utilities-query-helpers-2\web-utilities-query-helper-2.csproj] web-utilities-query-helper-2 -> D:\GitHub\practical-aspnetcore\projects\web-utilities\web-utilities-query-helpers-2\bin\Debug\net10.0\web-utilities-query-helper-2.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.71 D:\GitHub\practical-aspnetcore\projects>dotnet build web-utilities\web-utilities-reason-phrases Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\web-utilities\web-utilities-reason-phrases\web-utilities-reason-phrases.csproj (in 78 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\web-utilities\web-utilities-reason-phrases\web-utilities-reason-phrases.csproj] web-utilities-reason-phrases -> D:\GitHub\practical-aspnetcore\projects\web-utilities\web-utilities-reason-phrases\bin\Debug\net10.0\web-utilities-reason-phrases.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:03.08 D:\GitHub\practical-aspnetcore\projects>dotnet build sfa\wiki Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\sfa\wiki\wiki.csproj (in 3.26 sec). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\sfa\wiki\wiki.csproj] wiki -> D:\GitHub\practical-aspnetcore\projects\sfa\wiki\bin\Debug\net10.0\wiki.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:06.21 D:\GitHub\practical-aspnetcore\projects>REM Removed old orleans hello-world* and http-client samples (not present). D:\GitHub\practical-aspnetcore\projects>dotnet build orleans\reminder Determining projects to restore... D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. [D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.sln] D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. [D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.sln] Restored D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.csproj (in 6.15 sec). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\reminder\Program.cs(97,14): error CS1061: 'ILogger' does not contain a definition for 'Info' and no accessible extension method 'Info' accepting a first argument of type 'ILogger' could be found (are you missing a using directive or an assembly reference?) [D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\reminder\Program.cs(98,14): error CS1061: 'ILogger' does not contain a definition for 'Info' and no accessible extension method 'Info' accepting a first argument of type 'ILogger' could be found (are you missing a using directive or an assembly reference?) [D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\reminder\Program.cs(103,14): error CS1061: 'ILogger' does not contain a definition for 'Info' and no accessible extension method 'Info' accepting a first argument of type 'ILogger' could be found (are you missing a using directive or an assembly reference?) [D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\reminder\Program.cs(111,23): error CS0103: The name 'GetReminder' does not exist in the current context [D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\reminder\Program.cs(114,19): error CS0103: The name 'RegisterOrUpdateReminder' does not exist in the current context [D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\reminder\Program.cs(122,23): error CS0103: The name 'GetReminder' does not exist in the current context [D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\reminder\Program.cs(125,19): error CS0103: The name 'UnregisterReminder' does not exist in the current context [D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.csproj] Build FAILED. D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. [D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.sln] D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. [D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.sln] D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\reminder\Program.cs(97,14): error CS1061: 'ILogger' does not contain a definition for 'Info' and no accessible extension method 'Info' accepting a first argument of type 'ILogger' could be found (are you missing a using directive or an assembly reference?) [D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\reminder\Program.cs(98,14): error CS1061: 'ILogger' does not contain a definition for 'Info' and no accessible extension method 'Info' accepting a first argument of type 'ILogger' could be found (are you missing a using directive or an assembly reference?) [D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\reminder\Program.cs(103,14): error CS1061: 'ILogger' does not contain a definition for 'Info' and no accessible extension method 'Info' accepting a first argument of type 'ILogger' could be found (are you missing a using directive or an assembly reference?) [D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\reminder\Program.cs(111,23): error CS0103: The name 'GetReminder' does not exist in the current context [D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\reminder\Program.cs(114,19): error CS0103: The name 'RegisterOrUpdateReminder' does not exist in the current context [D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\reminder\Program.cs(122,23): error CS0103: The name 'GetReminder' does not exist in the current context [D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\reminder\Program.cs(125,19): error CS0103: The name 'UnregisterReminder' does not exist in the current context [D:\GitHub\practical-aspnetcore\projects\orleans\reminder\reminder.csproj] 4 Warning(s) 7 Error(s) Time Elapsed 00:00:13.22 D:\GitHub\practical-aspnetcore\projects>dotnet build orleans\rss-reader Determining projects to restore... D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader\rss-reader.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader\rss-reader.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader\rss-reader.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj Restored D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader\rss-reader.csproj (in 4.79 sec). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader\rss-reader.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader\rss-reader.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader\rss-reader.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader\rss-reader.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj Orleans.CodeGenerator - command-line = SourceToSource D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader\obj\Debug\net10.0\rss-reader.orleans.g.args.txt rss-reader -> D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader\bin\Debug\net10.0\rss-reader.dll Build succeeded. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader\rss-reader.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader\rss-reader.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader\rss-reader.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader\rss-reader.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader\rss-reader.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader\rss-reader.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj 6 Warning(s) 0 Error(s) Time Elapsed 00:00:13.52 D:\GitHub\practical-aspnetcore\projects>dotnet build orleans\rss-reader-2 Determining projects to restore... D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-2\rss-reader-2.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-2\rss-reader-2.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-2\rss-reader-2.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj Restored D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-2\rss-reader-2.csproj (in 276 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-2\rss-reader-2.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-2\rss-reader-2.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-2\rss-reader-2.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-2\rss-reader-2.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj Orleans.CodeGenerator - command-line = SourceToSource D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-2\obj\Debug\net10.0\rss-reader-2.orleans.g.args.txt rss-reader-2 -> D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-2\bin\Debug\net10.0\rss-reader-2.dll Build succeeded. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-2\rss-reader-2.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-2\rss-reader-2.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-2\rss-reader-2.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-2\rss-reader-2.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-2\rss-reader-2.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-2\rss-reader-2.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj 6 Warning(s) 0 Error(s) Time Elapsed 00:00:08.70 D:\GitHub\practical-aspnetcore\projects>dotnet build orleans\rss-reader-3 Determining projects to restore... D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\rss-reader-3.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\rss-reader-3.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\rss-reader-3.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj Restored D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\rss-reader-3.csproj (in 278 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\rss-reader-3.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\rss-reader-3.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\rss-reader-3.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\rss-reader-3.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj Orleans.CodeGenerator - command-line = SourceToSource D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\obj\Debug\net10.0\rss-reader-3.orleans.g.args.txt D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\Opml.cs(33,21): warning CS8602: Dereference of a possibly null reference. [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\rss-reader-3.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\Opml.cs(61,22): warning CS8602: Dereference of a possibly null reference. [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\rss-reader-3.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\Program.cs(41,22): warning CS8604: Possible null reference argument for parameter 'factory' in 'HttpClient HttpClientFactoryExtensions.CreateClient(IHttpClientFactory factory)'. [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\rss-reader-3.csproj] rss-reader-3 -> D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\bin\Debug\net10.0\rss-reader-3.dll Build succeeded. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\rss-reader-3.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\rss-reader-3.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\rss-reader-3.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\rss-reader-3.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\rss-reader-3.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\rss-reader-3.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\Opml.cs(33,21): warning CS8602: Dereference of a possibly null reference. [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\rss-reader-3.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\Opml.cs(61,22): warning CS8602: Dereference of a possibly null reference. [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\rss-reader-3.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\Program.cs(41,22): warning CS8604: Possible null reference argument for parameter 'factory' in 'HttpClient HttpClientFactoryExtensions.CreateClient(IHttpClientFactory factory)'. [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-3\rss-reader-3.csproj] 9 Warning(s) 0 Error(s) Time Elapsed 00:00:06.95 D:\GitHub\practical-aspnetcore\projects>dotnet build orleans\rss-reader-4 Determining projects to restore... D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\rss-reader-4.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\rss-reader-4.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\rss-reader-4.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj Restored D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\rss-reader-4.csproj (in 336 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\rss-reader-4.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\rss-reader-4.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\rss-reader-4.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\rss-reader-4.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj Orleans.CodeGenerator - command-line = SourceToSource D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\obj\Debug\net10.0\rss-reader-4.orleans.g.args.txt D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\Opml.cs(37,21): warning CS8602: Dereference of a possibly null reference. [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\rss-reader-4.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\Opml.cs(65,22): warning CS8602: Dereference of a possibly null reference. [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\rss-reader-4.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\Program.cs(39,22): warning CS8604: Possible null reference argument for parameter 'factory' in 'HttpClient HttpClientFactoryExtensions.CreateClient(IHttpClientFactory factory)'. [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\rss-reader-4.csproj] rss-reader-4 -> D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\bin\Debug\net10.0\rss-reader-4.dll Build succeeded. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\rss-reader-4.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\rss-reader-4.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\rss-reader-4.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\rss-reader-4.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\rss-reader-4.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\rss-reader-4.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\Opml.cs(37,21): warning CS8602: Dereference of a possibly null reference. [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\rss-reader-4.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\Opml.cs(65,22): warning CS8602: Dereference of a possibly null reference. [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\rss-reader-4.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\Program.cs(39,22): warning CS8604: Possible null reference argument for parameter 'factory' in 'HttpClient HttpClientFactoryExtensions.CreateClient(IHttpClientFactory factory)'. [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-4\rss-reader-4.csproj] 9 Warning(s) 0 Error(s) Time Elapsed 00:00:09.36 D:\GitHub\practical-aspnetcore\projects>dotnet build orleans\rss-reader-5 Determining projects to restore... D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\rss-reader-5.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\rss-reader-5.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\rss-reader-5.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj Restored D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\rss-reader-5.csproj (in 315 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\rss-reader-5.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\rss-reader-5.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\rss-reader-5.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\rss-reader-5.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj Orleans.CodeGenerator - command-line = SourceToSource D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\obj\Debug\net10.0\rss-reader-5.orleans.g.args.txt D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\Opml.cs(37,21): warning CS8602: Dereference of a possibly null reference. [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\rss-reader-5.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\Opml.cs(65,22): warning CS8602: Dereference of a possibly null reference. [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\rss-reader-5.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\Program.cs(42,22): warning CS8604: Possible null reference argument for parameter 'factory' in 'HttpClient HttpClientFactoryExtensions.CreateClient(IHttpClientFactory factory)'. [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\rss-reader-5.csproj] rss-reader-5 -> D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\bin\Debug\net10.0\rss-reader-5.dll Build succeeded. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\rss-reader-5.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\rss-reader-5.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\rss-reader-5.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\rss-reader-5.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\rss-reader-5.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\rss-reader-5.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\Opml.cs(37,21): warning CS8602: Dereference of a possibly null reference. [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\rss-reader-5.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\Opml.cs(65,22): warning CS8602: Dereference of a possibly null reference. [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\rss-reader-5.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\Program.cs(42,22): warning CS8604: Possible null reference argument for parameter 'factory' in 'HttpClient HttpClientFactoryExtensions.CreateClient(IHttpClientFactory factory)'. [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-5\rss-reader-5.csproj] 9 Warning(s) 0 Error(s) Time Elapsed 00:00:07.43 D:\GitHub\practical-aspnetcore\projects>dotnet build orleans\rss-reader-6 Determining projects to restore... D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\rss-reader-6.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\rss-reader-6.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\rss-reader-6.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj Restored D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\rss-reader-6.csproj (in 280 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\rss-reader-6.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\rss-reader-6.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\rss-reader-6.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\rss-reader-6.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj Orleans.CodeGenerator - command-line = SourceToSource D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\obj\Debug\net10.0\rss-reader-6.orleans.g.args.txt D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\Opml.cs(37,21): warning CS8602: Dereference of a possibly null reference. [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\rss-reader-6.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\Opml.cs(65,22): warning CS8602: Dereference of a possibly null reference. [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\rss-reader-6.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\Program.cs(42,22): warning CS8604: Possible null reference argument for parameter 'factory' in 'HttpClient HttpClientFactoryExtensions.CreateClient(IHttpClientFactory factory)'. [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\rss-reader-6.csproj] rss-reader-6 -> D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\bin\Debug\net10.0\rss-reader-6.dll Build succeeded. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\rss-reader-6.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\rss-reader-6.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\rss-reader-6.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\rss-reader-6.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\rss-reader-6.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\rss-reader-6.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\Opml.cs(37,21): warning CS8602: Dereference of a possibly null reference. [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\rss-reader-6.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\Opml.cs(65,22): warning CS8602: Dereference of a possibly null reference. [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\rss-reader-6.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\Program.cs(42,22): warning CS8604: Possible null reference argument for parameter 'factory' in 'HttpClient HttpClientFactoryExtensions.CreateClient(IHttpClientFactory factory)'. [D:\GitHub\practical-aspnetcore\projects\orleans\rss-reader-6\rss-reader-6.csproj] 9 Warning(s) 0 Error(s) Time Elapsed 00:00:07.23 D:\GitHub\practical-aspnetcore\projects>dotnet build orleans\timer Determining projects to restore... D:\GitHub\practical-aspnetcore\projects\orleans\timer\timer.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\timer\timer.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\timer\timer.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj Restored D:\GitHub\practical-aspnetcore\projects\orleans\timer\timer.csproj (in 267 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\orleans\timer\timer.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\timer\timer.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\timer\timer.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\timer\timer.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj Orleans.CodeGenerator - command-line = SourceToSource D:\GitHub\practical-aspnetcore\projects\orleans\timer\obj\Debug\net10.0\timer.orleans.g.args.txt D:\GitHub\practical-aspnetcore\projects\orleans\timer\obj\Debug\net10.0\timer.orleans.g.cs(128,53): warning SYSLIB0050: 'FormatterServices' is obsolete: 'Formatter-based serialization is obsolete and should not be used.' (https://aka.ms/dotnet-warnings/SYSLIB0050) [D:\GitHub\practical-aspnetcore\projects\orleans\timer\timer.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\timer\obj\Debug\net10.0\timer.orleans.g.cs(146,53): warning SYSLIB0050: 'FormatterServices' is obsolete: 'Formatter-based serialization is obsolete and should not be used.' (https://aka.ms/dotnet-warnings/SYSLIB0050) [D:\GitHub\practical-aspnetcore\projects\orleans\timer\timer.csproj] timer -> D:\GitHub\practical-aspnetcore\projects\orleans\timer\bin\Debug\net10.0\timer.dll Build succeeded. D:\GitHub\practical-aspnetcore\projects\orleans\timer\timer.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\timer\timer.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\timer\timer.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj D:\GitHub\practical-aspnetcore\projects\orleans\timer\timer.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\timer\timer.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. D:\GitHub\practical-aspnetcore\projects\orleans\timer\timer.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj D:\GitHub\practical-aspnetcore\projects\orleans\timer\obj\Debug\net10.0\timer.orleans.g.cs(128,53): warning SYSLIB0050: 'FormatterServices' is obsolete: 'Formatter-based serialization is obsolete and should not be used.' (https://aka.ms/dotnet-warnings/SYSLIB0050) [D:\GitHub\practical-aspnetcore\projects\orleans\timer\timer.csproj] D:\GitHub\practical-aspnetcore\projects\orleans\timer\obj\Debug\net10.0\timer.orleans.g.cs(146,53): warning SYSLIB0050: 'FormatterServices' is obsolete: 'Formatter-based serialization is obsolete and should not be used.' (https://aka.ms/dotnet-warnings/SYSLIB0050) [D:\GitHub\practical-aspnetcore\projects\orleans\timer\timer.csproj] 8 Warning(s) 0 Error(s) Time Elapsed 00:00:06.98 ================================================ FILE: build-log.txt ================================================ D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... Restored D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj (in 73 ms). C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.64 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.96 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.31 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.19 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.17 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.01 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.16 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.92 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.84 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.81 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.03 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.92 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.06 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.23 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.99 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.24 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.99 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.80 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.11 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.30 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.17 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.83 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.93 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.12 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.92 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.81 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.03 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.69 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.02 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.15 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.37 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.23 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.94 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.87 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.76 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.79 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.92 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.03 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.85 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.01 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.24 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.93 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.88 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.02 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.28 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.20 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.94 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.21 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.06 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.63 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.00 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.89 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.00 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.84 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.14 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.82 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.11 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.16 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.01 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.84 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.98 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.26 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.14 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.91 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.29 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.18 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.83 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.11 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.24 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.98 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.28 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.08 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.12 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.27 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.15 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.91 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.22 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.89 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.80 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.87 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.01 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.06 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.73 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.23 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.95 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.95 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.88 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.95 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.35 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.78 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.96 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.11 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.08 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.06 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.79 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.81 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.00 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.74 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.02 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.96 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.06 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.05 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.21 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.84 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.26 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.11 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.19 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.92 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.97 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.35 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.97 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.23 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.01 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.18 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.23 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.05 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.00 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.02 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.95 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.93 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.03 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.00 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.07 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.03 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.23 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.12 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.64 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.06 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.97 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.90 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.26 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.83 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.73 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.66 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.94 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.58 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.12 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.98 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.54 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.09 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ D:\GitHub\practical-aspnetcore\projects>call build.bat The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.81 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.85 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.88 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.72 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.05 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.17 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.65 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.62 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.53 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.76 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.68 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.62 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.95 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.65 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.43 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.03 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.87 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.81 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.14 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.49 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.71 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.66 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.63 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.93 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.99 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.79 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.74 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.74 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.02 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.12 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.22 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.81 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.62 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.98 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.99 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.93 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.24 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.68 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.66 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.55 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.27 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.67 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.14 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.77 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.72 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.25 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.07 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.21 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.24 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.83 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.82 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.03 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.06 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.98 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.68 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.94 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.64 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.87 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.58 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.64 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.54 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.63 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.66 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.85 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.94 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.88 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.48 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.54 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.55 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.66 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.22 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.56 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.98 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.86 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.06 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.71 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.99 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.91 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.21 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.21 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.84 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.01 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.67 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.04 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.84 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.93 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.79 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.79 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.12 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.80 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.19 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.77 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.95 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.14 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.18 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.14 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.80 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.24 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.15 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.76 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.11 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.06 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.11 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.03 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.93 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.71 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.96 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.74 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.52 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.93 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.97 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.67 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.11 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.08 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.58 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.01 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.91 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.95 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.87 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.96 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.94 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.41 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.88 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.97 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.95 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.07 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.97 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.07 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.14 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.26 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.00 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.94 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.84 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.17 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.96 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.87 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.77 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.65 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.76 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.01 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.09 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.90 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.18 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.83 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.80 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.19 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.31 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.23 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.13 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.98 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.08 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.16 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.25 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.80 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.18 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.21 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.06 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.31 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.63 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.91 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.14 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.72 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.81 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.82 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.88 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.67 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.74 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.04 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.80 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.07 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.21 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.88 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.98 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.91 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.92 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.43 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.18 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.96 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.02 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.67 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.95 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.12 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.72 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.09 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.31 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.12 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.20 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.96 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.13 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.11 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.81 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.53 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.98 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.04 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.96 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.00 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.96 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.86 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.69 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:01.83 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.06 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.04 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat D:\GitHub\practical-aspnetcore\projects>REM dotnet build 5-0\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build anonymous-id MSBUILD : error MSB1009: Project file does not exist. Switch: anonymous-id D:\GitHub\practical-aspnetcore\projects>dotnet build application-environment Determining projects to restore... All projects are up-to-date for restore. C:\Program Files\dotnet\sdk\10.0.0-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\GitHub\practical-aspnetcore\projects\application-environment\application-environment.csproj] application-environment -> D:\GitHub\practical-aspnetcore\projects\application-environment\bin\Debug\net10.0\application-environment.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:02.31 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-2 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-2 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\hello-world-3 MSBUILD : error MSB1009: Project file does not exist. Switch: basic\hello-world-3 D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-host-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-host-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\i-webhost-environment MSBUILD : error MSB1009: Project file does not exist. Switch: basic\i-webhost-environment D:\GitHub\practical-aspnetcore\projects>dotnet build basic\iconfiguration MSBUILD : error MSB1009: Project file does not exist. Switch: basic\iconfiguration D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\client MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\client D:\GitHub\practical-aspnetcore\projects>dotnet build bedrock\echo\server MSBUILD : error MSB1009: Project file does not exist. Switch: bedrock\echo\server D:\GitHub\practical-aspnetcore\projects>cd blazor\ The system cannot find the path specified. D:\GitHub\practical-aspnetcore\projects>call build.bat ****** B A T C H R E C U R S I O N exceeds STACK limits ****** Recursion Count=342, Stack Usage=90 percent ****** B A T C H PROCESSING IS A B O R T E D ****** ================================================ FILE: exercises/pathway-1/README.md ================================================ # Exercises for beginning developers to .NET platform These exercises are designed to introduce you to .NET platform web development. They are designed to be completed in order, but you can skip around if you like. ================================================ FILE: exercises/pathway-1/exercise-1.md ================================================ # Create a console application to manage a recipe This exercise is designed to measure your competency in C#. ## Requirements A recipe entry has the following details: * Title * Ingredients * Instructions * One or more categories Functionalities required: * Add and edit recipe categories. * List, add and edit recipes. * All the data must be stored in a json file on disk. ## Libraries to use * Make sure you use https://github.com/spectreconsole/spectre.console to handle the console UI. * Use `System.Text.Json` to serialize and deserialize JSON. ## Notes * Make sure you follow the **C# coding standard**. * Create the project as a public project on your github account. * Use C# 11. * Keep your daily progress on the log. * Make sure to test your project thoroughly. * Make sure your application is nice to use. ================================================ FILE: exercises/pathway-1/exercise-2.md ================================================ # Service Driven Recipe Console Take the recipe console application you have created and split it into two, one for backend with REST API and another is for the console. * Use JSON to communicate data between the backend and the console. * Backend handles all the business logic including the JSON reading/writing, creating a new recipe, etc. * The console will make HTTP calls to the backend. * The backend will provide REST APIs that the console will use. * Relevant resources: * You will need to use this in your console app https://github.com/dodyg/practical-aspnetcore/tree/net6.0/projects/httpclientfactory * You can use the minimum Web API in ASP.NET Core 6 https://github.com/dodyg/practical-aspnetcore/ * Make sure you have read and understood how HTTP protocol works and how to design Web APIs. ================================================ FILE: exercises/pathway-1/exercise-3.md ================================================ # Recipe Web Interface - Keep your JSON backend you created on Exercise 2. - Implement a HTML UI based on Razor Pages. - Connect to the JSON backend using HTTP Client. - Use Bootstrap 5.2 as a CSS framework. - Do not use AJAX nor JavaScript. Note: This is not a race. Don't take on this exercise until your previous exercises are solidly implemented to the best of your ability. ================================================ FILE: exercises/pathway-1/exercise-4.md ================================================ # Recipe Single Page Web Interface - Keep your JSON backend you created on Exercise 3. Adjust the CORS settings. - Implement **one** single Razor page, `index.cshtml`. - Connect to the JSON backend using [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch). - Use Bootstrap 5.0 as a CSS framework. - Implement all the functionality using [AlpineJs](https://alpinejs.dev/). Note: This is not a race. Don't take on this exercise until your previous exercises are solidly implemented to the best of your ability. ================================================ FILE: exercises/pathway-1/exercise-5.md ================================================ # gRPC backend - Keep your frontend from Exercise 3. - Change your backend from JSON API to gRPC. - You can read about gRPC [here](https://docs.microsoft.com/en-us/aspnet/core/grpc/?view=aspnetcore-6.0). - You can practice on gRPC through these [samples](https://github.com/dodyg/practical-aspnetcore/tree/net6.0/projects/grpc). ================================================ FILE: exercises/pathway-1/exercise-6.md ================================================ # Secure your REST API - Copy code from exercise-4. - Secure the backend with JWT authentication. - Modify the page to handle JWT authentication. - Implement token refresh API. ================================================ FILE: exercises/pathway-1/exercise-7.md ================================================ # Use HTMX - Keep your backend from exercise-6 - Implement your UI using https://htmx.org/ - use https://www.nuget.org/packages/Htmx.TagHelpers and https://www.nuget.org/packages/Htmx **This is an optional exercise** ================================================ FILE: exercises/pathway-1/exercise-8.md ================================================ # Exercise 8 - Change one of your backend to use database. - You can use SQL Server Express (https://www.microsoft.com/en-us/sql-server/sql-server-downloads) or PostgreSQL (https://www.postgresql.org/) - To access the database, you can use one of the listed ORM here (https://tortugaresearch.github.io/DotNet-ORM-Cookbook/ORMs.htm). - SilverKey has been using LLBLGen Pro for the past 15 years at least and build all of our software using this but you might have different opinion - If you are using LLBLgen Pro, you can install the trial version [here](https://www.llblgen.com/pages/try.aspx). - Use [FluentMigrator](https://fluentmigrator.github.io/) to manage your schema. - Otherwise you can use [DbUp](https://dbup.readthedocs.io/en/latest/) or other tools to manage your database schema. ## Todo * Document your database schema first * Generate the schema using a tool. Do not create schema manually. * Connect to the created database using an ORM. * Rewire your backend. **If you choose not to use LLBLGenPro and FluentMigrator, I cannot assist you since I don't have any experience with the others** ================================================ FILE: exercises/pathway-1/exercise-9.md ================================================ # Exercise 9 - Keep your backend from exercise 8 - Implement your client frontend using Blazor Web Assembly. This Web Assembly part is important. There is another version of Blazor called Blazor server. It has different model. Study Blazor Web Assembly first. You can learn about Blazor Web Assembly at: - https://blazor-university.com/ - https://dotnet.microsoft.com/en-us/apps/aspnet/web-apps/blazor - https://github.com/dodyg/practical-aspnetcore/blob/net6.0/projects/blazor/README.md ================================================ FILE: global.json ================================================ { "sdk": { "version": "10.0.0", "rollForward": "major", "allowPrerelease": true } } ================================================ FILE: projects/application-environment/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#91e60e", "activityBar.background": "#91e60e", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#0d85d2", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#91e60e", "statusBar.background": "#73b60b", "statusBar.debuggingBackground": "#4e0bb6", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#558608", "statusBarItem.remoteBackground": "#73b60b", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#73b60b", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#73b60b99", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#73b60b" } ================================================ FILE: projects/application-environment/Program.cs ================================================ var app = WebApplication.Create(); app.Run(async context => { context.Response.Headers.Append("content-type", "text/html"); await context.Response.WriteAsync($"Application Name: {System.Reflection.Assembly.GetEntryAssembly().GetName().Name}
"); await context.Response.WriteAsync($"Application Base Path: {System.AppContext.BaseDirectory}
"); System.Reflection.Assembly entryAssembly = System.Reflection.Assembly.GetEntryAssembly(); var targetFramework = entryAssembly.GetCustomAttributes(typeof(System.Runtime.Versioning.TargetFrameworkAttribute), true)[0] as System.Runtime.Versioning.TargetFrameworkAttribute; await context.Response.WriteAsync($"Target Framework: {targetFramework.FrameworkName}
"); await context.Response.WriteAsync($"Version: {System.Reflection.Assembly.GetEntryAssembly().GetName().Version}
"); }); app.Run(); ================================================ FILE: projects/application-environment/README.md ================================================ # Application Environment This sample shows how to obtain application environment information (target framework, etc). dotnet8 ================================================ FILE: projects/application-environment/application-environment.csproj ================================================ net10.0 true preview ================================================ FILE: projects/application-environment/application-environment.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "application-environment", "application-environment.csproj", "{2353C50C-6C1A-4F43-9710-334A68035E1E}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {2353C50C-6C1A-4F43-9710-334A68035E1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2353C50C-6C1A-4F43-9710-334A68035E1E}.Debug|Any CPU.Build.0 = Debug|Any CPU {2353C50C-6C1A-4F43-9710-334A68035E1E}.Release|Any CPU.ActiveCfg = Release|Any CPU {2353C50C-6C1A-4F43-9710-334A68035E1E}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {17683AEE-C64B-46BE-8FC8-C17F9180291B} EndGlobalSection EndGlobal ================================================ FILE: projects/authentication/authentication-1/Program.cs ================================================ using System.Security.Claims; using System.IdentityModel.Tokens.Jwt; using Microsoft.IdentityModel.Tokens; using System.Text; using Microsoft.AspNetCore.Authentication.JwtBearer; var builder = WebApplication.CreateBuilder(args); builder.Services.AddAuthorization(); builder.Services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(options => { options.IncludeErrorDetails = true; options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = "practical aspnetcore", ValidAudience = "https://localhost:5001/", IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("this is custom key for practical aspnetcore sample")) };}); var app = builder.Build(); app.UseAuthorization(); app.MapGet("/", (HttpRequest request) => Results.Text($$""" Hello, World! Authentication Scheme: {{ JwtBearerDefaults.AuthenticationScheme }} JWT:


Response from /secret


""", "text/html")); app.MapGet("/secret", (ClaimsPrincipal user) => $"Hello {user.Identity?.Name}. This is a secret!") .RequireAuthorization(); app.MapGet("/jwt", () => Results.Json(new { token = GenerateJSONWebToken()})); string GenerateJSONWebToken() { var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("this is custom key for practical aspnetcore sample")); var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken(issuer:"practical aspnetcore", audience:"https://localhost:5001/", claims: new List { new Claim(ClaimTypes.Name, "Anne"), }, notBefore: null, expires: DateTime.Now.AddMinutes(120), signingCredentials: credentials); return new JwtSecurityTokenHandler().WriteToken(token); } app.Run(); ================================================ FILE: projects/authentication/authentication-1/Readme.md ================================================ # Simplified JWT bearer token authentication This sample shows the usage of the simplified authentication and authorization via `builder.AddAuthentication().AddJwtBearer();`. ================================================ FILE: projects/authentication/authentication-1/authentication-1.csproj ================================================ net10.0 true 9adce06a-fec2-402b-acba-28a6852ca7c1 preview ================================================ FILE: projects/authentication/authentication-2/Program.cs ================================================ using System.Security.Claims; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication.Cookies; var builder = WebApplication.CreateBuilder(args); builder.Services.AddAuthorization(); builder.Services.AddAuthentication(options => { options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme; }).AddCookie(); var app = builder.Build(); app.UseAuthorization(); app.MapGet("/", (HttpRequest request) => Results.Text($$"""

Authentication Scheme {{CookieAuthenticationDefaults.AuthenticationScheme}}

/secret requires authentication.

""", "text/html")); app.MapGet("/secret", (ClaimsPrincipal user) => $"Hello {user.Identity?.Name}. This is a secret!") .RequireAuthorization(); app.MapPost("/login", async (HttpContext context) => { var claims = new List { new Claim(ClaimTypes.Name, "Anne") }; var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme); var authProperties = new AuthenticationProperties(); // read more https://docs.microsoft.com/en-us/aspnet/core/security/authentication/cookie?view=aspnetcore-6.0 await context.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity), authProperties); return Results.Redirect("/"); }); app.MapPost("/logout", async (HttpContext context) => { await context.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); return Results.Redirect("/"); }); app.Run(); ================================================ FILE: projects/authentication/authentication-2/Readme.md ================================================ # Simplified cookie authentication This sample shows the usage of the simplified authentication and authorization via `builder.AddAuthentication().AddCookie();`. ================================================ FILE: projects/authentication/authentication-2/authentication-2.csproj ================================================ net10.0 true 9adce06a-fec2-402b-acba-28a6852ca7c1 preview ================================================ FILE: projects/authentication/authentication-3/Program.cs ================================================ using System.Security.Claims; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication.Cookies; using System.IdentityModel.Tokens.Jwt; using Microsoft.IdentityModel.Tokens; using System.Text; using Microsoft.AspNetCore.Authentication.JwtBearer; var builder = WebApplication.CreateBuilder(args); builder.Services.AddAuthorization(); builder.Services .AddAuthentication() .AddCookie() .AddJwtBearer(options => { options.IncludeErrorDetails = true; options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = "practical aspnetcore", ValidAudience = "https://localhost:5001/", IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("this is custom key for practical aspnetcore sample")) };});; var app = builder.Build(); app.UseAuthorization(); app.MapGet("/", (HttpRequest request) => Results.Text($$""" Multiple Authentication schemes

Multiple authentication schemes

JWT:


Response from /secret


JWT:


Response from /secret-jwt-only


""", "text/html")); app.MapGet("/secret", (ClaimsPrincipal user) => $"Hello {user.Identity?.Name}. This is a secret!") .RequireAuthorization(options => { options.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme); options.AddAuthenticationSchemes(CookieAuthenticationDefaults.AuthenticationScheme); options.RequireAuthenticatedUser(); }); app.MapGet("/secret-jwt-only", (ClaimsPrincipal user) => $"Hello {user.Identity?.Name}. This is a secret accessible via jwt only") .RequireAuthorization(options => { options.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme); options.RequireAuthenticatedUser(); }); app.MapGet("/secret-cookies-only", (ClaimsPrincipal user) => $"Hello {user.Identity?.Name}. This is a secret accessible via cookie based authentication only only") .RequireAuthorization(options => { options.AddAuthenticationSchemes(CookieAuthenticationDefaults.AuthenticationScheme); options.RequireAuthenticatedUser(); }); app.MapPost("/login", async (HttpContext context) => { var claims = new List { new Claim(ClaimTypes.Name, "Anne") }; var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme); var authProperties = new AuthenticationProperties(); // read more https://docs.microsoft.com/en-us/aspnet/core/security/authentication/cookie?view=aspnetcore-6.0 await context.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity), authProperties); return Results.Redirect("/"); }); app.MapPost("/logout", async (HttpContext context) => { await context.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); return Results.Redirect("/"); }); app.MapGet("/jwt", () => Results.Json(new { token = GenerateJSONWebToken()})); string GenerateJSONWebToken() { var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("this is custom key for practical aspnetcore sample")); var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken(issuer:"practical aspnetcore", audience:"https://localhost:5001/", claims: new List { new Claim(ClaimTypes.Name, "Anne"), }, notBefore: null, expires: DateTime.Now.AddMinutes(120), signingCredentials: credentials); return new JwtSecurityTokenHandler().WriteToken(token); } app.Run(); ================================================ FILE: projects/authentication/authentication-3/Readme.md ================================================ # Mixed authentication This sample shows how to combine the usage of cookie based authentication with token bearer authentication (JWT) in the same application. ================================================ FILE: projects/authentication/authentication-3/authentication-3.csproj ================================================ net10.0 true 9adce06a-fec2-402b-acba-28a6852ca7c1 preview ================================================ FILE: projects/authentication/authentication-4/Controllers/WeatherForecastController.cs ================================================ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Authorization; [ApiController] [Route("[controller]")] [Authorize] public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; private readonly ILogger _logger; public WeatherForecastController(ILogger logger) { _logger = logger; } [HttpGet(Name = "GetWeatherForecast")] public IEnumerable Get() { return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }) .ToArray(); } } ================================================ FILE: projects/authentication/authentication-4/Program.cs ================================================ using Scalar.AspNetCore; var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); builder.Services.AddOpenApi(); builder.Services.AddAuthentication() .AddJwtBearer(); var app = builder.Build(); app.MapOpenApi(); app.MapScalarApiReference(); app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run(); ================================================ FILE: projects/authentication/authentication-4/Readme.md ================================================ # Built-in OpenAPI with JWT Bearer Authentication This sample demonstrates ASP.NET Core 10's built-in OpenAPI 3.1 support with JWT Bearer authentication and MVC controllers. ## Key Features - JWT Bearer authentication with minimal configuration - Built-in OpenAPI 3.1 support (no Swashbuckle/NSwag required) - Modern Scalar UI for interactive API documentation - MVC controllers pattern ## Running the Sample ```bash dotnet watch run ``` ## Generating a JWT Token To generate a bearer token, run: ```bash dotnet user-jwts create ``` ## Viewing the Documentation - **Scalar UI:** Navigate to `/scalar` - **OpenAPI JSON:** Navigate to `/openapi/v1.json` ## Migration Notes This sample was migrated from Swashbuckle to .NET 10's built-in OpenAPI support. **Changes:** - Removed `Swashbuckle.AspNetCore` package dependency - Added `Microsoft.AspNetCore.OpenApi` (built-in) - Added `Scalar.AspNetCore` for modern UI - Enabled `GenerateDocumentationFile` in .csproj - Updated JWT Bearer package to .NET 10 preview See `OUT-OF-DATE.md` for migration details. ================================================ FILE: projects/authentication/authentication-4/WeatherForecast.cs ================================================ public class WeatherForecast { public DateOnly Date { get; set; } public int TemperatureC { get; set; } public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); public string? Summary { get; set; } } ================================================ FILE: projects/authentication/authentication-4/appsettings.Development.json ================================================ { "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "Authentication": { "Schemes": { "Bearer": { "ValidAudiences": [ "http://localhost:3385", "https://localhost:44315", "http://localhost:5025", "https://localhost:7216" ], "ValidIssuer": "dotnet-user-jwts" } } } } ================================================ FILE: projects/authentication/authentication-4/appsettings.json ================================================ { "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*" } ================================================ FILE: projects/authentication/authentication-4/authentication-4.csproj ================================================ net10.0 enable enable authentication_4 63c41692-91b0-46cc-9f2d-a92f9ee59392 preview true $(NoWarn);1591 ================================================ FILE: projects/authentication/authentication-5/Data/ApplicationDBContext.cs ================================================ using Microsoft.EntityFrameworkCore; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; public class ApplicationDBContext:IdentityDbContext { public ApplicationDBContext(DbContextOptions options) : base(options) { } } ================================================ FILE: projects/authentication/authentication-5/Entities/ApplicationUser.cs ================================================ using Microsoft.AspNetCore.Identity; public class ApplicationUser : IdentityUser { } ================================================ FILE: projects/authentication/authentication-5/Migrations/20240301175333_Init.Designer.cs ================================================ // using System; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; #nullable disable namespace authentication_5.Migrations { [DbContext(typeof(ApplicationDBContext))] [Migration("20240301175333_Init")] partial class Init { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder.HasAnnotation("ProductVersion", "8.0.2"); modelBuilder.Entity("ApplicationUser", b => { b.Property("Id") .HasColumnType("TEXT"); b.Property("AccessFailedCount") .HasColumnType("INTEGER"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() .HasColumnType("TEXT"); b.Property("Email") .HasMaxLength(256) .HasColumnType("TEXT"); b.Property("EmailConfirmed") .HasColumnType("INTEGER"); b.Property("LockoutEnabled") .HasColumnType("INTEGER"); b.Property("LockoutEnd") .HasColumnType("TEXT"); b.Property("NormalizedEmail") .HasMaxLength(256) .HasColumnType("TEXT"); b.Property("NormalizedUserName") .HasMaxLength(256) .HasColumnType("TEXT"); b.Property("PasswordHash") .HasColumnType("TEXT"); b.Property("PhoneNumber") .HasColumnType("TEXT"); b.Property("PhoneNumberConfirmed") .HasColumnType("INTEGER"); b.Property("SecurityStamp") .HasColumnType("TEXT"); b.Property("TwoFactorEnabled") .HasColumnType("INTEGER"); b.Property("UserName") .HasMaxLength(256) .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("NormalizedEmail") .HasDatabaseName("EmailIndex"); b.HasIndex("NormalizedUserName") .IsUnique() .HasDatabaseName("UserNameIndex"); b.ToTable("AspNetUsers", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => { b.Property("Id") .HasColumnType("TEXT"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() .HasColumnType("TEXT"); b.Property("Name") .HasMaxLength(256) .HasColumnType("TEXT"); b.Property("NormalizedName") .HasMaxLength(256) .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("NormalizedName") .IsUnique() .HasDatabaseName("RoleNameIndex"); b.ToTable("AspNetRoles", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); b.Property("ClaimType") .HasColumnType("TEXT"); b.Property("ClaimValue") .HasColumnType("TEXT"); b.Property("RoleId") .IsRequired() .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("RoleId"); b.ToTable("AspNetRoleClaims", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); b.Property("ClaimType") .HasColumnType("TEXT"); b.Property("ClaimValue") .HasColumnType("TEXT"); b.Property("UserId") .IsRequired() .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("UserId"); b.ToTable("AspNetUserClaims", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => { b.Property("LoginProvider") .HasColumnType("TEXT"); b.Property("ProviderKey") .HasColumnType("TEXT"); b.Property("ProviderDisplayName") .HasColumnType("TEXT"); b.Property("UserId") .IsRequired() .HasColumnType("TEXT"); b.HasKey("LoginProvider", "ProviderKey"); b.HasIndex("UserId"); b.ToTable("AspNetUserLogins", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => { b.Property("UserId") .HasColumnType("TEXT"); b.Property("RoleId") .HasColumnType("TEXT"); b.HasKey("UserId", "RoleId"); b.HasIndex("RoleId"); b.ToTable("AspNetUserRoles", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { b.Property("UserId") .HasColumnType("TEXT"); b.Property("LoginProvider") .HasColumnType("TEXT"); b.Property("Name") .HasColumnType("TEXT"); b.Property("Value") .HasColumnType("TEXT"); b.HasKey("UserId", "LoginProvider", "Name"); b.ToTable("AspNetUserTokens", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => { b.HasOne("ApplicationUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => { b.HasOne("ApplicationUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => { b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("ApplicationUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { b.HasOne("ApplicationUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); #pragma warning restore 612, 618 } } } ================================================ FILE: projects/authentication/authentication-5/Migrations/20240301175333_Init.cs ================================================ using System; using Microsoft.EntityFrameworkCore.Migrations; #nullable disable namespace authentication_5.Migrations { /// public partial class Init : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.CreateTable( name: "AspNetRoles", columns: table => new { Id = table.Column(type: "TEXT", nullable: false), Name = table.Column(type: "TEXT", maxLength: 256, nullable: true), NormalizedName = table.Column(type: "TEXT", maxLength: 256, nullable: true), ConcurrencyStamp = table.Column(type: "TEXT", nullable: true) }, constraints: table => { table.PrimaryKey("PK_AspNetRoles", x => x.Id); }); migrationBuilder.CreateTable( name: "AspNetUsers", columns: table => new { Id = table.Column(type: "TEXT", nullable: false), UserName = table.Column(type: "TEXT", maxLength: 256, nullable: true), NormalizedUserName = table.Column(type: "TEXT", maxLength: 256, nullable: true), Email = table.Column(type: "TEXT", maxLength: 256, nullable: true), NormalizedEmail = table.Column(type: "TEXT", maxLength: 256, nullable: true), EmailConfirmed = table.Column(type: "INTEGER", nullable: false), PasswordHash = table.Column(type: "TEXT", nullable: true), SecurityStamp = table.Column(type: "TEXT", nullable: true), ConcurrencyStamp = table.Column(type: "TEXT", nullable: true), PhoneNumber = table.Column(type: "TEXT", nullable: true), PhoneNumberConfirmed = table.Column(type: "INTEGER", nullable: false), TwoFactorEnabled = table.Column(type: "INTEGER", nullable: false), LockoutEnd = table.Column(type: "TEXT", nullable: true), LockoutEnabled = table.Column(type: "INTEGER", nullable: false), AccessFailedCount = table.Column(type: "INTEGER", nullable: false) }, constraints: table => { table.PrimaryKey("PK_AspNetUsers", x => x.Id); }); migrationBuilder.CreateTable( name: "AspNetRoleClaims", columns: table => new { Id = table.Column(type: "INTEGER", nullable: false) .Annotation("Sqlite:Autoincrement", true), RoleId = table.Column(type: "TEXT", nullable: false), ClaimType = table.Column(type: "TEXT", nullable: true), ClaimValue = table.Column(type: "TEXT", nullable: true) }, constraints: table => { table.PrimaryKey("PK_AspNetRoleClaims", x => x.Id); table.ForeignKey( name: "FK_AspNetRoleClaims_AspNetRoles_RoleId", column: x => x.RoleId, principalTable: "AspNetRoles", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "AspNetUserClaims", columns: table => new { Id = table.Column(type: "INTEGER", nullable: false) .Annotation("Sqlite:Autoincrement", true), UserId = table.Column(type: "TEXT", nullable: false), ClaimType = table.Column(type: "TEXT", nullable: true), ClaimValue = table.Column(type: "TEXT", nullable: true) }, constraints: table => { table.PrimaryKey("PK_AspNetUserClaims", x => x.Id); table.ForeignKey( name: "FK_AspNetUserClaims_AspNetUsers_UserId", column: x => x.UserId, principalTable: "AspNetUsers", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "AspNetUserLogins", columns: table => new { LoginProvider = table.Column(type: "TEXT", nullable: false), ProviderKey = table.Column(type: "TEXT", nullable: false), ProviderDisplayName = table.Column(type: "TEXT", nullable: true), UserId = table.Column(type: "TEXT", nullable: false) }, constraints: table => { table.PrimaryKey("PK_AspNetUserLogins", x => new { x.LoginProvider, x.ProviderKey }); table.ForeignKey( name: "FK_AspNetUserLogins_AspNetUsers_UserId", column: x => x.UserId, principalTable: "AspNetUsers", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "AspNetUserRoles", columns: table => new { UserId = table.Column(type: "TEXT", nullable: false), RoleId = table.Column(type: "TEXT", nullable: false) }, constraints: table => { table.PrimaryKey("PK_AspNetUserRoles", x => new { x.UserId, x.RoleId }); table.ForeignKey( name: "FK_AspNetUserRoles_AspNetRoles_RoleId", column: x => x.RoleId, principalTable: "AspNetRoles", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_AspNetUserRoles_AspNetUsers_UserId", column: x => x.UserId, principalTable: "AspNetUsers", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "AspNetUserTokens", columns: table => new { UserId = table.Column(type: "TEXT", nullable: false), LoginProvider = table.Column(type: "TEXT", nullable: false), Name = table.Column(type: "TEXT", nullable: false), Value = table.Column(type: "TEXT", nullable: true) }, constraints: table => { table.PrimaryKey("PK_AspNetUserTokens", x => new { x.UserId, x.LoginProvider, x.Name }); table.ForeignKey( name: "FK_AspNetUserTokens_AspNetUsers_UserId", column: x => x.UserId, principalTable: "AspNetUsers", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateIndex( name: "IX_AspNetRoleClaims_RoleId", table: "AspNetRoleClaims", column: "RoleId"); migrationBuilder.CreateIndex( name: "RoleNameIndex", table: "AspNetRoles", column: "NormalizedName", unique: true); migrationBuilder.CreateIndex( name: "IX_AspNetUserClaims_UserId", table: "AspNetUserClaims", column: "UserId"); migrationBuilder.CreateIndex( name: "IX_AspNetUserLogins_UserId", table: "AspNetUserLogins", column: "UserId"); migrationBuilder.CreateIndex( name: "IX_AspNetUserRoles_RoleId", table: "AspNetUserRoles", column: "RoleId"); migrationBuilder.CreateIndex( name: "EmailIndex", table: "AspNetUsers", column: "NormalizedEmail"); migrationBuilder.CreateIndex( name: "UserNameIndex", table: "AspNetUsers", column: "NormalizedUserName", unique: true); } /// protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( name: "AspNetRoleClaims"); migrationBuilder.DropTable( name: "AspNetUserClaims"); migrationBuilder.DropTable( name: "AspNetUserLogins"); migrationBuilder.DropTable( name: "AspNetUserRoles"); migrationBuilder.DropTable( name: "AspNetUserTokens"); migrationBuilder.DropTable( name: "AspNetRoles"); migrationBuilder.DropTable( name: "AspNetUsers"); } } } ================================================ FILE: projects/authentication/authentication-5/Migrations/ApplicationDBContextModelSnapshot.cs ================================================ // using System; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; #nullable disable namespace authentication_5.Migrations { [DbContext(typeof(ApplicationDBContext))] partial class ApplicationDBContextModelSnapshot : ModelSnapshot { protected override void BuildModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder.HasAnnotation("ProductVersion", "8.0.2"); modelBuilder.Entity("ApplicationUser", b => { b.Property("Id") .HasColumnType("TEXT"); b.Property("AccessFailedCount") .HasColumnType("INTEGER"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() .HasColumnType("TEXT"); b.Property("Email") .HasMaxLength(256) .HasColumnType("TEXT"); b.Property("EmailConfirmed") .HasColumnType("INTEGER"); b.Property("LockoutEnabled") .HasColumnType("INTEGER"); b.Property("LockoutEnd") .HasColumnType("TEXT"); b.Property("NormalizedEmail") .HasMaxLength(256) .HasColumnType("TEXT"); b.Property("NormalizedUserName") .HasMaxLength(256) .HasColumnType("TEXT"); b.Property("PasswordHash") .HasColumnType("TEXT"); b.Property("PhoneNumber") .HasColumnType("TEXT"); b.Property("PhoneNumberConfirmed") .HasColumnType("INTEGER"); b.Property("SecurityStamp") .HasColumnType("TEXT"); b.Property("TwoFactorEnabled") .HasColumnType("INTEGER"); b.Property("UserName") .HasMaxLength(256) .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("NormalizedEmail") .HasDatabaseName("EmailIndex"); b.HasIndex("NormalizedUserName") .IsUnique() .HasDatabaseName("UserNameIndex"); b.ToTable("AspNetUsers", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => { b.Property("Id") .HasColumnType("TEXT"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() .HasColumnType("TEXT"); b.Property("Name") .HasMaxLength(256) .HasColumnType("TEXT"); b.Property("NormalizedName") .HasMaxLength(256) .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("NormalizedName") .IsUnique() .HasDatabaseName("RoleNameIndex"); b.ToTable("AspNetRoles", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); b.Property("ClaimType") .HasColumnType("TEXT"); b.Property("ClaimValue") .HasColumnType("TEXT"); b.Property("RoleId") .IsRequired() .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("RoleId"); b.ToTable("AspNetRoleClaims", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); b.Property("ClaimType") .HasColumnType("TEXT"); b.Property("ClaimValue") .HasColumnType("TEXT"); b.Property("UserId") .IsRequired() .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("UserId"); b.ToTable("AspNetUserClaims", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => { b.Property("LoginProvider") .HasColumnType("TEXT"); b.Property("ProviderKey") .HasColumnType("TEXT"); b.Property("ProviderDisplayName") .HasColumnType("TEXT"); b.Property("UserId") .IsRequired() .HasColumnType("TEXT"); b.HasKey("LoginProvider", "ProviderKey"); b.HasIndex("UserId"); b.ToTable("AspNetUserLogins", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => { b.Property("UserId") .HasColumnType("TEXT"); b.Property("RoleId") .HasColumnType("TEXT"); b.HasKey("UserId", "RoleId"); b.HasIndex("RoleId"); b.ToTable("AspNetUserRoles", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { b.Property("UserId") .HasColumnType("TEXT"); b.Property("LoginProvider") .HasColumnType("TEXT"); b.Property("Name") .HasColumnType("TEXT"); b.Property("Value") .HasColumnType("TEXT"); b.HasKey("UserId", "LoginProvider", "Name"); b.ToTable("AspNetUserTokens", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => { b.HasOne("ApplicationUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => { b.HasOne("ApplicationUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => { b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("ApplicationUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { b.HasOne("ApplicationUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); #pragma warning restore 612, 618 } } } ================================================ FILE: projects/authentication/authentication-5/Program.cs ================================================ using Microsoft.EntityFrameworkCore; using Scalar.AspNetCore; var builder = WebApplication.CreateBuilder(args); builder.Services.AddOpenApi(); builder.Services.AddAuthorization(); builder.Services.AddDbContext(options => options.UseSqlite(builder.Configuration.GetConnectionString("DefaultConnection"))); builder.Services .AddIdentityApiEndpoints() .AddEntityFrameworkStores(); var app = builder.Build(); app.MapOpenApi(); app.MapScalarApiReference(); app.UseHttpsRedirection(); app.UseAuthorization(); var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; /// /// Returns a 5-day weather forecast /// app.MapGet("/weatherforecast", () => { var forecast = Enumerable.Range(1, 5).Select(index => new WeatherForecast ( DateOnly.FromDateTime(DateTime.Now.AddDays(index)), Random.Shared.Next(-20, 55), summaries[Random.Shared.Next(summaries.Length)] )) .ToArray(); return forecast; }) .WithName("GetWeatherForecast") .RequireAuthorization(); app.MapGroup("/account").MapIdentityApi(); app.Run(); record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary) { public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); } ================================================ FILE: projects/authentication/authentication-5/Readme.md ================================================ ## Authentication using Identity API in .NET 8 ### To add the Identity API to our app, we need to follow the below steps: - Add the required EF Core packages - dotnet add package Microsoft.EntityFrameworkCore.Design - dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore - dotnet add package Microsoft.EntityFrameworkCore.SQLite (using simple SQLite for this demo) - Extend IdentityDbContext and IdentityUser ``` public class ApplicationDBContext:IdentityDbContext { public ApplicationDBContext(DbContextOptions options) : base(options) { } } ``` ``` public class ApplicationUser : IdentityUser { } ``` - Add IdentityAPI endpoints in Program.cs ``` builder.Services .AddIdentityApiEndpoints() .AddEntityFrameworkStores(); ``` - Create DB migrations ``` dotnet ef migrations add InitialSchema dotnet ef database update ``` - Authorise the API ``` app.MapGet("/weatherforecast", () => { var forecast = Enumerable.Range(1, 5).Select(index => new WeatherForecast ( DateOnly.FromDateTime(DateTime.Now.AddDays(index)), Random.Shared.Next(-20, 55), summaries[Random.Shared.Next(summaries.Length)] )) .ToArray(); return forecast; }) .WithName("GetWeatherForecast") .RequireAuthorization() -- add this line of code .WithOpenApi(); ``` ================================================ FILE: projects/authentication/authentication-5/Requests/Authentication.http ================================================ @host = http://localhost:5033 GET {{host}}/weatherforecast/ Accept: application/json ### Register a new user POST {{host}}/account/register Content-Type: application/json { "username": "test@test.com", "password": "Test@12345", "email": "test@test.com" } ### Login and retrieve tokens POST {{host}}/account/login Content-Type: application/json { "username": "test@test.com", "password": "Test@12345", "email": "test@test.com" } ### Call Forecast API with bearer token GET {{host}}/weatherforecast Authorization: Bearer {{token received from the login API endpoint}} ================================================ FILE: projects/authentication/authentication-5/appsettings.Development.json ================================================ { "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } } } ================================================ FILE: projects/authentication/authentication-5/appsettings.json ================================================ { "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*", "ConnectionStrings": { "DefaultConnection": "Data Source = sample.db" } } ================================================ FILE: projects/authentication/authentication-5/authentication-5.csproj ================================================ net10.0 enable enable authentication_5 preview true $(NoWarn);1591 ================================================ FILE: projects/authentication/build.bat ================================================ dotnet build authentication-1 dotnet build authentication-2 dotnet build authentication-3 dotnet build authentication-4 dotnet build authentication-5 ================================================ FILE: projects/authentication/build.sh ================================================ #!/bin/bash dotnet build authentication-1 dotnet build authentication-2 dotnet build authentication-3 dotnet build authentication-4 dotnet build authentication-5 ================================================ FILE: projects/authentication/readme.md ================================================ # Authentication (5) - [Authentication - JWT](authentication-1) This sample shows the usage of the simplified authentication and authorization via `builder.AddAuthentication().AddJwtBearer();`. - [Authentication - Cookie](authentication-2) This sample shows the usage of the simplified authentication and authorization via `builder.AddAuthentication().AddCookie();`. - [Authentication - Mixed](authentication-3) This sample shows how to use both JWT and Cookie authentications in the same application. - [Authentication - simplified JWT bearer token authentication](authentication-4) This sample shows the usage of the simplified authentication and authorization using webapi template via `builder.AddAuthentication().AddJwtBearer();`. Uses .NET 10 built-in OpenAPI. - [Authentication - Identity](authentication-5) This sample shows the usage of authentication using Identity API using webapi template via `builder.ServicesAddIdentityApiEndpoints<>().AddEntityFrameworkStores<>();`. Uses .NET 10 built-in OpenAPI. dotnet8 ================================================ FILE: projects/blazor-ss/ChatR/ChatR.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ss/ChatR/Components/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-ss/ChatR/Components/Pages/Index.razor ================================================ @page "/" @inject NotificationService Notification @implements IDisposable

SignalR Broadcast

  • Open another window
  • Click Connect
  • Enter Name and Broadcast Message. Both screens will receive the broadcasts.
@Log
@Message


@if (ShowChatPanel) {

}
@code{ string Message { get;set;} string Log { get;set;} string Sender { get;set;} string BroadcastMessage { get;set;} bool ShowChatPanel { get; set; } protected override void OnInitialized() { Notification.OnBroadcastMessage = async (string user, string message) => { Message = $"{user} broadcasts \"{message}\""; await this.InvokeAsync(StateHasChanged); }; Notification.OnServerMessage = async (string message) => { ShowChatPanel = true; Message = $"Server sends message: \"{message}\""; await this.InvokeAsync(StateHasChanged); }; } async Task ConnectAsync() { Log = "Connected"; await Notification.ConnectAsync(); } async Task BroadcastAsync() { Log = "Broadcast"; await Notification.BroadcastAsync(Sender, BroadcastMessage); } public void Dispose() { Notification.DisposeAsync(); //This is by design because Blazor does not support IAsyncDisposable https://github.com/dotnet/aspnetcore/issues/20932 } } ================================================ FILE: projects/blazor-ss/ChatR/Components/_Imports.razor ================================================ @using System.Net.Http @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using ChatR.Services ================================================ FILE: projects/blazor-ss/ChatR/NotificationHub.cs ================================================ using System.Threading.Tasks; using Microsoft.AspNetCore.SignalR; using Microsoft.Extensions.Logging; namespace ChatR { public class NotificationHub : Hub { ILogger _logger; public NotificationHub(ILogger logger) { _logger = logger; _logger.LogInformation("NotificationHub Created"); } public override async Task OnConnectedAsync() { _logger.LogInformation("New Connection from Client"); await base.OnConnectedAsync(); await ServerMessage("Welcome to ChatR"); } public async Task Broadcast(string from, string message) { _logger.LogInformation($"{from} broadcasts message: {message}"); await Clients.All.SendAsync("BroadcastChannel", from, message); } public async Task ServerMessage(string message) { _logger.LogInformation($"Server sends message: {message}"); await Clients.Caller.SendAsync("ServerChannel", message); } } } ================================================ FILE: projects/blazor-ss/ChatR/Pages/Index.cshtml ================================================ @page "/" ChatR @(await Html.RenderComponentAsync(RenderMode.ServerPrerendered)) ================================================ FILE: projects/blazor-ss/ChatR/Pages/_ViewImports.cshtml ================================================ @using ChatR.Components @namespace ChatR.Pages @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: projects/blazor-ss/ChatR/Program.cs ================================================ using ChatR.Services; using ChatR; var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); //https://github.com/dotnet/aspnetcore/blob/master/src/Components/Server/src/DependencyInjection/ComponentServiceCollectionExtensions.cs builder.Services.AddScoped(); var app = builder.Build(); app.UseStaticFiles(); app.MapBlazorHub(); //https://github.com/dotnet/aspnetcore/blob/master/src/Components/Server/src/Builder/ComponentEndpointRouteBuilderExtensions.cs app.MapHub("/notificationhub"); app.MapRazorPages(); app.MapFallbackToPage("/Index"); app.Run(); ================================================ FILE: projects/blazor-ss/ChatR/README.md ================================================ # ChatR This sample shows how to host SignalR Hub along with Blazor Server Side. This is just a simple 'chat' app that uses SignalR to broadcast everything. ================================================ FILE: projects/blazor-ss/ChatR/Services/NotificationService.cs ================================================ using System; using System.Threading.Tasks; using Microsoft.AspNetCore.SignalR.Client; using Microsoft.Extensions.Logging; namespace ChatR.Services { public class NotificationService : IAsyncDisposable { HubConnection _connection; ILogger _logger; public NotificationService(ILogger logger) { _logger = logger; } public async Task ConnectAsync() { _logger.LogInformation("ConnectAsync()"); _connection = new HubConnectionBuilder() .WithUrl("https://localhost:5001/notificationhub") .Build(); _connection.On("BroadcastChannel", (user, message) => { this.OnBroadcastMessage?.Invoke(user, message); }); _connection.On("ServerChannel", (message) => { this.OnServerMessage?.Invoke(message); }); if (_connection.State != HubConnectionState.Connected) { _logger.LogInformation("Start connecting to the SignalR Hub"); await _connection.StartAsync(); } } public Action OnServerMessage { get; set; } public Action OnBroadcastMessage { get; set; } public async Task BroadcastAsync(string sender, string message) { await _connection.InvokeAsync("Broadcast", sender, message); } public async ValueTask DisposeAsync() { if (_connection != null) await _connection.DisposeAsync(); } } } ================================================ FILE: projects/blazor-ss/ChatR/wwwroot/css/site.css ================================================ ================================================ FILE: projects/blazor-ss/ComponentEvents/AppState.cs ================================================ using System; namespace ComponentEvents { public class AppState { public event Action OnNotification; public void Notify(string notification) { OnNotification?.Invoke(notification); } } } ================================================ FILE: projects/blazor-ss/ComponentEvents/ComponentEvents.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ss/ComponentEvents/Components/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-ss/ComponentEvents/Components/Child.razor ================================================ @inject AppState AppState
@code { void Notify() { AppState.Notify("Hello World from a child component"); } } ================================================ FILE: projects/blazor-ss/ComponentEvents/Components/Notification.razor ================================================ @inject AppState AppState @implements IDisposable @Message @code { string Message { get; set; } protected override void OnInitialized() { AppState.OnNotification += UpdateNotification; } public void UpdateNotification(string str) { Message = str; StateHasChanged(); } public void Dispose() { AppState.OnNotification -= UpdateNotification; } } ================================================ FILE: projects/blazor-ss/ComponentEvents/Components/Pages/Index.razor ================================================ @page "/" @inject AppState AppState

Component Events



@code { void Notify() { AppState.Notify("Hello World from a page"); } } ================================================ FILE: projects/blazor-ss/ComponentEvents/Components/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-ss/ComponentEvents/Components/_Imports.razor ================================================ @using System.Net.Http @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Authorization ================================================ FILE: projects/blazor-ss/ComponentEvents/Pages/Index.cshtml ================================================ @page "/" Component Events @(await Html.RenderComponentAsync(RenderMode.ServerPrerendered)) ================================================ FILE: projects/blazor-ss/ComponentEvents/Pages/_ViewImports.cshtml ================================================ @using ComponentEvents.Components @namespace ComponentEvents.Pages @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: projects/blazor-ss/ComponentEvents/Program.cs ================================================ using Microsoft.Extensions.DependencyInjection; using ComponentEvents; var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); builder.Services.AddScoped(); var app = builder.Build(); app.UseStaticFiles(); app.MapBlazorHub(); app.MapRazorPages(); app.MapFallbackToPage("/Index"); app.Run(); ================================================ FILE: projects/blazor-ss/ComponentEvents/README.md ================================================ # Component Events There are many ways for Parent component to communicate to Children components in Blazor and vice versa. However there is no straightforward way to manage communication between components that are located in different hierarchy. We are using an intermediary [Scoped lifetime](https://docs.microsoft.com/en-us/aspnet/core/blazor/dependency-injection?view=aspnetcore-3.1) AppState object here to faciliate the communication. > However, the Blazor Server hosting model supports the Scoped lifetime. In Blazor Server apps, a scoped service registration is scoped to the connection. For this reason, using scoped services is preferred for services that should be scoped to the current user, even if the current intent is to run client-side in the browser. [Scoped lifetime](https://docs.microsoft.com/en-us/aspnet/core/blazor/dependency-injection?view=aspnetcore-3.1) The AppState object needs to be in Scoped lifetime so it exists only for your current session. If you make it Singleton your AppState will be modified by other users. ================================================ FILE: projects/blazor-ss/ComponentEvents/wwwroot/css/site.css ================================================ ================================================ FILE: projects/blazor-ss/ComponentEvents-2/AppState.cs ================================================ using System; namespace ComponentEvents { public class NotificationMessage { public string Message { get; set; } } } ================================================ FILE: projects/blazor-ss/ComponentEvents-2/ComponentEvents.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ss/ComponentEvents-2/Components/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-ss/ComponentEvents-2/Components/Child.razor ================================================ @inject EventAggregator.Blazor.IEventAggregator Events
@code{ async Task NotifyAsync() { await Events.PublishAsync(new NotificationMessage { Message = "Hello World from a child component"}); } } ================================================ FILE: projects/blazor-ss/ComponentEvents-2/Components/Notification.razor ================================================ @inject EventAggregator.Blazor.IEventAggregator Events @implements EventAggregator.Blazor.IHandle @implements IDisposable @Message @code { string Message { get; set; } protected override void OnInitialized() { Events.Subscribe(this); } public Task HandleAsync(NotificationMessage message) { Message = message.Message; InvokeAsync(() => StateHasChanged()); return Task.CompletedTask; } public void Dispose() { Events.Unsubscribe(this); } } ================================================ FILE: projects/blazor-ss/ComponentEvents-2/Components/Pages/Index.razor ================================================ @page "/" @inject EventAggregator.Blazor.IEventAggregator Events

Component Events



@code { async Task NotifyAsync() { await Events.PublishAsync(new NotificationMessage { Message = "Hello World from a page" }); } } ================================================ FILE: projects/blazor-ss/ComponentEvents-2/Components/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-ss/ComponentEvents-2/Components/_Imports.razor ================================================ @using System.Net.Http @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Authorization ================================================ FILE: projects/blazor-ss/ComponentEvents-2/Pages/Index.cshtml ================================================ @page "/" Component Events @(await Html.RenderComponentAsync(RenderMode.ServerPrerendered)) ================================================ FILE: projects/blazor-ss/ComponentEvents-2/Pages/_ViewImports.cshtml ================================================ @using ComponentEvents.Components @namespace ComponentEvents.Pages @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: projects/blazor-ss/ComponentEvents-2/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); //do not use services.AddEventAggregator builder.Services.AddScoped(); builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); var app = builder.Build(); app.UseHttpsRedirection(); app.UseStaticFiles(); app.MapBlazorHub(); app.MapRazorPages(); app.MapFallbackToPage("/Index"); app.Run(); ================================================ FILE: projects/blazor-ss/ComponentEvents-2/README.md ================================================ # Component Events 2 The sample is similar to [Component Events](ComponentEvents) except that it uses [Blazor.EventAggregrator](https://github.com/mikoskinen/Blazor.EventAggregator) to handle cross components and pages communication. ================================================ FILE: projects/blazor-ss/ComponentEvents-2/wwwroot/css/site.css ================================================ ================================================ FILE: projects/blazor-ss/DependencyInjection/Components/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-ss/DependencyInjection/Components/Pages/Index.razor ================================================ @page "/" @inject TheTransientClock TClock @inject TheSingletonClock SClock @inject TheScopedClock SCClock

Click all buttons repeatedly. Also open new tabs and compares the result side by side.

New Window
Singleton Scoped Transient
@SingletonClockOutput @ScopedClockOutput @TransientClockOutput
@functions { string SingletonClockOutput { get; set; } string ScopedClockOutput { get; set; } string TransientClockOutput { get; set; } void Singleton() { SingletonClockOutput = SClock.Get(); } void Scoped() { ScopedClockOutput = SCClock.Get(); } void Transient() { TransientClockOutput = TClock.Get(); } } ================================================ FILE: projects/blazor-ss/DependencyInjection/Components/_Imports.razor ================================================ @using System.Net.Http @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using DependencyInjection.Services @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Authorization ================================================ FILE: projects/blazor-ss/DependencyInjection/DependencyInjection.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ss/DependencyInjection/Pages/Index.cshtml ================================================ @page "/" Dependency Injection @(await Html.RenderComponentAsync(RenderMode.ServerPrerendered)) ================================================ FILE: projects/blazor-ss/DependencyInjection/Pages/_ViewImports.cshtml ================================================ @using DependencyInjection.Components @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: projects/blazor-ss/DependencyInjection/Program.cs ================================================ using DependencyInjection.Services; var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); builder.Services.AddTransient(); builder.Services.AddSingleton(); builder.Services.AddScoped(); var app = builder.Build(); app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.MapRazorPages(); app.MapFallbackToPage("/Index"); app.MapBlazorHub(); app.Run(); ================================================ FILE: projects/blazor-ss/DependencyInjection/README.md ================================================ # Dependency Injection Now that all your requests are going through a single two way websocket, it is hard to figure out what a request means. This will have impact on the usage of the standard built-in dependency injection concept of 'Scoped' vs 'Transient' (Singleton would behave as expected). Run the sample on `DependencyInjection` using `dotnet watch`. ================================================ FILE: projects/blazor-ss/DependencyInjection/Services/TheScopedClock.cs ================================================ using System; namespace DependencyInjection.Services { public class TheScopedClock { DateTime _clock = DateTime.UtcNow; public string Get() { return _clock.ToString(); } } } ================================================ FILE: projects/blazor-ss/DependencyInjection/Services/TheSingletonClock.cs ================================================ using System; namespace DependencyInjection.Services { public class TheSingletonClock { DateTime _clock = DateTime.UtcNow; public string Get() { return _clock.ToString(); } } } ================================================ FILE: projects/blazor-ss/DependencyInjection/Services/TheTransientClock.cs ================================================ using System; namespace DependencyInjection.Services { public class TheTransientClock { DateTime _clock = DateTime.UtcNow; public string Get() { return _clock.ToString(); } } } ================================================ FILE: projects/blazor-ss/DependencyInjection/wwwroot/css/site.css ================================================ ================================================ FILE: projects/blazor-ss/HelloWorld/Components/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-ss/HelloWorld/Components/Pages/Index.razor ================================================ @page "/"

Hello, world!

================================================ FILE: projects/blazor-ss/HelloWorld/Components/_Imports.razor ================================================ @using System.Net.Http @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Authorization ================================================ FILE: projects/blazor-ss/HelloWorld/HelloWorld.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ss/HelloWorld/Pages/Index.cshtml ================================================ @page Hello World @(await Html.RenderComponentAsync(RenderMode.ServerPrerendered)) ================================================ FILE: projects/blazor-ss/HelloWorld/Pages/_ViewImports.cshtml ================================================ @using HelloWorld.Components @namespace HelloWorld.Pages @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: projects/blazor-ss/HelloWorld/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); var app = builder.Build(); app.UseHttpsRedirection(); app.UseStaticFiles(); app.MapBlazorHub(); app.MapRazorPages(); app.MapFallbackToPage("/Index"); app.Run(); ================================================ FILE: projects/blazor-ss/HelloWorld/README.md ================================================ # Hello World This is the simplest Razor component app you can create. It will show you clearly the building block of a Razor component application. Run the sample on `HelloWorld` using `dotnet watch`. ================================================ FILE: projects/blazor-ss/HelloWorld/wwwroot/css/site.css ================================================ ================================================ FILE: projects/blazor-ss/JsIntegration/Components/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-ss/JsIntegration/Components/Pages/Index.razor ================================================ @page "/" @inject IJSRuntime JS

JS Interop

We will call alert, confirm and console.log in this sample. Please click the button.

@code { protected override async Task OnAfterRenderAsync(bool firstRender) { await JS.InvokeAsync("console.log", "hello world console"); await JS.InvokeAsync("alert", $"Hello "); } async Task ConfirmAsync(){ var result = await JS.InvokeAsync("confirm", "Do you confirm?"); await JS.InvokeAsync("alert", $"Result {result}"); } } ================================================ FILE: projects/blazor-ss/JsIntegration/Components/_Imports.razor ================================================ @using System.Net.Http @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Authorization ================================================ FILE: projects/blazor-ss/JsIntegration/JsIntegration.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ss/JsIntegration/Pages/Index.cshtml ================================================ @page "/" Js Integration
@(await Html.RenderComponentAsync(RenderMode.ServerPrerendered))
================================================ FILE: projects/blazor-ss/JsIntegration/Pages/_ViewImports.cshtml ================================================ @using JsIntegration.Components @namespace JsIntegration.Pages @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: projects/blazor-ss/JsIntegration/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); var app = builder.Build(); app.UseHttpsRedirection(); app.UseStaticFiles(); app.MapRazorPages(); app.MapFallbackToPage("/Index"); app.MapBlazorHub(); app.Run(); ================================================ FILE: projects/blazor-ss/JsIntegration/README.md ================================================ # JS Integration This sample shows how to access JavaScript functions available at `windows` global scope. ================================================ FILE: projects/blazor-ss/JsIntegration/wwwroot/css/site.css ================================================ ================================================ FILE: projects/blazor-ss/Layout/Components/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-ss/Layout/Components/Pages/Index.razor ================================================ @layout TopLayout @page "/"

This page uses a layout.

================================================ FILE: projects/blazor-ss/Layout/Components/Pages/NestedLayout.razor ================================================ @inherits LayoutComponentBase @layout TopLayout
@Body
================================================ FILE: projects/blazor-ss/Layout/Components/Pages/NestedLayout2.razor ================================================ @inherits LayoutComponentBase @layout NestedLayout
@Body
================================================ FILE: projects/blazor-ss/Layout/Components/Pages/PageUsingNestedLayout.razor ================================================ @layout NestedLayout @page "/nested"

Page using Nested Layout

================================================ FILE: projects/blazor-ss/Layout/Components/Pages/PageUsingNestedLayout2.razor ================================================ @layout NestedLayout2 @page "/nested2"

Page using Nested Layout 2

================================================ FILE: projects/blazor-ss/Layout/Components/Pages/TopLayout.razor ================================================ @inherits LayoutComponentBase

@Title

@Body
@((MarkupString)"©") by @Credit
@code { string Title {get; set;} = "Top Layout"; string Credit {get;set;} = "Practical ASP.NET Core"; } ================================================ FILE: projects/blazor-ss/Layout/Components/_Imports.razor ================================================ @using System.Net.Http @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Authorization ================================================ FILE: projects/blazor-ss/Layout/Layout.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ss/Layout/Pages/Index.cshtml ================================================ @page "/" Layout @(await Html.RenderComponentAsync(RenderMode.ServerPrerendered)) ================================================ FILE: projects/blazor-ss/Layout/Pages/_ViewImports.cshtml ================================================ @using Layout.Components @namespace Layout.Pages @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: projects/blazor-ss/Layout/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); var app = builder.Build(); app.UseHttpsRedirection(); app.UseStaticFiles(); app.MapRazorPages(); app.MapFallbackToPage("/Index"); app.MapBlazorHub(); app.Run(); ================================================ FILE: projects/blazor-ss/Layout/README.md ================================================ # Layouts This sample shows how to use layout and nested layouts (including multiple nested layout) with your Razor Component app. ================================================ FILE: projects/blazor-ss/Layout/wwwroot/css/site.css ================================================ ================================================ FILE: projects/blazor-ss/Localization/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#d72008", "activityBar.background": "#d72008", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#023d09", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#d72008", "statusBar.background": "#a61906", "statusBar.debuggingBackground": "#0693a6", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#d72008", "statusBarItem.remoteBackground": "#a61906", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#a61906", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#a6190699", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#a61906" } ================================================ FILE: projects/blazor-ss/Localization/Components/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-ss/Localization/Components/Pages/Index.razor ================================================ @page "/" @inject IStringLocalizer Local

Localization

Key Message
Hello @Local["Hello"]
Goodbye @Local["Goodbye"]
Yes @Local["Yes"]
No @Local["No"]

Switch Language

================================================ FILE: projects/blazor-ss/Localization/Components/_Imports.razor ================================================ @using System.Net.Http @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Authorization @using Microsoft.AspNetCore.Localization @using Microsoft.Extensions.Localization ================================================ FILE: projects/blazor-ss/Localization/Localization.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ss/Localization/Localization.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Localization", "Localization.csproj", "{01F03E5D-1640-4088-ADF7-65205694FB4D}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {01F03E5D-1640-4088-ADF7-65205694FB4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {01F03E5D-1640-4088-ADF7-65205694FB4D}.Debug|Any CPU.Build.0 = Debug|Any CPU {01F03E5D-1640-4088-ADF7-65205694FB4D}.Release|Any CPU.ActiveCfg = Release|Any CPU {01F03E5D-1640-4088-ADF7-65205694FB4D}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {1F36ABA1-F373-4C0A-811F-7D9204B7DAC2} EndGlobalSection EndGlobal ================================================ FILE: projects/blazor-ss/Localization/Pages/Index.cshtml ================================================ @page "/" Localization @(await Html.RenderComponentAsync(RenderMode.ServerPrerendered)) ================================================ FILE: projects/blazor-ss/Localization/Pages/Switch.cshtml ================================================ @page "/switch" @model SwitchModel @functions { public class SwitchModel : Microsoft.AspNetCore.Mvc.RazorPages.PageModel { public IActionResult OnGet(string culture, string redirectUrl) { if (culture != null) { System.Console.WriteLine("Culture " + culture); HttpContext.Response.Cookies.Delete(CookieRequestCultureProvider.DefaultCookieName); HttpContext.Response.Cookies.Append( CookieRequestCultureProvider.DefaultCookieName, CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture))); } return LocalRedirect(redirectUrl); } } } ================================================ FILE: projects/blazor-ss/Localization/Pages/_ViewImports.cshtml ================================================ @using Localization.Components @using Microsoft.Extensions.Localization @using Microsoft.AspNetCore.Localization @namespace Localization.Pages @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: projects/blazor-ss/Localization/Program.cs ================================================ using Microsoft.AspNetCore.Localization; using System.Globalization; var builder = WebApplication.CreateBuilder(); builder.Services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; }); var supportedCultures = new List { new CultureInfo("fr-FR"), new CultureInfo("en"), new CultureInfo("fr"), }; builder.Services.Configure(options => { options.DefaultRequestCulture = new RequestCulture("fr"); options.SupportedCultures = supportedCultures; options.SupportedUICultures = supportedCultures; options.RequestCultureProviders.Clear(); options.RequestCultureProviders.Add(new CookieRequestCultureProvider()); }); builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); var app = builder.Build(); app.UseStaticFiles(); app.MapRazorPages(); app.MapFallbackToPage("/Index"); app.MapBlazorHub(); app.Run(); // Leave this class empty. We use it to bind to resources. public class Global { } ================================================ FILE: projects/blazor-ss/Localization/README.md ================================================ # Localization This is a sample on how to use localization and perform language switching on Blazor Server by using a global resource. ================================================ FILE: projects/blazor-ss/Localization/Resources/Global.en.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 So long Howdy Hell Yeah No ================================================ FILE: projects/blazor-ss/Localization/Resources/Global.fr.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Au Revoir Bonjour Oui Non ================================================ FILE: projects/blazor-ss/Localization/wwwroot/css/site.css ================================================ ================================================ FILE: projects/blazor-ss/Localization-2/Components/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-ss/Localization-2/Components/Pages/Index.razor ================================================ @page "/" @inject IStringLocalizer Local

Localization

Key Message
Hello @Local["Hello"]
Goodbye @Local["Goodbye"]
Yes @Local["Yes"]
No @Local["No"]
1 Car @Local.Plural(1,"One car", "{0} cars")
2 Cars @Local.Plural(2,"One car", "{0} {1} cars", "holly")
100 Cars @Local.Plural(100,"One car", "{0} {1} cars", "shit")

Switch Language

================================================ FILE: projects/blazor-ss/Localization-2/Components/_Imports.razor ================================================ @using System.Net.Http @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Authorization @using Microsoft.AspNetCore.Localization @using Microsoft.Extensions.Localization ================================================ FILE: projects/blazor-ss/Localization-2/Localization.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ss/Localization-2/Pages/Index.cshtml ================================================ @page "/" Localization @(await Html.RenderComponentAsync(RenderMode.ServerPrerendered)) ================================================ FILE: projects/blazor-ss/Localization-2/Pages/Switch.cshtml ================================================ @page "/switch" @model SwitchModel @functions { public class SwitchModel : Microsoft.AspNetCore.Mvc.RazorPages.PageModel { public IActionResult OnGet(string culture, string redirectUrl) { if (culture != null) { System.Console.WriteLine("Culture " + culture); HttpContext.Response.Cookies.Delete(CookieRequestCultureProvider.DefaultCookieName); HttpContext.Response.Cookies.Append( CookieRequestCultureProvider.DefaultCookieName, CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture))); } return LocalRedirect(redirectUrl); } } } ================================================ FILE: projects/blazor-ss/Localization-2/Pages/_ViewImports.cshtml ================================================ @using Localization.Components @using Microsoft.Extensions.Localization @using Microsoft.AspNetCore.Localization @namespace Localization.Pages @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: projects/blazor-ss/Localization-2/Program.cs ================================================ using Microsoft.AspNetCore.Localization; using System.Globalization; var builder = WebApplication.CreateBuilder(); builder.Services.AddPortableObjectLocalization(options => options.ResourcesPath = "Resources"); var supportedCultures = new List { new CultureInfo("fr-FR"), new CultureInfo("en"), new CultureInfo("fr"), }; builder.Services.Configure(options => { options.DefaultRequestCulture = new RequestCulture("fr"); options.SupportedCultures = supportedCultures; options.SupportedUICultures = supportedCultures; options.RequestCultureProviders.Clear(); options.RequestCultureProviders.Add(new CookieRequestCultureProvider()); }); builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); var app = builder.Build(); app.UseStaticFiles(); app.UseRequestLocalization(); app.MapRazorPages(); app.MapFallbackToPage("/Index"); app.MapBlazorHub(); app.Run(); // Leave this class empty. We use it to bind to resources. public class Global { } ================================================ FILE: projects/blazor-ss/Localization-2/README.md ================================================ # Localization using Portable Object (PO) files This is a sample on how to use localization and perform language switching on Blazor Server by using Portable Object (PO) files. We will be using `OrchardCore.Localization.Core` package with version `1.0.0-rc1-13433`. For this example to work, you need to add additional NuGet sources using [this instruction](https://cloudsmith.io/~orchardcore/repos/preview/setup/#formats-nuget). ================================================ FILE: projects/blazor-ss/Localization-2/Resources/en.po ================================================ msgid "Hello" msgstr "Howdy" msgid "Goodbye" msgstr "So Long" msgid "Yes" msgstr "Yeah" msgid "No" msgstr "Nope" msgid "One car" msgid_plural "{0} cars" msgstr[0] "One hotrod" msgstr[1] "{0} hotrods" ================================================ FILE: projects/blazor-ss/Localization-2/Resources/fr.po ================================================ msgid "Hello" msgstr "Bonjour" msgid "Goodbye" msgstr "Au Revoir" msgid "Yes" msgstr "Oui" msgid "No" msgstr "No" msgid "One car" msgid_plural "{0} cars" msgstr[0] "Une voiture" msgstr[1] "{0} voitures" ================================================ FILE: projects/blazor-ss/Localization-2/wwwroot/css/site.css ================================================ ================================================ FILE: projects/blazor-ss/Localization-3/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#ef999c", "activityBar.background": "#ef999c", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#1a8a16", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#ef999c", "statusBar.background": "#e86d71", "statusBar.debuggingBackground": "#6de8e4", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#e14146", "statusBarItem.remoteBackground": "#e86d71", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#e86d71", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#e86d7199", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#e86d71" } ================================================ FILE: projects/blazor-ss/Localization-3/Components/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-ss/Localization-3/Components/Pages/Index.razor ================================================ @page "/" @inject IStringLocalizer Local

Localization

Key Message
Hello @Local["Hello"]
Goodbye @Local["Goodbye"]
Yes @Local["Yes"]
No @Local["No"]
1 Car @Local.Plural(1,"One car", "{0} cars")
2 Cars @Local.Plural(2,"One car", "{0} {1} cars", "holly")
100 Cars @Local.Plural(100,"One car", "{0} {1} cars", "shit")

Switch Language

================================================ FILE: projects/blazor-ss/Localization-3/Components/_Imports.razor ================================================ @using System.Net.Http @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Authorization @using Microsoft.AspNetCore.Localization @using Microsoft.Extensions.Localization ================================================ FILE: projects/blazor-ss/Localization-3/Localization.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ss/Localization-3/Pages/Index.cshtml ================================================ @page "/" Localization @(await Html.RenderComponentAsync(RenderMode.ServerPrerendered)) ================================================ FILE: projects/blazor-ss/Localization-3/Pages/Switch.cshtml ================================================ @page "/switch" @model SwitchModel @functions { public class SwitchModel : Microsoft.AspNetCore.Mvc.RazorPages.PageModel { public IActionResult OnGet(string culture, string redirectUrl) { if (culture != null) { System.Console.WriteLine("Culture " + culture); HttpContext.Response.Cookies.Delete(CookieRequestCultureProvider.DefaultCookieName); HttpContext.Response.Cookies.Append( CookieRequestCultureProvider.DefaultCookieName, CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture))); } return LocalRedirect(redirectUrl); } } } ================================================ FILE: projects/blazor-ss/Localization-3/Pages/_ViewImports.cshtml ================================================ @using Localization.Components @using Microsoft.Extensions.Localization @using Microsoft.AspNetCore.Localization @namespace Localization.Pages @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: projects/blazor-ss/Localization-3/Program.cs ================================================ using Microsoft.AspNetCore.Localization; using System.Globalization; using Microsoft.Extensions.Options; using OrchardCore.Localization; using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Localization; var builder = WebApplication.CreateBuilder(); builder.Services.AddPortableObjectLocalization(options => options.ResourcesPath = "Resources"); builder.Services.AddSingleton(); var supportedCultures = new List { new CultureInfo("fr-FR"), new CultureInfo("en"), new CultureInfo("fr"), }; builder.Services.Configure(options => { options.DefaultRequestCulture = new RequestCulture("fr"); options.SupportedCultures = supportedCultures; options.SupportedUICultures = supportedCultures; options.RequestCultureProviders.Clear(); options.RequestCultureProviders.Add(new CookieRequestCultureProvider()); }); builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); var app = builder.Build(); app.UseHttpsRedirection(); app.UseRouting(); app.UseStaticFiles(); app.UseRequestLocalization(); app.MapRazorPages(); app.MapFallbackToPage("/Index"); app.MapBlazorHub(); app.Run(); // Leave this class empty. We use it to bind to resources. public class Global { } public class MultiplePoFilesLocationProvider : ILocalizationFileLocationProvider { private readonly IFileProvider _fileProvider; private readonly string _resourcesContainer; public MultiplePoFilesLocationProvider(IHostEnvironment hostingEnvironment, IOptions localizationOptions) { _fileProvider = hostingEnvironment.ContentRootFileProvider; _resourcesContainer = localizationOptions.Value.ResourcesPath; } public IEnumerable GetLocations(string cultureName) { foreach (var file in Directory.EnumerateFiles(_resourcesContainer).Where(f => f.EndsWith(cultureName + ".po"))) { yield return _fileProvider.GetFileInfo(file); } } } ================================================ FILE: projects/blazor-ss/Localization-3/README.md ================================================ # Better organization of PO files. This is a sample on how to use localization and perform language switching on Blazor Server by using Portable Object (PO) files. In this example we implement `ILocalizationFileLocationProvider` that allows us to organize our PO files better. We will be using `OrchardCore.Localization.Core` package with version `1.0.0-rc1-13433`. For this example to work, you need to add additional NuGet sources using [this instruction](https://cloudsmith.io/~orchardcore/repos/preview/setup/#formats-nuget). ================================================ FILE: projects/blazor-ss/Localization-3/Resources/en.po ================================================ msgid "Hello" msgstr "Howdy" msgid "Goodbye" msgstr "So Long" msgid "Yes" msgstr "Yeah" msgid "No" msgstr "Nope" ================================================ FILE: projects/blazor-ss/Localization-3/Resources/fr.po ================================================ msgid "Hello" msgstr "Bonjour" msgid "Goodbye" msgstr "Au Revoir" msgid "Yes" msgstr "Oui" msgid "No" msgstr "No" ================================================ FILE: projects/blazor-ss/Localization-3/Resources/plural.en.po ================================================ msgid "One car" msgid_plural "{0} cars" msgstr[0] "One hotrod" msgstr[1] "{0} hotrods" ================================================ FILE: projects/blazor-ss/Localization-3/Resources/plural.fr.po ================================================ msgid "One car" msgid_plural "{0} cars" msgstr[0] "Une voiture" msgstr[1] "{0} voitures" ================================================ FILE: projects/blazor-ss/Localization-3/wwwroot/css/site.css ================================================ ================================================ FILE: projects/blazor-ss/Localization-4/Components/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-ss/Localization-4/Components/Pages/Index.razor ================================================ @page "/" @inject IStringLocalizer Local

Localization

Key Message
Hello @Local["Hello"]
Goodbye @Local["Goodbye"]
Yes @Local["Yes"]
No @Local["No"]

Switch Language

================================================ FILE: projects/blazor-ss/Localization-4/Components/_Imports.razor ================================================ @using System.Net.Http @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Authorization @using Microsoft.AspNetCore.Localization @using Microsoft.Extensions.Localization ================================================ FILE: projects/blazor-ss/Localization-4/Localization.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ss/Localization-4/Pages/Index.cshtml ================================================ @page "/" Localization @(await Html.RenderComponentAsync(RenderMode.ServerPrerendered)) @functions { string Direction() { var requestCulture = HttpContext.Features.Get().RequestCulture; if (requestCulture.Culture.Name == "ar") return "rtl"; else return "ltr"; } } ================================================ FILE: projects/blazor-ss/Localization-4/Pages/Switch.cshtml ================================================ @page "/switch" @model SwitchModel @functions { public class SwitchModel : Microsoft.AspNetCore.Mvc.RazorPages.PageModel { public IActionResult OnGet(string culture, string redirectUrl) { if (culture != null) { System.Console.WriteLine("Culture " + culture); HttpContext.Response.Cookies.Delete(CookieRequestCultureProvider.DefaultCookieName); HttpContext.Response.Cookies.Append( CookieRequestCultureProvider.DefaultCookieName, CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture))); } return LocalRedirect(redirectUrl); } } } ================================================ FILE: projects/blazor-ss/Localization-4/Pages/_ViewImports.cshtml ================================================ @using Localization.Components @using Microsoft.Extensions.Localization @using Microsoft.AspNetCore.Localization @namespace Localization.Pages @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: projects/blazor-ss/Localization-4/Program.cs ================================================ using Microsoft.AspNetCore.Localization; using System.Globalization; using Microsoft.Extensions.Options; using OrchardCore.Localization; using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Localization; var builder = WebApplication.CreateBuilder(); builder.Services.AddPortableObjectLocalization(options => options.ResourcesPath = "Resources"); builder.Services.AddSingleton(); var supportedCultures = new List { new CultureInfo("en"), new CultureInfo("ar"), }; builder.Services.Configure(options => { options.DefaultRequestCulture = new RequestCulture("ar"); options.SupportedCultures = supportedCultures; options.SupportedUICultures = supportedCultures; options.RequestCultureProviders.Clear(); options.RequestCultureProviders.Add(new CookieRequestCultureProvider()); }); builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); var app = builder.Build(); app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRequestLocalization(); app.MapRazorPages(); app.MapFallbackToPage("/Index"); app.MapBlazorHub(); app.Run(); public class Global { } public class MultiplePoFilesLocationProvider : ILocalizationFileLocationProvider { private readonly IFileProvider _fileProvider; private readonly string _resourcesContainer; public MultiplePoFilesLocationProvider(IHostEnvironment hostingEnvironment, IOptions localizationOptions) { _fileProvider = hostingEnvironment.ContentRootFileProvider; _resourcesContainer = localizationOptions.Value.ResourcesPath; } public IEnumerable GetLocations(string cultureName) { foreach (var file in Directory.EnumerateFiles(_resourcesContainer).Where(f => f.EndsWith(cultureName + ".po"))) { yield return _fileProvider.GetFileInfo(file); } } } ================================================ FILE: projects/blazor-ss/Localization-4/README.md ================================================ # LTR and RTL support This sample shows how to implement LTR/RTL support in Blazor Server. This sample uses Portable Object (PO) files for localization. We will be using `OrchardCore.Localization.Core` package with version `1.0.0-rc1-13433`. For this example to work, you need to add additional NuGet sources using [this instruction](https://cloudsmith.io/~orchardcore/repos/preview/setup/#formats-nuget). ================================================ FILE: projects/blazor-ss/Localization-4/Resources/ar.po ================================================ msgid "Hello" msgstr "أهلاً و سهلاً" msgid "Goodbye" msgstr "مع السّلامة" msgid "Yes" msgstr "أيوا" msgid "No" msgstr "لا" ================================================ FILE: projects/blazor-ss/Localization-4/Resources/en.po ================================================ msgid "Hello" msgstr "Howdy" msgid "Goodbye" msgstr "So Long" msgid "Yes" msgstr "Yeah" msgid "No" msgstr "Nope" ================================================ FILE: projects/blazor-ss/Localization-4/wwwroot/css/site.css ================================================ ================================================ FILE: projects/blazor-ss/README.md ================================================ # Server Side Blazor (16) This is an amazing piece of technology where your interactive web UI is handled via C# and streamed back and forth using web socket via SignalR. All the samples in this section runs on SSL. If you have not gotten your local self-sign SSL in order yet, please read this [instruction](https://www.hanselman.com/blog/DevelopingLocallyWithASPNETCoreUnderHTTPSSSLAndSelfSignedCerts.aspx). * [Hello World](HelloWorld) This is the simplest Razor component app you can create. It will show you clearly the building block of a Razor component application. There are two extra settings for dotnet watch to monitor `*.cshtml` and `*.razor` file changes on two projects to make your development experience better. ``` xml ``` * [Rss Reader](RssReader) This sample demonstrates that you can use normal server side packages with your Razor Component as it is a truly server side system. This sample uses `Microsoft.SyndicationFeed.ReaderWriter` package to parse an external RSS feed and display it. * [Rss Reader - 2](RssReader-2) This version of RSS Reader uses C# 8.0 `IAsyncEnumerable` to process RSS data as they are available. There is an artificial `await Task.Delay(3000);` added to `RssNews.GetNewsAsync` so you can see visually how the UI changes. * [Js Integration](JsIntegration) This sample shows how to access JavaScript functions available at `windows` global scope. * [Dependency Injection](DependencyInjection) This sample shows you that the 'Transient' and 'Scoped' Dependency Injection method have different practical impact on Razor Component. * [Layout](Layout) This sample shows how to use layout and nested layouts. * [Multiple Starting Points](StartingVariation) In this example we demonstrates how three different Razor Pages endpoints act as starting points for different path of your Server Side Blazor. * [Wall of Counters](WallOfCounters) In this sample we will use System.Timers.Timer to perform multiple counters. * [ChatR](ChatR) In this sample we will host a SignalR Hub in the same host as the Blazor Server Side * [Component Events](ComponentEvents) In this sample we will facilitate communication between components and pages using a Scoped lifetime AppState object. * [Component Events 2](ComponentEvents-2) This sample is similar to [Component Events](ComponentEvents) except that we will facilitate communication between components and pages using [Blazor.EventAggregrator](https://github.com/mikoskinen/Blazor.EventAggregator) library. * [Localization](Localization) This sample shows how to use localization and perform language switching in Blazor server using a global resource. * [Localization using PO files](Localization-2) This sample shows how to use localization and perform language switching in Blazor server using Portable Object(PO) files. * [Localization using PO with multiple files](Localization-3) This sample is similar to the previous one above except this time we allow translation files to be split into multiple files per language. This allows better organization of language translation. * [Localization RTL/LTR support](Localization-4) This sample shows how to implement LTR/RTL support in Blazor. * [RenderTreeBuilder](RenderTreeBuilder) `RenderTreeBuilder` shows a Blazor (server) component implemented without Razor syntax. dotnet8 ================================================ FILE: projects/blazor-ss/RenderTreeBuilder/ListNames.cs ================================================ using Microsoft.AspNetCore.Components; class Separator : ComponentBase { protected override void BuildRenderTree(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder builder) { builder.OpenElement(0, "hr"); builder.CloseElement(); // hr } } class ListNames : ComponentBase { protected override void BuildRenderTree(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder builder) { // see the following: // https://docs.microsoft.com/en-us/aspnet/core/blazor/advanced-scenarios builder.OpenElement(0, "ul"); var names = new string[] { "Bruce", "Clint", "Donald", "Natasha", "Steve", "Tony", }; foreach (var x in names) { builder.OpenElement(1, "li"); builder.OpenElement(2, "p"); builder.AddContent(3, x); builder.CloseElement(); // p builder.CloseElement(); // li } builder.CloseElement(); // ul // shows an example of a nested component builder.OpenComponent(4); builder.CloseComponent(); } } ================================================ FILE: projects/blazor-ss/RenderTreeBuilder/Program.cs ================================================ using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.AspNetCore.Html; using System.Text.Encodings.Web; // converts an IHtmlContent to a string static string GetString(IHtmlContent htmlContent) { using (var writer = new StringWriter()) { htmlContent.WriteTo(writer, HtmlEncoder.Default); return writer.ToString(); } } var builder = WebApplication.CreateBuilder(args); builder.Services.AddMvc(); // for IHtmlHelper builder.Services.AddServerSideBlazor(); var app = builder.Build(); app.UseStaticFiles(); app.MapBlazorHub(); app.MapGet("/", async (HttpContext ctx) => { ctx.Response.ContentType = "text/html"; var htmlHelper = ctx.RequestServices.GetRequiredService(); ((IViewContextAware)htmlHelper).Contextualize(new ViewContext { HttpContext = ctx }); // all of this could be done with a Razor Page, // but this sample uses C# instead await ctx.Response.WriteAsync(""); await ctx.Response.WriteAsync(""); await ctx.Response.WriteAsync(""); await ctx.Response.WriteAsync(""); await ctx.Response.WriteAsync(""); await ctx.Response.WriteAsync(""); await ctx.Response.WriteAsync(""); await ctx.Response.WriteAsync("
"); { var htmlContent = await htmlHelper.RenderComponentAsync(RenderMode.Server); await ctx.Response.WriteAsync(GetString(htmlContent)); } await ctx.Response.WriteAsync("
"); await ctx.Response.WriteAsync(""); await ctx.Response.WriteAsync(""); await ctx.Response.WriteAsync(""); } ); app.Run(); ================================================ FILE: projects/blazor-ss/RenderTreeBuilder/README.md ================================================ # RenderTreeBuilder `RenderTreeBuilder` shows a Blazor (server) component implemented without Razor syntax, inheriting from the abstract class `ComponentBase` and implementing the `BuildRenderTree` method. Contribution by [ericsink](https://github.com/ericsink). ================================================ FILE: projects/blazor-ss/RenderTreeBuilder/RenderTreeBuilder.csproj ================================================ net10.0 enable true preview ================================================ FILE: projects/blazor-ss/RenderTreeBuilder/appsettings.Development.json ================================================ { "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } } } ================================================ FILE: projects/blazor-ss/RenderTreeBuilder/appsettings.json ================================================ { "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*" } ================================================ FILE: projects/blazor-ss/RssReader/Components/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-ss/RssReader/Components/Pages/Index.razor ================================================ @page "/" ================================================ FILE: projects/blazor-ss/RssReader/Components/Pages/RssBox.razor ================================================ @using Microsoft.SyndicationFeed @inject RssNews rss

RSS News

    @foreach(var n in News) {
  • @((MarkupString)n.Description)
  • }
@code { List News {get; set;} protected override async Task OnInitializedAsync() { News = await rss.GetNewsAsync(); } } ================================================ FILE: projects/blazor-ss/RssReader/Components/_Imports.razor ================================================ @using System.Net.Http @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using RssReader.Services @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Authorization ================================================ FILE: projects/blazor-ss/RssReader/Pages/Index.cshtml ================================================ @page RSS Reader @(await Html.RenderComponentAsync(RenderMode.ServerPrerendered)) ================================================ FILE: projects/blazor-ss/RssReader/Pages/_ViewImports.cshtml ================================================ @using RssReader.Components @namespace RssReader.Pages @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: projects/blazor-ss/RssReader/Program.cs ================================================ using RssReader.Services; var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); builder.Services.AddSingleton(); var app = builder.Build(); app.UseHttpsRedirection(); app.UseStaticFiles(); app.MapRazorPages(); app.MapFallbackToPage("/Index"); app.MapBlazorHub(); app.Run(); ================================================ FILE: projects/blazor-ss/RssReader/README.md ================================================ # Rss Reader This sample shows that Razor Component is truly a server side system. You will see how we fetch RSS data on the server and deliver it to your browser. It uses `Microsoft.SyndicationFeed.ReaderWriter` package to parse an external RSS XML document. This sample also shows the use of `MarkupString` to show unescaped HTML string. ```
    @foreach(var n in News) {
  • @((MarkupString)n.Description)
  • }
``` ================================================ FILE: projects/blazor-ss/RssReader/RssReader.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ss/RssReader/Services/RssNews.cs ================================================ using Microsoft.SyndicationFeed; using Microsoft.SyndicationFeed.Rss; using System.Xml; namespace RssReader.Services; public class RssNews { public async Task> GetNewsAsync() { var items = new List(); using (var xmlReader = XmlReader.Create("http://scripting.com/rss.xml", new XmlReaderSettings { Async = true })) { var feedReader = new RssFeedReader(xmlReader); while (await feedReader.Read()) { switch (feedReader.ElementType) { case SyndicationElementType.Item: ISyndicationItem item = await feedReader.ReadItem(); items.Add(new SyndicationItem(item)); break; default: break; } } } return items; } } ================================================ FILE: projects/blazor-ss/RssReader/wwwroot/css/site.css ================================================ ================================================ FILE: projects/blazor-ss/RssReader-2/Components/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-ss/RssReader-2/Components/Pages/Index.razor ================================================ @page "/" ================================================ FILE: projects/blazor-ss/RssReader-2/Components/Pages/RssBox.razor ================================================ @using Microsoft.SyndicationFeed @inject RssNews rss

RSS News

    @foreach(var n in News) {
  • @((MarkupString)n.Description)
  • }
@code { List News {get; set;} = new List(); protected override async Task OnInitializedAsync() { var feeds = new string[] { "http://scripting.com/rss.xml", "https://hnrss.org/jobs", "https://hnrss.org/newest", "http://feeds.bbci.co.uk/news/rss.xml", "http://feeds.bbci.co.uk/news/world/rss.xml", "http://feeds.bbci.co.uk/news/uk/rss.xml", "http://feeds.bbci.co.uk/news/business/rss.xml", "http://feeds.bbci.co.uk/news/politics/rss.xml", "http://feeds.bbci.co.uk/news/health/rss.xml", "http://feeds.bbci.co.uk/news/education/rss.xml", "http://feeds.bbci.co.uk/news/entertainment_and_arts/rss.xml" }; await foreach(var news in rss.GetMultipleNewsAsync(feeds)) { foreach(var n in news) { News.Insert(0, n); } this.StateHasChanged(); } } } ================================================ FILE: projects/blazor-ss/RssReader-2/Components/_Imports.razor ================================================ @using System.Net.Http @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using RssReader.Services @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Authorization ================================================ FILE: projects/blazor-ss/RssReader-2/Pages/Index.cshtml ================================================ @page RSS Reader @(await Html.RenderComponentAsync(RenderMode.ServerPrerendered)) ================================================ FILE: projects/blazor-ss/RssReader-2/Pages/_ViewImports.cshtml ================================================ @using RssReader.Components @namespace RssReader.Pages @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: projects/blazor-ss/RssReader-2/Program.cs ================================================ using RssReader.Services; var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); builder.Services.AddSingleton(); var app = builder.Build(); app.UseHttpsRedirection(); app.UseStaticFiles(); app.MapRazorPages(); app.MapFallbackToPage("/Index"); app.MapBlazorHub(); app.Run(); ================================================ FILE: projects/blazor-ss/RssReader-2/README.md ================================================ # Rss Reader This version of RSS Reader uses C# 8.0 `IAsyncEnumerable` to process RSS data as they are available. There is an artificial `await Task.Delay(3000);` added to `RssNews.GetNewsAsync` so you can see visually how the UI changes. ================================================ FILE: projects/blazor-ss/RssReader-2/RssReader.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ss/RssReader-2/Services/RssNews.cs ================================================ using Microsoft.SyndicationFeed; using Microsoft.SyndicationFeed.Rss; using System.Xml; namespace RssReader.Services { public class RssNews { public async IAsyncEnumerable> GetMultipleNewsAsync(params string[] news) { foreach (var x in news) { yield return await GetNewsAsync(x); } } public async Task> GetNewsAsync(string url) { var items = new List(); using (var xmlReader = XmlReader.Create(url, new XmlReaderSettings { Async = true })) { var feedReader = new RssFeedReader(xmlReader); while (await feedReader.Read()) { switch (feedReader.ElementType) { case SyndicationElementType.Item: ISyndicationItem item = await feedReader.ReadItem(); items.Add(new SyndicationItem(item)); break; default: break; } } } await Task.Delay(5000); return items; } } } ================================================ FILE: projects/blazor-ss/RssReader-2/wwwroot/css/site.css ================================================ ================================================ FILE: projects/blazor-ss/StartingVariation/Components/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-ss/StartingVariation/Components/Pages/About.razor ================================================ @page "/admin/blazor/about"

Blazor: About Page

This page is accessible directly from / because of the following code at startup.cs
endpoints.MapFallbackToPage("/Admin/Blazor");
================================================ FILE: projects/blazor-ss/StartingVariation/Components/Pages/Index.razor ================================================ @page "/admin/blazor"

Blazor: Hello, world from different starting point

Go to about
================================================ FILE: projects/blazor-ss/StartingVariation/Components/Pages/Manage.razor ================================================ @page "/manage"

Blazor: Manage Page

================================================ FILE: projects/blazor-ss/StartingVariation/Components/Pages/Secure/Index.razor ================================================ @page "/secure"

Blazor: Secure Starting Point

Go to screen
================================================ FILE: projects/blazor-ss/StartingVariation/Components/Pages/Secure/Screen.razor ================================================ @page "/secure/screen"

Blazor: Screen Screen

================================================ FILE: projects/blazor-ss/StartingVariation/Components/_Imports.razor ================================================ @using System.Net.Http @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Authorization ================================================ FILE: projects/blazor-ss/StartingVariation/Pages/Admin/Blazor.cshtml ================================================ @page "/admin/blazor" Multiple Entries @(await Html.RenderComponentAsync(RenderMode.ServerPrerendered)) ================================================ FILE: projects/blazor-ss/StartingVariation/Pages/Index.cshtml ================================================ @page Hello World

Blazor with multiple entry points

The page you are seeing is a normal page. The following pages are powered by Blazor

================================================ FILE: projects/blazor-ss/StartingVariation/Pages/Manage/Index.cshtml ================================================ @page "/manage" Multiple Entries @(await Html.RenderComponentAsync(RenderMode.ServerPrerendered)) ================================================ FILE: projects/blazor-ss/StartingVariation/Pages/Secure.cshtml ================================================ @page "/secure" Multiple Entries @(await Html.RenderComponentAsync(RenderMode.ServerPrerendered)) ================================================ FILE: projects/blazor-ss/StartingVariation/Pages/_ViewImports.cshtml ================================================ @using StartingVariation.Components @namespace StartingVariation.Pages @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: projects/blazor-ss/StartingVariation/Program.cs ================================================ using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.DependencyInjection; var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); var app = builder.Build(); app.UseStaticFiles(); app.MapRazorPages(); app.MapFallbackToPage("/Admin/Blazor"); app.MapBlazorHub(); app.Run(); ================================================ FILE: projects/blazor-ss/StartingVariation/README.md ================================================ # Starting Variations In this example we demonstrates how three different Razor Pages endpoints act as starting points for different path of your Server Side Blazor. ================================================ FILE: projects/blazor-ss/StartingVariation/StartingVariation.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ss/StartingVariation/wwwroot/css/site.css ================================================ ================================================ FILE: projects/blazor-ss/WallOfCounters/Components/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-ss/WallOfCounters/Components/Pages/Index.razor ================================================ @page "/" @using System.Timers @implements IDisposable

Wall Of Counters

@Counter1
@Counter2
@Counter3
@Counter4
@Counter5
@Counter6
@Counter7
@Counter8
@Counter9
@code { string ClassWall { get; set; } = "wall"; int Counter1 { get; set; } int Counter2 { get; set; } int Counter3 { get; set; } int Counter4 { get; set; } int Counter5 { get; set; } int Counter6 { get; set; } int Counter7 { get; set; } int Counter8 { get; set; } int Counter9 { get; set; } Timer _timer1; Timer _timer2; Timer _timer3; Timer _timer4; Timer _timer5; Timer _timer6; Timer _timer7; Timer _timer8; Timer _timer9; const short TimerTick1InSecond = 1; const short TimerTick2InSecond = 4; const short TimerTick3InSecond = 3; const short TimerTick4InSecond = 7; const short TimerTick5InSecond = 9; const short TimerTick6InSecond = 5; const short TimerTick7InSecond = 2; const short TimerTick8InSecond = 6; const short TimerTick9InSecond = 8; Timer CreateAndStartTimer(short intervalModifier, ElapsedEventHandler handler) { var t = new Timer(1000 * intervalModifier); t.Elapsed += handler; t.Enabled = true; t.Start(); return t; } protected override void OnInitialized() { _timer1 = CreateAndStartTimer(TimerTick1InSecond, (a, b) => { InvokeAsync(() => { Counter1++; StateHasChanged(); }); }); _timer2 = CreateAndStartTimer(TimerTick2InSecond, (a, b) => { InvokeAsync(() => { Counter2++; StateHasChanged(); }); }); _timer3 = CreateAndStartTimer(TimerTick3InSecond, (a, b) => { InvokeAsync(() => { Counter3++; StateHasChanged(); }); }); _timer4 = CreateAndStartTimer(TimerTick4InSecond, (a, b) => { InvokeAsync(() => { Counter4++; StateHasChanged(); }); }); _timer5 = CreateAndStartTimer(TimerTick5InSecond, (a, b) => { InvokeAsync(() => { Counter5++; StateHasChanged(); }); }); _timer6 = CreateAndStartTimer(TimerTick6InSecond, (a, b) => { InvokeAsync(() => { Counter6++; StateHasChanged(); }); }); _timer7 = CreateAndStartTimer(TimerTick7InSecond, (a, b) => { InvokeAsync(() => { Counter7++; StateHasChanged(); }); }); _timer8 = CreateAndStartTimer(TimerTick8InSecond, (a, b) => { InvokeAsync(() => { Counter8++; StateHasChanged(); }); }); _timer9 = CreateAndStartTimer(TimerTick9InSecond, (a, b) => { InvokeAsync(() => { Counter9++; StateHasChanged(); }); }); base.OnInitialized(); } public void Dispose() { _timer1.Dispose(); _timer2.Dispose(); _timer3.Dispose(); _timer4.Dispose(); _timer5.Dispose(); _timer6.Dispose(); _timer7.Dispose(); _timer8.Dispose(); _timer9.Dispose(); } } ================================================ FILE: projects/blazor-ss/WallOfCounters/Components/Pages/Index.razor.css ================================================ .wall { font-size: 80px; } ================================================ FILE: projects/blazor-ss/WallOfCounters/Components/_Imports.razor ================================================ @using System.Net.Http @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Authorization ================================================ FILE: projects/blazor-ss/WallOfCounters/Pages/Index.cshtml ================================================ @page Wall of Counters @(await Html.RenderComponentAsync(RenderMode.ServerPrerendered)) ================================================ FILE: projects/blazor-ss/WallOfCounters/Pages/_ViewImports.cshtml ================================================ @using WallOfCounters.Components @namespace WallOfCounters.Pages @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: projects/blazor-ss/WallOfCounters/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); var app = builder.Build(); app.UseHttpsRedirection(); app.UseStaticFiles(); app.MapRazorPages(); app.MapFallbackToPage("/Index"); app.MapBlazorHub(); app.Run(); ================================================ FILE: projects/blazor-ss/WallOfCounters/README.md ================================================ # Wall of Counters This is a sample on how to use System.Timers.Timers with Blazor and how to update the UI from another thread. This sample also uses [BlazorStyle](https://github.com/chanan/BlazorStyled), a component that allows to use scoped CSS inside a Blazer component (similar to Vue Single File Component). ================================================ FILE: projects/blazor-ss/WallOfCounters/WallOfCounters.csproj ================================================ net10.0 true true preview ================================================ FILE: projects/blazor-ss/build.bat ================================================ dotnet build ChatR dotnet build ComponentEvents dotnet build ComponentEvents-2 dotnet build DependencyInjection dotnet build HelloWorld dotnet build JsIntegration dotnet build Layout dotnet build Localization dotnet build Localization-2 dotnet build Localization-3 dotnet build Localization-4 dotnet build RenderTreeBuilder dotnet build RssReader dotnet build RssReader-2 dotnet build StartingVariation dotnet build WallOfCounters ================================================ FILE: projects/blazor-ss/build.sh ================================================ #!/bin/bash dotnet build ChatR dotnet build ComponentEvents dotnet build ComponentEvents-2 dotnet build DependencyInjection dotnet build HelloWorld dotnet build JsIntegration dotnet build Layout dotnet build Localization dotnet build Localization-2 dotnet build Localization-3 dotnet build Localization-4 dotnet build RenderTreeBuilder dotnet build RssReader dotnet build RssReader-2 dotnet build StartingVariation dotnet build WallOfCounters ================================================ FILE: projects/blazor-ssr/RazorComponentEight/.vscode/settings.json ================================================ { "dotnet.defaultSolution": "RazorComponentEight.sln" } ================================================ FILE: projects/blazor-ssr/RazorComponentEight/README.md ================================================ # Razor Component multi render This sample shows the ability for Blazor to host components with different rendering mode in a single Razor Component Page. The Razor Component Page is server side render. It hosts "number" component with with Streaming rendering and hosts "interactive" component backed by Blazor Web Assembly. The Web Assembly components **need to be hosted in a separate project**. ================================================ FILE: projects/blazor-ssr/RazorComponentEight/RazorComponentEight/App.razor ================================================ Blazor Multi Render ================================================ FILE: projects/blazor-ssr/RazorComponentEight/RazorComponentEight/Pages/Index.razor ================================================ @page "/"

Blazor Multi Render

@_message

This button will not work because this Razor component is statically rendered

This button will work because this Razor component is powered by Blazor WASM

@code { string _message = string.Empty; void ShowMessage() { _message = "This won't work"; } } ================================================ FILE: projects/blazor-ssr/RazorComponentEight/RazorComponentEight/Pages/Numbers.razor ================================================ @attribute [StreamRendering(true)] @if (_numbers.Count == 0) {

Loading numbers (wait for 6 seconds) ...

} else {
    @foreach(var i in _numbers) {
  • @i
  • }
} @code { List _numbers = []; protected override async Task OnInitializedAsync() { await Task.Delay(6_000); //six seconds _numbers = Enumerable.Range(0,100).ToList(); } } ================================================ FILE: projects/blazor-ssr/RazorComponentEight/RazorComponentEight/Program.cs ================================================ var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddRazorComponents() .AddInteractiveWebAssemblyComponents(); builder.Services.AddAntiforgery(); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseAntiforgery(); app.MapRazorComponents() .AddInteractiveWebAssemblyRenderMode(); app.Run(); ================================================ FILE: projects/blazor-ssr/RazorComponentEight/RazorComponentEight/RazorComponentEight.csproj ================================================ net10.0 enable enable 8.0 preview ================================================ FILE: projects/blazor-ssr/RazorComponentEight/RazorComponentEight/RazorComponentEight.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorComponentEight", "RazorComponentEight.csproj", "{8002ACBE-D379-4A05-832F-71D611C47D1B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {8002ACBE-D379-4A05-832F-71D611C47D1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8002ACBE-D379-4A05-832F-71D611C47D1B}.Debug|Any CPU.Build.0 = Debug|Any CPU {8002ACBE-D379-4A05-832F-71D611C47D1B}.Release|Any CPU.ActiveCfg = Release|Any CPU {8002ACBE-D379-4A05-832F-71D611C47D1B}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {D7C03BAA-0B56-45C0-8F59-104257AD3A57} EndGlobalSection EndGlobal ================================================ FILE: projects/blazor-ssr/RazorComponentEight/RazorComponentEight/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-ssr/RazorComponentEight/RazorComponentEight/_Imports.razor ================================================ @using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop @using RazorComponentEight @using RazorComponentEight.Shared ================================================ FILE: projects/blazor-ssr/RazorComponentEight/RazorComponentEight.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.001.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorComponentEight", "RazorComponentEight\RazorComponentEight.csproj", "{B1B422F6-4C9F-4CA6-948A-44911FBE65F5}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wasm", "Wasm\Wasm.csproj", "{92943B7F-EB94-480D-8CC4-E78F21A00004}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {B1B422F6-4C9F-4CA6-948A-44911FBE65F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B1B422F6-4C9F-4CA6-948A-44911FBE65F5}.Debug|Any CPU.Build.0 = Debug|Any CPU {B1B422F6-4C9F-4CA6-948A-44911FBE65F5}.Release|Any CPU.ActiveCfg = Release|Any CPU {B1B422F6-4C9F-4CA6-948A-44911FBE65F5}.Release|Any CPU.Build.0 = Release|Any CPU {92943B7F-EB94-480D-8CC4-E78F21A00004}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {92943B7F-EB94-480D-8CC4-E78F21A00004}.Debug|Any CPU.Build.0 = Debug|Any CPU {92943B7F-EB94-480D-8CC4-E78F21A00004}.Release|Any CPU.ActiveCfg = Release|Any CPU {92943B7F-EB94-480D-8CC4-E78F21A00004}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {56454063-2CFF-4790-81EE-254441A78685} EndGlobalSection EndGlobal ================================================ FILE: projects/blazor-ssr/RazorComponentEight/Wasm/Counter.razor ================================================ @code { int _currentCount = 0; [Parameter] public int IncrementAmount { get; set; } = 1; void IncrementCount() { _currentCount += IncrementAmount; } } ================================================ FILE: projects/blazor-ssr/RazorComponentEight/Wasm/Interactive.razor ================================================ @_message @code { string _message = string.Empty; void ShowMessage() { _message = "Current Time UTC " + DateTime.UtcNow; } } ================================================ FILE: projects/blazor-ssr/RazorComponentEight/Wasm/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; var builder = WebAssemblyHostBuilder.CreateDefault(args); await builder.Build().RunAsync(); ================================================ FILE: projects/blazor-ssr/RazorComponentEight/Wasm/Wasm.csproj ================================================ net10.0 enable enable preview ================================================ FILE: projects/blazor-ssr/RazorComponentEight/Wasm/_Imports.razor ================================================ @using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.WebAssembly.Http @using Microsoft.JSInterop @using Wasm ================================================ FILE: projects/blazor-ssr/RazorComponentEleven/.vscode/settings.json ================================================ { "dotnet.defaultSolution": "RazorComponentEleven.sln" } ================================================ FILE: projects/blazor-ssr/RazorComponentEleven/App.razor ================================================ Blazor Multi Render ================================================ FILE: projects/blazor-ssr/RazorComponentEleven/Pages/Index.razor ================================================ @page "/" @attribute [StreamRendering(true)] @if (_numbers is null) {

Loading numbers (wait for 3 seconds) ...

} else {
    @foreach(var i in _numbers) {
  • @i
  • }
} @code { List _numbers; protected override async Task OnInitializedAsync() { await Task.Delay(3_000); //three seconds _numbers = Enumerable.Range(0,100).ToList(); this.StateHasChanged(); await Task.Delay(3_000); //three seconds _numbers = Enumerable.Range(101,100).ToList(); this.StateHasChanged(); await Task.Delay(3_000); //three seconds _numbers = Enumerable.Range(201,100).ToList(); } } ================================================ FILE: projects/blazor-ssr/RazorComponentEleven/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorComponents(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapRazorComponents(); app.Run(); ================================================ FILE: projects/blazor-ssr/RazorComponentEleven/README.md ================================================ # Razor Component Streaming Rendering This sample shows how to update the UI multiple times using `StateHasChanged();` while in streaming rendering mode. ================================================ FILE: projects/blazor-ssr/RazorComponentEleven/RazorComponentEleven.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ssr/RazorComponentEleven/RazorComponentEleven.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorComponentEleven", "RazorComponentEleven.csproj", "{A262DC8B-910A-4E2F-9511-3DB0025309BD}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {A262DC8B-910A-4E2F-9511-3DB0025309BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A262DC8B-910A-4E2F-9511-3DB0025309BD}.Debug|Any CPU.Build.0 = Debug|Any CPU {A262DC8B-910A-4E2F-9511-3DB0025309BD}.Release|Any CPU.ActiveCfg = Release|Any CPU {A262DC8B-910A-4E2F-9511-3DB0025309BD}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {D97D28B7-F7EE-4D7E-83D0-6B975F6A316D} EndGlobalSection EndGlobal ================================================ FILE: projects/blazor-ssr/RazorComponentEleven/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-ssr/RazorComponentEleven/_Imports.razor ================================================ @using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop @using RazorComponentEleven @using RazorComponentEleven.Shared ================================================ FILE: projects/blazor-ssr/RazorComponentFive/Pages/Greetings.razor ================================================ @layout RazorComponentFive.Shared.MainLayout

@Message

@Date @code{ [Parameter] public string Message { get; set; } [Parameter] public DateOnly Date { get; set; } } ================================================ FILE: projects/blazor-ssr/RazorComponentFive/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Http.HttpResults; var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorComponents(); builder.Services.AddMvc(); var app = builder.Build(); app.MapControllers(); app.Run(); public class HomeController : Controller { [Route("/")] public IResult Index() => new RazorComponentResult(new { Message = "Hello World too", Date = DateOnly.FromDateTime(DateTime.Now) }); } ================================================ FILE: projects/blazor-ssr/RazorComponentFive/README.md ================================================ # Rendering a razor component using RazorComponentResult This sample shows how to render a razor component using `RazorComponentResult` in MVC and passing data via anonymous object. ================================================ FILE: projects/blazor-ssr/RazorComponentFive/RazorComponentFive.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ssr/RazorComponentFive/RazorComponentFive.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorComponentFive", "RazorComponentFive.csproj", "{DE15A8D9-76F4-4CAF-8A91-AD06102981AA}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {DE15A8D9-76F4-4CAF-8A91-AD06102981AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DE15A8D9-76F4-4CAF-8A91-AD06102981AA}.Debug|Any CPU.Build.0 = Debug|Any CPU {DE15A8D9-76F4-4CAF-8A91-AD06102981AA}.Release|Any CPU.ActiveCfg = Release|Any CPU {DE15A8D9-76F4-4CAF-8A91-AD06102981AA}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {D0D1889F-A538-4AD3-B981-8DE33C187302} EndGlobalSection EndGlobal ================================================ FILE: projects/blazor-ssr/RazorComponentFive/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase Blazor
@Body
================================================ FILE: projects/blazor-ssr/RazorComponentFour/Pages/Greetings.razor ================================================

@Message

@Date @code{ [Parameter] public string Message { get; set; } [Parameter] public DateOnly Date { get; set; } } ================================================ FILE: projects/blazor-ssr/RazorComponentFour/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddMvc(); builder.Services.AddRazorComponents(); var app = builder.Build(); app.MapControllers(); app.Run(); public class HomeController : Controller { [Route("/")] public IActionResult Index() { return View(); } } ================================================ FILE: projects/blazor-ssr/RazorComponentFour/README.md ================================================ # Rendering a Razor Component using Html.RenderComponentAsync This sample shows how to render a razor component using `Html.RenderComponentAsync` and passing data using anonmyous data. ================================================ FILE: projects/blazor-ssr/RazorComponentFour/RazorComponentFour.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ssr/RazorComponentFour/VIews/Home/Index.cshtml ================================================ Blazor United
@(await Html.RenderComponentAsync(RenderMode.Static, new { Message = "Hello World", Date = DateOnly.FromDateTime(DateTime.Now) }))
================================================ FILE: projects/blazor-ssr/RazorComponentNine/.vscode/settings.json ================================================ { "dotnet.defaultSolution": "RazorComponentNine.sln" } ================================================ FILE: projects/blazor-ssr/RazorComponentNine/App.razor ================================================ Blazor Multi Render ================================================ FILE: projects/blazor-ssr/RazorComponentNine/Pages/Greet.razor ================================================ @Message @code { [Parameter] [SupplyParameterFromQuery] public string Message { get; set; } = string.Empty; } ================================================ FILE: projects/blazor-ssr/RazorComponentNine/Pages/Index.razor ================================================ @page "/"

[Parameter] and [SupplyParameterFromQuery]

Greet component supplied via [Parameter] attribute
Greet component supplied via [SupplyParameterFromQuery] attribute
Click here to show the message /?Message=Hello%20World
================================================ FILE: projects/blazor-ssr/RazorComponentNine/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorComponents(); var app = builder.Build(); app.MapRazorComponents(); app.Run(); ================================================ FILE: projects/blazor-ssr/RazorComponentNine/README.md ================================================ # SupplyParameterFromQuery The attribute `[SupplyParameterFromQuery]` enables Blazor component to get values from query string. ================================================ FILE: projects/blazor-ssr/RazorComponentNine/RazorComponentNine.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ssr/RazorComponentNine/RazorComponentNine.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.001.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorComponentNine", "RazorComponentNine.csproj", "{E9254A58-8AD5-436F-8ED7-46627916F0A1}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {E9254A58-8AD5-436F-8ED7-46627916F0A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E9254A58-8AD5-436F-8ED7-46627916F0A1}.Debug|Any CPU.Build.0 = Debug|Any CPU {E9254A58-8AD5-436F-8ED7-46627916F0A1}.Release|Any CPU.ActiveCfg = Release|Any CPU {E9254A58-8AD5-436F-8ED7-46627916F0A1}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {19A2F89D-F303-4110-A5C9-637C16F09558} EndGlobalSection EndGlobal ================================================ FILE: projects/blazor-ssr/RazorComponentNine/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-ssr/RazorComponentNine/_Imports.razor ================================================ @using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop @using RazorComponentNine @using RazorComponentNine.Shared ================================================ FILE: projects/blazor-ssr/RazorComponentOne/.vscode/settings.json ================================================ { "dotnet.defaultSolution": "RazorComponentOne.sln" } ================================================ FILE: projects/blazor-ssr/RazorComponentOne/App.razor ================================================ Blazor SSR Not found

Sorry, there's nothing at this address.

================================================ FILE: projects/blazor-ssr/RazorComponentOne/Pages/Egypt.razor ================================================ @page "/egypt" ================================================ FILE: projects/blazor-ssr/RazorComponentOne/Pages/Greetings.razor ================================================

@Message

@code{ [Parameter] public string Message { get; set; } } ================================================ FILE: projects/blazor-ssr/RazorComponentOne/Pages/Index.razor ================================================ @page "/"
Hello Egypt ================================================ FILE: projects/blazor-ssr/RazorComponentOne/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorComponents(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapRazorComponents(); app.Run(); ================================================ FILE: projects/blazor-ssr/RazorComponentOne/README.md ================================================ # Razor Component SSR This sample demonstrates how to use Razor Components with Server-Side Rendering (SSR). `app.MapRazorComponents();` map all the razor components in the assembly. There is nothing special about `App`. Any class from your target assembly will do. ================================================ FILE: projects/blazor-ssr/RazorComponentOne/RazorComponentOne.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ssr/RazorComponentOne/RazorComponentOne.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorComponentOne", "RazorComponentOne.csproj", "{D03FBF33-489D-49B0-A5FF-FFB87564D78C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {D03FBF33-489D-49B0-A5FF-FFB87564D78C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D03FBF33-489D-49B0-A5FF-FFB87564D78C}.Debug|Any CPU.Build.0 = Debug|Any CPU {D03FBF33-489D-49B0-A5FF-FFB87564D78C}.Release|Any CPU.ActiveCfg = Release|Any CPU {D03FBF33-489D-49B0-A5FF-FFB87564D78C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {10A6AAD1-98D8-4F32-A286-B67B472BA3E4} EndGlobalSection EndGlobal ================================================ FILE: projects/blazor-ssr/RazorComponentOne/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-ssr/RazorComponentOne/_Imports.razor ================================================ @using System.Net.Http @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Authorization ================================================ FILE: projects/blazor-ssr/RazorComponentSeven/App.razor ================================================ Blazor Multi Render ================================================ FILE: projects/blazor-ssr/RazorComponentSeven/Pages/Index.razor ================================================ @page "/"

Blazor Multi Render

@_message

This button will not work because this Razor component is statically rendered

This button will work because this Razor component is powered by Server Side Blazor

@code { string _message = string.Empty; void ShowMessage() { _message = "This won't work"; } } ================================================ FILE: projects/blazor-ssr/RazorComponentSeven/Pages/Interactive.razor ================================================ @rendermode InteractiveServer @_message @code { string _message = string.Empty; void ShowMessage() { _message = "Current Time UTC " + DateTime.UtcNow; } } ================================================ FILE: projects/blazor-ssr/RazorComponentSeven/Pages/Numbers.razor ================================================ @attribute [StreamRendering(true)] @if (_numbers is null) {

Loading numbers (wait for 6 seconds) ...

} else {
    @foreach(var i in _numbers) {
  • @i
  • }
} @code { List _numbers; protected override async Task OnInitializedAsync() { await Task.Delay(6_000); //six seconds _numbers = Enumerable.Range(0,100).ToList(); } } ================================================ FILE: projects/blazor-ssr/RazorComponentSeven/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorComponents() .AddInteractiveServerComponents(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapRazorComponents() .AddInteractiveServerRenderMode(); app.Run(); ================================================ FILE: projects/blazor-ssr/RazorComponentSeven/README.md ================================================ # Razor Component multi render This sample shows the ability for Blazor to host components with different rendering mode in a single Razor Component Page. The Razor Component Page is server side render. It hosts "number" component with with Streaming rendering and hosts "interactive" component backed by Blazor Server Side. ================================================ FILE: projects/blazor-ssr/RazorComponentSeven/RazorComponentSeven.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ssr/RazorComponentSeven/RazorComponentSeven.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorComponentSeven", "RazorComponentSeven.csproj", "{D1666076-3523-4495-8F52-68E845F5FB46}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {D1666076-3523-4495-8F52-68E845F5FB46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D1666076-3523-4495-8F52-68E845F5FB46}.Debug|Any CPU.Build.0 = Debug|Any CPU {D1666076-3523-4495-8F52-68E845F5FB46}.Release|Any CPU.ActiveCfg = Release|Any CPU {D1666076-3523-4495-8F52-68E845F5FB46}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {2CDB3AC6-3326-409F-A59F-1248F42D29FA} EndGlobalSection EndGlobal ================================================ FILE: projects/blazor-ssr/RazorComponentSeven/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-ssr/RazorComponentSeven/_Imports.razor ================================================ @using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop @using static Microsoft.AspNetCore.Components.Web.RenderMode @using RazorComponentSeven @using RazorComponentSeven.Shared ================================================ FILE: projects/blazor-ssr/RazorComponentSix/Pages/Greetings.razor ================================================ @layout RazorComponentSix.Shared.MainLayout

@Message

This is a section @Date @code{ [Parameter] public string Message { get; set; } [Parameter] public DateOnly Date { get; set; } } ================================================ FILE: projects/blazor-ssr/RazorComponentSix/Program.cs ================================================ using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorComponents(); builder.Services.AddMvc(); var app = builder.Build(); app.MapControllers(); app.Run(); public class HomeController : Controller { [Route("/")] public IResult Index() => new RazorComponentResult(new { Message = "Hello World too", Date = DateOnly.FromDateTime(DateTime.Now) }); } ================================================ FILE: projects/blazor-ssr/RazorComponentSix/README.md ================================================ # Razor Component Section This sample demonstrates the new section functionality in Razor Component. Use `SectionOutlet` to render a section in a component. Use `SectionContent` to supply the content for the section. ================================================ FILE: projects/blazor-ssr/RazorComponentSix/RazorComponentSix.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ssr/RazorComponentSix/RazorComponentSix.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorComponentSix", "RazorComponentSix.csproj", "{1BAD400E-44D5-4A18-ABBF-184C7CBDD5F2}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {1BAD400E-44D5-4A18-ABBF-184C7CBDD5F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1BAD400E-44D5-4A18-ABBF-184C7CBDD5F2}.Debug|Any CPU.Build.0 = Debug|Any CPU {1BAD400E-44D5-4A18-ABBF-184C7CBDD5F2}.Release|Any CPU.ActiveCfg = Release|Any CPU {1BAD400E-44D5-4A18-ABBF-184C7CBDD5F2}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {FC51A321-0FED-48FF-8DD3-280020A780F4} EndGlobalSection EndGlobal ================================================ FILE: projects/blazor-ssr/RazorComponentSix/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase Blazor United
@Body
================================================ FILE: projects/blazor-ssr/RazorComponentTen/.vscode/settings.json ================================================ { "dotnet.defaultSolution": "RazorComponentTen.sln" } ================================================ FILE: projects/blazor-ssr/RazorComponentTen/README.md ================================================ # Razor Component multi render This sample shows the ability for Blazor to host components with different rendering mode in a single Razor Component Page. The Razor Component Page is server side render. It handles a POST form, hosts "number" component with with Streaming rendering and hosts "interactive" components backed by Blazor Web Assembly and Blazor Server. The Web Assembly components **need to be hosted in a separate project**. ================================================ FILE: projects/blazor-ssr/RazorComponentTen/RazorComponentTen/App.razor ================================================ Blazor Multi Render ================================================ FILE: projects/blazor-ssr/RazorComponentTen/RazorComponentTen/Pages/Counter.razor ================================================ @_currentCount

@code { int _currentCount = 0; void IncrementCount() { _currentCount++; } } ================================================ FILE: projects/blazor-ssr/RazorComponentTen/RazorComponentTen/Pages/Index.razor ================================================ @page "/"

Blazor Multi Render

SSR

@_message

Streaming

WASM

Server

@code { EditContext _editContext = new(string.Empty); string _message = string.Empty; void ShowMessage() { _message = "Hello world"; } } ================================================ FILE: projects/blazor-ssr/RazorComponentTen/RazorComponentTen/Pages/Numbers.razor ================================================ @attribute [StreamRendering(true)] @if (_numbers is null) {

Loading numbers (wait for 3 seconds) ...

} else {
    @foreach(var i in _numbers) {
  • @i
  • }
} @code { List? _numbers; protected override async Task OnInitializedAsync() { await Task.Delay(3_000); //3 seconds _numbers = Enumerable.Range(0,100).ToList(); } } ================================================ FILE: projects/blazor-ssr/RazorComponentTen/RazorComponentTen/Program.cs ================================================ var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorComponents() .AddInteractiveServerComponents() .AddInteractiveWebAssemblyComponents(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseAntiforgery(); app.MapRazorComponents() .AddInteractiveServerRenderMode() .AddInteractiveWebAssemblyRenderMode(); app.Run(); ================================================ FILE: projects/blazor-ssr/RazorComponentTen/RazorComponentTen/RazorComponentTen.csproj ================================================ net10.0 enable enable 8.0 preview ================================================ FILE: projects/blazor-ssr/RazorComponentTen/RazorComponentTen/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-ssr/RazorComponentTen/RazorComponentTen/_Imports.razor ================================================ @using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop @using RazorComponentTen @using RazorComponentTen.Shared ================================================ FILE: projects/blazor-ssr/RazorComponentTen/RazorComponentTen.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorComponentTen", "RazorComponentTen\RazorComponentTen.csproj", "{C2CFE3B6-2C5A-464A-BB5F-56DB73FAE3A6}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wasm", "Wasm\Wasm.csproj", "{FD20A862-F038-4B95-8EA2-2DD1CF8A267F}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {C2CFE3B6-2C5A-464A-BB5F-56DB73FAE3A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C2CFE3B6-2C5A-464A-BB5F-56DB73FAE3A6}.Debug|Any CPU.Build.0 = Debug|Any CPU {C2CFE3B6-2C5A-464A-BB5F-56DB73FAE3A6}.Release|Any CPU.ActiveCfg = Release|Any CPU {C2CFE3B6-2C5A-464A-BB5F-56DB73FAE3A6}.Release|Any CPU.Build.0 = Release|Any CPU {FD20A862-F038-4B95-8EA2-2DD1CF8A267F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FD20A862-F038-4B95-8EA2-2DD1CF8A267F}.Debug|Any CPU.Build.0 = Debug|Any CPU {FD20A862-F038-4B95-8EA2-2DD1CF8A267F}.Release|Any CPU.ActiveCfg = Release|Any CPU {FD20A862-F038-4B95-8EA2-2DD1CF8A267F}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {5F05B384-C974-4F1F-BDF3-8873320A01D6} EndGlobalSection EndGlobal ================================================ FILE: projects/blazor-ssr/RazorComponentTen/Wasm/Interactive.razor ================================================ @_message @code { string _message = string.Empty; void ShowMessage() { _message = "Current Time UTC " + DateTime.UtcNow; } } ================================================ FILE: projects/blazor-ssr/RazorComponentTen/Wasm/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; var builder = WebAssemblyHostBuilder.CreateDefault(args); await builder.Build().RunAsync(); ================================================ FILE: projects/blazor-ssr/RazorComponentTen/Wasm/Wasm.csproj ================================================ net10.0 enable enable preview ================================================ FILE: projects/blazor-ssr/RazorComponentTen/Wasm/_Imports.razor ================================================ @using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.WebAssembly.Http @using Microsoft.JSInterop @using Wasm ================================================ FILE: projects/blazor-ssr/RazorComponentThirteen/.vscode/settings.json ================================================ { "dotnet.defaultSolution": "RazorComponentTen.sln", "workbench.colorCustomizations": { "activityBar.activeBackground": "#de3597", "activityBar.background": "#de3597", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#35520d", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#de3597", "statusBar.background": "#c11f7d", "statusBar.debuggingBackground": "#1fc163", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#de3597", "statusBarItem.remoteBackground": "#c11f7d", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#c11f7d", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#c11f7d99", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#c11f7d" } ================================================ FILE: projects/blazor-ssr/RazorComponentThirteen/README.md ================================================ # Accessing WASM Pages in mixed environment host `.AddAdditionalAssemblies` allows the host project to discover Page components in a WASM project. ``` csharp app.MapRazorComponents() .AddInteractiveWebAssemblyRenderMode() .AddAdditionalAssemblies(typeof(Wasm.Pages.Index).Assembly); ``` The Web Assembly components **need to be hosted in a separate project**. ================================================ FILE: projects/blazor-ssr/RazorComponentThirteen/RazorComponentThirteen/App.razor ================================================ Blazor Multi Render ================================================ FILE: projects/blazor-ssr/RazorComponentThirteen/RazorComponentThirteen/Pages/SSR.razor ================================================ @page "/ssr" This Blazor Page Component is rendered using Server-Side Rendering (SSR) at the Host project. ================================================ FILE: projects/blazor-ssr/RazorComponentThirteen/RazorComponentThirteen/Program.cs ================================================ var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorComponents() .AddInteractiveWebAssemblyComponents(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseAntiforgery(); app.MapRazorComponents() .AddInteractiveWebAssemblyRenderMode() .AddAdditionalAssemblies(typeof(Wasm.Pages.Index).Assembly); app.Run(); ================================================ FILE: projects/blazor-ssr/RazorComponentThirteen/RazorComponentThirteen/RazorComponentThirteen.csproj ================================================ net10.0 enable enable 8.0 preview ================================================ FILE: projects/blazor-ssr/RazorComponentThirteen/RazorComponentThirteen/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase This layout is located at the Host project
@Body
================================================ FILE: projects/blazor-ssr/RazorComponentThirteen/RazorComponentThirteen/_Imports.razor ================================================ @using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop @using RazorComponentThirteen @using RazorComponentThirteen.Shared ================================================ FILE: projects/blazor-ssr/RazorComponentThirteen/RazorComponentThirteen.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorComponentThirteen", "RazorComponentThirteen\RazorComponentThirteen.csproj", "{642702B0-A4D7-4A1A-9D06-C919DCF04E9B}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wasm", "Wasm\Wasm.csproj", "{E8D78F96-53BF-4986-A1E6-9855ED20DAAB}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {642702B0-A4D7-4A1A-9D06-C919DCF04E9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {642702B0-A4D7-4A1A-9D06-C919DCF04E9B}.Debug|Any CPU.Build.0 = Debug|Any CPU {642702B0-A4D7-4A1A-9D06-C919DCF04E9B}.Release|Any CPU.ActiveCfg = Release|Any CPU {642702B0-A4D7-4A1A-9D06-C919DCF04E9B}.Release|Any CPU.Build.0 = Release|Any CPU {E8D78F96-53BF-4986-A1E6-9855ED20DAAB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E8D78F96-53BF-4986-A1E6-9855ED20DAAB}.Debug|Any CPU.Build.0 = Debug|Any CPU {E8D78F96-53BF-4986-A1E6-9855ED20DAAB}.Release|Any CPU.ActiveCfg = Release|Any CPU {E8D78F96-53BF-4986-A1E6-9855ED20DAAB}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {946BC6FF-DD2D-4AD3-B2A5-4BF8E17D5C5F} EndGlobalSection EndGlobal ================================================ FILE: projects/blazor-ssr/RazorComponentThirteen/Wasm/Pages/Index.razor ================================================ @page "/"

This page is a WASM component and hosted in a separate project.

You can click here to access a Blazor SSR page located at the HOST project.

================================================ FILE: projects/blazor-ssr/RazorComponentThirteen/Wasm/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; var builder = WebAssemblyHostBuilder.CreateDefault(args); await builder.Build().RunAsync(); ================================================ FILE: projects/blazor-ssr/RazorComponentThirteen/Wasm/Wasm.csproj ================================================ net10.0 enable enable preview ================================================ FILE: projects/blazor-ssr/RazorComponentThirteen/Wasm/_Imports.razor ================================================ @using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.WebAssembly.Http @using Microsoft.JSInterop @using Wasm ================================================ FILE: projects/blazor-ssr/RazorComponentThree/Pages/Greetings.razor ================================================ @layout RazorComponentThree.Shared.MainLayout

@Message

@Date @code{ [Parameter] public string Message { get; set; } [Parameter] public DateOnly Date { get; set; } } ================================================ FILE: projects/blazor-ssr/RazorComponentThree/Program.cs ================================================ using Microsoft.AspNetCore.Http.HttpResults; var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorComponents(); var app = builder.Build(); app.MapGet("/", () => { return new RazorComponentResult(new { Message = "Hello World too", Date = DateOnly.FromDateTime(DateTime.Now) }); }); app.Run(); ================================================ FILE: projects/blazor-ssr/RazorComponentThree/README.md ================================================ # Rendering a razor component using RazorComponentResult This sample shows how to render a razor component using `RazorComponentResult` in Minimal APIs and passing data via anonymous object. ================================================ FILE: projects/blazor-ssr/RazorComponentThree/RazorComponentThree.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ssr/RazorComponentThree/RazorComponentThree.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorComponentThree", "RazorComponentThree.csproj", "{004E2455-02A6-49F9-97B5-0B5C90096049}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {004E2455-02A6-49F9-97B5-0B5C90096049}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {004E2455-02A6-49F9-97B5-0B5C90096049}.Debug|Any CPU.Build.0 = Debug|Any CPU {004E2455-02A6-49F9-97B5-0B5C90096049}.Release|Any CPU.ActiveCfg = Release|Any CPU {004E2455-02A6-49F9-97B5-0B5C90096049}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {37EAB431-6FE2-4139-9B3A-D19B05B7BBAF} EndGlobalSection EndGlobal ================================================ FILE: projects/blazor-ssr/RazorComponentThree/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase Blazor United
@Body
================================================ FILE: projects/blazor-ssr/RazorComponentTwelve/.vscode/settings.json ================================================ { "dotnet.defaultSolution": "RazorComponentEleven.sln" } ================================================ FILE: projects/blazor-ssr/RazorComponentTwelve/App.razor ================================================ HttpContext ================================================ FILE: projects/blazor-ssr/RazorComponentTwelve/Pages/Index.razor ================================================ @page "/" @_message
HttpContext.Request.Path @HttpContext!.Request.Path @code { [CascadingParameter] public HttpContext? HttpContext { get; set; } string _message = string.Empty; protected override void OnInitialized() { _message = HttpContext is object ? "HttpContext exists at OnInitialized" : "HttpContext is null"; } } ================================================ FILE: projects/blazor-ssr/RazorComponentTwelve/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorComponents(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapRazorComponents(); app.Run(); ================================================ FILE: projects/blazor-ssr/RazorComponentTwelve/README.md ================================================ # Accessing HttpContext on static Razor Component This sample shows how to access `HttpContext` from a static Razor component. ================================================ FILE: projects/blazor-ssr/RazorComponentTwelve/RazorComponentTwelve.csproj ================================================ net10.0 true enable preview ================================================ FILE: projects/blazor-ssr/RazorComponentTwelve/RazorComponentTwelve.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorComponentTwelve", "RazorComponentTwelve.csproj", "{637DBFE0-E61B-47FB-9B50-8F872517F51B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {637DBFE0-E61B-47FB-9B50-8F872517F51B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {637DBFE0-E61B-47FB-9B50-8F872517F51B}.Debug|Any CPU.Build.0 = Debug|Any CPU {637DBFE0-E61B-47FB-9B50-8F872517F51B}.Release|Any CPU.ActiveCfg = Release|Any CPU {637DBFE0-E61B-47FB-9B50-8F872517F51B}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {8CD56AB3-3C87-451F-9D64-BE14D1F98316} EndGlobalSection EndGlobal ================================================ FILE: projects/blazor-ssr/RazorComponentTwelve/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-ssr/RazorComponentTwelve/_Imports.razor ================================================ @using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop @using RazorComponentTwelve @using RazorComponentTwelve.Shared ================================================ FILE: projects/blazor-ssr/RazorComponentTwo/.vscode/settings.json ================================================ { "dotnet.defaultSolution": "RazorComponentTwo.sln" } ================================================ FILE: projects/blazor-ssr/RazorComponentTwo/Pages/Greetings.razor ================================================ @layout RazorComponentTwo.Shared.MainLayout

@Message

@code{ [Parameter] public string Message { get; set; } } ================================================ FILE: projects/blazor-ssr/RazorComponentTwo/Program.cs ================================================ using Microsoft.AspNetCore.Http.HttpResults; var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorComponents(); var app = builder.Build(); app.MapGet("/", () => { return new RazorComponentResult(new Dictionary { ["Message"] = "Hello World " + DateTime.Now.ToString() }); }); app.Run(); ================================================ FILE: projects/blazor-ssr/RazorComponentTwo/README.md ================================================ # Rendering a razor component using RazorComponentResult This sample shows how to render a razor component using `RazorComponentResult` in Minimal APIs and passing data via a dictionary. ================================================ FILE: projects/blazor-ssr/RazorComponentTwo/RazorComponentTwo.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ssr/RazorComponentTwo/RazorComponentTwo.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorComponentTwo", "RazorComponentTwo.csproj", "{1E1C5F75-57DE-400C-90B7-8576D0120CEE}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {1E1C5F75-57DE-400C-90B7-8576D0120CEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1E1C5F75-57DE-400C-90B7-8576D0120CEE}.Debug|Any CPU.Build.0 = Debug|Any CPU {1E1C5F75-57DE-400C-90B7-8576D0120CEE}.Release|Any CPU.ActiveCfg = Release|Any CPU {1E1C5F75-57DE-400C-90B7-8576D0120CEE}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {4E7A887C-D466-4286-B3C4-C269C6B12806} EndGlobalSection EndGlobal ================================================ FILE: projects/blazor-ssr/RazorComponentTwo/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase Blazor United
@Body
================================================ FILE: projects/blazor-ssr/RazorFormHandlingFive/.vscode/settings.json ================================================ { "dotnet.defaultSolution": "RazorFormHandlingOne.sln" } ================================================ FILE: projects/blazor-ssr/RazorFormHandlingFive/Pages/App.razor ================================================

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-ssr/RazorFormHandlingFive/Pages/Index.razor ================================================ @page "/" @using System.ComponentModel.DataAnnotations;

Form Validation using DataAnnotationsValidator and EditForm

@((MarkupString)_showMessage)

@{ var idx = 0;} @foreach(var val in new string[] { "USA", "Indonesia", "Egypt"}) { var id = "nationality" + idx;
idx++; }
@code { [SupplyParameterFromForm(FormName="info")]// matches @fornname"info" public Person PersonInfo { get; set; } = new(); string _showMessage = string.Empty; void HandleSubmit() { _showMessage = $"Name: {PersonInfo.Name}
Description: {PersonInfo.Description}
Hobby: {PersonInfo.Hobby}
Is married: {PersonInfo.IsMarried}
Nationality: {PersonInfo.Nationality}

"; } public class Person { [Required] public string Name { get; set; } = string.Empty; [Required] public string Description { get; set; } = string.Empty; public string Hobby { get; set; } = string.Empty; public bool IsMarried { get; set; } [Required] public string Nationality { get; set; } = string.Empty; } } ================================================ FILE: projects/blazor-ssr/RazorFormHandlingFive/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorComponents(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapRazorComponents(); app.Run(); ================================================ FILE: projects/blazor-ssr/RazorFormHandlingFive/README.md ================================================ # Validation on Blazor SSR Form using DataAnnotationsValidator and EditForm This example shows how to perform data validation using `DataAnnotationsValidator` and `EditForm`. ## Important Blazor SSR does not allow class with multiple constructors to be used as a model. This also applies to nested objects (https://github.com/dotnet/aspnetcore/issues/55711). ================================================ FILE: projects/blazor-ssr/RazorFormHandlingFive/RazorFormHandlingFive.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ssr/RazorFormHandlingFive/RazorFormHandlingFive.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorFormHandlingFive", "RazorFormHandlingFive.csproj", "{44C7C69B-4BA0-4D7D-9290-1DC4E8DB97B0}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {44C7C69B-4BA0-4D7D-9290-1DC4E8DB97B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {44C7C69B-4BA0-4D7D-9290-1DC4E8DB97B0}.Debug|Any CPU.Build.0 = Debug|Any CPU {44C7C69B-4BA0-4D7D-9290-1DC4E8DB97B0}.Release|Any CPU.ActiveCfg = Release|Any CPU {44C7C69B-4BA0-4D7D-9290-1DC4E8DB97B0}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {FBCD92B0-7E70-4F7C-8F9C-9939E2D2634C} EndGlobalSection EndGlobal ================================================ FILE: projects/blazor-ssr/RazorFormHandlingFive/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase Blazor United @Body ================================================ FILE: projects/blazor-ssr/RazorFormHandlingFive/_Imports.razor ================================================ @using System.Net.Http @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Authorization ================================================ FILE: projects/blazor-ssr/RazorFormHandlingFour/.vscode/settings.json ================================================ { "dotnet.defaultSolution": "RazorFormHandlingFour.sln" } ================================================ FILE: projects/blazor-ssr/RazorFormHandlingFour/Pages/App.razor ================================================

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-ssr/RazorFormHandlingFour/Pages/Index.razor ================================================ @page "/"

Automatic Model Binding using EditForm

@((MarkupString)_showMessage)

@{ var idx = 0;} @foreach(var val in new string[] { "USA", "Indonesia", "Egypt"}) { var id = "nationality" + idx;
idx++; }

@code { [SupplyParameterFromForm(FormName="info")]// matches @formname="info" public Person PersonInfo { get; set; } = new(); [SupplyParameterFromForm(FormName="info2")]// matches @formname="info2" public Job JobInfo { get; set; } = new(); string _showMessage = string.Empty; void HandleSubmit() { _showMessage = $"Name: {PersonInfo.Name}
Description: {PersonInfo.Description}
Hobby: {PersonInfo.Hobby}
Is married: {PersonInfo.IsMarried}
Nationality: {PersonInfo.Nationality}

"; } void HandleSubmit2() { _showMessage = $"Title: {JobInfo.Title}

"; } public class Person { public string Name { get; set; } = string.Empty; public string Description { get; set; } = string.Empty; public string Hobby { get; set; } = string.Empty; public bool IsMarried { get; set; } public string Nationality { get; set; } = string.Empty; } public class Job { public string Title { get; set; } = string.Empty; } } ================================================ FILE: projects/blazor-ssr/RazorFormHandlingFour/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorComponents(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapRazorComponents(); app.Run(); ================================================ FILE: projects/blazor-ssr/RazorFormHandlingFour/README.md ================================================ # Multiple Form Handling in Blazor SSR - Automatic binding using EditForm and [SupplyParameterFromForm] This example shows how to perform **multiple** automatic data binding for a form `POST` request using `` and `[SupplyParameterFromForm]`. `EditForm` will generate the antiforgery token so there is no need to include `` component manually. ## Important Blazor SSR does not allow class with multiple constructors to be used as a model. This also applies to nested objects (https://github.com/dotnet/aspnetcore/issues/55711). ================================================ FILE: projects/blazor-ssr/RazorFormHandlingFour/RazorFormHandlingFour.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ssr/RazorFormHandlingFour/RazorFormHandlingFour.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorFormHandlingFour", "RazorFormHandlingFour.csproj", "{47BC529E-0FEF-477A-ACE2-ED4A8D87D0FB}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {47BC529E-0FEF-477A-ACE2-ED4A8D87D0FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {47BC529E-0FEF-477A-ACE2-ED4A8D87D0FB}.Debug|Any CPU.Build.0 = Debug|Any CPU {47BC529E-0FEF-477A-ACE2-ED4A8D87D0FB}.Release|Any CPU.ActiveCfg = Release|Any CPU {47BC529E-0FEF-477A-ACE2-ED4A8D87D0FB}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {923989CE-5243-42DA-BBCD-48E2B5AA16DC} EndGlobalSection EndGlobal ================================================ FILE: projects/blazor-ssr/RazorFormHandlingFour/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase Blazor United @Body ================================================ FILE: projects/blazor-ssr/RazorFormHandlingFour/_Imports.razor ================================================ @using System.Net.Http @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Authorization ================================================ FILE: projects/blazor-ssr/RazorFormHandlingOne/.vscode/settings.json ================================================ { "dotnet.defaultSolution": "RazorFormHandlingOne.sln" } ================================================ FILE: projects/blazor-ssr/RazorFormHandlingOne/Pages/App.razor ================================================

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-ssr/RazorFormHandlingOne/Pages/Index.razor ================================================ @page "/"

Automatic Model Binding using normal form tag

@((MarkupString)_showMessage)

@{ var idx = 0;} @foreach(var val in new string[] { "USA", "Indonesia", "Egypt"}) { var id = "nationality" + idx;
idx++; }
@code { [SupplyParameterFromForm(FormName="info")]// matches @fornname"info" public Person PersonInfo { get; set; } = new(); string _showMessage = string.Empty; void HandleSubmit() { _showMessage = $"Name: {PersonInfo.Name}
Description: {PersonInfo.Description}
Hobby: {PersonInfo.Hobby}
Is married: {PersonInfo.IsMarried}
Nationality: {PersonInfo.Nationality}

"; } public class Person { public string Name { get; set; } = string.Empty; public string Description { get; set; } = string.Empty; public string Hobby { get; set; } = string.Empty; public bool IsMarried { get; set; } public string Nationality { get; set; } = string.Empty; } } ================================================ FILE: projects/blazor-ssr/RazorFormHandlingOne/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorComponents(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapRazorComponents(); app.Run(); ================================================ FILE: projects/blazor-ssr/RazorFormHandlingOne/README.md ================================================ # Form Handling in Blazor SSR - Automatic binding using [SupplyParameterFromForm] This example shows how to perform automatic data binding for a form `POST` request using `[SupplyParameterFromForm]`. We will use normal `
` tag in this case. Never forget to include `` in your form otherwise your POST request won't be processed. ## Important Blazor SSR does not allow class with multiple constructors to be used as a model. This also applies to nested objects (https://github.com/dotnet/aspnetcore/issues/55711). ================================================ FILE: projects/blazor-ssr/RazorFormHandlingOne/RazorFormHandlingOne.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ssr/RazorFormHandlingOne/RazorFormHandlingOne.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorFormHandlingOne", "RazorFormHandlingOne.csproj", "{89A0E326-6533-485A-912B-A7C01569C766}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {89A0E326-6533-485A-912B-A7C01569C766}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {89A0E326-6533-485A-912B-A7C01569C766}.Debug|Any CPU.Build.0 = Debug|Any CPU {89A0E326-6533-485A-912B-A7C01569C766}.Release|Any CPU.ActiveCfg = Release|Any CPU {89A0E326-6533-485A-912B-A7C01569C766}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {6CB93F54-D0BC-42E9-A28F-3947EB913747} EndGlobalSection EndGlobal ================================================ FILE: projects/blazor-ssr/RazorFormHandlingOne/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase Blazor United @Body ================================================ FILE: projects/blazor-ssr/RazorFormHandlingOne/_Imports.razor ================================================ @using System.Net.Http @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Authorization ================================================ FILE: projects/blazor-ssr/RazorFormHandlingThree/.vscode/settings.json ================================================ { "dotnet.defaultSolution": "RazorFormHandlingThree.sln" } ================================================ FILE: projects/blazor-ssr/RazorFormHandlingThree/Pages/App.razor ================================================

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-ssr/RazorFormHandlingThree/Pages/Index.razor ================================================ @page "/"

Automatic Model Binding using normal form tag

@((MarkupString)_showMessage)

@{ var idx = 0;} @foreach(var val in new string[] { "USA", "Indonesia", "Egypt"}) { var id = "nationality" + idx;
idx++; }

@code { [SupplyParameterFromForm(FormName="info")]// matches @formname="info" public Person PersonInfo { get; set; } = new(); [SupplyParameterFromForm(FormName="info2")]// matches @formname="info2" public Job JobInfo { get; set; } = new(); string _showMessage = string.Empty; void HandleSubmit() { _showMessage = $"Name: {PersonInfo.Name}
Description: {PersonInfo.Description}
Hobby: {PersonInfo.Hobby}
Is married: {PersonInfo.IsMarried}
Nationality: {PersonInfo.Nationality}

"; } void HandleSubmit2() { _showMessage = $"Title: {JobInfo.Title}

"; } public class Person { public string Name { get; set; } = string.Empty; public string Description { get; set; } = string.Empty; public string Hobby { get; set; } = string.Empty; public bool IsMarried { get; set; } public string Nationality { get; set; } = string.Empty; } public class Job { public string Title { get; set; } = string.Empty; } } ================================================ FILE: projects/blazor-ssr/RazorFormHandlingThree/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorComponents(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapRazorComponents(); app.Run(); ================================================ FILE: projects/blazor-ssr/RazorFormHandlingThree/README.md ================================================ # Multiple Form Handling in Blazor SSR - Automatic binding using [SupplyParameterFromForm] This example shows how to perform **multiple** automatic data binding for a form `POST` request using `[SupplyParameterFromForm]`. We will use normal `
` tag in this case. Never forget to include `` in your form otherwise your POST request won't be processed. ## Important Blazor SSR does not allow class with multiple constructors to be used as a model. This also applies to nested objects (https://github.com/dotnet/aspnetcore/issues/55711). ================================================ FILE: projects/blazor-ssr/RazorFormHandlingThree/RazorFormHandlingThree.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ssr/RazorFormHandlingThree/RazorFormHandlingThree.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorFormHandlingThree", "RazorFormHandlingThree.csproj", "{1249C601-FEFD-46EE-AEAC-765C95D6E346}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {1249C601-FEFD-46EE-AEAC-765C95D6E346}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1249C601-FEFD-46EE-AEAC-765C95D6E346}.Debug|Any CPU.Build.0 = Debug|Any CPU {1249C601-FEFD-46EE-AEAC-765C95D6E346}.Release|Any CPU.ActiveCfg = Release|Any CPU {1249C601-FEFD-46EE-AEAC-765C95D6E346}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {DD3B9E1A-4008-4C25-921A-648B5DA1C2C8} EndGlobalSection EndGlobal ================================================ FILE: projects/blazor-ssr/RazorFormHandlingThree/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase Blazor United @Body ================================================ FILE: projects/blazor-ssr/RazorFormHandlingThree/_Imports.razor ================================================ @using System.Net.Http @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Authorization ================================================ FILE: projects/blazor-ssr/RazorFormHandlingTwo/.vscode/settings.json ================================================ { "dotnet.defaultSolution": "RazorFormHandlingTwo.sln" } ================================================ FILE: projects/blazor-ssr/RazorFormHandlingTwo/Pages/App.razor ================================================

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-ssr/RazorFormHandlingTwo/Pages/Index.razor ================================================ @page "/"

Automatic Model Binding

@((MarkupString)_showMessage)

@{ var idx = 0;} @foreach(var val in new string[] { "USA", "Indonesia", "Egypt"}) { var id = "nationality" + idx;
idx++; }
@code { [SupplyParameterFromForm(FormName = "info")] // matches FormName="info" public Person PersonInfo { get; set; } = new(); string _showMessage = string.Empty; void HandleSubmit() { _showMessage = $"Name: {PersonInfo.Name}
Description: {PersonInfo.Description}
Hobby: {PersonInfo.Hobby}
Is married: {PersonInfo.IsMarried}
Nationality: {PersonInfo.Nationality}

"; } public class Person { public string Name { get; set; } = string.Empty; public string Description { get; set; } = string.Empty; public string Hobby { get; set; } = string.Empty; public bool IsMarried { get; set; } public string Nationality { get; set; } = string.Empty; } } ================================================ FILE: projects/blazor-ssr/RazorFormHandlingTwo/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorComponents(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapRazorComponents(); app.Run(); ================================================ FILE: projects/blazor-ssr/RazorFormHandlingTwo/README.md ================================================ # Form Handling in Blazor SSR - Automatic binding using EditForm and [SupplyParameterFromForm] This example shows how to perform automatic data binding for a form `POST` request using `` and `[SupplyParameterFromForm]`. `EditForm` will generate the antiforgery token so there is no need to include `` component manually. ## Important Blazor SSR does not allow class with multiple constructors to be used as a model. This also applies to nested objects (https://github.com/dotnet/aspnetcore/issues/55711). ================================================ FILE: projects/blazor-ssr/RazorFormHandlingTwo/RazorFormHandlingTwo.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-ssr/RazorFormHandlingTwo/RazorFormHandlingTwo.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.001.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorFormHandlingTwo", "RazorFormHandlingTwo.csproj", "{F5D419EC-2960-4FA8-A830-829BA32B8254}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {F5D419EC-2960-4FA8-A830-829BA32B8254}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F5D419EC-2960-4FA8-A830-829BA32B8254}.Debug|Any CPU.Build.0 = Debug|Any CPU {F5D419EC-2960-4FA8-A830-829BA32B8254}.Release|Any CPU.ActiveCfg = Release|Any CPU {F5D419EC-2960-4FA8-A830-829BA32B8254}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {5DE40412-5F9A-471A-A98E-7F26E34E04DB} EndGlobalSection EndGlobal ================================================ FILE: projects/blazor-ssr/RazorFormHandlingTwo/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase Blazor United @Body ================================================ FILE: projects/blazor-ssr/RazorFormHandlingTwo/_Imports.razor ================================================ @using System.Net.Http @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Authorization ================================================ FILE: projects/blazor-ssr/RazorMixMatchFour/.vscode/settings.json ================================================ { "dotnet.defaultSolution": "RazorMixMatchOne.sln" } ================================================ FILE: projects/blazor-ssr/RazorMixMatchFour/App.razor ================================================ Blazor Multi Render Not found

Sorry, there's nothing at this address.

================================================ FILE: projects/blazor-ssr/RazorMixMatchFour/Controllers/HomeController.cs ================================================ using Microsoft.AspNetCore.Mvc; public class HomeController : Controller { [HttpGet("/index-2")] public IActionResult Index() { return View(); } } ================================================ FILE: projects/blazor-ssr/RazorMixMatchFour/Pages/Blazor.razor ================================================ @page "/blazor-ssr"

This is from Blazor SSR

================================================ FILE: projects/blazor-ssr/RazorMixMatchFour/Pages/Index.cshtml ================================================ @page "/index-3" Hello world. This is a Razor Pages page.
Blazor SSR is here ================================================ FILE: projects/blazor-ssr/RazorMixMatchFour/Program.cs ================================================ var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorComponents(); builder.Services.AddMvc(); builder.Services.AddRazorPages(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", () => { return Results.Text(""" Hello world. This is from Minimal API. """, "text/html"); }); app.MapControllers(); app.MapRazorPages(); app.MapRazorComponents(); app.Run(); ================================================ FILE: projects/blazor-ssr/RazorMixMatchFour/README.md ================================================ # Mix Blazor SSR with MVC, Razor Pages and Minimal API This example demonstrates how to use Blazor SSR with MVC, Razor Pages and Minimal API altogether. ================================================ FILE: projects/blazor-ssr/RazorMixMatchFour/RazorMixMatchOne.csproj ================================================ net10.0 enable enable preview ================================================ FILE: projects/blazor-ssr/RazorMixMatchFour/RazorMixMatchOne.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorMixMatchOne", "RazorMixMatchOne.csproj", "{29BEE3CE-7C2F-414B-9C8A-49F075C2EA29}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {29BEE3CE-7C2F-414B-9C8A-49F075C2EA29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {29BEE3CE-7C2F-414B-9C8A-49F075C2EA29}.Debug|Any CPU.Build.0 = Debug|Any CPU {29BEE3CE-7C2F-414B-9C8A-49F075C2EA29}.Release|Any CPU.ActiveCfg = Release|Any CPU {29BEE3CE-7C2F-414B-9C8A-49F075C2EA29}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {13222FA6-2C83-4681-93CA-7CDA313B62BC} EndGlobalSection EndGlobal ================================================ FILE: projects/blazor-ssr/RazorMixMatchFour/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-ssr/RazorMixMatchFour/Views/Home/Index.cshtml ================================================ Hello world. This is a view from the controller.
Blazor SSR is here ================================================ FILE: projects/blazor-ssr/RazorMixMatchFour/_Imports.razor ================================================ @using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop @using RazorMixMatchOne @using RazorMixMatchOne.Shared ================================================ FILE: projects/blazor-ssr/RazorMixMatchOne/.vscode/settings.json ================================================ { "dotnet.defaultSolution": "RazorMixMatchOne.sln" } ================================================ FILE: projects/blazor-ssr/RazorMixMatchOne/App.razor ================================================ Blazor Multi Render Not found

Sorry, there's nothing at this address.

================================================ FILE: projects/blazor-ssr/RazorMixMatchOne/Controllers/HomeController.cs ================================================ using Microsoft.AspNetCore.Mvc; public class HomeController : Controller { [HttpGet("/")] public IActionResult Index() { return View(); } } ================================================ FILE: projects/blazor-ssr/RazorMixMatchOne/Pages/Blazor.razor ================================================ @page "/blazor-ssr"

This is from Blazor SSR

================================================ FILE: projects/blazor-ssr/RazorMixMatchOne/Program.cs ================================================ var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorComponents(); builder.Services.AddMvc(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapControllers(); app.MapRazorComponents(); app.Run(); ================================================ FILE: projects/blazor-ssr/RazorMixMatchOne/README.md ================================================ # Mix Blazor SSR with MVC This example demonstrates how to use Blazor SSR with MVC. ================================================ FILE: projects/blazor-ssr/RazorMixMatchOne/RazorMixMatchOne.csproj ================================================ net10.0 enable enable preview ================================================ FILE: projects/blazor-ssr/RazorMixMatchOne/RazorMixMatchOne.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorMixMatchOne", "RazorMixMatchOne.csproj", "{29BEE3CE-7C2F-414B-9C8A-49F075C2EA29}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {29BEE3CE-7C2F-414B-9C8A-49F075C2EA29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {29BEE3CE-7C2F-414B-9C8A-49F075C2EA29}.Debug|Any CPU.Build.0 = Debug|Any CPU {29BEE3CE-7C2F-414B-9C8A-49F075C2EA29}.Release|Any CPU.ActiveCfg = Release|Any CPU {29BEE3CE-7C2F-414B-9C8A-49F075C2EA29}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {13222FA6-2C83-4681-93CA-7CDA313B62BC} EndGlobalSection EndGlobal ================================================ FILE: projects/blazor-ssr/RazorMixMatchOne/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-ssr/RazorMixMatchOne/Views/Home/Index.cshtml ================================================ Hello world. This is a view from the controller.
Blazor SSR is here ================================================ FILE: projects/blazor-ssr/RazorMixMatchOne/_Imports.razor ================================================ @using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop @using RazorMixMatchOne @using RazorMixMatchOne.Shared ================================================ FILE: projects/blazor-ssr/RazorMixMatchThree/.vscode/settings.json ================================================ { "dotnet.defaultSolution": "RazorMixMatchThree.sln" } ================================================ FILE: projects/blazor-ssr/RazorMixMatchThree/App.razor ================================================ Blazor Multi Render Not found

Sorry, there's nothing at this address.

================================================ FILE: projects/blazor-ssr/RazorMixMatchThree/Pages/Blazor.razor ================================================ @page "/blazor-ssr"

This is from Blazor SSR

================================================ FILE: projects/blazor-ssr/RazorMixMatchThree/Program.cs ================================================ var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorComponents(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", () => { return Results.Text(""" Hello world. This is from Minimal API.
Blazor SSR is here """, "text/html"); }); app.MapRazorComponents(); app.Run(); ================================================ FILE: projects/blazor-ssr/RazorMixMatchThree/README.md ================================================ # Mix Blazor SSR with Minimal API This example demonstrates how to use Blazor SSR with Minimal API. ================================================ FILE: projects/blazor-ssr/RazorMixMatchThree/RazorMixMatchThree.csproj ================================================ net10.0 enable enable preview ================================================ FILE: projects/blazor-ssr/RazorMixMatchThree/RazorMixMatchThree.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorMixMatchThree", "RazorMixMatchThree.csproj", "{AA514391-0FC0-48BB-99D9-198FEBBC6761}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {AA514391-0FC0-48BB-99D9-198FEBBC6761}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AA514391-0FC0-48BB-99D9-198FEBBC6761}.Debug|Any CPU.Build.0 = Debug|Any CPU {AA514391-0FC0-48BB-99D9-198FEBBC6761}.Release|Any CPU.ActiveCfg = Release|Any CPU {AA514391-0FC0-48BB-99D9-198FEBBC6761}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {7892608F-08CC-4E61-9B7A-8BCA118B7920} EndGlobalSection EndGlobal ================================================ FILE: projects/blazor-ssr/RazorMixMatchThree/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-ssr/RazorMixMatchThree/_Imports.razor ================================================ @using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop @using RazorMixMatchThree @using RazorMixMatchThree.Shared ================================================ FILE: projects/blazor-ssr/RazorMixMatchTwo/.vscode/settings.json ================================================ { "dotnet.defaultSolution": "RazorMixMatchTwo.sln" } ================================================ FILE: projects/blazor-ssr/RazorMixMatchTwo/App.razor ================================================ Blazor Multi Render Not found

Sorry, there's nothing at this address.

================================================ FILE: projects/blazor-ssr/RazorMixMatchTwo/Pages/Blazor.razor ================================================ @page "/blazor-ssr"

This is from Blazor SSR

================================================ FILE: projects/blazor-ssr/RazorMixMatchTwo/Pages/Index.cshtml ================================================ @page "/" Hello world. This is a Razor Pages page.
Blazor SSR is here ================================================ FILE: projects/blazor-ssr/RazorMixMatchTwo/Program.cs ================================================ var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorComponents(); builder.Services.AddRazorPages(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapRazorPages(); app.MapRazorComponents(); app.Run(); ================================================ FILE: projects/blazor-ssr/RazorMixMatchTwo/README.md ================================================ # Mix Blazor SSR with Razor Pages This example demonstrates how to use Blazor SSR with Razor Pages. ================================================ FILE: projects/blazor-ssr/RazorMixMatchTwo/RazorMixMatchTwo.csproj ================================================ net10.0 enable enable preview ================================================ FILE: projects/blazor-ssr/RazorMixMatchTwo/RazorMixMatchTwo.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorMixMatchTwo", "RazorMixMatchTwo.csproj", "{0C7792CD-DE0E-437A-8B00-7092D45C3637}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {0C7792CD-DE0E-437A-8B00-7092D45C3637}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0C7792CD-DE0E-437A-8B00-7092D45C3637}.Debug|Any CPU.Build.0 = Debug|Any CPU {0C7792CD-DE0E-437A-8B00-7092D45C3637}.Release|Any CPU.ActiveCfg = Release|Any CPU {0C7792CD-DE0E-437A-8B00-7092D45C3637}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {414F06E3-3730-43E0-80AF-3CF0C17D6B3A} EndGlobalSection EndGlobal ================================================ FILE: projects/blazor-ssr/RazorMixMatchTwo/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-ssr/RazorMixMatchTwo/_Imports.razor ================================================ @using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop @using RazorMixMatchTwo @using RazorMixMatchTwo.Shared ================================================ FILE: projects/blazor-ssr/build.bat ================================================ dotnet build RazorComponentEight dotnet build RazorComponentEleven dotnet build RazorComponentFive dotnet build RazorComponentFour dotnet build RazorComponentNine dotnet build RazorComponentOne dotnet build RazorComponentSeven dotnet build RazorComponentSix dotnet build RazorComponentTen dotnet build RazorComponentThirteen dotnet build RazorComponentThree dotnet build RazorComponentTwelve dotnet build RazorComponentTwo dotnet build RazorFormHandlingFive dotnet build RazorFormHandlingFour dotnet build RazorFormHandlingOne dotnet build RazorFormHandlingThree dotnet build RazorFormHandlingTwo dotnet build RazorMixMatchFour dotnet build RazorMixMatchOne dotnet build RazorMixMatchThree dotnet build RazorMixMatchTwo ================================================ FILE: projects/blazor-ssr/build.sh ================================================ #!/bin/bash dotnet build RazorComponentEight dotnet build RazorComponentEleven dotnet build RazorComponentFive dotnet build RazorComponentFour dotnet build RazorComponentNine dotnet build RazorComponentOne dotnet build RazorComponentSeven dotnet build RazorComponentSix dotnet build RazorComponentTen dotnet build RazorComponentThirteen dotnet build RazorComponentThree dotnet build RazorComponentTwelve dotnet build RazorComponentTwo dotnet build RazorFormHandlingFive dotnet build RazorFormHandlingFour dotnet build RazorFormHandlingOne dotnet build RazorFormHandlingThree dotnet build RazorFormHandlingTwo dotnet build RazorMixMatchFour dotnet build RazorMixMatchOne dotnet build RazorMixMatchThree dotnet build RazorMixMatchTwo ================================================ FILE: projects/blazor-ssr/readme.md ================================================ # Blazor Server Side Rendering (22) ## Basics * [RazorComponentOne](RazorComponentOne) This sample demonstrates a simple usage of Razor Component component in SSR (Server Side Rendering). * [RazorComponentTwo](RazorComponentTwo) This sample demonstrates rendering a Razor Component from Minimal API via `RazorComponentResult` and passing data via a dictionary. * [RazorComponentThree](RazorComponentThree) This sample demonstrates rendering a Razor Component from Minimal API via `RazorComponentResult` and passing data via anonymous object. * [RazorComponentFour](RazorComponentFour) This sample demonstrates rendering a Razor Component using `Html.RenderComponentAsync` and passing data via anonymous object. * [RazorComponentFive](RazorComponentFive) This sample demonstrates rendering a Razor Component from a MVC Controller via `RazorComponentResult` and passing data via a dictionary. * [RazorComponentSix](RazorComponentSix) This sample demonstrates the new section functionality using `SectionOutlet` to mark a section and `SectionContent` to supply the content to a section. * [RazorComponentSeven](RazorComponentSeven) This sample demonstrates a Razor Component Page SSR (Server Side Render) hosting Razor Component with Blazor Server Side (interactive) and Blazor Streaming Rendering. * [RazorComponentEight](RazorComponentEight) This sample demonstrates a Razor Component Page SSR (Server Side Render) hosting Razor Component with Blazor Web Assembly (interactive) and Blazor Streaming Rendering. * [RazorComponentNine](RazorComponentNine) This sample demostrates the new attribute `[SupplyParameterFromQuery]` that allows Blazor component to get values directly from query string. * [RazorComponentTen](RazorComponentTen) This sample demonstrates a Razor Component Page SSR that handle a POST form, hosts "number" component with with Streaming rendering and hosts "interactive" components backed by Blazor Web Assembly and Blazor Server. * [RazorComponentEleven](RazorComponentEleven) This sample shows how to update the UI multiple times using `StateHasChanged();` while in streaming rendering mode. * [RazorComponentTwelve](RazorComponentTwelve) This sample shows how to access `HttpContext` from a static Razor component. * [RazorComponentThirteen](RazorComponentThirteen) This sample shows how to use `.AddAdditionalAssemblies` to allow the a host project to discover Page components in a separate WASM project. ## Blazor SSR Form Handling * [RazorFormHandlingOne](RazorFormHandlingOne) This example shows how to perform automatic data binding for a form `POST` request using `[SupplyParameterFromForm]`. We will use normal `` tag in this case. * [RazorFormHandlingTwo](RazorFormHandlingTwo) This example shows how to perform automatic data binding for a form `POST` request using `` and `[SupplyParameterFromForm]`. * [RazorFormHandlingThree](RazorFormHandlingThree) This example shows how to perform **multiple** automatic data binding for a form `POST` request using `[SupplyParameterFromForm]`. We will use normal `` tag in this case. * [RazorFormHandlingFour](RazorFormHandlingFour) This example shows how to perform **multiple** automatic data binding for a form `POST` request using `` and `[SupplyParameterFromForm]`. * [RazorFormHandlingFive](RazorFormHandlingFive) This example shows how to perform data validation using `DataAnnotationsValidator` and `EditForm`. ## Mix and Match Blazor SSR with existing tech * [RazorMixMatchOne](RazorMixMatchOne) This example shows how to use Blazor SSR with MVC in the same system. * [RazorMixMatchTwo](RazorMixMatchTwo) This example shows how to use Blazor SSR with Razor Pages in the same system. * [RazorMixMatchThree](RazorMixMatchThree) This example shows how to use Blazor SSR with Minimal API in the same system. * [RazorMixMatchFour](RazorMixMatchFour) This example shows how to use Blazor SSR with MVC, Razor Pages and Minimal API in the same system. dotnet8 ================================================ FILE: projects/blazor-wasm/Component/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/Component/Component.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/Component/Pages/Greeting.razor ================================================ 

@Message @currentCount from a component

@code { [Parameter] public string Message {get; set;} int currentCount = 1; void IncrementCount() { currentCount++; } } ================================================ FILE: projects/blazor-wasm/Component/Pages/Index.razor ================================================ @page "/" ================================================ FILE: projects/blazor-wasm/Component/Program.cs ================================================ using Component; using Microsoft.AspNetCore.Components.WebAssembly.Hosting; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); var app = builder.Build(); await app.RunAsync(); ================================================ FILE: projects/blazor-wasm/Component/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/Component/_Imports.razor ================================================ @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.JSInterop @using Component @using Component.Shared ================================================ FILE: projects/blazor-wasm/Component/wwwroot/index.html ================================================ Component Loading... ================================================ FILE: projects/blazor-wasm/ComponentEight/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/ComponentEight/ComponentEight.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/ComponentEight/Pages/Increment.razor ================================================ @code { int _number = 0; [Parameter] public EventCallback OnValueChanged { get; set;} async Task Add() => await OnValueChanged.InvokeAsync(++_number); } ================================================ FILE: projects/blazor-wasm/ComponentEight/Pages/Index.razor ================================================ @page "/"

Two components interacting with each other


Via public method


Via parameter property

@code { Show _showRef; int Number { get; set;} void Add(int nbr) { _showRef.Display(nbr); } void Add2(int nbr) { Number = nbr; } } ================================================ FILE: projects/blazor-wasm/ComponentEight/Pages/Show.razor ================================================ Number: @Number @code { [Parameter] public int Number { get; set;} public void Display(int nbr) { Number = nbr; this.StateHasChanged(); } } ================================================ FILE: projects/blazor-wasm/ComponentEight/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using ComponentEight; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); var app = builder.Build(); await app.RunAsync(); ================================================ FILE: projects/blazor-wasm/ComponentEight/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/ComponentEight/_Imports.razor ================================================ @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.JSInterop @using ComponentEight @using ComponentEight.Shared ================================================ FILE: projects/blazor-wasm/ComponentEight/wwwroot/index.html ================================================ Component Loading... ================================================ FILE: projects/blazor-wasm/ComponentEighteen/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/ComponentEighteen/ComponentEighteen.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/ComponentEighteen/Pages/Index.razor ================================================ @page "/"

bind:after example

@Message
@code { string SearchText { get; set; } string Message { get; set; } int _count; void PerformSearch() { Message = "Performing search " + _count++; } } ================================================ FILE: projects/blazor-wasm/ComponentEighteen/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using ComponentEighteen; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); var app = builder.Build(); await app.RunAsync(); ================================================ FILE: projects/blazor-wasm/ComponentEighteen/README.md ================================================ # Blazor data binding after modifier This sample demonstrate @bind:after modifier that allows to execute async code after a binding event has been completed (value has changed). ================================================ FILE: projects/blazor-wasm/ComponentEighteen/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/ComponentEighteen/_Imports.razor ================================================ @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using ComponentEighteen @using ComponentEighteen.Shared ================================================ FILE: projects/blazor-wasm/ComponentEighteen/wwwroot/index.html ================================================ Component Loading... ================================================ FILE: projects/blazor-wasm/ComponentEleven/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/ComponentEleven/ComponentEleven.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/ComponentEleven/Pages/All.razor ================================================ A list of unmatched attributes:
    @foreach(var att in Attributes) {
  • @att.Key = @att.Value
  • }
Age is a parameter of this component
Age = @Age @code { [Parameter(CaptureUnmatchedValues = true)] public Dictionary Attributes { get; set; } [Parameter] public short Age { get; set;} } ================================================ FILE: projects/blazor-wasm/ComponentEleven/Pages/Index.razor ================================================ @page "/"

Arbitrary Parameters

@code { readonly DateTime Date = DateTime.UtcNow.Date; const short Age = 33; } ================================================ FILE: projects/blazor-wasm/ComponentEleven/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using ComponentEleven; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); var app = builder.Build(); await app.RunAsync(); ================================================ FILE: projects/blazor-wasm/ComponentEleven/README.md ================================================ # Accept arbitrary parameters Use `[Parameter(CaptureUnmatchedValues = true)]` to capture unmatched parameters. ================================================ FILE: projects/blazor-wasm/ComponentEleven/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/ComponentEleven/_Imports.razor ================================================ @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.JSInterop @using ComponentEleven @using ComponentEleven.Shared ================================================ FILE: projects/blazor-wasm/ComponentEleven/wwwroot/index.html ================================================ Component Loading... ================================================ FILE: projects/blazor-wasm/ComponentFifteen/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/ComponentFifteen/ComponentFifteen.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/ComponentFifteen/Pages/Greeting.razor ================================================ 

@Message @currentCount from a component

================================================ FILE: projects/blazor-wasm/ComponentFifteen/Pages/Greeting.razor.cs ================================================ using Microsoft.AspNetCore.Components; namespace ComponentFifteen.Pages { public partial class Greeting { [Parameter] public string Message {get; set;} int currentCount = 1; void IncrementCount() { currentCount++; } } } ================================================ FILE: projects/blazor-wasm/ComponentFifteen/Pages/Index.razor ================================================ @page "/" ================================================ FILE: projects/blazor-wasm/ComponentFifteen/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using ComponentFifteen; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); var app = builder.Build(); await app.RunAsync(); ================================================ FILE: projects/blazor-wasm/ComponentFifteen/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/ComponentFifteen/_Imports.razor ================================================ @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.JSInterop @using ComponentFifteen @using ComponentFifteen.Shared ================================================ FILE: projects/blazor-wasm/ComponentFifteen/wwwroot/index.html ================================================ Component Loading... ================================================ FILE: projects/blazor-wasm/ComponentFive/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/ComponentFive/ComponentFive.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/ComponentFive/Pages/Greeting.razor ================================================ @inherits GreetingBase ================================================ FILE: projects/blazor-wasm/ComponentFive/Pages/GreetingBase.cs ================================================ using Microsoft.AspNetCore.Components; using System; using System.Threading.Tasks; namespace ComponentFive.Pages { public class GreetingBase : ComponentBase { [Parameter] public EventCallback OnUpdate { get; set; } int _currentCount; protected async Task IncrementCount() { _currentCount++; await OnUpdate.InvokeAsync(_currentCount); } } } ================================================ FILE: projects/blazor-wasm/ComponentFive/Pages/Index.razor ================================================ @page "/" Count: @Increment
This is a component
@code { int Increment {get;set;} void IncrementUpdated(int inc) { Increment = inc; } } ================================================ FILE: projects/blazor-wasm/ComponentFive/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using ComponentFive; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); var app = builder.Build(); await app.RunAsync(); ================================================ FILE: projects/blazor-wasm/ComponentFive/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/ComponentFive/_Imports.razor ================================================ @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.JSInterop @using ComponentFive @using ComponentFive.Shared ================================================ FILE: projects/blazor-wasm/ComponentFive/wwwroot/index.html ================================================ Component Loading... ================================================ FILE: projects/blazor-wasm/ComponentFour/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/ComponentFour/ComponentFour.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/ComponentFour/Pages/Greeting.razor ================================================  @code { [Parameter] public EventCallback OnUpdate {get; set;} int _currentCount; async Task IncrementCount() { _currentCount++; await OnUpdate.InvokeAsync(_currentCount); } } ================================================ FILE: projects/blazor-wasm/ComponentFour/Pages/Index.razor ================================================ @page "/" Count: @Increment
This is a component
@code { int Increment {get;set;} void IncrementUpdated(int inc) { Increment = inc; } } ================================================ FILE: projects/blazor-wasm/ComponentFour/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using ComponentFour; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); var app = builder.Build(); await app.RunAsync(); ================================================ FILE: projects/blazor-wasm/ComponentFour/README.md ================================================ # Handling component paramater for event handling using EventCallback This is new on Blazor 0.9. For a complete discussion on this topic, this is a useful [thread](https://github.com/aspnet/AspNetCore/issues/6351). ================================================ FILE: projects/blazor-wasm/ComponentFour/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/ComponentFour/_Imports.razor ================================================ @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.JSInterop @using ComponentFour @using ComponentFour.Shared ================================================ FILE: projects/blazor-wasm/ComponentFour/wwwroot/index.html ================================================ Component Loading... ================================================ FILE: projects/blazor-wasm/ComponentFourteen/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/ComponentFourteen/ComponentFourteen.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/ComponentFourteen/Pages/All.razor ================================================ @foreach(var a in Attributes) { }
Key Value Type
@a.Key (splat) @a.Value @a.Value.GetType()
Height (param) @Height @Height.GetType()
CourageStats (param) @CourageStats @CourageStats.GetType()
CalmnessStats (param) @CalmnessStats @CalmnessStats.GetType()
@code { [Parameter(CaptureUnmatchedValues = true)] public Dictionary Attributes { get; set; } [Parameter] public int Height {get; set;} [Parameter] public int CourageStats {get; set;} [Parameter] public int CalmnessStats {get; set;} } ================================================ FILE: projects/blazor-wasm/ComponentFourteen/Pages/Index.razor ================================================ @page "/"

Component parameter passing behavior

@code { public bool CanRideBike { get; set;} = true; public DateTime DateOfBirth = DateTime.Parse("1986-1-1"); public DateTime DateOfGraduation = DateTime.Parse("2021-5-1"); public DateTime DateOfPublication = DateTime.Parse("2021-10-1"); public bool CanFly {get; set;} = false; public bool CanSwim {get; set;} = true; public int IQ = 200; public List FavoriteColors { get; set; } = new List() { "red", "green" }; const int CourageStats = 90; public int HumorStats { get; set; } = 99; public int CalmnessStats {get; set; } = 55; } ================================================ FILE: projects/blazor-wasm/ComponentFourteen/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using ComponentFourteen; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); var app = builder.Build(); await app.RunAsync(); ================================================ FILE: projects/blazor-wasm/ComponentFourteen/README.md ================================================ # Different ways to pass data to a component This sample demonstrates the various ways to pass parameters to a component and how it affects on how the data is perceived by the component. ================================================ FILE: projects/blazor-wasm/ComponentFourteen/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/ComponentFourteen/_Imports.razor ================================================ @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using ComponentFourteen @using ComponentFourteen.Shared ================================================ FILE: projects/blazor-wasm/ComponentFourteen/wwwroot/index.html ================================================ Component Loading... ================================================ FILE: projects/blazor-wasm/ComponentNine/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/ComponentNine/ComponentNine.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/ComponentNine/Pages/Increment.razor ================================================ @code { // You need a Property + PropertyChanged event in combination to make the custom component data binding works [Parameter] public int Number { get; set;} [Parameter] public EventCallback NumberChanged { get; set;} async Task Add() { Number++; await NumberChanged.InvokeAsync(Number); } } ================================================ FILE: projects/blazor-wasm/ComponentNine/Pages/Index.razor ================================================ @page "/"

Data Binding from Child Component property to Parent

If you remove bind- from bind-number at the source, the updated number from the component won't be reflected to the parent

bind-number or bind-Number or bind-nuMBer works equally well. It is case insensitive.

Number: @MagicNumber @functions { int MagicNumber { get; set; } } ================================================ FILE: projects/blazor-wasm/ComponentNine/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using ComponentNine; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); var app = builder.Build(); await app.RunAsync(); ================================================ FILE: projects/blazor-wasm/ComponentNine/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/ComponentNine/_Imports.razor ================================================ @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.JSInterop @using ComponentNine @using ComponentNine.Shared ================================================ FILE: projects/blazor-wasm/ComponentNine/wwwroot/index.html ================================================ Component Loading... ================================================ FILE: projects/blazor-wasm/ComponentNineteen/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/ComponentNineteen/ComponentNineteen.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/ComponentNineteen/Pages/Form.razor ================================================ @code { [Parameter] public string Value { get; set; } [Parameter] public EventCallback ValueChanged { get; set; } private async Task ValueChangedHandler(string value) { await ValueChanged.InvokeAsync(value); } } ================================================ FILE: projects/blazor-wasm/ComponentNineteen/Pages/Index.razor ================================================ @page "/"

bind:get and bind:set example

Thanks for the inspiration. Type in input field and press tab.

@Message
@code { public string Message { get; set; } = "Pass the bill to the person your left."; public void MessageChanged(string value) { Message = value + " in bed"; } } ================================================ FILE: projects/blazor-wasm/ComponentNineteen/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using ComponentNineteen; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); var app = builder.Build(); await app.RunAsync(); ================================================ FILE: projects/blazor-wasm/ComponentNineteen/README.md ================================================ # Blazor data binding get set modifiers This sample demonstrate @bind:get @bind:set modifier that simplify two-way data binding. ================================================ FILE: projects/blazor-wasm/ComponentNineteen/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/ComponentNineteen/_Imports.razor ================================================ @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using ComponentNineteen @using ComponentNineteen.Shared ================================================ FILE: projects/blazor-wasm/ComponentNineteen/wwwroot/index.html ================================================ Component Loading... ================================================ FILE: projects/blazor-wasm/ComponentSeven/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/ComponentSeven/Calculator/Calculate.cs ================================================ namespace Calculator { public class Calculate { public int Double(int number) => number * 2; } } ================================================ FILE: projects/blazor-wasm/ComponentSeven/ComponentSeven.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/ComponentSeven/Helper/ConversationHelper.cs ================================================ namespace ComponentSeven.Helper { public static class ConversationHelper { public static string Say() => "Hello"; } } ================================================ FILE: projects/blazor-wasm/ComponentSeven/Pages/Index.razor ================================================ @page "/" @using ComponentSeven.Helper Message: @Message

Number : @Number
@code { string Message {get;set;} void Say() { Message = ConversationHelper.Say(); } int Number { get; set; } = 5; void Double() { var calculator = new Calculator.Calculate(); Number = calculator.Double(Number); } } ================================================ FILE: projects/blazor-wasm/ComponentSeven/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using ComponentSeven; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); var app = builder.Build(); await app.RunAsync(); ================================================ FILE: projects/blazor-wasm/ComponentSeven/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/ComponentSeven/_Imports.razor ================================================ @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.JSInterop @using ComponentSeven @using ComponentSeven.Shared ================================================ FILE: projects/blazor-wasm/ComponentSeven/wwwroot/index.html ================================================ Component Loading... ================================================ FILE: projects/blazor-wasm/ComponentSeventeen/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/ComponentSeventeen/ComponentSeventeen.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/ComponentSeventeen/Pages/Greet.razor ================================================ Below message is printed on @CurrentTime
@Message @Name

Location: @Location
@code{ [CascadingParameter(Name = "Time")] private DateTimeOffset CurrentTime { get; set;} [Parameter] public string Message { get; set; } [CascadingParameter(Name = "Name")] private string Name { get; set;} [CascadingParameter(Name = "CurrentLocation")] private string Location { get; set;} } ================================================ FILE: projects/blazor-wasm/ComponentSeventeen/Pages/Index.razor ================================================ @page "/"

Cascading Parameter via name

@code { public DateTimeOffset CurrentTime = DateTimeOffset.Now; public string Name = "Annie"; public string Message { get; set; } = "Hello world"; public string Location { get; set; } = "New Haven"; public Person Person { get; set; } = new Person { Name = "Annie", Age = 33 }; } ================================================ FILE: projects/blazor-wasm/ComponentSeventeen/Pages/Person.cs ================================================ public class Person { public string Name { get; set;} public int Age { get; set;} } ================================================ FILE: projects/blazor-wasm/ComponentSeventeen/Pages/PersonDetails.razor ================================================ Person 1
Name: @Person.Name
Age: @Person.Age


Person 2
Name: @Person2.Name
Age: @Person2.Age
@code { [CascadingParameter(Name = "PersonInfo")] private Person Person { get; set;} [CascadingParameter(Name = "PersonInfo")] private Person Person2 { get; set;} } ================================================ FILE: projects/blazor-wasm/ComponentSeventeen/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using ComponentSeventeen; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); var app = builder.Build(); await app.RunAsync(); ================================================ FILE: projects/blazor-wasm/ComponentSeventeen/README.md ================================================ # Cascading value by name This sample demonstrates cascading value by name feature. This is a parameter that get passed through a component without having to explicitly assign them. You can pass primitives as well as complex object this way. In this sample you will see how cascading values flow to all components. In cascading value by type, all cascading parameters of the same type will share the same value. In cascading value by name, only parameters that match with the assigned name (and type) will receive it. Below code is valid for example. Person and Person2 properties will receive the same value. ``` [CascadingParameter(Name = "PersonInfo")] private Person Person { get; set;} [CascadingParameter(Name = "PersonInfo")] private Person Person2 { get; set;} ``` ================================================ FILE: projects/blazor-wasm/ComponentSeventeen/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/ComponentSeventeen/_Imports.razor ================================================ @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using ComponentSeventeen @using ComponentSeventeen.Shared ================================================ FILE: projects/blazor-wasm/ComponentSeventeen/wwwroot/index.html ================================================ Component Loading... ================================================ FILE: projects/blazor-wasm/ComponentSix/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/ComponentSix/ComponentSix.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/ComponentSix/Pages/CounterProperty.razor ================================================ @Counter
    @foreach(var l in List){
  • @l
  • }
@code { int Counter {get; set;} List List {get;set;} = new List(); Random _rand = new Random(); public void AddToList() { List.Add(_rand.Next(10000)); } public void AddToListStateHasChanged() { List.Add(_rand.Next(10000)); this.StateHasChanged(); } public void Increment() { Counter = Counter + 1; } public void IncrementWithStateHasChanged() { Counter++; this.StateHasChanged(); } } ================================================ FILE: projects/blazor-wasm/ComponentSix/Pages/CounterVariable.razor ================================================ @Counter
@code { int Counter; public void Increment() { Counter++; } public void IncrementWithStateHasChanged() { Counter++; this.StateHasChanged(); } } ================================================ FILE: projects/blazor-wasm/ComponentSix/Pages/Index.razor ================================================ @page "/"

We observe here the following behaviors

  • If you call your method from the same component, you don't need StateHasChanged()
  • If you call the same method from outside the component (from parent), the method needs to call StateHasChanged() otherwise the component won't re-render the result.

Note: Components are within red boxes.

Component Uses Variable

The following buttons come from parents
Component Uses Property

The following buttons come from parents


@code{ CounterVariable Variable; CounterProperty Property; void IncrementVariable () { Variable.Increment(); } void IncrementVariable2 () { Variable.IncrementWithStateHasChanged(); } void IncrementProperty() { Property.Increment(); } void IncrementProperty2() { Property.IncrementWithStateHasChanged(); } void AddToPropertyList(){ Property.AddToList(); } void AddToPropertyList2(){ Property.AddToListStateHasChanged(); } } ================================================ FILE: projects/blazor-wasm/ComponentSix/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using ComponentSix; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); var app = builder.Build(); await app.RunAsync(); ================================================ FILE: projects/blazor-wasm/ComponentSix/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/ComponentSix/_Imports.razor ================================================ @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.JSInterop @using ComponentSix @using ComponentSix.Shared ================================================ FILE: projects/blazor-wasm/ComponentSix/wwwroot/index.html ================================================ Component Loading... ================================================ FILE: projects/blazor-wasm/ComponentSixteen/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/ComponentSixteen/ComponentSixteen.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/ComponentSixteen/Pages/Greet.razor ================================================ Below message is printed on @CurrentTime
@Message @Name

Location: @Location

Note You can see here that Name parameter and Location parameter share the same cascading value because they are both string.


Person
Name: @Person.Name
Age: @Person.Age
@code{ [CascadingParameter] private DateTimeOffset CurrentTime { get; set;} [Parameter] public string Message { get; set; } [CascadingParameter] private string Name { get; set;} [CascadingParameter] private string Location { get; set;} [CascadingParameter] private Person Person { get; set;} } ================================================ FILE: projects/blazor-wasm/ComponentSixteen/Pages/Index.razor ================================================ @page "/"

Cascading Parameter via type

@code { public DateTimeOffset CurrentTime = DateTimeOffset.Now; public string Name = "Annie"; public string Message { get; set; } = "Hello world"; public Person Person { get; set; } = new Person { Name = "Annie", Age = 33 }; } ================================================ FILE: projects/blazor-wasm/ComponentSixteen/Pages/Person.cs ================================================ public class Person { public string Name { get; set;} public int Age { get; set;} } ================================================ FILE: projects/blazor-wasm/ComponentSixteen/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using ComponentSixteen; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); var app = builder.Build(); await app.RunAsync(); ================================================ FILE: projects/blazor-wasm/ComponentSixteen/README.md ================================================ # Cascading value by type This sample demonstrates cascading value by type feature. This is a parameter that get passed through a component without having to explicitly assign them. All the parameters that share the same type will share the same value. `Name` and `Location` would share the same value because they are both `string`. ``` [CascadingParameter] private string Name { get; set;} [CascadingParameter] private string Location { get; set;} ``` ================================================ FILE: projects/blazor-wasm/ComponentSixteen/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/ComponentSixteen/_Imports.razor ================================================ @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using ComponentSixteen @using ComponentSixteen.Shared ================================================ FILE: projects/blazor-wasm/ComponentSixteen/wwwroot/index.html ================================================ Component Loading... ================================================ FILE: projects/blazor-wasm/ComponentTen/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/ComponentTen/ComponentTen.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/ComponentTen/Pages/Increment.razor ================================================ @code { // You need a Property + PropertyChanged event in combination to make the custom component data binding works [Parameter] public List Numbers { get; set;} = new List(); [Parameter] public EventCallback> NumbersChanged { get; set;} Random _rnd = new Random(); async Task Add() { Numbers.Add(_rnd.Next()); await NumbersChanged.InvokeAsync(Numbers); } } ================================================ FILE: projects/blazor-wasm/ComponentTen/Pages/Index.razor ================================================ @page "/"

Data Binding from Child Component property to Parent

Magic Numbers
    @foreach(var mn in MagicNumbers) {
  • @mn
  • }
@code { List MagicNumbers { get; set; } = new List(); } ================================================ FILE: projects/blazor-wasm/ComponentTen/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using ComponentTen; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); var app = builder.Build(); await app.RunAsync(); ================================================ FILE: projects/blazor-wasm/ComponentTen/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/ComponentTen/_Imports.razor ================================================ @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.JSInterop @using ComponentTen @using ComponentTen.Shared ================================================ FILE: projects/blazor-wasm/ComponentTen/wwwroot/index.html ================================================ Component Loading... ================================================ FILE: projects/blazor-wasm/ComponentThirteen/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/ComponentThirteen/ComponentThirteen.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/ComponentThirteen/Pages/All.razor ================================================ @code { [Parameter(CaptureUnmatchedValues = true)] public Dictionary Attributes { get; set; } } ================================================ FILE: projects/blazor-wasm/ComponentThirteen/Pages/Index.razor ================================================ @page "/"

Arbitrary Parameters Splatting on a form input

@code { public Dictionary HtmlAttributes = new Dictionary () { { "style", "background-color:lightgrey;width:300px;" }, { "id", "input_id" }, { "placeholder", "This is a demo on splatting functionality"} }; } ================================================ FILE: projects/blazor-wasm/ComponentThirteen/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using ComponentThirteen; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); var app = builder.Build(); await app.RunAsync(); ================================================ FILE: projects/blazor-wasm/ComponentThirteen/README.md ================================================ # Splatting arbitrary attributes to components using @attributes This sample demonstrates the usage of `@attributes` attributes splatting on a form input. ================================================ FILE: projects/blazor-wasm/ComponentThirteen/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/ComponentThirteen/_Imports.razor ================================================ @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.JSInterop @using ComponentThirteen @using ComponentThirteen.Shared ================================================ FILE: projects/blazor-wasm/ComponentThirteen/wwwroot/index.html ================================================ Component Loading... ================================================ FILE: projects/blazor-wasm/ComponentThree/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/ComponentThree/ComponentThree.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/ComponentThree/Pages/Greeting.razor ================================================ 

@Message @currentCount from a component

@code { [Parameter] public string Message {get; set;} int currentCount = 1; void IncrementCount() { currentCount++; } } ================================================ FILE: projects/blazor-wasm/ComponentThree/Pages/Index.razor ================================================ @page "/" This is a component
================================================ FILE: projects/blazor-wasm/ComponentThree/Pages/PrettyBox.razor ================================================
@ChildContent
@code{ [Parameter] public RenderFragment ChildContent {get;set;} } ================================================ FILE: projects/blazor-wasm/ComponentThree/Pages/Wave.razor ================================================ 

Wave

================================================ FILE: projects/blazor-wasm/ComponentThree/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using ComponentThree; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); var app = builder.Build(); await app.RunAsync(); ================================================ FILE: projects/blazor-wasm/ComponentThree/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/ComponentThree/_Imports.razor ================================================ @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.JSInterop @using ComponentThree @using ComponentThree.Shared ================================================ FILE: projects/blazor-wasm/ComponentThree/wwwroot/index.html ================================================ Component Loading... ================================================ FILE: projects/blazor-wasm/ComponentTwelve/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/ComponentTwelve/ComponentTwelve.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/ComponentTwelve/Pages/All.razor ================================================ A list of unmatched attributes:
    @foreach(var att in Attributes) {
  • @att.Key = @att.Value
  • }
@code { [Parameter(CaptureUnmatchedValues = true)] public Dictionary Attributes { get; set; } } ================================================ FILE: projects/blazor-wasm/ComponentTwelve/Pages/Index.razor ================================================ @page "/"

Arbitrary Parameters

@code { public List> Values = new List>() { new KeyValuePair( "Name", "Annie" ), new KeyValuePair("Age", 33 ), new KeyValuePair( "is-working", true) }; } ================================================ FILE: projects/blazor-wasm/ComponentTwelve/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using ComponentTwelve; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); var app = builder.Build(); await app.RunAsync(); ================================================ FILE: projects/blazor-wasm/ComponentTwelve/README.md ================================================ # Splatting arbitrary attributes to components using @attributes Use `@attributes` and a `Dictionary` or `List>`. ================================================ FILE: projects/blazor-wasm/ComponentTwelve/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/ComponentTwelve/_Imports.razor ================================================ @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using ComponentTwelve @using ComponentTwelve.Shared ================================================ FILE: projects/blazor-wasm/ComponentTwelve/wwwroot/index.html ================================================ Component Loading... ================================================ FILE: projects/blazor-wasm/ComponentTwenty/CustomElement/CustomElement.csproj ================================================ net10.0 enable enable preview ================================================ FILE: projects/blazor-wasm/ComponentTwenty/CustomElement/Interaction.razor ================================================ 

@Content

Count: @_count @code { private int _count = 0; [Parameter] public string Content { get; set; } = string.Empty; } ================================================ FILE: projects/blazor-wasm/ComponentTwenty/CustomElement/Program.cs ================================================ using CustomElement; using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.WebAssembly.Hosting; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.RegisterCustomElement("pa-interaction"); await builder.Build().RunAsync(); ================================================ FILE: projects/blazor-wasm/ComponentTwenty/CustomElement/_Imports.razor ================================================ @using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.AspNetCore.Components.WebAssembly.Http @using Microsoft.JSInterop ================================================ FILE: projects/blazor-wasm/ComponentTwenty/README.md ================================================ # Blazor WebAssembly backed HTML Custom Element This is a sample project to show how to create a Blazor WebAssembly component that can be used as a custom element in a HTML page. ================================================ FILE: projects/blazor-wasm/ComponentTwenty/Web/Pages/Index.cshtml ================================================ @page Hello, world!

Blazor Custom Element

================================================ FILE: projects/blazor-wasm/ComponentTwenty/Web/Pages/_ViewImports.cshtml ================================================  ================================================ FILE: projects/blazor-wasm/ComponentTwenty/Web/Program.cs ================================================ var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); var app = builder.Build(); app.UseWebAssemblyDebugging(); app.UseBlazorFrameworkFiles(); app.UseStaticFiles(); app.MapRazorPages(); app.Run(); ================================================ FILE: projects/blazor-wasm/ComponentTwenty/Web/Web.csproj ================================================ net10.0 enable enable preview ================================================ FILE: projects/blazor-wasm/ComponentTwentyFive/.vscode/settings.json ================================================ { "dotnet.defaultSolution": "ComponentTwentyFive.sln" } ================================================ FILE: projects/blazor-wasm/ComponentTwentyFive/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/ComponentTwentyFive/ComponentTwentyFive.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/ComponentTwentyFive/ComponentTwentyFive.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ComponentTwentyFive", "ComponentTwentyFive.csproj", "{D1EBA820-93F2-4469-B764-1C467DBB4D5F}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {D1EBA820-93F2-4469-B764-1C467DBB4D5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D1EBA820-93F2-4469-B764-1C467DBB4D5F}.Debug|Any CPU.Build.0 = Debug|Any CPU {D1EBA820-93F2-4469-B764-1C467DBB4D5F}.Release|Any CPU.ActiveCfg = Release|Any CPU {D1EBA820-93F2-4469-B764-1C467DBB4D5F}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {12A0397E-7025-4790-AA33-47A526539D93} EndGlobalSection EndGlobal ================================================ FILE: projects/blazor-wasm/ComponentTwentyFive/Pages/Index.razor ================================================ @page "/"

Dynamic Cascading Values

Keep refreshing the page to see the date and time change ================================================ FILE: projects/blazor-wasm/ComponentTwentyFive/Pages/InnerComponentOne.razor ================================================

Inner Component One

@HelloMessage.Message @code { [CascadingParameter] protected MessageCascade HelloMessage { get; set; } = default!; } ================================================ FILE: projects/blazor-wasm/ComponentTwentyFive/Pages/InnerComponentTwo.razor ================================================

Inner Component Two

@GoodbyeMessage.Message @code { [CascadingParameter] protected MessageCascade GoodbyeMessage { get; set; } = default!; } ================================================ FILE: projects/blazor-wasm/ComponentTwentyFive/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using Microsoft.AspNetCore.Components; using ComponentTwentyFive; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); builder.Services.AddCascadingValue(sp => { var msg = new MessageCascade("Hello World! " + DateTime.Now); var source = new CascadingValueSource(msg, isFixed: false); return source; }); var app = builder.Build(); await app.RunAsync(); public record MessageCascade(string Message); ================================================ FILE: projects/blazor-wasm/ComponentTwentyFive/README.md ================================================ # Setting root level dynamic cascading values This sample shows how to set root level **dynamic** cascading values using `CascadingValueSource`. ================================================ FILE: projects/blazor-wasm/ComponentTwentyFive/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/ComponentTwentyFive/_Imports.razor ================================================ @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using ComponentTwentyFive @using ComponentTwentyFive.Shared ================================================ FILE: projects/blazor-wasm/ComponentTwentyFive/wwwroot/index.html ================================================ Component Loading... ================================================ FILE: projects/blazor-wasm/ComponentTwentyFour/.vscode/settings.json ================================================ { "dotnet.defaultSolution": "ComponentTwentyThree.sln" } ================================================ FILE: projects/blazor-wasm/ComponentTwentyFour/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/ComponentTwentyFour/ComponentTwentyFour.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/ComponentTwentyFour/Pages/Index.razor ================================================ @page "/"

Cascading Values

================================================ FILE: projects/blazor-wasm/ComponentTwentyFour/Pages/InnerComponentOne.razor ================================================

Inner Component One

@HelloMessage.Message @code { [CascadingParameter(Name = "hello")] protected MessageCascade HelloMessage { get; set; } = default!; } ================================================ FILE: projects/blazor-wasm/ComponentTwentyFour/Pages/InnerComponentTwo.razor ================================================

Inner Component Two

@GoodbyeMessage.Message @code { [CascadingParameter(Name = "goodbye")] protected MessageCascade GoodbyeMessage { get; set; } = default!; } ================================================ FILE: projects/blazor-wasm/ComponentTwentyFour/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using ComponentTwentyFour; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); builder.Services.AddCascadingValue("hello", sp => new MessageCascade("Hello World!")); builder.Services.AddCascadingValue("goodbye", sp => new MessageCascade("Goodbye World!")); var app = builder.Build(); await app.RunAsync(); public record MessageCascade(string Message); ================================================ FILE: projects/blazor-wasm/ComponentTwentyFour/README.md ================================================ # Setting fixed root level named cascading values This sample shows how to set root level **named** cascading values without using `` component. ================================================ FILE: projects/blazor-wasm/ComponentTwentyFour/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/ComponentTwentyFour/_Imports.razor ================================================ @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using ComponentTwentyFour @using ComponentTwentyFour.Shared ================================================ FILE: projects/blazor-wasm/ComponentTwentyFour/wwwroot/index.html ================================================ Component Loading... ================================================ FILE: projects/blazor-wasm/ComponentTwentyOne/CustomElement/CustomElement.csproj ================================================ net10.0 enable enable preview ================================================ FILE: projects/blazor-wasm/ComponentTwentyOne/CustomElement/Interaction.razor ================================================ 

@Content

Count: @_count @code { private int _count = 0; [Parameter] public string Content { get; set; } = string.Empty; } ================================================ FILE: projects/blazor-wasm/ComponentTwentyOne/CustomElement/Program.cs ================================================ using CustomElement; using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.WebAssembly.Hosting; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.RegisterCustomElement("pa-interaction"); await builder.Build().RunAsync(); ================================================ FILE: projects/blazor-wasm/ComponentTwentyOne/CustomElement/_Imports.razor ================================================ @using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.AspNetCore.Components.WebAssembly.Http @using Microsoft.JSInterop ================================================ FILE: projects/blazor-wasm/ComponentTwentyOne/README.md ================================================ # How to set and get a HTML Custom Element property This is a sample on how to get and set a property of a HTML Custom Element created using Blazor WebAssembly. ================================================ FILE: projects/blazor-wasm/ComponentTwentyOne/Web/Pages/Index.cshtml ================================================ @page Hello, world!

Blazor Custom Element

================================================ FILE: projects/blazor-wasm/ComponentTwentyOne/Web/Pages/_ViewImports.cshtml ================================================  ================================================ FILE: projects/blazor-wasm/ComponentTwentyOne/Web/Program.cs ================================================ var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); var app = builder.Build(); app.UseWebAssemblyDebugging(); app.UseBlazorFrameworkFiles(); app.UseStaticFiles(); app.MapRazorPages(); app.Run(); ================================================ FILE: projects/blazor-wasm/ComponentTwentyOne/Web/Web.csproj ================================================ net10.0 enable enable preview ================================================ FILE: projects/blazor-wasm/ComponentTwentySeven/.vscode/settings.json ================================================ { "dotnet.defaultSolution": "ComponentTwentySix.sln" } ================================================ FILE: projects/blazor-wasm/ComponentTwentySeven/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/ComponentTwentySeven/ComponentTwentySeven.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/ComponentTwentySeven/ComponentTwentySeven.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ComponentTwentySeven", "ComponentTwentySeven.csproj", "{23E5009B-0E29-4D9F-8BB7-2D7183A97DCA}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {23E5009B-0E29-4D9F-8BB7-2D7183A97DCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {23E5009B-0E29-4D9F-8BB7-2D7183A97DCA}.Debug|Any CPU.Build.0 = Debug|Any CPU {23E5009B-0E29-4D9F-8BB7-2D7183A97DCA}.Release|Any CPU.ActiveCfg = Release|Any CPU {23E5009B-0E29-4D9F-8BB7-2D7183A97DCA}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {A0B52EB0-A57C-4AF0-9C40-C74BB7385C44} EndGlobalSection EndGlobal ================================================ FILE: projects/blazor-wasm/ComponentTwentySeven/Pages/Index.razor ================================================ @page "/" @Msg1.Message
@Msg2.Message @code { [Inject(Key = "msg1")] public IMessage Msg1 { get; set; } [Inject(Key = "msg2")] public IMessage Msg2 { get; set; } } ================================================ FILE: projects/blazor-wasm/ComponentTwentySeven/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using ComponentTwentySeven; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); builder.Services.AddKeyedSingleton("msg1", (_, _) => new Msg("Hello world")); builder.Services.AddKeyedSingleton("msg2", (_, _) => new Msg("Goodbyeworld")); var app = builder.Build(); await app.RunAsync(); public interface IMessage { string Message { get; } } public class Msg(string message) : IMessage { public string Message => message; } ================================================ FILE: projects/blazor-wasm/ComponentTwentySeven/README.md ================================================ # Inject keyed services into components This sample shows how to use `[Inject(Key)]` in consuming keyed services. ================================================ FILE: projects/blazor-wasm/ComponentTwentySeven/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/ComponentTwentySeven/_Imports.razor ================================================ @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using ComponentTwentySeven @using ComponentTwentySeven.Shared ================================================ FILE: projects/blazor-wasm/ComponentTwentySeven/wwwroot/index.html ================================================ Component Loading... ================================================ FILE: projects/blazor-wasm/ComponentTwentySix/.vscode/settings.json ================================================ { "dotnet.defaultSolution": "ComponentTwentySix.sln" } ================================================ FILE: projects/blazor-wasm/ComponentTwentySix/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/ComponentTwentySix/ComponentTwentySix.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/ComponentTwentySix/ComponentTwentySix.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ComponentTwentySix", "ComponentTwentySix.csproj", "{864B5B16-E06A-4657-B36C-03F5521B97A5}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {864B5B16-E06A-4657-B36C-03F5521B97A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {864B5B16-E06A-4657-B36C-03F5521B97A5}.Debug|Any CPU.Build.0 = Debug|Any CPU {864B5B16-E06A-4657-B36C-03F5521B97A5}.Release|Any CPU.ActiveCfg = Release|Any CPU {864B5B16-E06A-4657-B36C-03F5521B97A5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {CF583341-A911-452F-A8D0-D6DF6B54D7C7} EndGlobalSection EndGlobal ================================================ FILE: projects/blazor-wasm/ComponentTwentySix/Pages/Index.razor ================================================ @page "/"

Dynamic Cascading Values

Keep refreshing the page to see the date and time change ================================================ FILE: projects/blazor-wasm/ComponentTwentySix/Pages/InnerComponentOne.razor ================================================

Inner Component One

@HelloMessage.Message @code { [CascadingParameter(Name="hello")] protected MessageCascade HelloMessage { get; set; } = default!; } ================================================ FILE: projects/blazor-wasm/ComponentTwentySix/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using Microsoft.AspNetCore.Components; using ComponentTwentySix; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); builder.Services.AddCascadingValue(sp => { var msg = new MessageCascade("Hello World! " + DateTime.Now); var source = new CascadingValueSource("hello", msg, isFixed: false); return source; }); var app = builder.Build(); await app.RunAsync(); public record MessageCascade(string Message); ================================================ FILE: projects/blazor-wasm/ComponentTwentySix/README.md ================================================ # Setting root level **named** dynamic cascading values This sample shows how to set root level **named dynamic** cascading values using `CascadingValueSource`. ================================================ FILE: projects/blazor-wasm/ComponentTwentySix/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/ComponentTwentySix/_Imports.razor ================================================ @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using ComponentTwentySix @using ComponentTwentySix.Shared ================================================ FILE: projects/blazor-wasm/ComponentTwentySix/wwwroot/index.html ================================================ Component Loading... ================================================ FILE: projects/blazor-wasm/ComponentTwentyThree/.vscode/settings.json ================================================ { "dotnet.defaultSolution": "ComponentTwentyThree.sln" } ================================================ FILE: projects/blazor-wasm/ComponentTwentyThree/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/ComponentTwentyThree/ComponentTwentyThree.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/ComponentTwentyThree/ComponentTwentyThree.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ComponentTwentyThree", "ComponentTwentyThree.csproj", "{26B459F9-76ED-44D4-AA0F-65D28D8E7861}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {26B459F9-76ED-44D4-AA0F-65D28D8E7861}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {26B459F9-76ED-44D4-AA0F-65D28D8E7861}.Debug|Any CPU.Build.0 = Debug|Any CPU {26B459F9-76ED-44D4-AA0F-65D28D8E7861}.Release|Any CPU.ActiveCfg = Release|Any CPU {26B459F9-76ED-44D4-AA0F-65D28D8E7861}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {6FC14629-365F-45CC-A524-50A03305E39D} EndGlobalSection EndGlobal ================================================ FILE: projects/blazor-wasm/ComponentTwentyThree/Pages/Index.razor ================================================ @page "/"

Cascading Values

================================================ FILE: projects/blazor-wasm/ComponentTwentyThree/Pages/InnerComponentOne.razor ================================================

Inner Component One

@Message.Message @code { [CascadingParameter] protected MessageCascade Message { get; set; } = default!; } ================================================ FILE: projects/blazor-wasm/ComponentTwentyThree/Pages/InnerComponentTwo.razor ================================================

Inner Component Two

@Message.Message @code { [CascadingParameter] protected MessageCascade Message { get; set; } = default!; } ================================================ FILE: projects/blazor-wasm/ComponentTwentyThree/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using ComponentTwentyThree; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); builder.Services.AddCascadingValue(sp => new MessageCascade("Hello World!")); var app = builder.Build(); await app.RunAsync(); public record MessageCascade(string Message); ================================================ FILE: projects/blazor-wasm/ComponentTwentyThree/README.md ================================================ # Setting fixed root level cascading values This sample shows how to set root level cascading values without using `` component. ================================================ FILE: projects/blazor-wasm/ComponentTwentyThree/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/ComponentTwentyThree/_Imports.razor ================================================ @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using ComponentTwentyThree @using ComponentTwentyThree.Shared ================================================ FILE: projects/blazor-wasm/ComponentTwentyThree/wwwroot/index.html ================================================ Component Loading... ================================================ FILE: projects/blazor-wasm/ComponentTwentyTwo/CustomElement/CustomElement.csproj ================================================ net10.0 enable enable preview ================================================ FILE: projects/blazor-wasm/ComponentTwentyTwo/CustomElement/Interaction.razor ================================================ @using Microsoft.JSInterop @inject IJSRuntime JS Count: @Count @code { private ElementReference _buttonRef; [Parameter] public int Count { get; set; } [Parameter] public string Content { get; set; } = string.Empty; async Task HandleClick() { await JS.InvokeVoidAsync("interaction.triggerEvent", _buttonRef); } } ================================================ FILE: projects/blazor-wasm/ComponentTwentyTwo/CustomElement/Program.cs ================================================ using CustomElement; using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.WebAssembly.Hosting; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.RegisterCustomElement("pa-interaction"); await builder.Build().RunAsync(); ================================================ FILE: projects/blazor-wasm/ComponentTwentyTwo/CustomElement/_Imports.razor ================================================ @using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.AspNetCore.Components.WebAssembly.Http @using Microsoft.JSInterop ================================================ FILE: projects/blazor-wasm/ComponentTwentyTwo/README.md ================================================ # How to raise event from HTML Custom Element This is a sample on how to raise an event a HTML Custom Element created using Blazor WebAssembly. This technique I learned from [Tomasz Pęczek](https://www.tpeczek.com/2022/09/micro-frontends-in-action-with-aspnet.html). ================================================ FILE: projects/blazor-wasm/ComponentTwentyTwo/Web/Pages/Index.cshtml ================================================ @page Hello, world!

Blazor Custom Element raising event

================================================ FILE: projects/blazor-wasm/ComponentTwentyTwo/Web/Pages/_ViewImports.cshtml ================================================  ================================================ FILE: projects/blazor-wasm/ComponentTwentyTwo/Web/Program.cs ================================================ var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); var app = builder.Build(); app.UseWebAssemblyDebugging(); app.UseBlazorFrameworkFiles(); app.UseStaticFiles(); app.MapRazorPages(); app.Run(); ================================================ FILE: projects/blazor-wasm/ComponentTwentyTwo/Web/Web.csproj ================================================ net10.0 enable enable preview ================================================ FILE: projects/blazor-wasm/ComponentTwo/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/ComponentTwo/ComponentTwo.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/ComponentTwo/Pages/Greeting.razor ================================================ 

@Message @currentCount from a component

@code { [Parameter] public string Message {get; set;} int currentCount = 1; public void Say(string message) { Message = message; this.StateHasChanged(); } void IncrementCount() { currentCount++; } } ================================================ FILE: projects/blazor-wasm/ComponentTwo/Pages/Index.razor ================================================ @page "/"
This is a component
@code { Greeting Greeter; void Welcome() { Greeter.Say("Welcome"); } void Goodbye() { Greeter.Say("Goodbye"); } } ================================================ FILE: projects/blazor-wasm/ComponentTwo/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using ComponentTwo; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); var app = builder.Build(); await app.RunAsync(); ================================================ FILE: projects/blazor-wasm/ComponentTwo/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/ComponentTwo/_Imports.razor ================================================ @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.JSInterop @using ComponentTwo @using ComponentTwo.Shared ================================================ FILE: projects/blazor-wasm/ComponentTwo/wwwroot/index.html ================================================ Component Loading... ================================================ FILE: projects/blazor-wasm/DataBinding/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/DataBinding/DataBinding.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/DataBinding/Pages/Index.razor ================================================ @page "/"

Two Way Data Binding

Output

Name : @Name
Bio : @Bio
Football Team : @FootballTeam
Is Winning : @IsWinning

Form

Name:

Bio:

Team:

Is Winning?:

@code { public string Name { get; set; } public string Bio { get; set;} public string FootballTeam { get; set; } public bool IsWinning { get; set; } } ================================================ FILE: projects/blazor-wasm/DataBinding/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using DataBinding; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); var app = builder.Build(); await app.RunAsync(); ================================================ FILE: projects/blazor-wasm/DataBinding/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/DataBinding/_Imports.razor ================================================ @using System.Net.Http @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.JSInterop @using DataBinding @using DataBinding.Shared ================================================ FILE: projects/blazor-wasm/DataBinding/wwwroot/index.html ================================================ Component Loading... ================================================ FILE: projects/blazor-wasm/DataBindingTwo/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/DataBindingTwo/Code/Profile.cs ================================================ using System.ComponentModel.DataAnnotations; using System; namespace DataBindingTwo.Code { public class Profile { [Required] [Display(Name = "First Name")] public string FirstName { get; set; } [Required] [Display(Name = "Last Name")] public string LastName { get; set; } [Required] public string Gender { get; set; } [Required] [Display(Name = "Personal Bio")] public string PersonalBio { get; set; } [Required] public bool IsMarried { get; set; } [Required] [Range(1, 120)] public int Age { get; set; } [Required] public DateTime DateOfBirth { get; set; } } } ================================================ FILE: projects/blazor-wasm/DataBindingTwo/DataBindingTwo.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/DataBindingTwo/Pages/Index.razor ================================================ @page "/" @using DataBindingTwo.Code

Form Validation

Click Submit button to trigger validation




Name @_profile.FirstName @_profile.LastName
Gender @_profile.Gender
Date of Birth @_profile.DateOfBirth
Age @_profile.Age
Is Married? @_profile.IsMarried
Personal Bio @_profile.PersonalBio
@code { private Profile _profile = new Profile(); private void HandleValidSubmit() { Console.WriteLine("OnValidSubmit"); } } ================================================ FILE: projects/blazor-wasm/DataBindingTwo/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using DataBindingTwo; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); var app = builder.Build(); await app.RunAsync(); ================================================ FILE: projects/blazor-wasm/DataBindingTwo/README.MD ================================================ # Form Validation This sample demonstrates `EditForm` and all of the currently supported form control in Blazor. It also shows how to perform form validation in Blazor. * InputText * InputTextArea * InputSelect * InputNumber * InputCheckbox * InputDate ================================================ FILE: projects/blazor-wasm/DataBindingTwo/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/DataBindingTwo/_Imports.razor ================================================ @using System.Net.Http @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Forms @using Microsoft.JSInterop @using DataBindingTwo @using DataBindingTwo.Shared ================================================ FILE: projects/blazor-wasm/DataBindingTwo/wwwroot/index.html ================================================ Form Validation Loading... ================================================ FILE: projects/blazor-wasm/HelloWorld/App.razor ================================================

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/HelloWorld/HelloWorld.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/HelloWorld/Pages/Index.razor ================================================ @page "/"

Hello, world! @currentCount

@code { int currentCount = 1; void IncrementCount() { currentCount++; } } ================================================ FILE: projects/blazor-wasm/HelloWorld/Pages/_Imports.razor ================================================ @layout MainLayout ================================================ FILE: projects/blazor-wasm/HelloWorld/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using HelloWorld; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); var app = builder.Build(); await app.RunAsync(); ================================================ FILE: projects/blazor-wasm/HelloWorld/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/HelloWorld/_Imports.razor ================================================ @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.JSInterop @using HelloWorld @using HelloWorld.Shared ================================================ FILE: projects/blazor-wasm/HelloWorld/wwwroot/index.html ================================================ hello-world Loading... ================================================ FILE: projects/blazor-wasm/QuickGridOne/App.razor ================================================ 

Page not found

Sorry, but there's nothing here!

================================================ FILE: projects/blazor-wasm/QuickGridOne/Pages/Index.razor ================================================ @page "/" @using Microsoft.AspNetCore.Components.QuickGrid

Quick Grid sample

@code { record Person(int PersonId, string Name, DateOnly BirthDate, bool IsMarried); IQueryable people = new[] { new Person(10895, "Jean Martin", new DateOnly(1985, 3, 16), true), new Person(10944, "António Langa", new DateOnly(1991, 12, 1), false), new Person(11203, "Julie Smith", new DateOnly(1958, 10, 10), true), new Person(11205, "Nur Sari", new DateOnly(1922, 4, 27), false), new Person(11898, "Jose Hernandez", new DateOnly(2011, 5, 3), true), new Person(12130, "Kenji Sato", new DateOnly(2004, 1, 9), false), }.AsQueryable(); } ================================================ FILE: projects/blazor-wasm/QuickGridOne/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using QuickGridOne; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); var app = builder.Build(); await app.RunAsync(); ================================================ FILE: projects/blazor-wasm/QuickGridOne/QuickGridOne.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/QuickGridOne/README.md ================================================ # QuickGrid Component This sample a simple usage for QuickGrid component that demonstrate the display of int, string, date, and boolean data types. You can find more information abotu QuickGrid component [here](https://aspnet.github.io/quickgridsamples/) along with more samples and explanations. ================================================ FILE: projects/blazor-wasm/QuickGridOne/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/QuickGridOne/_Imports.razor ================================================ @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Routing @using Microsoft.JSInterop @using QuickGridOne @using QuickGridOne.Shared ================================================ FILE: projects/blazor-wasm/QuickGridOne/wwwroot/index.html ================================================ Component Loading... ================================================ FILE: projects/blazor-wasm/README.md ================================================ # Blazor Wasm (33) You will find samples for Blazor, a .NET application framework for Web Assembly here. To run the sample, simply type `dotnet watch run` at the folder of each project. Make sure you pay attention which port Kestrel is running on. * [Hello World](HelloWorld) The smallest Blazor app you can create. * [Component](Component) This sample shows the simplest demonstration of a component (which is just a .cshtml file) that accept a string parameter. Notice that the folder name of the project is capitalized. That's due to this [limitation](https://github.com/aspnet/Blazor/issues/854) e.g. the name of your folder is currently the name of the namespace used in a blazor app. A component is represented by a `` in the markup. * [Component Two - Reference and Call](ComponentTwo) This sample shows how to refer to a component using `ref` property and call a public method of the component. We use the method `this.StateHasChanged();` to tell the component that its value has changed. Side note: If you are using `ref` without providing corresponding property at `functions`, the compilation will fail. * [Component Three - Child Content](ComponentThree) Implement a component that takes one or more child content e.g. `` and renders it. You have to provide a parameter called `ChildContent` of type `RenderFragment`. The parameter name must be `ChildContent` otherwise it won't work. * [Component Four - Handling Custom Event from Component](ComponentFour) This sample shows how to raise a custom event from a component and how to handle them using `EventCallback<>`. * [Component Five - Inherit from a ComponentBase class](ComponentFive) This sample shows how to inherit from a `ComponentBase` class. This allows you to share common code across components. You can also use this technique to have a 'Code Behind' experience if that's your thing. * [Component Six - When to call StateHasChanged](ComponentSix) This sample shows different behaviors by the component depending on where you call the method from. Note: __this is still tentative. It needs more exploration__. * [Component Seven - Plain C#](ComponentSeven) This sample demonstrates that you can use and organize your C# classes like in an ordinary C# app. * [Component Eight - Interactions between two components](ComponentEight) This samples demonstrates the two way (__currently__) of facilitating interaction between two components. * [Component Nine - Data binding from Child Component to Parent](ComponentNine) This samples demonstrates another way on how to pass data from Child component to Parent using two way data binding. The other way is using Custom Event (see __Component Four__). * [Component Ten - Data binding from Child Component to Parent on Collection](ComponentTen) Similar to __Component Nine__ except that this time the property is a `List` instead of an `int`. * [Component Eleven - Capture unmatched component parameters](ComponentEleven) Use `[Parameter(CaptureUnmatchedValues = true)]` to capture unmatched parameters. * [Component Twelve - Splatting arbitrary parameters to components](ComponentTwelve) Use `@attributes` and a `Dictionary` or `List>`. * [Component Thirteen - more example of attributes splatting](ComponentThirteen) Use `@attributes` attributes splatting on an input form. * [Component Fourteen - various ways to pass data to components](ComponentFourteen) This sample demonstrates the various ways to pass parameters to a component and how it affects on how the data is perceived by the component. * [Component Fifteen](ComponentFifteen) This sample demonstrates how to use partial class in a razor component. This allows you to separate your C# code from the markup. * [Component Sixteen](ComponentSixteen) This sample demonstrates cascading value by type feature. This is a parameter that get passed through a component without having to explicitly assign them. All parameters that share the type will share the value. * [Component Seventeen](ComponentSeventeen) This sample demonstrates cascading value by name feature. In contrast to cascading value by type, only parameters that match the type and name will receive the value. * [Component Eighteen](ComponentEighteen) This sample demonstrates @bind:after modifier that allows to execute async code after a binding event has been completed (value has changed). * [Component Nineteen](ComponentNineteen) This sample demonstrates @bind:get @bind:set modifier that simplify two-way data binding. * [Component Twenty](ComponentTwenty) This sample shows how to implement a HTML custom element using Blazor Web Assembly. * [Component Twenty One](ComponentTwentyOne) This sample shows how set and get a property of a HTML custom element implemented using Blazor Web Assembly. * [Component Twenty Two](ComponentTwentyTwo) This sample shows how to raise an event from HTML custom element implemented using Blazor Web Assembly. * [ComponentTwentyThree](ComponentTwentyThree) This sample shows how to set root level cascading values without using `` component. * [ComponentTwentyFour](ComponentTwentyFour) This sample shows how to set root level **named** cascading values without using `` component. * [ComponentTwentyFive](ComponentTwentyFive) This sample shows how to set root level **dynamic** cascading values using `CascadingValueSource`. * [ComponentTwentySix](ComponentTwentySix) This sample shows how to set root level **named dynamic** cascading values using `CascadingValueSource`. * [ComponentTwentySeven](ComponentTwentySeven) This sample shows how to use `[Inject(Key)]` in consuming keyed services. * [Data Binding - Form](DataBinding) Show an example of two day databinding to form element `input=text`, `textarea`. `input=checkbox`, and `select`. * [Date Binding - EditForm](DataBindingTwo) Show an example of `EditForm` and its 6 input controls, including form validation. * [RenderFragment](RenderFragment) Show an example of `RenderFragment` or show an example of Templated component. * [RadioButton](RadioButton) Show an example of `RadioButton` handling. * [QuickGrid One](QuickGridOne) This sample demonstrates a simple usage of QuickGrid component displaying int, string, date, and boolean data types. dotnet8 ================================================ FILE: projects/blazor-wasm/RadioButton/App.razor ================================================ 

Sorry, there's nothing at this address.

================================================ FILE: projects/blazor-wasm/RadioButton/Pages/Index.razor ================================================ @page "/"

RadioButton Example

What web technology are you using?
@foreach (var item in new string[] { "AspNetCore", "AspNet", "SomeJsThingWhatever" }) {
}
What is your favorite fruit?
@foreach (var item in new string[] { "Mango", "Banana", "Strawberry" }) {
}
@code { string TechnologyChoice = "aspnetcore"; void TechnologyRadioSelection(ChangeEventArgs args) { TechnologyChoice = args.Value.ToString(); } string FruitChoice = "Mango"; void FruitRadioSelection(ChangeEventArgs args) { FruitChoice = args.Value.ToString(); } } ================================================ FILE: projects/blazor-wasm/RadioButton/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using RadioButton; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("#app"); var app = builder.Build(); await app.RunAsync(); ================================================ FILE: projects/blazor-wasm/RadioButton/README.md ================================================ # RadioButton `RadioButton` demo shows how to handle Radio button selection in Blazor. ``` csharp @foreach (var item in new string[] { "AspNetCore", "AspNet", "SomeJsThingWhatever" }) {
}
@code { string TechnologyChoice = "aspnetcore"; void TechnologyRadioSelection(ChangeEventArgs args) { TechnologyChoice = args.Value.ToString(); } } ``` Contribution by [Lohit](https://github.com/lohithgn). ================================================ FILE: projects/blazor-wasm/RadioButton/RadioButton.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/RadioButton/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/RadioButton/_Imports.razor ================================================ @using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.AspNetCore.Components.WebAssembly.Http @using Microsoft.JSInterop @using RadioButton @using RadioButton.Shared ================================================ FILE: projects/blazor-wasm/RadioButton/wwwroot/index.html ================================================ RadioButton
Loading...
================================================ FILE: projects/blazor-wasm/RenderFragment/App.razor ================================================ 

Page not found

Sorry, there's nothing at this address.

================================================ FILE: projects/blazor-wasm/RenderFragment/Pages/Index.razor ================================================ @page "/"

RenderFragment Example

Pets

ID Name @pet.PetId @pet.Name

People

First Last Handle @person.FirstName @person.LastName @person.TwitterHandle @code { private List pets = new() { new Pet { PetId = 2, Name = "Mr. Bigglesworth" }, new Pet { PetId = 4, Name = "Salem Saberhagen" }, new Pet { PetId = 7, Name = "K-9" } }; private List people = new() { new Person { FirstName = "Mark", LastName = "Otto", TwitterHandle = "@mdo" }, new Person { FirstName = "Jacob", LastName = "Thornton", TwitterHandle = "@jac" }, new Person { FirstName = "Larry the bird", TwitterHandle = "@twitter" }, }; private class Pet { public int PetId { get; set; } public string Name { get; set; } } private class Person { public string FirstName { get; set; } public string LastName { get; set; } public string TwitterHandle { get; set; } } } ================================================ FILE: projects/blazor-wasm/RenderFragment/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using RenderFragment; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("#app"); var app = builder.Build(); await app.RunAsync(); ================================================ FILE: projects/blazor-wasm/RenderFragment/README.md ================================================ # RenderFragment `RenderFragment` allows a component to render output generated by outside content, whether they are static content or output generated by other components. ``` csharp @TableHeader @foreach (var item in Items) { @RowTemplate(item) }
@code { [Parameter] public RenderFragment TableHeader { get; set; } [Parameter] public RenderFragment RowTemplate { get; set; } [Parameter] public IReadOnlyList Items { get; set; } } ``` Contribution by [Lohit](https://github.com/lohithgn). ================================================ FILE: projects/blazor-wasm/RenderFragment/RenderFragment.csproj ================================================ net10.0 true preview ================================================ FILE: projects/blazor-wasm/RenderFragment/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: projects/blazor-wasm/RenderFragment/Shared/TableTemplate.razor ================================================ @typeparam TItem @TableHeader @foreach (var item in Items) { @RowTemplate(item) }
@code { [Parameter] public RenderFragment TableHeader { get; set; } [Parameter] public RenderFragment RowTemplate { get; set; } [Parameter] public IReadOnlyList Items { get; set; } } ================================================ FILE: projects/blazor-wasm/RenderFragment/_Imports.razor ================================================ @using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.AspNetCore.Components.WebAssembly.Http @using Microsoft.JSInterop @using RenderFragment @using RenderFragment.Shared ================================================ FILE: projects/blazor-wasm/RenderFragment/wwwroot/index.html ================================================ RenderFragment
Loading...
================================================ FILE: projects/blazor-wasm/build.bat ================================================ dotnet build Component dotnet build ComponentEight dotnet build ComponentEighteen dotnet build ComponentEleven dotnet build ComponentFifteen dotnet build ComponentFive dotnet build ComponentFour dotnet build ComponentFourteen dotnet build ComponentNine dotnet build ComponentNineteen dotnet build ComponentSeven dotnet build ComponentSeventeen dotnet build ComponentSix dotnet build ComponentSixteen dotnet build ComponentTen dotnet build ComponentThirteen dotnet build ComponentThree dotnet build ComponentTwelve dotnet build ComponentTwenty dotnet build ComponentTwentyFive dotnet build ComponentTwentyFour dotnet build ComponentTwentyOne dotnet build ComponentTwentySeven dotnet build ComponentTwentySix dotnet build ComponentTwentyThree dotnet build ComponentTwentyTwo dotnet build ComponentTwo dotnet build DataBinding dotnet build DataBindingTwo dotnet build HelloWorld dotnet build QuickGridOne dotnet build RadioButton dotnet build RenderFragment ================================================ FILE: projects/blazor-wasm/build.sh ================================================ #!/bin/bash dotnet build Component dotnet build ComponentEight dotnet build ComponentEighteen dotnet build ComponentEleven dotnet build ComponentFifteen dotnet build ComponentFive dotnet build ComponentFour dotnet build ComponentFourteen dotnet build ComponentNine dotnet build ComponentNineteen dotnet build ComponentSeven dotnet build ComponentSeventeen dotnet build ComponentSix dotnet build ComponentSixteen dotnet build ComponentTen dotnet build ComponentThirteen dotnet build ComponentThree dotnet build ComponentTwelve dotnet build ComponentTwenty/Web dotnet build ComponentTwentyFive dotnet build ComponentTwentyFour dotnet build ComponentTwentyOne/Web dotnet build ComponentTwentySeven dotnet build ComponentTwentySix dotnet build ComponentTwentyThree dotnet build ComponentTwentyTwo/Web dotnet build ComponentTwo dotnet build DataBinding dotnet build DataBindingTwo dotnet build HelloWorld dotnet build QuickGridOne dotnet build RadioButton dotnet build RenderFragment ================================================ FILE: projects/blazor-wasm/global.json ================================================ { "sdk": { "version": "8.0.100", "rollForward": "major" } } ================================================ FILE: projects/build.bat ================================================ REM dotnet build 5-0\hello-world REM Removed obsolete/invalid entries: anonymous-id, basic\*, bedrock\echo, and non-existent blazor folder (was causing recursive calls). REM ------------------------------------------------------------------------------- REM Dynamic section: invoke build.bat in every immediate subfolder (if present) REM This reduces manual maintenance; failures are tracked via BUILD_ERRORS flag. REM ------------------------------------------------------------------------------- SETLOCAL ENABLEDELAYEDEXPANSION SET BUILD_ERRORS=0 FOR /D %%D IN (*) DO ( IF EXIST "%%D\build.bat" ( ECHO ========= Building folder: %%D ========= PUSHD "%%D" CALL build.bat IF ERRORLEVEL 1 ( ECHO -------- FAILED: %%D -------- SET BUILD_ERRORS=1 ) POPD ) ) IF %BUILD_ERRORS%==1 ( ECHO One or more subfolder build scripts failed. ) ELSE ( ECHO All subfolder build scripts completed successfully. ) ENDLOCAL REM ------------------------------------------------------------------------------- dotnet build application-environment dotnet build caching\caching-1 dotnet build caching\caching-2 dotnet build caching\caching-3 dotnet build caching\caching-4 dotnet build caching\redis-cache dotnet build configurations\configuration-1 dotnet build configurations\configuration-environment-variables dotnet build configurations\configuration-ini dotnet build configurations\configuration-ini-options dotnet build configurations\configuration-options dotnet build configurations\configuration-xml dotnet build configurations\configuration-xml-options dotnet build connection-info dotnet build dependency-injection\dependency-injection-1 dotnet build dependency-injection\dependency-injection-3 dotnet build device-detection dotnet build diagnostics\diagnostics-1 dotnet build diagnostics\diagnostics-2 dotnet build diagnostics\diagnostics-3 dotnet build diagnostics\diagnostics-4 dotnet build diagnostics\diagnostics-5 dotnet build diagnostics\diagnostics-6 dotnet build endpoint-routing\endpoint-routing dotnet build endpoint-routing\endpoint-routing-2 dotnet build endpoint-routing\endpoint-routing-3 dotnet build endpoint-routing\endpoint-routing-4 dotnet build endpoint-routing\endpoint-routing-6 dotnet build endpoint-routing\new-routing dotnet build endpoint-routing\new-routing-10 dotnet build endpoint-routing\new-routing-11 dotnet build endpoint-routing\new-routing-12 dotnet build endpoint-routing\new-routing-13 dotnet build endpoint-routing\new-routing-14 dotnet build endpoint-routing\new-routing-15 dotnet build endpoint-routing\new-routing-16 dotnet build endpoint-routing\new-routing-17 dotnet build endpoint-routing\new-routing-18 dotnet build endpoint-routing\new-routing-19 dotnet build endpoint-routing\new-routing-2 dotnet build endpoint-routing\new-routing-20 dotnet build endpoint-routing\new-routing-21 dotnet build endpoint-routing\new-routing-22 dotnet build endpoint-routing\new-routing-23 dotnet build endpoint-routing\new-routing-24 dotnet build endpoint-routing\new-routing-25 dotnet build endpoint-routing\new-routing-26 dotnet build endpoint-routing\new-routing-27 dotnet build endpoint-routing\new-routing-28 dotnet build endpoint-routing\new-routing-29 dotnet build endpoint-routing\new-routing-3 dotnet build endpoint-routing\new-routing-30 dotnet build endpoint-routing\new-routing-4 REM Removed due to API changes REM dotnet build endpoint-routing\new-routing-5 dotnet build endpoint-routing\new-routing-6 dotnet build endpoint-routing\new-routing-7 dotnet build endpoint-routing\new-routing-8 dotnet build endpoint-routing\new-routing-9 dotnet build endpoint-routing\parameter-transformer dotnet build features\features-connection dotnet build features\features-http-body-response dotnet build features\features-max-request-body-size dotnet build features\features-request-culture dotnet build features\features-server-addresses dotnet build features\features-server-addresses-2 dotnet build features\features-server-custom dotnet build features\features-server-custom-override dotnet build features\features-server-request dotnet build features\features-session dotnet build features\features-session-redis-2 dotnet build file-provider\file-provider-custom dotnet build file-provider\file-provider-physical dotnet build file-provider\serve-static-files-1 dotnet build file-provider\serve-static-files-2 dotnet build file-provider\serve-static-files-3 dotnet build file-provider\serve-static-files-4 dotnet build file-provider\serve-static-files-5 dotnet build file-provider\serve-static-files-6 dotnet build generic-host\generic-host-1 dotnet build generic-host\generic-host-2 dotnet build generic-host\generic-host-3 dotnet build generic-host\generic-host-4 dotnet build generic-host\generic-host-5 dotnet build generic-host\generic-host-configure-app dotnet build generic-host\generic-host-configure-host dotnet build generic-host\generic-host-configure-logging dotnet build generic-host\generic-host-environment dotnet build generic-host\generic-host-ihostapplicationlifetime dotnet build grpc\grpc\client dotnet build grpc\grpc\server dotnet build grpc\grpc-10\client dotnet build grpc\grpc-10\server dotnet build grpc\grpc-11\client dotnet build grpc\grpc-11\server dotnet build grpc\grpc-2\client dotnet build grpc\grpc-2\server dotnet build grpc\grpc-3\client dotnet build grpc\grpc-3\server dotnet build grpc\grpc-4\client dotnet build grpc\grpc-4\server dotnet build grpc\grpc-5\client dotnet build grpc\grpc-5\server dotnet build grpc\grpc-6\client dotnet build grpc\grpc-6\server dotnet build grpc\grpc-7\client dotnet build grpc\grpc-7\server dotnet build grpc\grpc-8\client dotnet build grpc\grpc-8\server dotnet build grpc\grpc-9\client dotnet build grpc\grpc-9\server dotnet build health-check\health-check-1 dotnet build health-check\health-check-2 dotnet build health-check\health-check-3 dotnet build health-check\health-check-4 dotnet build health-check\health-check-5 dotnet build health-check\health-check-6 dotnet build httpclientfactory\httpclientfactory-1 dotnet build httpclientfactory\httpclientfactory-2 dotnet build httpclientfactory\httpclientfactory-3 dotnet build httpclientfactory\httpclientfactory-4 dotnet build i-application-lifetime dotnet build ihosted-service\ihosted-service-1 dotnet build image-sharp dotnet build json\json dotnet build json\json-2 dotnet build json\json-3 dotnet build json\json-4 dotnet build json\json-5 dotnet build json\json-6 dotnet build json\json-7 dotnet build json\json-8 dotnet build json\json-9 dotnet build json\json-10 dotnet build json\json-11 dotnet build localization\localization-1 dotnet build localization\localization-2 dotnet build localization\localization-3 dotnet build localization\localization-4 dotnet build localization\localization-5 dotnet build localization\localization-6 dotnet build logging\logging-1 dotnet build logging\logging-2 dotnet build mailkit\mailkit-1 dotnet build mailkit\mailkit-2 dotnet build markdown-server dotnet build markdown-server-middleware dotnet build middleware\middleware-0 dotnet build middleware\middleware-1 dotnet build middleware\middleware-10 dotnet build middleware\middleware-11 dotnet build middleware\middleware-12 dotnet build middleware\middleware-13 dotnet build middleware\middleware-2 dotnet build middleware\middleware-3 dotnet build middleware\middleware-4 dotnet build middleware\middleware-5 dotnet build middleware\middleware-6 dotnet build middleware\middleware-7 dotnet build middleware\middleware-8 dotnet build middleware\middleware-9 dotnet build mvc\api-problem-details dotnet build mvc\api-problem-details-2 dotnet build mvc\api-versioning dotnet build mvc\hello-world dotnet build mvc\jwt dotnet build mvc\model-binding-from-query dotnet build mvc\model-binding-from-route dotnet build mvc\mvc-output-xml dotnet build mvc\nswag dotnet build mvc\nswag-2 dotnet build mvc\output-formatter-syndication dotnet build mvc\result-filestream dotnet build mvc\result-physicalfile dotnet build mvc\utf8json-formatter dotnet build orchard-core\multi-tenant\Host dotnet build orchard-core\routing\ForumModule dotnet build orchard-core\routing\Host dotnet build orchard-core\routing\TicketModule dotnet build orchard-core\routing-2\ForumModule dotnet build orchard-core\routing-2\Host dotnet build orchard-core\routing-2\TicketModule dotnet build orchard-core\static-files\ForumModule dotnet build orchard-core\static-files\Host dotnet build password-hasher dotnet build security\authentication-with-identity\src dotnet build signalr\signalr-1\Client dotnet build signalr\signalr-1\Server dotnet build sse dotnet build version dotnet build sfa\wiki ================================================ FILE: projects/build.sh ================================================ #!/bin/bash # dotnet build 5-0/hello-world # Removed obsolete/invalid entries: anonymous-id, basic\*, bedrock\echo, and non-existent blazor folder (was causing recursive calls). # ------------------------------------------------------------------------------- # Dynamic section: invoke build.sh in every immediate subfolder (if present) # This reduces manual maintenance; failures are tracked via BUILD_ERRORS flag. # ------------------------------------------------------------------------------- BUILD_ERRORS=0 for d in */; do if [ -f "${d}build.sh" ]; then echo "========= Building folder: ${d} =========" pushd "$d" > /dev/null ./build.sh if [ $? -ne 0 ]; then echo "-------- FAILED: ${d} --------" BUILD_ERRORS=1 fi popd > /dev/null fi done if [ $BUILD_ERRORS -eq 1 ]; then echo "One or more subfolder build scripts failed." else echo "All subfolder build scripts completed successfully." fi # ------------------------------------------------------------------------------- dotnet build application-environment dotnet build caching/caching-1 dotnet build caching/caching-2 dotnet build caching/caching-3 dotnet build caching/caching-4 dotnet build caching/redis-cache dotnet build configurations/configuration-1 dotnet build configurations/configuration-environment-variables dotnet build configurations/configuration-ini dotnet build configurations/configuration-ini-options dotnet build configurations/configuration-options dotnet build configurations/configuration-xml dotnet build configurations/configuration-xml-options dotnet build connection-info dotnet build dependency-injection/dependency-injection-1 dotnet build dependency-injection/dependency-injection-3 dotnet build device-detection dotnet build diagnostics/diagnostics-1 dotnet build diagnostics/diagnostics-2 dotnet build diagnostics/diagnostics-3 dotnet build diagnostics/diagnostics-4 dotnet build diagnostics/diagnostics-5 dotnet build diagnostics/diagnostics-6 dotnet build endpoint-routing/endpoint-routing dotnet build endpoint-routing/endpoint-routing-2 dotnet build endpoint-routing/endpoint-routing-3 dotnet build endpoint-routing/endpoint-routing-4 dotnet build endpoint-routing/endpoint-routing-6 dotnet build endpoint-routing/new-routing dotnet build endpoint-routing/new-routing-10 dotnet build endpoint-routing/new-routing-11 dotnet build endpoint-routing/new-routing-12 dotnet build endpoint-routing/new-routing-13 dotnet build endpoint-routing/new-routing-14 dotnet build endpoint-routing/new-routing-15 dotnet build endpoint-routing/new-routing-16 dotnet build endpoint-routing/new-routing-17 dotnet build endpoint-routing/new-routing-18 dotnet build endpoint-routing/new-routing-19 dotnet build endpoint-routing/new-routing-2 dotnet build endpoint-routing/new-routing-20 dotnet build endpoint-routing/new-routing-21 dotnet build endpoint-routing/new-routing-22 dotnet build endpoint-routing/new-routing-23 dotnet build endpoint-routing/new-routing-24 dotnet build endpoint-routing/new-routing-25 dotnet build endpoint-routing/new-routing-26 dotnet build endpoint-routing/new-routing-27 dotnet build endpoint-routing/new-routing-28 dotnet build endpoint-routing/new-routing-29 dotnet build endpoint-routing/new-routing-3 dotnet build endpoint-routing/new-routing-30 dotnet build endpoint-routing/new-routing-4 # Removed due to API changes # dotnet build endpoint-routing/new-routing-5 dotnet build endpoint-routing/new-routing-6 dotnet build endpoint-routing/new-routing-7 dotnet build endpoint-routing/new-routing-8 dotnet build endpoint-routing/new-routing-9 dotnet build endpoint-routing/parameter-transformer dotnet build features/features-connection dotnet build features/features-http-body-response dotnet build features/features-max-request-body-size dotnet build features/features-request-culture dotnet build features/features-server-addresses dotnet build features/features-server-addresses-2 dotnet build features/features-server-custom dotnet build features/features-server-custom-override dotnet build features/features-server-request dotnet build features/features-session dotnet build features/features-session-redis-2 dotnet build file-provider/file-provider-custom dotnet build file-provider/file-provider-physical dotnet build file-provider/serve-static-files-1 dotnet build file-provider/serve-static-files-2 dotnet build file-provider/serve-static-files-3 dotnet build file-provider/serve-static-files-4 dotnet build file-provider/serve-static-files-5 dotnet build file-provider/serve-static-files-6 dotnet build generic-host/generic-host-1 dotnet build generic-host/generic-host-2 dotnet build generic-host/generic-host-3 dotnet build generic-host/generic-host-4 dotnet build generic-host/generic-host-5 dotnet build generic-host/generic-host-configure-app dotnet build generic-host/generic-host-configure-host dotnet build generic-host/generic-host-configure-logging dotnet build generic-host/generic-host-environment dotnet build generic-host/generic-host-ihostapplicationlifetime dotnet build grpc/grpc/client dotnet build grpc/grpc/server dotnet build grpc/grpc-10/client dotnet build grpc/grpc-10/server dotnet build grpc/grpc-11/client dotnet build grpc/grpc-11/server dotnet build grpc/grpc-2/client dotnet build grpc/grpc-2/server dotnet build grpc/grpc-3/client dotnet build grpc/grpc-3/server dotnet build grpc/grpc-4/client dotnet build grpc/grpc-4/server dotnet build grpc/grpc-5/client dotnet build grpc/grpc-5/server dotnet build grpc/grpc-6/client dotnet build grpc/grpc-6/server dotnet build grpc/grpc-7/client dotnet build grpc/grpc-7/server dotnet build grpc/grpc-8/client dotnet build grpc/grpc-8/server dotnet build grpc/grpc-9/client dotnet build grpc/grpc-9/server dotnet build health-check/health-check-1 dotnet build health-check/health-check-2 dotnet build health-check/health-check-3 dotnet build health-check/health-check-4 dotnet build health-check/health-check-5 dotnet build health-check/health-check-6 dotnet build httpclientfactory/httpclientfactory-1 dotnet build httpclientfactory/httpclientfactory-2 dotnet build httpclientfactory/httpclientfactory-3 dotnet build httpclientfactory/httpclientfactory-4 dotnet build i-application-lifetime dotnet build ihosted-service/ihosted-service-1 dotnet build image-sharp dotnet build json/json dotnet build json/json-2 dotnet build json/json-3 dotnet build json/json-4 dotnet build json/json-5 dotnet build json/json-6 dotnet build json/json-7 dotnet build json/json-8 dotnet build json/json-9 dotnet build json/json-10 dotnet build json/json-11 dotnet build localization/localization-1 dotnet build localization/localization-2 dotnet build localization/localization-3 dotnet build localization/localization-4 dotnet build localization/localization-5 dotnet build localization/localization-6 dotnet build logging/logging-1 dotnet build logging/logging-2 dotnet build mailkit/mailkit-1 dotnet build mailkit/mailkit-2 dotnet build markdown-server dotnet build markdown-server-middleware dotnet build middleware/middleware-0 dotnet build middleware/middleware-1 dotnet build middleware/middleware-10 dotnet build middleware/middleware-11 dotnet build middleware/middleware-12 dotnet build middleware/middleware-13 dotnet build middleware/middleware-2 dotnet build middleware/middleware-3 dotnet build middleware/middleware-4 dotnet build middleware/middleware-5 dotnet build middleware/middleware-6 dotnet build middleware/middleware-7 dotnet build middleware/middleware-8 dotnet build middleware/middleware-9 dotnet build mvc/api-problem-details dotnet build mvc/api-problem-details-2 dotnet build mvc/api-versioning dotnet build mvc/hello-world dotnet build mvc/jwt dotnet build mvc/model-binding-from-query dotnet build mvc/model-binding-from-route dotnet build mvc/mvc-output-xml dotnet build mvc/nswag dotnet build mvc/nswag-2 dotnet build mvc/output-formatter-syndication dotnet build mvc/result-filestream dotnet build mvc/result-physicalfile dotnet build mvc/utf8json-formatter dotnet build orchard-core/multi-tenant/Host dotnet build orchard-core/routing/ForumModule dotnet build orchard-core/routing/Host dotnet build orchard-core/routing/TicketModule dotnet build orchard-core/routing-2/ForumModule dotnet build orchard-core/routing-2/Host dotnet build orchard-core/routing-2/TicketModule dotnet build orchard-core/static-files/ForumModule dotnet build orchard-core/static-files/Host dotnet build password-hasher dotnet build security/authentication-with-identity/src dotnet build signalr/signalr-1/Client dotnet build signalr/signalr-1/Server dotnet build sse dotnet build version dotnet build sfa/wiki ================================================ FILE: projects/caching/README.md ================================================ # In Memory Caching (a.k.a local cache) (5) These samples depends on `Microsoft.Extensions.Caching.Memory` library. * [Caching - Absolute/Sliding expiration](/projects/caching/caching-1) This is the most basic caching you can use either by setting absolute or sliding expiration for your cache. Absolute expiration will remove your cache at a certain point in the future. Sliding expiration will remove your cache after period of inactivity. * [Caching 2 - File dependency](/projects/caching/caching-2) Add file dependency to your caching so when the file changes, your cache expires. Make sure to set `cache-file.txt` to copy over to bin. * [Caching 3 - Cache removal event](/projects/caching/caching-3) Register callback when a cached value is removed. * [Caching 4 - CancellationChangeToken dependency](/projects/caching/caching-4) Bind several cache entries to a single dependency that you can reset manually. * [Redis Caching Package](/projects/caching/redis-cache) This sample uses the `Microsoft.Extensions.Caching.StackExchangeRedis` to store caching value in Redis. dotnet8 ================================================ FILE: projects/caching/build.bat ================================================ dotnet build caching-1 dotnet build caching-2 dotnet build caching-3 dotnet build caching-4 dotnet build redis-cache ================================================ FILE: projects/caching/build.sh ================================================ #!/bin/bash dotnet build caching-1 dotnet build caching-2 dotnet build caching-3 dotnet build caching-4 dotnet build redis-cache ================================================ FILE: projects/caching/caching-1/Program.cs ================================================ using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.FileProviders; string CACHE_KEY = "MyCache"; var builder = WebApplication.CreateBuilder(); builder.Services.AddMemoryCache(); var app = builder.Build(); var fileProvider = new PhysicalFileProvider(app.Environment.ContentRootPath); app.Run(async context => { var cache = context.RequestServices.GetService(); var greeting = cache.Get(CACHE_KEY) as string; //There is no existing cache, add one if (string.IsNullOrWhiteSpace(greeting)) { var options = new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(100)); //You can also use .SetSlidingExpiration var message = "Hello " + DateTimeOffset.UtcNow.ToString(); cache.Set(CACHE_KEY, message, options); greeting = message; } await context.Response.WriteAsync($"After the first load, this greeting '{greeting}' is cached. \nCheck the time stamp of the message compared to this current one {DateTimeOffset.UtcNow}.\n"); }); app.Run(); ================================================ FILE: projects/caching/caching-1/caching.csproj ================================================ net10.0 true preview ================================================ FILE: projects/caching/caching-2/Program.cs ================================================ using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.FileProviders; string CACHE_KEY = "MyCache"; string FILE_TO_WATCH = "cache-file.txt"; var builder = WebApplication.CreateBuilder(); builder.Services.AddMemoryCache(); var app = builder.Build(); var fileProvider = new PhysicalFileProvider(app.Environment.ContentRootPath); app.Run(async context => { var cache = context.RequestServices.GetService(); var greeting = cache.Get(CACHE_KEY) as string; //There is no existing cache, add one if (string.IsNullOrWhiteSpace(greeting)) { var options = new MemoryCacheEntryOptions() .AddExpirationToken(fileProvider.Watch(FILE_TO_WATCH)); var message = "Hello " + DateTimeOffset.UtcNow.ToString(); cache.Set(CACHE_KEY, message, options); greeting = message; } await context.Response.WriteAsync($"After the first load, this greeting '{greeting}' is cached. \nCheck the time stamp of the message compared to this current one {DateTimeOffset.UtcNow}.\n"); await context.Response.WriteAsync($"To expire the cache, modify the file dependency located at {Path.Combine(app.Environment.ContentRootPath, FILE_TO_WATCH)} and refresh your browser."); }); app.Run(); ================================================ FILE: projects/caching/caching-2/cache-file.txt ================================================ hello there ================================================ FILE: projects/caching/caching-2/caching-2.csproj ================================================ net10.0 true preview PreserveNewest ================================================ FILE: projects/caching/caching-3/Program.cs ================================================ using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.FileProviders; string CACHE_KEY = "MyCache"; var builder = WebApplication.CreateBuilder(); builder.Services.AddMemoryCache(); builder.Logging.ClearProviders(); builder.Logging.AddConsole(); builder.Logging.AddFilter((provider, category, logLevel) => !category.Contains("Microsoft.AspNetCore")); var app = builder.Build(); var fileProvider = new PhysicalFileProvider(app.Environment.ContentRootPath); app.Run(async context => { var log = context.RequestServices.GetService().CreateLogger("app"); var cache = context.RequestServices.GetService(); var greeting = cache.Get(CACHE_KEY) as string; //There is no existing cache, add one if (string.IsNullOrWhiteSpace(greeting)) { var options = new MemoryCacheEntryOptions() .SetAbsoluteExpiration(TimeSpan.FromSeconds(5)) .RegisterPostEvictionCallback((object key, object value, EvictionReason reason, object state) => { if (state == null) log.LogInformation("State is null"); log.LogInformation($"Key '{key}' with value '{value}' was removed because of '{reason}'"); }); //You can also use .SetSlidingExpiration var message = "Hello " + DateTimeOffset.UtcNow.ToString(); cache.Set(CACHE_KEY, message, options); greeting = message; } context.Response.Headers.Append("Content-Type", "text/html"); await context.Response.WriteAsync(@"

The cache is set to expire in 5 seconds. Wait until 5 seconds then refresh this page. Check your console log to see the post eviction message event.

If you don't refresh this page, the eviction message won't be posted at the console. Here's an explanation for this behavior.

"); }); app.Run(); ================================================ FILE: projects/caching/caching-3/caching-3.csproj ================================================ net10.0 true preview ================================================ FILE: projects/caching/caching-4/Program.cs ================================================ using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Primitives; string CACHE_KEY = "MyCache"; string CACHE_KEY_2 = "MyCache2"; var builder = WebApplication.CreateBuilder(); builder.Services.AddMemoryCache(); builder.Logging.ClearProviders(); builder.Logging.AddConsole(); // Filter out the noise builder.Logging.AddFilter((provider, category, logLevel) => !category.Contains("Microsoft.AspNetCore")); var app = builder.Build(); var fileProvider = new PhysicalFileProvider(app.Environment.ContentRootPath); var cts = new CancellationTokenSource(); int count = 0; int resetCount = 8; app.Run(async context => { if (context.Request.Path == "/favicon.ico") return;//skip favicon request var log = context.RequestServices.GetService().CreateLogger("app"); var cache = context.RequestServices.GetService(); var greeting = cache.Get(CACHE_KEY) as string; //There is no existing cache, add one if (string.IsNullOrWhiteSpace(greeting)) { var options = new MemoryCacheEntryOptions() .AddExpirationToken(new CancellationChangeToken(cts.Token)) .RegisterPostEvictionCallback((object key, object value, EvictionReason reason, object state) => { log.LogInformation($"Key '{key}' with value '{value}' was removed because of '{reason}'"); }); var message = $"Hello {DateTime.Now.Ticks}"; cache.Set(CACHE_KEY, message, options); greeting = message; } var greeting2 = cache.Get(CACHE_KEY_2) as string; if (string.IsNullOrWhiteSpace(greeting2)) { var options = new MemoryCacheEntryOptions() .AddExpirationToken(new CancellationChangeToken(cts.Token)) .RegisterPostEvictionCallback((object key, object value, EvictionReason reason, object state) => { log.LogInformation($"Key '{key}' with value '{value}' was removed because of '{reason}'"); }); var message = $"Hello 2 {DateTime.UtcNow.Ticks}"; cache.Set(CACHE_KEY_2, message, options); greeting2 = message; } await context.Response.WriteAsync($"Greeting {greeting}\n"); await context.Response.WriteAsync($"Greeting {greeting2}\n"); count++; if (count >= resetCount) { await context.Response.WriteAsync("Cache expired\n"); cts.Cancel(); count = 0; cts = new CancellationTokenSource(); } await context.Response.WriteAsync($"Above greetings share the same cancellation token. They will both expire at the same time. The caches will expire if you refresh this page {resetCount} times. So far you have loaded {count} times. \n"); }); app.Run(); ================================================ FILE: projects/caching/caching-4/caching-4.csproj ================================================ net10.0 true preview ================================================ FILE: projects/caching/redis-cache/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#bc3215", "activityBar.background": "#bc3215", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#06390f", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#bc3215", "statusBar.background": "#8e2610", "statusBar.debuggingBackground": "#10788e", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#bc3215", "statusBarItem.remoteBackground": "#8e2610", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#8e2610", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#8e261099", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#8e2610" } ================================================ FILE: projects/caching/redis-cache/Program.cs ================================================ using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Configuration; using Microsoft.AspNetCore.Http.Features; using System; using System.Text.Json; using Microsoft.Extensions.Hosting; var builder = WebApplication.CreateBuilder(); builder.Services.AddStackExchangeRedisCache(options => { options.Configuration = builder.Configuration["redisConnectionString"]; }); builder.Services.AddSession(); var app = builder.Build(); app.UseSession(); app.Use(async (context, next)=> { var person = new Person { FirstName = "Anne", LastName = "M" }; var session = context.Features.Get(); try { session.Session.SetString("Message", "Buon giorno cuore"); session.Session.SetInt32("Year", DateTime.Now.Year); session.Session.SetString("Amore", JsonSerializer.Serialize(person)); } catch(Exception ex) { await context.Response.WriteAsync($"{ex.Message}"); } await next(context); }); app.Run(async context => { var session = context.Features.Get(); try { string msg = session.Session.GetString("Message"); int? year = session.Session.GetInt32("Year"); var amore = JsonSerializer.Deserialize(session.Session.GetString("Amore")); await context.Response.WriteAsync($"{amore.FirstName}, {msg} {year}"); } catch(Exception ex) { await context.Response.WriteAsync($"{ex.Message}"); } }); app.Run(); public class Person { public string FirstName { get; set; } public string LastName {get; set;} } ================================================ FILE: projects/caching/redis-cache/appSettings.json ================================================ { "redisConnectionString": "localhost:6379", } ================================================ FILE: projects/caching/redis-cache/redis-cache.csproj ================================================ net10.0 true preview ================================================ FILE: projects/caching/redis-cache/redis-cache.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "redis-cache", "redis-cache.csproj", "{BC824EB5-3C00-4F92-AA77-92779383D76C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {BC824EB5-3C00-4F92-AA77-92779383D76C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BC824EB5-3C00-4F92-AA77-92779383D76C}.Debug|Any CPU.Build.0 = Debug|Any CPU {BC824EB5-3C00-4F92-AA77-92779383D76C}.Release|Any CPU.ActiveCfg = Release|Any CPU {BC824EB5-3C00-4F92-AA77-92779383D76C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {9DE75704-7216-4378-B621-CFB1AAA9EC11} EndGlobalSection EndGlobal ================================================ FILE: projects/clean.bat ================================================ REM dotnet clean 5-0\hello-world dotnet clean anonymous-id dotnet clean application-environment dotnet clean basic\hello-world dotnet clean basic\hello-world-2 dotnet clean basic\i-host-environment dotnet clean basic\i-webhost-environment dotnet clean basic\iconfiguration dotnet clean bedrock\echo\client dotnet clean bedrock\echo\server dotnet clean blazor\Component dotnet clean blazor\ComponentEight dotnet clean blazor\ComponentEleven dotnet clean blazor\ComponentFifteen dotnet clean blazor\ComponentFive dotnet clean blazor\ComponentFour dotnet clean blazor\ComponentFourteen dotnet clean blazor\ComponentNine dotnet clean blazor\ComponentSeven dotnet clean blazor\ComponentSix dotnet clean blazor\ComponentTen dotnet clean blazor\ComponentThirteen dotnet clean blazor\ComponentThree dotnet clean blazor\ComponentTwelve dotnet clean blazor\ComponentTwo dotnet clean blazor\DataBinding dotnet clean blazor\DataBindingTwo dotnet clean blazor\HelloWorld dotnet clean blazor-ss\ChatR dotnet clean blazor-ss\Chatter dotnet clean blazor-ss\DependencyInjection dotnet clean blazor-ss\HelloWorld dotnet clean blazor-ss\JsIntegration dotnet clean blazor-ss\Layout dotnet clean blazor-ss\MultiApps\App1 dotnet clean blazor-ss\MultiApps\App2 dotnet clean blazor-ss\MultiApps\AppHost dotnet clean blazor-ss\RssReader dotnet clean blazor-ss\RssReader-2 dotnet clean blazor-ss\StartingVariation dotnet clean caching\caching-1 dotnet clean caching\caching-2 dotnet clean caching\caching-3 dotnet clean caching\caching-4 dotnet clean caching\redis-cache dotnet clean configurations\configuration-1 dotnet clean configurations\configuration-environment-variables dotnet clean configurations\configuration-ini dotnet clean configurations\configuration-ini-options dotnet clean configurations\configuration-options dotnet clean configurations\configuration-xml dotnet clean configurations\configuration-xml-options dotnet clean connection-info dotnet clean dependency-injection\dependency-injection-1 dotnet clean dependency-injection\dependency-injection-3 dotnet clean device-detection dotnet clean diagnostics\diagnostics-1 dotnet clean diagnostics\diagnostics-2 dotnet clean diagnostics\diagnostics-3 dotnet clean diagnostics\diagnostics-4 dotnet clean diagnostics\diagnostics-5 dotnet clean diagnostics\diagnostics-6 dotnet clean endpoint-routing\endpoint-routing dotnet clean endpoint-routing\endpoint-routing-2 dotnet clean endpoint-routing\endpoint-routing-3 dotnet clean endpoint-routing\endpoint-routing-4 dotnet clean endpoint-routing\endpoint-routing-5 dotnet clean endpoint-routing\endpoint-routing-6 dotnet clean endpoint-routing\new-routing dotnet clean endpoint-routing\new-routing-10 dotnet clean endpoint-routing\new-routing-11 dotnet clean endpoint-routing\new-routing-12 dotnet clean endpoint-routing\new-routing-13 dotnet clean endpoint-routing\new-routing-14 dotnet clean endpoint-routing\new-routing-15 dotnet clean endpoint-routing\new-routing-16 dotnet clean endpoint-routing\new-routing-17 dotnet clean endpoint-routing\new-routing-18 dotnet clean endpoint-routing\new-routing-19 dotnet clean endpoint-routing\new-routing-2 dotnet clean endpoint-routing\new-routing-20 dotnet clean endpoint-routing\new-routing-21 dotnet clean endpoint-routing\new-routing-22 dotnet clean endpoint-routing\new-routing-23 dotnet clean endpoint-routing\new-routing-24 dotnet clean endpoint-routing\new-routing-25 dotnet clean endpoint-routing\new-routing-26 dotnet clean endpoint-routing\new-routing-27 dotnet clean endpoint-routing\new-routing-28 dotnet clean endpoint-routing\new-routing-29 dotnet clean endpoint-routing\new-routing-3 dotnet clean endpoint-routing\new-routing-30 dotnet clean endpoint-routing\new-routing-4 dotnet clean endpoint-routing\new-routing-5 dotnet clean endpoint-routing\new-routing-6 dotnet clean endpoint-routing\new-routing-7 dotnet clean endpoint-routing\new-routing-8 dotnet clean endpoint-routing\new-routing-9 dotnet clean endpoint-routing\parameter-transformer dotnet clean features\features-connection dotnet clean features\features-http-body-response dotnet clean features\features-max-request-body-size dotnet clean features\features-request-culture dotnet clean features\features-server-addresses dotnet clean features\features-server-addresses-2 dotnet clean features\features-server-custom dotnet clean features\features-server-custom-override dotnet clean features\features-server-request dotnet clean features\features-session dotnet clean features\features-session-redis-2 dotnet clean file-provider\file-provider-custom dotnet clean file-provider\file-provider-physical dotnet clean file-provider\serve-static-files-1 dotnet clean file-provider\serve-static-files-2 dotnet clean file-provider\serve-static-files-3 dotnet clean file-provider\serve-static-files-4 dotnet clean file-provider\serve-static-files-5 dotnet clean file-provider\serve-static-files-6 dotnet clean generic-host\generic-host-1 dotnet clean generic-host\generic-host-2 dotnet clean generic-host\generic-host-3 dotnet clean generic-host\generic-host-4 dotnet clean generic-host\generic-host-5 dotnet clean generic-host\generic-host-configure-app dotnet clean generic-host\generic-host-configure-host dotnet clean generic-host\generic-host-configure-logging dotnet clean generic-host\generic-host-environment dotnet clean generic-host\generic-host-ihostapplicationlifetime dotnet clean grpc\grpc\client dotnet clean grpc\grpc\server dotnet clean grpc\grpc-10\client dotnet clean grpc\grpc-10\server dotnet clean grpc\grpc-11\client dotnet clean grpc\grpc-11\server dotnet clean grpc\grpc-2\client dotnet clean grpc\grpc-2\server dotnet clean grpc\grpc-3\client dotnet clean grpc\grpc-3\server dotnet clean grpc\grpc-4\client dotnet clean grpc\grpc-4\server dotnet clean grpc\grpc-5\client dotnet clean grpc\grpc-5\server dotnet clean grpc\grpc-6\client dotnet clean grpc\grpc-6\server dotnet clean grpc\grpc-7\client dotnet clean grpc\grpc-7\server dotnet clean grpc\grpc-8\client dotnet clean grpc\grpc-8\server dotnet clean grpc\grpc-9\client dotnet clean grpc\grpc-9\server dotnet clean health-check\health-check-1 dotnet clean health-check\health-check-2 dotnet clean health-check\health-check-3 dotnet clean health-check\health-check-4 dotnet clean health-check\health-check-5 dotnet clean health-check\health-check-6 dotnet clean http-status-codes dotnet clean httpclientfactory\httpclientfactory-1 dotnet clean httpclientfactory\httpclientfactory-2 dotnet clean httpclientfactory\httpclientfactory-3 dotnet clean httpclientfactory\httpclientfactory-4 dotnet clean i-application-lifetime dotnet clean ihosted-service\ihosted-service-1 dotnet clean image-sharp dotnet clean json\json dotnet clean json\json-2 dotnet clean json\json-3 dotnet clean json\json-4 dotnet clean json\json-5 dotnet clean json\json-6 dotnet clean json\json-7 dotnet clean json\json-8 dotnet clean json\json-9 dotnet clean localization\localization-1 dotnet clean localization\localization-2 dotnet clean localization\localization-3 dotnet clean localization\localization-4 dotnet clean localization\localization-5 dotnet clean localization\localization-6 dotnet clean logging\logging-1 dotnet clean logging\logging-2 dotnet clean mailkit\mailkit-1 dotnet clean mailkit\mailkit-2 dotnet clean markdown-server dotnet clean markdown-server-middleware dotnet clean media-type-names dotnet clean media-type-names-2 dotnet clean middleware\middleware-0 dotnet clean middleware\middleware-1 dotnet clean middleware\middleware-10 dotnet clean middleware\middleware-11 dotnet clean middleware\middleware-12 dotnet clean middleware\middleware-2 dotnet clean middleware\middleware-3 dotnet clean middleware\middleware-4 dotnet clean middleware\middleware-5 dotnet clean middleware\middleware-6 dotnet clean middleware\middleware-7 dotnet clean middleware\middleware-8 dotnet clean middleware\middleware-9 dotnet clean mvc\api-problem-details dotnet clean mvc\api-problem-details-2 dotnet clean mvc\api-versioning dotnet clean mvc\hello-world dotnet clean mvc\jwt dotnet clean mvc\localization\mvc-localization-1 dotnet clean mvc\localization\mvc-localization-2 dotnet clean mvc\localization\mvc-localization-3 dotnet clean mvc\localization\mvc-localization-4 dotnet clean mvc\localization\mvc-localization-5 dotnet clean mvc\localization\mvc-localization-6 dotnet clean mvc\localization\mvc-localization-7\src\ProjectWithResources dotnet clean mvc\localization\mvc-localization-7\src\Web dotnet clean mvc\localization\mvc-localization-8 dotnet clean mvc\localization\mvc-localization-9 dotnet clean mvc\model-binding-from-query dotnet clean mvc\model-binding-from-route dotnet clean mvc\mvc-output-xml dotnet clean mvc\nswag dotnet clean mvc\nswag-2 dotnet clean mvc\output-formatter-syndication dotnet clean mvc\razor-class-library\razor-class-library-1\src\RazorClassLibrary1 dotnet clean mvc\razor-class-library\razor-class-library-1\src\RazorClassLibrary2 dotnet clean mvc\razor-class-library\razor-class-library-1\src\WebApplication dotnet clean mvc\razor-class-library\razor-class-library-with-controllers\src\RazorClassLibrary1 dotnet clean mvc\razor-class-library\razor-class-library-with-controllers\src\WebApplication dotnet clean mvc\razor-class-library\razor-class-library-with-static-files\src\RazorClassLibraries.Mvc.Core dotnet clean mvc\razor-class-library\razor-class-library-with-static-files\src\RazorClassLibrary1 dotnet clean mvc\razor-class-library\razor-class-library-with-static-files\src\RazorClassLibrary2 dotnet clean mvc\razor-class-library\razor-class-library-with-static-files\src\WebApplication dotnet clean mvc\result-filestream dotnet clean mvc\result-physicalfile dotnet clean mvc\routing\routing-1 dotnet clean mvc\routing\routing-2 dotnet clean mvc\routing\routing-3 dotnet clean mvc\routing\routing-4 dotnet clean mvc\routing\routing-5 dotnet clean mvc\routing\routing-6 dotnet clean mvc\routing\routing-7 dotnet clean mvc\routing\routing-8 dotnet clean mvc\routing\routing-9 dotnet clean mvc\tag-helper\tag-helper-1 dotnet clean mvc\tag-helper\tag-helper-2 dotnet clean mvc\tag-helper\tag-helper-3 dotnet clean mvc\tag-helper\tag-helper-4 dotnet clean mvc\tag-helper\tag-helper-5 dotnet clean mvc\tag-helper\tag-helper-img dotnet clean mvc\tag-helper\tag-helper-link dotnet clean mvc\utf8json-formatter dotnet clean mvc\view-component\view-component-1 dotnet clean mvc\view-component\view-component-2 dotnet clean mvc\view-component\view-component-3 dotnet clean mvc\view-component\view-component-4 dotnet clean newtonsoft-json dotnet clean orchard-core\multi-tenant\Host dotnet clean orchard-core\routing\ForumModule dotnet clean orchard-core\routing\Host dotnet clean orchard-core\routing\TicketModule dotnet clean orchard-core\routing-2\ForumModule dotnet clean orchard-core\routing-2\Host dotnet clean orchard-core\routing-2\TicketModule dotnet clean orchard-core\static-files\ForumModule dotnet clean orchard-core\static-files\Host dotnet clean password-hasher dotnet clean razor-pages\custom-html-generator dotnet clean razor-pages\hello-world dotnet clean razor-pages\razor\razor-1 dotnet clean razor-pages\razor\razor-2 dotnet clean razor-pages\razor-pages-basic dotnet clean razor-pages\razor-pages-mvc dotnet clean razor-pages\routing dotnet clean razor-pages\routing-2 dotnet clean request\anti-forgery dotnet clean request\cookies-1 dotnet clean request\cookies-2 dotnet clean request\form-upload-file dotnet clean request\form-values dotnet clean request\query-string-1 dotnet clean request\query-string-2 dotnet clean request\query-string-3 dotnet clean request\request-headers dotnet clean request\request-headers-names dotnet clean request\request-headers-typed dotnet clean request\request-verb dotnet clean response\compression-response dotnet clean response\response-buffering dotnet clean response\response-header dotnet clean response\trailing-headers dotnet clean rewrite\rewrite-1 dotnet clean rewrite\rewrite-2 dotnet clean rewrite\rewrite-3 dotnet clean rewrite\rewrite-4 dotnet clean rewrite\rewrite-5 dotnet clean rewrite\rewrite-6 dotnet clean security\authentication-with-identity\src dotnet clean signalr\signalr-1\Client dotnet clean signalr\signalr-1\Server dotnet clean sse dotnet clean startup\env-development dotnet clean startup\no-startup dotnet clean startup\startup-basic dotnet clean startup\startup-basic-multiple dotnet clean startup\startup-basic-multiple-environment dotnet clean startup\startup-basic-multiple-urls dotnet clean startup\startup-capture-errors dotnet clean startup\startup-custom-name dotnet clean startup\startup-istartupfilter dotnet clean startup\startup-multiple-configure-environment dotnet clean startup\startup-multiple-configure-environment-services dotnet clean startup\suppress-status-messages dotnet clean syndications\syndication-1 dotnet clean syndications\syndication-2 dotnet clean syndications\syndication-3 dotnet clean uri-helper\uri-helper-build-absolute dotnet clean uri-helper\uri-helper-from-absolute dotnet clean uri-helper\uri-helper-get-display-url dotnet clean uri-helper\uri-helper-get-encoded-path-and-query dotnet clean uri-helper\uri-helper-get-encoded-url dotnet clean version dotnet clean web-sockets\web-sockets-1 dotnet clean web-sockets\web-sockets-2 dotnet clean web-sockets\web-sockets-3 dotnet clean web-sockets\web-sockets-4 dotnet clean web-sockets\web-sockets-5 dotnet clean web-utilities\web-utilities-query-helpers dotnet clean web-utilities\web-utilities-query-helpers-2 dotnet clean web-utilities\web-utilities-reason-phrases ================================================ FILE: projects/clean.sh ================================================ #!/bin/bash # dotnet clean 5-0/hello-world dotnet clean anonymous-id dotnet clean application-environment dotnet clean basic/hello-world dotnet clean basic/hello-world-2 dotnet clean basic/i-host-environment dotnet clean basic/i-webhost-environment dotnet clean basic/iconfiguration dotnet clean bedrock/echo/client dotnet clean bedrock/echo/server dotnet clean blazor/Component dotnet clean blazor/ComponentEight dotnet clean blazor/ComponentEleven dotnet clean blazor/ComponentFifteen dotnet clean blazor/ComponentFive dotnet clean blazor/ComponentFour dotnet clean blazor/ComponentFourteen dotnet clean blazor/ComponentNine dotnet clean blazor/ComponentSeven dotnet clean blazor/ComponentSix dotnet clean blazor/ComponentTen dotnet clean blazor/ComponentThirteen dotnet clean blazor/ComponentThree dotnet clean blazor/ComponentTwelve dotnet clean blazor/ComponentTwo dotnet clean blazor/DataBinding dotnet clean blazor/DataBindingTwo dotnet clean blazor/HelloWorld dotnet clean blazor-ss/ChatR dotnet clean blazor-ss/Chatter dotnet clean blazor-ss/DependencyInjection dotnet clean blazor-ss/HelloWorld dotnet clean blazor-ss/JsIntegration dotnet clean blazor-ss/Layout dotnet clean blazor-ss/MultiApps/App1 dotnet clean blazor-ss/MultiApps/App2 dotnet clean blazor-ss/MultiApps/AppHost dotnet clean blazor-ss/RssReader dotnet clean blazor-ss/RssReader-2 dotnet clean blazor-ss/StartingVariation dotnet clean caching/caching-1 dotnet clean caching/caching-2 dotnet clean caching/caching-3 dotnet clean caching/caching-4 dotnet clean caching/redis-cache dotnet clean configurations/configuration-1 dotnet clean configurations/configuration-environment-variables dotnet clean configurations/configuration-ini dotnet clean configurations/configuration-ini-options dotnet clean configurations/configuration-options dotnet clean configurations/configuration-xml dotnet clean configurations/configuration-xml-options dotnet clean connection-info dotnet clean dependency-injection/dependency-injection-1 dotnet clean dependency-injection/dependency-injection-3 dotnet clean device-detection dotnet clean diagnostics/diagnostics-1 dotnet clean diagnostics/diagnostics-2 dotnet clean diagnostics/diagnostics-3 dotnet clean diagnostics/diagnostics-4 dotnet clean diagnostics/diagnostics-5 dotnet clean diagnostics/diagnostics-6 dotnet clean endpoint-routing/endpoint-routing dotnet clean endpoint-routing/endpoint-routing-2 dotnet clean endpoint-routing/endpoint-routing-3 dotnet clean endpoint-routing/endpoint-routing-4 dotnet clean endpoint-routing/endpoint-routing-5 dotnet clean endpoint-routing/endpoint-routing-6 dotnet clean endpoint-routing/new-routing dotnet clean endpoint-routing/new-routing-10 dotnet clean endpoint-routing/new-routing-11 dotnet clean endpoint-routing/new-routing-12 dotnet clean endpoint-routing/new-routing-13 dotnet clean endpoint-routing/new-routing-14 dotnet clean endpoint-routing/new-routing-15 dotnet clean endpoint-routing/new-routing-16 dotnet clean endpoint-routing/new-routing-17 dotnet clean endpoint-routing/new-routing-18 dotnet clean endpoint-routing/new-routing-19 dotnet clean endpoint-routing/new-routing-2 dotnet clean endpoint-routing/new-routing-20 dotnet clean endpoint-routing/new-routing-21 dotnet clean endpoint-routing/new-routing-22 dotnet clean endpoint-routing/new-routing-23 dotnet clean endpoint-routing/new-routing-24 dotnet clean endpoint-routing/new-routing-25 dotnet clean endpoint-routing/new-routing-26 dotnet clean endpoint-routing/new-routing-27 dotnet clean endpoint-routing/new-routing-28 dotnet clean endpoint-routing/new-routing-29 dotnet clean endpoint-routing/new-routing-3 dotnet clean endpoint-routing/new-routing-30 dotnet clean endpoint-routing/new-routing-4 dotnet clean endpoint-routing/new-routing-5 dotnet clean endpoint-routing/new-routing-6 dotnet clean endpoint-routing/new-routing-7 dotnet clean endpoint-routing/new-routing-8 dotnet clean endpoint-routing/new-routing-9 dotnet clean endpoint-routing/parameter-transformer dotnet clean features/features-connection dotnet clean features/features-http-body-response dotnet clean features/features-max-request-body-size dotnet clean features/features-request-culture dotnet clean features/features-server-addresses dotnet clean features/features-server-addresses-2 dotnet clean features/features-server-custom dotnet clean features/features-server-custom-override dotnet clean features/features-server-request dotnet clean features/features-session dotnet clean features/features-session-redis-2 dotnet clean file-provider/file-provider-custom dotnet clean file-provider/file-provider-physical dotnet clean file-provider/serve-static-files-1 dotnet clean file-provider/serve-static-files-2 dotnet clean file-provider/serve-static-files-3 dotnet clean file-provider/serve-static-files-4 dotnet clean file-provider/serve-static-files-5 dotnet clean file-provider/serve-static-files-6 dotnet clean generic-host/generic-host-1 dotnet clean generic-host/generic-host-2 dotnet clean generic-host/generic-host-3 dotnet clean generic-host/generic-host-4 dotnet clean generic-host/generic-host-5 dotnet clean generic-host/generic-host-configure-app dotnet clean generic-host/generic-host-configure-host dotnet clean generic-host/generic-host-configure-logging dotnet clean generic-host/generic-host-environment dotnet clean generic-host/generic-host-ihostapplicationlifetime dotnet clean grpc/grpc/client dotnet clean grpc/grpc/server dotnet clean grpc/grpc-10/client dotnet clean grpc/grpc-10/server dotnet clean grpc/grpc-11/client dotnet clean grpc/grpc-11/server dotnet clean grpc/grpc-2/client dotnet clean grpc/grpc-2/server dotnet clean grpc/grpc-3/client dotnet clean grpc/grpc-3/server dotnet clean grpc/grpc-4/client dotnet clean grpc/grpc-4/server dotnet clean grpc/grpc-5/client dotnet clean grpc/grpc-5/server dotnet clean grpc/grpc-6/client dotnet clean grpc/grpc-6/server dotnet clean grpc/grpc-7/client dotnet clean grpc/grpc-7/server dotnet clean grpc/grpc-8/client dotnet clean grpc/grpc-8/server dotnet clean grpc/grpc-9/client dotnet clean grpc/grpc-9/server dotnet clean health-check/health-check-1 dotnet clean health-check/health-check-2 dotnet clean health-check/health-check-3 dotnet clean health-check/health-check-4 dotnet clean health-check/health-check-5 dotnet clean health-check/health-check-6 dotnet clean http-status-codes dotnet clean httpclientfactory/httpclientfactory-1 dotnet clean httpclientfactory/httpclientfactory-2 dotnet clean httpclientfactory/httpclientfactory-3 dotnet clean httpclientfactory/httpclientfactory-4 dotnet clean i-application-lifetime dotnet clean ihosted-service/ihosted-service-1 dotnet clean image-sharp dotnet clean json/json dotnet clean json/json-2 dotnet clean json/json-3 dotnet clean json/json-4 dotnet clean json/json-5 dotnet clean json/json-6 dotnet clean json/json-7 dotnet clean json/json-8 dotnet clean json/json-9 dotnet clean localization/localization-1 dotnet clean localization/localization-2 dotnet clean localization/localization-3 dotnet clean localization/localization-4 dotnet clean localization/localization-5 dotnet clean localization/localization-6 dotnet clean logging/logging-1 dotnet clean logging/logging-2 dotnet clean mailkit/mailkit-1 dotnet clean mailkit/mailkit-2 dotnet clean markdown-server dotnet clean markdown-server-middleware dotnet clean media-type-names dotnet clean media-type-names-2 dotnet clean middleware/middleware-0 dotnet clean middleware/middleware-1 dotnet clean middleware/middleware-10 dotnet clean middleware/middleware-11 dotnet clean middleware/middleware-12 dotnet clean middleware/middleware-2 dotnet clean middleware/middleware-3 dotnet clean middleware/middleware-4 dotnet clean middleware/middleware-5 dotnet clean middleware/middleware-6 dotnet clean middleware/middleware-7 dotnet clean middleware/middleware-8 dotnet clean middleware/middleware-9 dotnet clean mvc/api-problem-details dotnet clean mvc/api-problem-details-2 dotnet clean mvc/api-versioning dotnet clean mvc/hello-world dotnet clean mvc/jwt dotnet clean mvc/localization/mvc-localization-1 dotnet clean mvc/localization/mvc-localization-2 dotnet clean mvc/localization/mvc-localization-3 dotnet clean mvc/localization/mvc-localization-4 dotnet clean mvc/localization/mvc-localization-5 dotnet clean mvc/localization/mvc-localization-6 dotnet clean mvc/localization/mvc-localization-7/src/ProjectWithResources dotnet clean mvc/localization/mvc-localization-7/src/Web dotnet clean mvc/localization/mvc-localization-8 dotnet clean mvc/localization/mvc-localization-9 dotnet clean mvc/model-binding-from-query dotnet clean mvc/model-binding-from-route dotnet clean mvc/mvc-output-xml dotnet clean mvc/nswag dotnet clean mvc/nswag-2 dotnet clean mvc/output-formatter-syndication dotnet clean mvc/razor-class-library/razor-class-library-1/src/RazorClassLibrary1 dotnet clean mvc/razor-class-library/razor-class-library-1/src/RazorClassLibrary2 dotnet clean mvc/razor-class-library/razor-class-library-1/src/WebApplication dotnet clean mvc/razor-class-library/razor-class-library-with-controllers/src/RazorClassLibrary1 dotnet clean mvc/razor-class-library/razor-class-library-with-controllers/src/WebApplication dotnet clean mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibraries.Mvc.Core dotnet clean mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary1 dotnet clean mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary2 dotnet clean mvc/razor-class-library/razor-class-library-with-static-files/src/WebApplication dotnet clean mvc/result-filestream dotnet clean mvc/result-physicalfile dotnet clean mvc/routing/routing-1 dotnet clean mvc/routing/routing-2 dotnet clean mvc/routing/routing-3 dotnet clean mvc/routing/routing-4 dotnet clean mvc/routing/routing-5 dotnet clean mvc/routing/routing-6 dotnet clean mvc/routing/routing-7 dotnet clean mvc/routing/routing-8 dotnet clean mvc/routing/routing-9 dotnet clean mvc/tag-helper/tag-helper-1 dotnet clean mvc/tag-helper/tag-helper-2 dotnet clean mvc/tag-helper/tag-helper-3 dotnet clean mvc/tag-helper/tag-helper-4 dotnet clean mvc/tag-helper/tag-helper-5 dotnet clean mvc/tag-helper/tag-helper-img dotnet clean mvc/tag-helper/tag-helper-link dotnet clean mvc/utf8json-formatter dotnet clean mvc/view-component/view-component-1 dotnet clean mvc/view-component/view-component-2 dotnet clean mvc/view-component/view-component-3 dotnet clean mvc/view-component/view-component-4 dotnet clean newtonsoft-json dotnet clean orchard-core/multi-tenant/Host dotnet clean orchard-core/routing/ForumModule dotnet clean orchard-core/routing/Host dotnet clean orchard-core/routing/TicketModule dotnet clean orchard-core/routing-2/ForumModule dotnet clean orchard-core/routing-2/Host dotnet clean orchard-core/routing-2/TicketModule dotnet clean orchard-core/static-files/ForumModule dotnet clean orchard-core/static-files/Host dotnet clean password-hasher dotnet clean razor-pages/custom-html-generator dotnet clean razor-pages/hello-world dotnet clean razor-pages/razor/razor-1 dotnet clean razor-pages/razor/razor-2 dotnet clean razor-pages/razor-pages-basic dotnet clean razor-pages/razor-pages-mvc dotnet clean razor-pages/routing dotnet clean razor-pages/routing-2 dotnet clean request/anti-forgery dotnet clean request/cookies-1 dotnet clean request/cookies-2 dotnet clean request/form-upload-file dotnet clean request/form-values dotnet clean request/query-string-1 dotnet clean request/query-string-2 dotnet clean request/query-string-3 dotnet clean request/request-headers dotnet clean request/request-headers-names dotnet clean request/request-headers-typed dotnet clean request/request-verb dotnet clean response/compression-response dotnet clean response/response-buffering dotnet clean response/response-header dotnet clean response/trailing-headers dotnet clean rewrite/rewrite-1 dotnet clean rewrite/rewrite-2 dotnet clean rewrite/rewrite-3 dotnet clean rewrite/rewrite-4 dotnet clean rewrite/rewrite-5 dotnet clean rewrite/rewrite-6 dotnet clean security/authentication-with-identity/src dotnet clean signalr/signalr-1/Client dotnet clean signalr/signalr-1/Server dotnet clean sse dotnet clean startup/env-development dotnet clean startup/no-startup dotnet clean startup/startup-basic dotnet clean startup/startup-basic-multiple dotnet clean startup/startup-basic-multiple-environment dotnet clean startup/startup-basic-multiple-urls dotnet clean startup/startup-capture-errors dotnet clean startup/startup-custom-name dotnet clean startup/startup-istartupfilter dotnet clean startup/startup-multiple-configure-environment dotnet clean startup/startup-multiple-configure-environment-services dotnet clean startup/suppress-status-messages dotnet clean syndications/syndication-1 dotnet clean syndications/syndication-2 dotnet clean syndications/syndication-3 dotnet clean uri-helper/uri-helper-build-absolute dotnet clean uri-helper/uri-helper-from-absolute dotnet clean uri-helper/uri-helper-get-display-url dotnet clean uri-helper/uri-helper-get-encoded-path-and-query dotnet clean uri-helper/uri-helper-get-encoded-url dotnet clean version dotnet clean web-sockets/web-sockets-1 dotnet clean web-sockets/web-sockets-2 dotnet clean web-sockets/web-sockets-3 dotnet clean web-sockets/web-sockets-4 dotnet clean web-sockets/web-sockets-5 dotnet clean web-utilities/web-utilities-query-helpers dotnet clean web-utilities/web-utilities-query-helpers-2 dotnet clean web-utilities/web-utilities-reason-phrases ================================================ FILE: projects/configurations/README.md ================================================ # Configurations (10) This section is all about configuration, from memory configuration to INI, JSON and XML. * [Configuration](/projects/configurations/configuration-1) This is the 'hello world' of configuration. Just use `WebApplication.Configuration` read/write values to/from it. * [Configuration - Options](/projects/configurations/configuration-options) Use IOptions at the most basic. * [Configuration - Environment variables](/projects/configurations/configuration-environment-variables) Load environment variables and display all of them. * [Configuration - INI file](/projects/configurations/configuration-ini) Read from INI file. * [Configuration - INI file - Options](/projects/configurations/configuration-ini-options) Read from INI file (with nested keys) and IOptions. * [Configuration - XML file](/projects/configurations/configuration-xml) Read from XML file. **Note**: This Xml Configuration provider does not support repeated element. The following configuration settings will break: ``` ``` On the other hand you can get unlimited nested elements and also attributes. * [Configuration - XML file - Options](/projects/configurations/configuration-xml-options) Read from XML file and use IOptions. * [Configuration - Bind Option](/project/configurations/configuration-bind-option) Read related configuration values using the options pattern Thanks to [@khusroohayat](https://twitter.com/mangopaki). * [Configuration - IOption](/project/configurations/configuration-IOption) Read related configuration values using the IOptions interface Thanks to [@khusroohayat](https://twitter.com/mangopaki). * [Configuration - IOption Array](/projects/configurations/configuration-IOption-array) Bind array values from appsettings.json and read them using the IOptions interface dotnet8 ================================================ FILE: projects/configurations/build.bat ================================================ dotnet build configuration-1 dotnet build configuration-bind-option dotnet build configuration-environment-variables dotnet build configuration-ini dotnet build configuration-ini-options dotnet build configuration-IOption dotnet build configuration-IOption-array dotnet build configuration-options dotnet build configuration-xml dotnet build configuration-xml-options ================================================ FILE: projects/configurations/build.sh ================================================ #!/bin/bash dotnet build configuration-1 dotnet build configuration-bind-option dotnet build configuration-environment-variables dotnet build configuration-ini dotnet build configuration-ini-options dotnet build configuration-IOption dotnet build configuration-IOption-array dotnet build configuration-options dotnet build configuration-xml dotnet build configuration-xml-options ================================================ FILE: projects/configurations/configuration-1/Program.cs ================================================ var app = WebApplication.Create(); app.Configuration["message"] = "hello world"; app.Run(context => { return context.Response.WriteAsync($"{app.Configuration["message"]}"); }); app.Run(); ================================================ FILE: projects/configurations/configuration-1/configuration.csproj ================================================ net10.0 true preview ================================================ FILE: projects/configurations/configuration-IOption/Program.cs ================================================ using Microsoft.Extensions.Options; var builder = WebApplication.CreateBuilder(args); builder.Services.Configure(builder.Configuration.GetSection("MyOptions")); var app = builder.Build(); app.MapGet("/", (IOptions optionsDelegate) => optionsDelegate.Value.Option2 ); app.Run(); public class MyOptions { public string Option1 { get; set; } = string.Empty; public int Option2 { get; set; } } ================================================ FILE: projects/configurations/configuration-IOption/appsettings.json ================================================ { "MyOptions": { "Option1": "Value from Dev app settings", "Option2": 999 } } ================================================ FILE: projects/configurations/configuration-IOption/configuration-IOption.csproj ================================================ net10.0 enable enable preview ================================================ FILE: projects/configurations/configuration-IOption-array/Program.cs ================================================ using Microsoft.Extensions.Options; var builder = WebApplication.CreateBuilder(); builder.Services.Configure(builder.Configuration); var app = builder.Build(); app.MapGet("/", (IOptions options) => options.Value.Integers); app.Run(); class ArrayOptions { public int[] Integers { get; set; } } ================================================ FILE: projects/configurations/configuration-IOption-array/appsettings.json ================================================ { "Integers": [ 1, 2, 3, 4, 5 ] } ================================================ FILE: projects/configurations/configuration-IOption-array/configuration-ioption-array.csproj ================================================ net10.0 true preview ================================================ FILE: projects/configurations/configuration-bind-option/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); ConfigurationManager configuration = builder.Configuration; var app = builder.Build(); app.Run(context => { var positionOptions = new PositionOptions(); configuration.GetSection(PositionOptions.Position).Bind(positionOptions); return context.Response.WriteAsync($"Title: {positionOptions.Title} \n" + $"Name: {positionOptions.Name}"); }); app.Run(); public class PositionOptions { public const string Position = "Position"; public string Title { get; set; } = String.Empty; public string Name { get; set; } = String.Empty; } ================================================ FILE: projects/configurations/configuration-bind-option/README.md ================================================ # Bind options Read related configuration values using the options pattern. Thanks to [@khusroohayat](https://twitter.com/mangopaki). ================================================ FILE: projects/configurations/configuration-bind-option/appSettings.json ================================================ { "Position": { "Title": "Editor", "Name": "Joe Smith" } } ================================================ FILE: projects/configurations/configuration-bind-option/configuration-bind-option.csproj ================================================ net10.0 true preview ================================================ FILE: projects/configurations/configuration-environment-variables/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Configuration.AddEnvironmentVariables(); var app = builder.Build(); app.Run(async context => { //Obviously you need to be careful with GetDebugView() await context.Response.WriteAsync((app.Configuration as IConfigurationRoot).GetDebugView()); }); app.Run(); ================================================ FILE: projects/configurations/configuration-environment-variables/configuration-environment-variables.csproj ================================================ net10.0 true preview ================================================ FILE: projects/configurations/configuration-ini/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Configuration.SetBasePath(Directory.GetCurrentDirectory()).AddIniFile("settings.ini"); var app = builder.Build(); app.Run(async context => { foreach (var c in app.Configuration.AsEnumerable()) { await context.Response.WriteAsync($"{c.Key} = {c.Value}\n"); } }); app.Run(); ================================================ FILE: projects/configurations/configuration-ini/configuration-ini.csproj ================================================ net10.0 true preview ================================================ FILE: projects/configurations/configuration-ini/settings.ini ================================================ [webpages] value=3.0.0.0 [config] password=pwg username=user server=localhost port=30 [app] password=secret user=admin ;nested support priorities:task=1 priorities:limit=100 privacy:individual:sharedkey=1000 privacy:individual:publickey=300 privacy:organization=Umbrella Corp. ================================================ FILE: projects/configurations/configuration-ini-options/Program.cs ================================================ using Microsoft.Extensions.Options; var builder = WebApplication.CreateBuilder(); builder.Configuration.SetBasePath(Directory.GetCurrentDirectory()).AddIniFile("settings.ini"); builder.Services.AddOptions(); builder.Services.Configure(builder.Configuration); var app = builder.Build(); app.Run(async context => { var options = context.RequestServices.GetService>().Value; var res = context.Response; await res.WriteAsync($"webpages:value : {options.WebPages.Value}\n"); await res.WriteAsync($"config.password : {options.Config.Password}\n"); await res.WriteAsync($"config.username : {options.Config.Username}\n"); await res.WriteAsync($"config.server : {options.Config.Server}\n"); await res.WriteAsync($"config.port : {options.Config.Port}\n"); await res.WriteAsync($"config.googleMap : {options.GoogleMap}\n"); await res.WriteAsync($"app:password : {options.App.Password} \n"); await res.WriteAsync($"app:user : {options.App.User} \n"); await res.WriteAsync($"app:priorities:task : {options.App.Priorities.Task} \n"); await res.WriteAsync($"app:priorities:limit : {options.App.Priorities.Limit} \n"); await res.WriteAsync($"app:privacy:individual:sharedKey : {options.App.Privacy.Individual.SharedKey}\n"); await res.WriteAsync($"app:privacy:individual:publicKey : {options.App.Privacy.Individual.PublicKey}\n"); await res.WriteAsync($"app:privacy:organization : {options.App.Privacy.Organization}\n"); }); app.Run(); public class IniOptions { public IniOptionsWebPages WebPages { get; set; } public class IniOptionsWebPages { public string Value { get; set; } } public IniOptionsConfig Config { get; set; } public class IniOptionsConfig { public string Password { get; set; } public string Username { get; set; } public string Server { get; set; } public int Port { get; set; } } public string GoogleMap { get; set; } public IniOptionsApp App { get; set; } public class IniOptionsApp { public string Password { get; set; } public string User { get; set; } public IniOptionsAppPriorities Priorities { get; set; } public class IniOptionsAppPriorities { public int Task { get; set; } public int Limit { get; set; } } public IniOptionsPrivacy Privacy { get; set; } public class IniOptionsPrivacy { public IniOptionsPrivacyKeys Individual { get; set; } public string Organization { get; set; } public class IniOptionsPrivacyKeys { public string SharedKey { get; set; } public string PublicKey { get; set; } } } } } ================================================ FILE: projects/configurations/configuration-ini-options/configuration-ini-options.csproj ================================================ net10.0 true preview ================================================ FILE: projects/configurations/configuration-ini-options/settings.ini ================================================ [webpages] value=3.0.0.0 [config] password=pwg username=user server=localhost port=30 [app] password=secret user=admin ;nested support priorities:task=1 priorities:limit=100 privacy:individual:sharedkey=1000 privacy:individual:publickey=300 privacy:organization=Umbrella Corp. ================================================ FILE: projects/configurations/configuration-options/Program.cs ================================================ using Microsoft.Extensions.Options; var builder = WebApplication.CreateBuilder(); builder.Services.Configure(o => { o.Name = "Options Sample"; o.MaximumLimit = 10; }); var app = builder.Build(); app.Run(context => { var options = context.RequestServices.GetService>(); return context.Response.WriteAsync($"Settings Name : {options.Value.Name} - Maximum limit : {options.Value.MaximumLimit}"); }); app.Run(); public class ApplicationOptions { public string Name { get; set; } public int MaximumLimit { get; set; } } ================================================ FILE: projects/configurations/configuration-options/configuration-options.csproj ================================================ net10.0 true preview ================================================ FILE: projects/configurations/configuration-xml/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Configuration.SetBasePath(Directory.GetCurrentDirectory()).AddXmlFile("settings.xml"); var app = builder.Build(); app.Run(async (context) => { foreach (var c in app.Configuration.AsEnumerable()) { await context.Response.WriteAsync($"{c.Key} = {app.Configuration[c.Key]}\n"); } }); app.Run(); ================================================ FILE: projects/configurations/configuration-xml/configuration-xml.csproj ================================================ net10.0 true preview ================================================ FILE: projects/configurations/configuration-xml/settings.xml ================================================ XXXXXXXX secret admin 1000 300 ================================================ FILE: projects/configurations/configuration-xml-options/Program.cs ================================================ using Microsoft.Extensions.Options; var builder = WebApplication.CreateBuilder(); builder.Configuration.SetBasePath(Directory.GetCurrentDirectory()).AddXmlFile("settings.xml"); builder.Services.AddOptions(); builder.Services.Configure(builder.Configuration); var app = builder.Build(); app.Run(async (context) => { var options = context.RequestServices.GetService>().Value; var res = context.Response; await res.WriteAsync($"webpages:value : {options.WebPages.Value}\n"); await res.WriteAsync($"config.password : {options.Config.Password}\n"); await res.WriteAsync($"config.username : {options.Config.Username}\n"); await res.WriteAsync($"config.server : {options.Config.Server}\n"); await res.WriteAsync($"config.port : {options.Config.Port}\n"); await res.WriteAsync($"config.googleMap : {options.GoogleMap}\n"); await res.WriteAsync($"app:password : {options.App.Password} \n"); await res.WriteAsync($"app:user : {options.App.User} \n"); await res.WriteAsync($"app:priorities:task : {options.App.Priorities.Task} \n"); await res.WriteAsync($"app:priorities:limit : {options.App.Priorities.Limit} \n"); await res.WriteAsync($"app:privacy:individual:sharedKey : {options.App.Privacy.Individual.SharedKey}\n"); await res.WriteAsync($"app:privacy:individual:publicKey : {options.App.Privacy.Individual.PublicKey}\n"); await res.WriteAsync($"app:privacy:organization : {options.App.Privacy.Organization}\n"); }); app.Run(); public class XmlOptions { public XmlOptionsWebPages WebPages { get; set; } public class XmlOptionsWebPages { public string Value { get; set; } } public XmlOptionsConfig Config { get; set; } public class XmlOptionsConfig { public string Password { get; set; } public string Username { get; set; } public string Server { get; set; } public int Port { get; set; } } public string GoogleMap { get; set; } public XmlOptionsApp App { get; set; } public class XmlOptionsApp { public string Password { get; set; } public string User { get; set; } public XmlOptionsAppPriorities Priorities { get; set; } public class XmlOptionsAppPriorities { public int Task { get; set; } public int Limit { get; set; } } public XmlOptionsPrivacy Privacy { get; set; } public class XmlOptionsPrivacy { public XmlOptionsPrivacyKeys Individual { get; set; } public string Organization { get; set; } public class XmlOptionsPrivacyKeys { public string SharedKey { get; set; } public string PublicKey { get; set; } } } } } ================================================ FILE: projects/configurations/configuration-xml-options/configuration-xml-options.csproj ================================================ net10.0 true preview ================================================ FILE: projects/configurations/configuration-xml-options/settings.xml ================================================ XXXXXXXX secret admin 1000 300 Umbrella Corp. ================================================ FILE: projects/connection-info/Program.cs ================================================ var app = WebApplication.Create(); app.Run(context => { var connection = context.Connection; var str = string.Empty; str += $"Local IP:Port => {connection.LocalIpAddress}:{connection.LocalPort}\n"; str += $"Remote IP:Port => {connection.RemoteIpAddress}:{connection.RemotePort}\n"; str += $"Client Certificate => {connection.ClientCertificate?.FriendlyName}\n"; return context.Response.WriteAsync($"{str}"); }); app.Run(); ================================================ FILE: projects/connection-info/connection-info.csproj ================================================ net10.0 true preview ================================================ FILE: projects/corewcf/README.md ================================================ # CoreWCF (1) * [Hello world with simple HTTP](/projects/corewcf/corewcf-1) This sample shows a simple request/response CoreWCF flow. ## Note The clients are built with the WCF Client libraries available [here](https://github.com/dotnet/wcf). dotnet6 ================================================ FILE: projects/corewcf/corewcf-1/README.md ================================================ # CoreWCF Hello World This sample consists of a server using CoreWCF to host a simple WCF service accepting simple HTTP SOAP requests. The client side is located on `client` folder and the server at the `server` folder. Make sure you run the server **first** before running the client. Both programs share the same service definition (`IEchoService.cs`). The server uses the types defined in `CoreWCF.Primitives`, the client uses the types defined in `System.ServiceModel.Primitives`. ================================================ FILE: projects/corewcf/corewcf-1/client/IEchoService.cs ================================================ using System.Runtime.Serialization; using System.ServiceModel; namespace Contracts { [ServiceContract] public interface IEchoService { [OperationContract] string Echo(string text); [OperationContract] string ComplexEcho(EchoMessage text); } [DataContract] public class EchoMessage { [DataMember] public string Text { get; set; } } } ================================================ FILE: projects/corewcf/corewcf-1/client/Program.cs ================================================ using System.ServiceModel; const string BasicHttpEndPointAddress = @"http://localhost:8080/basichttp"; SimpleEcho(); ComplexEcho(); void SimpleEcho() { var factory = new ChannelFactory(new BasicHttpBinding(), new EndpointAddress(BasicHttpEndPointAddress)); factory.Open(); var channel = factory.CreateChannel(); ((IClientChannel)channel).Open(); Console.WriteLine("http Echo(\"Hello\") => " + channel.Echo("Hello")); ((IClientChannel)channel).Close(); factory.Close(); } void ComplexEcho() { var factory = new ChannelFactory(new BasicHttpBinding(), new EndpointAddress(BasicHttpEndPointAddress)); factory.Open(); var channel = factory.CreateChannel(); ((IClientChannel)channel).Open(); Console.WriteLine("http EchoMessage(\"Complex Hello\") => " + channel.ComplexEcho(new Contracts.EchoMessage() { Text = "Complex Hello" })); ((IClientChannel)channel).Close(); factory.Close(); } ================================================ FILE: projects/corewcf/corewcf-1/client/client.csproj ================================================ net10.0 true Exe preview ================================================ FILE: projects/corewcf/corewcf-1/server/EchoService.cs ================================================ using Contracts; public class EchoService : IEchoService { public string Echo(string text) { System.Console.WriteLine($"Received {text} from client!"); return text; } public string ComplexEcho(EchoMessage text) { System.Console.WriteLine($"Received {text.Text} from client!"); return text.Text; } } ================================================ FILE: projects/corewcf/corewcf-1/server/IEchoService.cs ================================================ using CoreWCF; using System.Runtime.Serialization; namespace Contracts { [ServiceContract] public interface IEchoService { [OperationContract] string Echo(string text); [OperationContract] string ComplexEcho(EchoMessage text); } [DataContract] public class EchoMessage { [DataMember] public string Text { get; set; } } } ================================================ FILE: projects/corewcf/corewcf-1/server/Program.cs ================================================ using CoreWCF; using CoreWCF.Configuration; var builder = WebApplication.CreateBuilder(); builder.WebHost.ConfigureKestrel(options => { options.ListenLocalhost(8080); }); builder.Services.AddServiceModelServices(); var app = builder.Build(); app.UseServiceModel(builder => { builder .AddService() .AddServiceEndpoint(new BasicHttpBinding(), "/basichttp"); }); app.Run(); ================================================ FILE: projects/corewcf/corewcf-1/server/server.csproj ================================================ net10.0 true preview ================================================ FILE: projects/datastar/README.md ================================================ # Datastar (20) The following samples show how to use [Datastar](https://data-star.dev/) hypermedia framework using .NET 10 and [pico](https://picocss.com) CSS framework. * [Hello World](hello-world) Use `data-on-load` attribute with `@get` action to receive SSE event from a Minimal API endpoint that returns `datastar-patch-elements` SSE event type. * [Backend SSE patch-signals](backend-patch-signals) This sample demonstrates how the backend can patch signals through SSE and how the UI reacts with it. The sample adds 3 seconds delays on the SSE response so the changes on the UI is visible. * [Backend SSE patch-signals 2](backend-patch-signals-2) Similar to previous sample except this time we add an extra signal and did not initialize any of the them. * [Backend SSE patch-signals 3](backend-patch-signals-3) This sample shows how to use `filterSignals` option to only send specific signals to the backend. * [Backend SSE patch-signals 3](backend-patch-signals-4) This sample shows the backend add one extra signal to be used for later action at the UI. * [data-attr](data-attr) This example shows how to use `data-attr` to set HTML attribute to an expression. This sample demonstrates the usage of direct value, object and also signal expression. * [data-bind](data-bind) This sample shows how to use `data-bind` to bind input (text, textarea, select, radio, checkbox, range) values to signals. * [data-class](data-class) This example shows how to add or remove a class to or from an element based on an expression using `data-class`. * [data-compute](data-compute) This example shows to create a read only signal that is computed based on expression. * [data-effect](data-effect) This example shows to use `data-effect` to update other signals or perform operations. * [data-on-click](data-on-click) This example shows to use `data-on-click` to update other signals or perform operations. * [data-on-custom-event](data-on-custom-event) This example shows to use `data-on-{custom-event}` to handle custom even on three different occasion, local event, bubbling event, and event handle attached to `window`. * [data-on-interval](data-on-interval) This example shows to use `data-on-interval` to run expression at regular time. It defaults to one second. * [data-show](data-show) This example shows to use `data-show` to run expression to hide or show an element. * [data-style](data-style) This example shows how to set inline CSS style using `data-style`. * [data-indicator](data-indicator) This sample shows how to use `data-indicator` to create a singal set to `true` while an SSE request is in flight. * [data-on-signal-patch](data-on-signal-patch) This sample shows how to use `data-on-signal-patch` to run an expression whether one or more signals are patched. `patch` variable is available and contains the details of the patched signals. * [data-on-signal-patch-filter](data-on-signal-patch-filter) This sample shows how to use `data-on-signal-patch-filter` together with `data-on-signal-patch` to run an expression whether one or more **specific** signal patched. `patch` variable is available and contains the details of the patched signals. * [data-ignore](data-ignore) This example shows to use `data-ignore` to tell Datastar to skip an element and its descendants. * [data-ref](data-ref) This example shows to use `data-ref` to obtain a reference to the [HTML element](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement) itself. ================================================ FILE: projects/datastar/backend-patch-signals/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#b1a853", "activityBar.background": "#b1a853", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#e9f5f4", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#b1a853", "statusBar.background": "#908841", "statusBar.debuggingBackground": "#414990", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#6d6731", "statusBarItem.remoteBackground": "#908841", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#908841", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#90884199", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#908841" } ================================================ FILE: projects/datastar/backend-patch-signals/Program.cs ================================================ using System.Text.Json; using System.Text.Json.Nodes; using System.Linq; using System.Runtime.CompilerServices; var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.MapGet("/sse", (HttpRequest req, CancellationToken cancellationToken) => { async IAsyncEnumerable GreetingAsync(JsonNode node, [EnumeratorCancellation] CancellationToken cancellationToken) { var elementIds = node.AsObject().Select(x => x.Key).ToArray(); await Task.Delay(3000, cancellationToken); // Simulate some delay foreach (var elementId in elementIds) yield return $$"""signals { {{elementId}}: 'hello world from the backend with signal {{elementId}}' }"""; } if (req.Headers["Datastar-Request"] != "true") return Results.BadRequest("Datastar request header is missing."); var data = JsonNode.Parse(req.Query["datastar"]); return Results.ServerSentEvents(GreetingAsync(data, cancellationToken), "datastar-patch-signals"); }); app.MapGet("/", async context => { await context.Response.WriteAsync($$"""

SSE patch signals

Loading...
Loading...

All signals on this page


        
    
    """);
});
 
app.Run();


================================================
FILE: projects/datastar/backend-patch-signals/README.md
================================================
# Backend SSE patch signals

Here we demonstrate how the backend can patch signals through SSE and how the UI reacts with it. The sample adds 3 seconds delays on the SSE response so the changes on the UI is visible. 

In this example we started with the following available signals at a starting point.

``````

We display the signal using `data-text-`.

```
Loading...
`. ================================================ FILE: projects/datastar/backend-patch-signals/backend-patch-signals.csproj ================================================ net10.0 true true preview ================================================ FILE: projects/datastar/backend-patch-signals/backend-patch-signals.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "backend-patch-signals", "backend-patch-signals.csproj", "{7AEA5F5E-D965-CC15-220A-1B4698A50F4F}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {7AEA5F5E-D965-CC15-220A-1B4698A50F4F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7AEA5F5E-D965-CC15-220A-1B4698A50F4F}.Debug|Any CPU.Build.0 = Debug|Any CPU {7AEA5F5E-D965-CC15-220A-1B4698A50F4F}.Release|Any CPU.ActiveCfg = Release|Any CPU {7AEA5F5E-D965-CC15-220A-1B4698A50F4F}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {8AA8C9D7-A13C-4CC0-960E-680A6D5E6224} EndGlobalSection EndGlobal ================================================ FILE: projects/datastar/backend-patch-signals-2/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#b1a853", "activityBar.background": "#b1a853", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#e9f5f4", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#b1a853", "statusBar.background": "#908841", "statusBar.debuggingBackground": "#414990", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#6d6731", "statusBarItem.remoteBackground": "#908841", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#908841", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#90884199", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#908841" } ================================================ FILE: projects/datastar/backend-patch-signals-2/Program.cs ================================================ using System.Text.Json; using System.Text.Json.Nodes; using System.Linq; using System.Runtime.CompilerServices; var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.MapGet("/sse", (HttpRequest req, CancellationToken cancellationToken) => { async IAsyncEnumerable GreetingAsync(JsonNode node, [EnumeratorCancellation] CancellationToken cancellationToken) { var elementIds = node.AsObject().Select(x => x.Key).ToArray(); await Task.Delay(3000, cancellationToken); // Simulate some delay foreach (var elementId in elementIds.Where(x => !x.Equals("showMessage", StringComparison.OrdinalIgnoreCase))) yield return $$"""signals { {{elementId}}: 'hello world from the backend with signal {{elementId}}' }"""; yield return $$"""signals { showMessage: true }"""; } if (req.Headers["Datastar-Request"] != "true") return Results.BadRequest("Datastar request header is missing."); var data = JsonNode.Parse(req.Query["datastar"]); return Results.ServerSentEvents(GreetingAsync(data, cancellationToken), "datastar-patch-signals"); }); app.MapGet("/", async context => { await context.Response.WriteAsync($$"""

SSE patch signals 2

Loading...
Loading...
This message is only shown when the signal $showMessage is set to true.

All signals on this page


        
    
    """);
});
 
app.Run();


================================================
FILE: projects/datastar/backend-patch-signals-2/README.md
================================================
# Backend SSE patch signals - 2

Here we demonstrate how the backend can patch signals through SSE and how the UI reacts with it. The sample adds 3 seconds delays on the SSE response so the changes on the UI is visible. 

In this example we didn't initialize the three signals with values. You can see that all the three signals are assigned default value empty string.

We display the signal using `data-text-`.

```
Loading...
`. We also use `data-show` to evaluate whether to display an element or not. ```
This message is only shown when the signal $showMessage is set to true.
``` ================================================ FILE: projects/datastar/backend-patch-signals-2/backend-patch-signals-2.csproj ================================================ net10.0 true true preview ================================================ FILE: projects/datastar/backend-patch-signals-2/backend-patch-signals-2.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "backend-patch-signals-2", "backend-patch-signals-2.csproj", "{A22B75CA-CA14-AC5D-CDC9-6AF2B01ED74F}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {A22B75CA-CA14-AC5D-CDC9-6AF2B01ED74F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A22B75CA-CA14-AC5D-CDC9-6AF2B01ED74F}.Debug|Any CPU.Build.0 = Debug|Any CPU {A22B75CA-CA14-AC5D-CDC9-6AF2B01ED74F}.Release|Any CPU.ActiveCfg = Release|Any CPU {A22B75CA-CA14-AC5D-CDC9-6AF2B01ED74F}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {619CD6D3-D5B0-4AAF-ADF2-058F9C5D8FFC} EndGlobalSection EndGlobal ================================================ FILE: projects/datastar/backend-patch-signals-3/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#b1a853", "activityBar.background": "#b1a853", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#e9f5f4", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#b1a853", "statusBar.background": "#908841", "statusBar.debuggingBackground": "#414990", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#6d6731", "statusBarItem.remoteBackground": "#908841", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#908841", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#90884199", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#908841" } ================================================ FILE: projects/datastar/backend-patch-signals-3/Program.cs ================================================ using System.Text.Json; using System.Text.Json.Nodes; using System.Linq; using System.Runtime.CompilerServices; var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.MapGet("/sse", (HttpRequest req, CancellationToken cancellationToken) => { async IAsyncEnumerable GreetingAsync(JsonNode node, [EnumeratorCancellation] CancellationToken cancellationToken) { var elementIds = node.AsObject().Select(x => x.Key).ToArray(); await Task.Delay(3000, cancellationToken); // Simulate some delay foreach (var elementId in elementIds.Where(x => !x.Equals("showMessage", StringComparison.OrdinalIgnoreCase))) yield return $$"""signals { {{elementId}}: 'hello world from the backend with signal {{elementId}}' }"""; if (elementIds.Contains("showMessage", StringComparer.OrdinalIgnoreCase)) yield return $$"""signals { showMessage: true }"""; } if (req.Headers["Datastar-Request"] != "true") return Results.BadRequest("Datastar request header is missing."); var data = JsonNode.Parse(req.Query["datastar"]); return Results.ServerSentEvents(GreetingAsync(data, cancellationToken), "datastar-patch-signals"); }); app.MapGet("/", async context => { await context.Response.WriteAsync($$"""

SSE patch signals with filterSignals

Loading...
Loading...
This message is only shown when the signal $showMessage is set to true.

All signals on this page


        
    
    """);
});
 
app.Run();


================================================
FILE: projects/datastar/backend-patch-signals-3/README.md
================================================
# Backend SSE patch signals with filterSignals

This page has 3 signals. This sample shows how to use `filterSignals` option to only send specific signals to the backend.

```

``` Here we set up filterSignals to allow `greeting` and `greeting2` signals to pass through the backend. ================================================ FILE: projects/datastar/backend-patch-signals-3/backend-patch-signals-3.csproj ================================================ net10.0 true true preview ================================================ FILE: projects/datastar/backend-patch-signals-4/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#b1a853", "activityBar.background": "#b1a853", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#e9f5f4", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#b1a853", "statusBar.background": "#908841", "statusBar.debuggingBackground": "#414990", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#6d6731", "statusBarItem.remoteBackground": "#908841", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#908841", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#90884199", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#908841" } ================================================ FILE: projects/datastar/backend-patch-signals-4/Program.cs ================================================ using System.Text.Json; using System.Text.Json.Nodes; using System.Linq; using System.Runtime.CompilerServices; var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.MapGet("/sse", (HttpRequest req, CancellationToken cancellationToken) => { async IAsyncEnumerable GreetingAsync(JsonNode node, [EnumeratorCancellation] CancellationToken cancellationToken) { var elementIds = node.AsObject().Select(x => x.Key).ToArray(); await Task.Delay(3000, cancellationToken); // Simulate some delay foreach (var elementId in elementIds.Where(x => !x.Equals("showMessage", StringComparison.OrdinalIgnoreCase))) { yield return $$"""signals { {{elementId}}: 'hello world from the backend with signal {{elementId}}' }"""; } if (elementIds.Contains("showMessage", StringComparer.OrdinalIgnoreCase)) yield return $$"""signals { showMessage: true }"""; yield return "signals { greeting3: 'LEGIO DECIMA AD RHENUM MOVEAT' }"; } if (req.Headers["Datastar-Request"] != "true") return Results.BadRequest("Datastar request header is missing."); var data = JsonNode.Parse(req.Query["datastar"]); return Results.ServerSentEvents(GreetingAsync(data, cancellationToken), "datastar-patch-signals"); }); app.MapGet("/secret", (HttpRequest req, CancellationToken cancellationToken) => { async IAsyncEnumerable RevealSecretMessageAsync([EnumeratorCancellation] CancellationToken cancellationToken) { yield return """elements
"""; } if (req.Headers["Datastar-Request"] != "true") return Results.BadRequest("Datastar request header is missing."); return Results.ServerSentEvents(RevealSecretMessageAsync(cancellationToken), "datastar-patch-elements"); }); app.MapGet("/", async context => { await context.Response.WriteAsync($$"""

SSE patch signals with filterSignals

Loading...
Loading...
This message is only shown when the signal $showMessage is set to true.


All signals on this page


        
    
    """);
});
 
app.Run();


================================================
FILE: projects/datastar/backend-patch-signals-4/README.md
================================================
# Backend SSE patch signals with extra signal

This page has 3 signals originally. Then the backend add one extra signal to be used for later action at the UI.

We then send an element that uses the extra signal

"""elements 
"""; ================================================ FILE: projects/datastar/backend-patch-signals-4/backend-patch-signals-4.csproj ================================================ net10.0 true true preview ================================================ FILE: projects/datastar/backend-patch-signals-4/backend-patch-signals-4.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "backend-patch-signals-4", "backend-patch-signals-4.csproj", "{58CB1C20-8207-098C-C089-2FE1DDD905D9}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {58CB1C20-8207-098C-C089-2FE1DDD905D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {58CB1C20-8207-098C-C089-2FE1DDD905D9}.Debug|Any CPU.Build.0 = Debug|Any CPU {58CB1C20-8207-098C-C089-2FE1DDD905D9}.Release|Any CPU.ActiveCfg = Release|Any CPU {58CB1C20-8207-098C-C089-2FE1DDD905D9}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {FFF62B11-DFCE-4413-A96E-EF134D50AE72} EndGlobalSection EndGlobal ================================================ FILE: projects/datastar/build.bat ================================================ dotnet build hello-world dotnet build backend-patch-signals dotnet build backend-patch-signals-2 dotnet build backend-patch-signals-3 dotnet build backend-patch-signals-4 dotnet build data-attr dotnet build data-bind dotnet build data-class dotnet build data-compute dotnet build data-effect dotnet build data-on-click dotnet build data-on-custom-event dotnet build data-on-interval dotnet build data-show dotnet build data-style dotnet build data-indicator dotnet build data-on-signal-patch dotnet build data-on-signal-patch-filter dotnet build data-ignore ================================================ FILE: projects/datastar/build.sh ================================================ #!/bin/bash dotnet build hello-world dotnet build backend-patch-signals dotnet build backend-patch-signals-2 dotnet build backend-patch-signals-3 dotnet build backend-patch-signals-4 dotnet build data-attr dotnet build data-bind dotnet build data-class dotnet build data-compute dotnet build data-effect dotnet build data-on-click dotnet build data-on-custom-event dotnet build data-on-interval dotnet build data-show dotnet build data-style dotnet build data-indicator dotnet build data-on-signal-patch dotnet build data-on-signal-patch-filter dotnet build data-ignore ================================================ FILE: projects/datastar/data-attr/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#b1a853", "activityBar.background": "#b1a853", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#e9f5f4", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#b1a853", "statusBar.background": "#908841", "statusBar.debuggingBackground": "#414990", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#6d6731", "statusBarItem.remoteBackground": "#908841", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#908841", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#90884199", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#908841" } ================================================ FILE: projects/datastar/data-attr/Program.cs ================================================ using System.Text.Json; using System.Text.Json.Nodes; using System.Linq; using System.Runtime.CompilerServices; var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.MapGet("/", async context => { await context.Response.WriteAsync($$"""

data-atttr


All signals on this page


        
    
    """);
});
 
app.Run();


================================================
FILE: projects/datastar/data-attr/README.md
================================================
# data-attr

This example shows how to use `data-attr` to set HTML attribute to an expression. This sample demonstrates the usage of direct value, object and also signal expression.

Make sure that you use a single quote `'` when you are assigning string value otherwise you will get an error.

``` html
 

data-atttr

``` ``` html
``` ``` html
``` ================================================ FILE: projects/datastar/data-attr/data-attr.csproj ================================================ net10.0 true true preview ================================================ FILE: projects/datastar/data-attr/data-attr.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "data-attr", "data-attr.csproj", "{BDC38F64-E098-1F3B-B938-FA360CECE3BE}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {BDC38F64-E098-1F3B-B938-FA360CECE3BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BDC38F64-E098-1F3B-B938-FA360CECE3BE}.Debug|Any CPU.Build.0 = Debug|Any CPU {BDC38F64-E098-1F3B-B938-FA360CECE3BE}.Release|Any CPU.ActiveCfg = Release|Any CPU {BDC38F64-E098-1F3B-B938-FA360CECE3BE}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {820676B0-5179-4541-920E-DC030ADA67E0} EndGlobalSection EndGlobal ================================================ FILE: projects/datastar/data-bind/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#b1a853", "activityBar.background": "#b1a853", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#e9f5f4", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#b1a853", "statusBar.background": "#908841", "statusBar.debuggingBackground": "#414990", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#6d6731", "statusBarItem.remoteBackground": "#908841", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#908841", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#90884199", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#908841" } ================================================ FILE: projects/datastar/data-bind/Program.cs ================================================ using System.Text.Json; using System.Text.Json.Nodes; using System.Linq; using System.Runtime.CompilerServices; var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.MapGet("/", async context => { await context.Response.WriteAsync($$"""

data-bind

Please enter information to the form


All signals on this page


        
    
    """);
});
 
app.Run();


================================================
FILE: projects/datastar/data-bind/README.md
================================================
# data-bind

This sample shows how to use `data-bind` to bind input (text, textarea, select, radio, checkbox, range) values to signals.

================================================
FILE: projects/datastar/data-bind/data-bind.csproj
================================================

  
    net10.0
    true
    true
    preview
  
  
    
    
  


================================================
FILE: projects/datastar/data-bind/data-bind.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.2.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "data-bind", "data-bind.csproj", "{463CEF9F-038A-96FC-0C58-02B62EE994B2}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{463CEF9F-038A-96FC-0C58-02B62EE994B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{463CEF9F-038A-96FC-0C58-02B62EE994B2}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{463CEF9F-038A-96FC-0C58-02B62EE994B2}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{463CEF9F-038A-96FC-0C58-02B62EE994B2}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {2D4E085F-A3E8-4BD0-A0CA-B9B994989CAA}
	EndGlobalSection
EndGlobal


================================================
FILE: projects/datastar/data-class/.vscode/settings.json
================================================
{
    "workbench.colorCustomizations": {
        "activityBar.activeBackground": "#b1a853",
        "activityBar.background": "#b1a853",
        "activityBar.foreground": "#15202b",
        "activityBar.inactiveForeground": "#15202b99",
        "activityBarBadge.background": "#e9f5f4",
        "activityBarBadge.foreground": "#15202b",
        "commandCenter.border": "#15202b99",
        "sash.hoverBorder": "#b1a853",
        "statusBar.background": "#908841",
        "statusBar.debuggingBackground": "#414990",
        "statusBar.debuggingForeground": "#e7e7e7",
        "statusBar.foreground": "#15202b",
        "statusBarItem.hoverBackground": "#6d6731",
        "statusBarItem.remoteBackground": "#908841",
        "statusBarItem.remoteForeground": "#15202b",
        "titleBar.activeBackground": "#908841",
        "titleBar.activeForeground": "#15202b",
        "titleBar.inactiveBackground": "#90884199",
        "titleBar.inactiveForeground": "#15202b99"
    },
    "peacock.color": "#908841"
}

================================================
FILE: projects/datastar/data-class/Program.cs
================================================
var builder = WebApplication.CreateBuilder();

var app = builder.Build();

app.MapGet("/", async context =>
{
    await context.Response.WriteAsync($$"""
    
        
          
          
        
        
            

data-class


All signals on this page


        
    
    """);
});
 
app.Run();


================================================
FILE: projects/datastar/data-class/README.md
================================================
# data-class

This example shows how to add or remove a class to or from an element based on an expression using `data-class`.

================================================
FILE: projects/datastar/data-class/data-class.csproj
================================================

  
    net10.0
    true
    true
    preview
  
  
    
    
  


================================================
FILE: projects/datastar/data-class/data-class.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.2.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "data-class", "data-class.csproj", "{E0A01C50-D328-5E02-3E62-E402966E8C29}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{E0A01C50-D328-5E02-3E62-E402966E8C29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{E0A01C50-D328-5E02-3E62-E402966E8C29}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{E0A01C50-D328-5E02-3E62-E402966E8C29}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{E0A01C50-D328-5E02-3E62-E402966E8C29}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {851B5236-42A8-42CE-ADF3-DE0473D87BF0}
	EndGlobalSection
EndGlobal


================================================
FILE: projects/datastar/data-computed/.vscode/settings.json
================================================
{
    "workbench.colorCustomizations": {
        "activityBar.activeBackground": "#b1a853",
        "activityBar.background": "#b1a853",
        "activityBar.foreground": "#15202b",
        "activityBar.inactiveForeground": "#15202b99",
        "activityBarBadge.background": "#e9f5f4",
        "activityBarBadge.foreground": "#15202b",
        "commandCenter.border": "#15202b99",
        "sash.hoverBorder": "#b1a853",
        "statusBar.background": "#908841",
        "statusBar.debuggingBackground": "#414990",
        "statusBar.debuggingForeground": "#e7e7e7",
        "statusBar.foreground": "#15202b",
        "statusBarItem.hoverBackground": "#6d6731",
        "statusBarItem.remoteBackground": "#908841",
        "statusBarItem.remoteForeground": "#15202b",
        "titleBar.activeBackground": "#908841",
        "titleBar.activeForeground": "#15202b",
        "titleBar.inactiveBackground": "#90884199",
        "titleBar.inactiveForeground": "#15202b99"
    },
    "peacock.color": "#908841"
}

================================================
FILE: projects/datastar/data-computed/Program.cs
================================================
var builder = WebApplication.CreateBuilder();

var app = builder.Build();

app.MapGet("/", async context =>
{
    await context.Response.WriteAsync($$"""
    
        
          
          
        
        
            

data-computed



All signals on this page


        
    
    """);
});
 
app.Run();


================================================
FILE: projects/datastar/data-computed/README.md
================================================
# data-computed

This example shows to create a read only signal that is computed based on expression using `data-computed`. This attribute must not be used for performing actions.

================================================
FILE: projects/datastar/data-computed/data-computed.csproj
================================================

  
    net10.0
    true
    true
    preview
  
  
    
    
  


================================================
FILE: projects/datastar/data-computed/data-computed.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.2.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "data-computed", "data-computed.csproj", "{BB42EF6E-376C-58A9-B3C7-BD291CADCC62}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{BB42EF6E-376C-58A9-B3C7-BD291CADCC62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{BB42EF6E-376C-58A9-B3C7-BD291CADCC62}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{BB42EF6E-376C-58A9-B3C7-BD291CADCC62}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{BB42EF6E-376C-58A9-B3C7-BD291CADCC62}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {82482F05-1D52-4535-B65F-E82502BC4C4F}
	EndGlobalSection
EndGlobal


================================================
FILE: projects/datastar/data-effect/.vscode/settings.json
================================================
{
    "workbench.colorCustomizations": {
        "activityBar.activeBackground": "#b1a853",
        "activityBar.background": "#b1a853",
        "activityBar.foreground": "#15202b",
        "activityBar.inactiveForeground": "#15202b99",
        "activityBarBadge.background": "#e9f5f4",
        "activityBarBadge.foreground": "#15202b",
        "commandCenter.border": "#15202b99",
        "sash.hoverBorder": "#b1a853",
        "statusBar.background": "#908841",
        "statusBar.debuggingBackground": "#414990",
        "statusBar.debuggingForeground": "#e7e7e7",
        "statusBar.foreground": "#15202b",
        "statusBarItem.hoverBackground": "#6d6731",
        "statusBarItem.remoteBackground": "#908841",
        "statusBarItem.remoteForeground": "#15202b",
        "titleBar.activeBackground": "#908841",
        "titleBar.activeForeground": "#15202b",
        "titleBar.inactiveBackground": "#90884199",
        "titleBar.inactiveForeground": "#15202b99"
    },
    "peacock.color": "#908841"
}

================================================
FILE: projects/datastar/data-effect/Program.cs
================================================
var builder = WebApplication.CreateBuilder();

var app = builder.Build();

app.MapGet("/", async context =>
{
    await context.Response.WriteAsync($$"""
    
        
          
          
        
        
            

data-effect



All signals on this page


        
    
    """);
});
 
app.Run();


================================================
FILE: projects/datastar/data-effect/README.md
================================================
# data-effect

This example shows to use `data-effect` to update other signals or perform operations.

================================================
FILE: projects/datastar/data-effect/data-effect.csproj
================================================

  
    net10.0
    true
    true
    preview
  
  
    
    
  


================================================
FILE: projects/datastar/data-effect/data-effect.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.2.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "data-effect", "data-effect.csproj", "{20A026CC-BDF6-7137-8A0B-31B5F740CE29}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{20A026CC-BDF6-7137-8A0B-31B5F740CE29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{20A026CC-BDF6-7137-8A0B-31B5F740CE29}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{20A026CC-BDF6-7137-8A0B-31B5F740CE29}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{20A026CC-BDF6-7137-8A0B-31B5F740CE29}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {AA2313B5-8AE6-45C4-B28D-D462F1B1D5BC}
	EndGlobalSection
EndGlobal


================================================
FILE: projects/datastar/data-ignore/.vscode/settings.json
================================================
{
    "workbench.colorCustomizations": {
        "activityBar.activeBackground": "#b1a853",
        "activityBar.background": "#b1a853",
        "activityBar.foreground": "#15202b",
        "activityBar.inactiveForeground": "#15202b99",
        "activityBarBadge.background": "#e9f5f4",
        "activityBarBadge.foreground": "#15202b",
        "commandCenter.border": "#15202b99",
        "sash.hoverBorder": "#b1a853",
        "statusBar.background": "#908841",
        "statusBar.debuggingBackground": "#414990",
        "statusBar.debuggingForeground": "#e7e7e7",
        "statusBar.foreground": "#15202b",
        "statusBarItem.hoverBackground": "#6d6731",
        "statusBarItem.remoteBackground": "#908841",
        "statusBarItem.remoteForeground": "#15202b",
        "titleBar.activeBackground": "#908841",
        "titleBar.activeForeground": "#15202b",
        "titleBar.inactiveBackground": "#90884199",
        "titleBar.inactiveForeground": "#15202b99"
    },
    "peacock.color": "#908841"
}

================================================
FILE: projects/datastar/data-ignore/Program.cs
================================================
var builder = WebApplication.CreateBuilder();

var app = builder.Build();

app.MapGet("/", async context =>
{
    await context.Response.WriteAsync($$"""
    
        
          
          
        
        
            

data-ignore


All signals on this page


        
    
    """);
});
 
app.Run();


================================================
FILE: projects/datastar/data-ignore/README.md
================================================
# data-ignore

This example shows to use `data-ignore` to tell Datastar to skip an element and its descendants. 

``` html
    
``` ================================================ FILE: projects/datastar/data-ignore/data-ignore.csproj ================================================ net10.0 true true preview ================================================ FILE: projects/datastar/data-ignore/data-ignore.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "data-ignore", "data-ignore.csproj", "{C545052B-12AF-5641-A81A-E280F6B9B46E}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {C545052B-12AF-5641-A81A-E280F6B9B46E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C545052B-12AF-5641-A81A-E280F6B9B46E}.Debug|Any CPU.Build.0 = Debug|Any CPU {C545052B-12AF-5641-A81A-E280F6B9B46E}.Release|Any CPU.ActiveCfg = Release|Any CPU {C545052B-12AF-5641-A81A-E280F6B9B46E}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {824C3E7D-A8B5-4519-BD5D-DF045F6946AF} EndGlobalSection EndGlobal ================================================ FILE: projects/datastar/data-indicator/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#b1a853", "activityBar.background": "#b1a853", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#e9f5f4", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#b1a853", "statusBar.background": "#908841", "statusBar.debuggingBackground": "#414990", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#6d6731", "statusBarItem.remoteBackground": "#908841", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#908841", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#90884199", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#908841" } ================================================ FILE: projects/datastar/data-indicator/Program.cs ================================================ using System.Text.Json; using System.Text.Json.Nodes; using System.Linq; using System.Runtime.CompilerServices; var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.MapGet("/sse", (HttpRequest req, CancellationToken cancellationToken) => { async IAsyncEnumerable GreetingAsync(JsonNode node, [EnumeratorCancellation] CancellationToken cancellationToken) { var elementIds = node.AsObject().Select(x => x.Key).ToArray(); await Task.Delay(3000, cancellationToken); // Simulate some delay foreach (var elementId in elementIds.Where(x => !x.Equals("showMessage", StringComparison.OrdinalIgnoreCase))) { yield return $$"""signals { {{elementId}}: 'hello world from the backend with signal {{elementId}}' }"""; } } if (req.Headers["Datastar-Request"] != "true") return Results.BadRequest("Datastar request header is missing."); var data = JsonNode.Parse(req.Query["datastar"]); return Results.ServerSentEvents(GreetingAsync(data, cancellationToken), "datastar-patch-signals"); }); app.MapGet("/", async context => { await context.Response.WriteAsync($$"""

data-indicator


All signals on this page


        
    
    """);
});
 
app.Run();


================================================
FILE: projects/datastar/data-indicator/README.md
================================================
# data-indicator

This sample shows how to use `data-indicator` to create a singal set to `true` while an SSE request is in flight.

================================================
FILE: projects/datastar/data-indicator/data-indicator.csproj
================================================

  
    net10.0
    true
    true
    preview
  
  
    
    
  


================================================
FILE: projects/datastar/data-indicator/data-indicator.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.2.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "data-indicator", "data-indicator.csproj", "{E1E054CE-6322-6207-69E3-DD71A68492DE}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{E1E054CE-6322-6207-69E3-DD71A68492DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{E1E054CE-6322-6207-69E3-DD71A68492DE}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{E1E054CE-6322-6207-69E3-DD71A68492DE}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{E1E054CE-6322-6207-69E3-DD71A68492DE}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {4D211A20-C0AD-4817-AAF0-E9625715F613}
	EndGlobalSection
EndGlobal


================================================
FILE: projects/datastar/data-on-click/.vscode/settings.json
================================================
{
    "workbench.colorCustomizations": {
        "activityBar.activeBackground": "#b1a853",
        "activityBar.background": "#b1a853",
        "activityBar.foreground": "#15202b",
        "activityBar.inactiveForeground": "#15202b99",
        "activityBarBadge.background": "#e9f5f4",
        "activityBarBadge.foreground": "#15202b",
        "commandCenter.border": "#15202b99",
        "sash.hoverBorder": "#b1a853",
        "statusBar.background": "#908841",
        "statusBar.debuggingBackground": "#414990",
        "statusBar.debuggingForeground": "#e7e7e7",
        "statusBar.foreground": "#15202b",
        "statusBarItem.hoverBackground": "#6d6731",
        "statusBarItem.remoteBackground": "#908841",
        "statusBarItem.remoteForeground": "#15202b",
        "titleBar.activeBackground": "#908841",
        "titleBar.activeForeground": "#15202b",
        "titleBar.inactiveBackground": "#90884199",
        "titleBar.inactiveForeground": "#15202b99"
    },
    "peacock.color": "#908841"
}

================================================
FILE: projects/datastar/data-on-click/Program.cs
================================================
var builder = WebApplication.CreateBuilder();

var app = builder.Build();

app.MapGet("/", async context =>
{
    await context.Response.WriteAsync($$"""
    
        
          
          
        
        
            

data-on-click


All signals on this page


        
    
    """);
});
 
app.Run();


================================================
FILE: projects/datastar/data-on-click/README.md
================================================
# data-on-click

This example shows to use `data-on-click` to respond to a `click` event.

================================================
FILE: projects/datastar/data-on-click/data-on-click.csproj
================================================

  
    net10.0
    true
    true
    preview
  
  
    
    
  


================================================
FILE: projects/datastar/data-on-click/data-on-click.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.2.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "data-on-click", "data-on-click.csproj", "{87B22D83-7D5A-7AFC-B2BF-B8F38B24F20F}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{87B22D83-7D5A-7AFC-B2BF-B8F38B24F20F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{87B22D83-7D5A-7AFC-B2BF-B8F38B24F20F}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{87B22D83-7D5A-7AFC-B2BF-B8F38B24F20F}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{87B22D83-7D5A-7AFC-B2BF-B8F38B24F20F}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {639CC6D8-298D-4609-B7E7-319E4D0CCC09}
	EndGlobalSection
EndGlobal


================================================
FILE: projects/datastar/data-on-custom-event/.vscode/settings.json
================================================
{
    "workbench.colorCustomizations": {
        "activityBar.activeBackground": "#b1a853",
        "activityBar.background": "#b1a853",
        "activityBar.foreground": "#15202b",
        "activityBar.inactiveForeground": "#15202b99",
        "activityBarBadge.background": "#e9f5f4",
        "activityBarBadge.foreground": "#15202b",
        "commandCenter.border": "#15202b99",
        "sash.hoverBorder": "#b1a853",
        "statusBar.background": "#908841",
        "statusBar.debuggingBackground": "#414990",
        "statusBar.debuggingForeground": "#e7e7e7",
        "statusBar.foreground": "#15202b",
        "statusBarItem.hoverBackground": "#6d6731",
        "statusBarItem.remoteBackground": "#908841",
        "statusBarItem.remoteForeground": "#15202b",
        "titleBar.activeBackground": "#908841",
        "titleBar.activeForeground": "#15202b",
        "titleBar.inactiveBackground": "#90884199",
        "titleBar.inactiveForeground": "#15202b99"
    },
    "peacock.color": "#908841"
}

================================================
FILE: projects/datastar/data-on-custom-event/Program.cs
================================================
var builder = WebApplication.CreateBuilder();

var app = builder.Build();

app.MapGet("/", async context =>
{
    await context.Response.WriteAsync($$"""
    
        
          
          
        
        
            

data-on-custom-event


All signals on this page


        
    
    """);
});
 
app.Run();


================================================
FILE: projects/datastar/data-on-custom-event/README.md
================================================
# data-on-{custom-event}

This example shows to use `data-on-{custom-event}` to handle custom even on three different occasion, local event, bubbling event, and event handle attached to `window`.

================================================
FILE: projects/datastar/data-on-custom-event/data-on-custom-event.csproj
================================================

  
    net10.0
    true
    true
    preview
  
  
    
    
  


================================================
FILE: projects/datastar/data-on-custom-event/data-on-custom-event.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.2.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "data-on-custom-event", "data-on-custom-event.csproj", "{AB81C7FA-4334-510E-6D0E-C365A0959598}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{AB81C7FA-4334-510E-6D0E-C365A0959598}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{AB81C7FA-4334-510E-6D0E-C365A0959598}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{AB81C7FA-4334-510E-6D0E-C365A0959598}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{AB81C7FA-4334-510E-6D0E-C365A0959598}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {FCD60C3A-F84A-48CF-8DF1-6EC35DA327F1}
	EndGlobalSection
EndGlobal


================================================
FILE: projects/datastar/data-on-interval/.vscode/settings.json
================================================
{
    "workbench.colorCustomizations": {
        "activityBar.activeBackground": "#b1a853",
        "activityBar.background": "#b1a853",
        "activityBar.foreground": "#15202b",
        "activityBar.inactiveForeground": "#15202b99",
        "activityBarBadge.background": "#e9f5f4",
        "activityBarBadge.foreground": "#15202b",
        "commandCenter.border": "#15202b99",
        "sash.hoverBorder": "#b1a853",
        "statusBar.background": "#908841",
        "statusBar.debuggingBackground": "#414990",
        "statusBar.debuggingForeground": "#e7e7e7",
        "statusBar.foreground": "#15202b",
        "statusBarItem.hoverBackground": "#6d6731",
        "statusBarItem.remoteBackground": "#908841",
        "statusBarItem.remoteForeground": "#15202b",
        "titleBar.activeBackground": "#908841",
        "titleBar.activeForeground": "#15202b",
        "titleBar.inactiveBackground": "#90884199",
        "titleBar.inactiveForeground": "#15202b99"
    },
    "peacock.color": "#908841"
}

================================================
FILE: projects/datastar/data-on-interval/Program.cs
================================================
var builder = WebApplication.CreateBuilder();

var app = builder.Build();

app.MapGet("/", async context =>
{
    await context.Response.WriteAsync($$"""
    
        
          
          
        
        
            

data-on-interval


All signals on this page


        
    
    """);
});
 
app.Run();


================================================
FILE: projects/datastar/data-on-interval/README.md
================================================
# data-on-interval

This example shows to use `data-on-interval` to run expression at regular time. It defaults to one second.

================================================
FILE: projects/datastar/data-on-interval/data-on-interval.csproj
================================================

  
    net10.0
    true
    true
    preview
  
  
    
    
  


================================================
FILE: projects/datastar/data-on-interval/data-on-interval.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.2.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "data-on-interval", "data-on-interval.csproj", "{58308DFE-FA86-0CB6-7337-CEED4519BB14}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{58308DFE-FA86-0CB6-7337-CEED4519BB14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{58308DFE-FA86-0CB6-7337-CEED4519BB14}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{58308DFE-FA86-0CB6-7337-CEED4519BB14}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{58308DFE-FA86-0CB6-7337-CEED4519BB14}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {367CB5C8-3F35-4CDD-86B9-794978841E0D}
	EndGlobalSection
EndGlobal


================================================
FILE: projects/datastar/data-on-signal-patch/.vscode/settings.json
================================================
{
    "workbench.colorCustomizations": {
        "activityBar.activeBackground": "#b1a853",
        "activityBar.background": "#b1a853",
        "activityBar.foreground": "#15202b",
        "activityBar.inactiveForeground": "#15202b99",
        "activityBarBadge.background": "#e9f5f4",
        "activityBarBadge.foreground": "#15202b",
        "commandCenter.border": "#15202b99",
        "sash.hoverBorder": "#b1a853",
        "statusBar.background": "#908841",
        "statusBar.debuggingBackground": "#414990",
        "statusBar.debuggingForeground": "#e7e7e7",
        "statusBar.foreground": "#15202b",
        "statusBarItem.hoverBackground": "#6d6731",
        "statusBarItem.remoteBackground": "#908841",
        "statusBarItem.remoteForeground": "#15202b",
        "titleBar.activeBackground": "#908841",
        "titleBar.activeForeground": "#15202b",
        "titleBar.inactiveBackground": "#90884199",
        "titleBar.inactiveForeground": "#15202b99"
    },
    "peacock.color": "#908841"
}

================================================
FILE: projects/datastar/data-on-signal-patch/Program.cs
================================================
using System.Text.Json;
using System.Text.Json.Nodes;
using System.Linq;
using System.Runtime.CompilerServices;

var builder = WebApplication.CreateBuilder();

var app = builder.Build();

app.MapGet("/sse", (HttpRequest req, CancellationToken cancellationToken) =>
{
    async IAsyncEnumerable GreetingAsync(JsonNode node, [EnumeratorCancellation] CancellationToken cancellationToken)
    {
        var elementIds = node.AsObject().Select(x => x.Key).ToArray();

        await Task.Delay(3000, cancellationToken); // Simulate some delay

        foreach (var elementId in elementIds.Where(x => !x.Equals("showMessage", StringComparison.OrdinalIgnoreCase)))
        {
            yield return $$"""signals { {{elementId}}: 'hello world from the backend with signal {{elementId}}' }""";
        }
    }

    if (req.Headers["Datastar-Request"] != "true")
        return Results.BadRequest("Datastar request header is missing.");

    var data = JsonNode.Parse(req.Query["datastar"]);

    return Results.ServerSentEvents(GreetingAsync(data, cancellationToken), "datastar-patch-signals");
});

app.MapGet("/", async context =>
{
    await context.Response.WriteAsync($$"""
    
        
          
          
        
        
            

data-on-signal-patch


All signals on this page


        
    
    """);
});
 
app.Run();


================================================
FILE: projects/datastar/data-on-signal-patch/README.md
================================================
# data-on-signal-patch

This sample shows how to use `data-on-signal-patch` to run an expression whether one or more signals are patched. `patch` variable is available and contains the details of the patched signals.


``` html  
    

data-on-signal-patch

``` ================================================ FILE: projects/datastar/data-on-signal-patch/data-on-signal-patch.csproj ================================================ net10.0 true true preview ================================================ FILE: projects/datastar/data-on-signal-patch/data-on-signal-patch.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "data-on-signal-patch", "data-on-signal-patch.csproj", "{90B3E4DA-312B-3303-AE46-CD9D6A4F580C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {90B3E4DA-312B-3303-AE46-CD9D6A4F580C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {90B3E4DA-312B-3303-AE46-CD9D6A4F580C}.Debug|Any CPU.Build.0 = Debug|Any CPU {90B3E4DA-312B-3303-AE46-CD9D6A4F580C}.Release|Any CPU.ActiveCfg = Release|Any CPU {90B3E4DA-312B-3303-AE46-CD9D6A4F580C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {8C15A1EF-52B2-4357-AA03-B4AA1FD11F26} EndGlobalSection EndGlobal ================================================ FILE: projects/datastar/data-on-signal-patch-filter/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#b1a853", "activityBar.background": "#b1a853", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#e9f5f4", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#b1a853", "statusBar.background": "#908841", "statusBar.debuggingBackground": "#414990", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#6d6731", "statusBarItem.remoteBackground": "#908841", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#908841", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#90884199", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#908841" } ================================================ FILE: projects/datastar/data-on-signal-patch-filter/Program.cs ================================================ using System.Text.Json; using System.Text.Json.Nodes; using System.Linq; using System.Runtime.CompilerServices; var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.MapGet("/sse", (HttpRequest req, CancellationToken cancellationToken) => { async IAsyncEnumerable GreetingAsync(JsonNode node, [EnumeratorCancellation] CancellationToken cancellationToken) { var elementIds = node.AsObject().Select(x => x.Key).ToArray(); await Task.Delay(3000, cancellationToken); // Simulate some delay foreach (var elementId in elementIds.Where(x => !x.Equals("showMessage", StringComparison.OrdinalIgnoreCase))) { yield return $$"""signals { {{elementId}}: 'hello world from the backend with signal {{elementId}}' }"""; } } if (req.Headers["Datastar-Request"] != "true") return Results.BadRequest("Datastar request header is missing."); var data = JsonNode.Parse(req.Query["datastar"]); return Results.ServerSentEvents(GreetingAsync(data, cancellationToken), "datastar-patch-signals"); }); app.MapGet("/", async context => { await context.Response.WriteAsync($$"""

data-on-signal-patch-filter


All signals on this page


        
    
    """);
});
 
app.Run();


================================================
FILE: projects/datastar/data-on-signal-patch-filter/README.md
================================================
# data-on-signal-patch-filter

This sample shows how to use `data-on-signal-patch-filter` together with `data-on-signal-patch` to run an expression whether one or more **specific** signal patched. `patch` variable is available and contains the details of the patched signals.


``` html  
      

data-on-signal-patch-filter

``` ================================================ FILE: projects/datastar/data-on-signal-patch-filter/data-on-signal-patch-filter.csproj ================================================ net10.0 true true 69e413b0-1b23-4103-9440-f0c2dc7a58b8 preview ================================================ FILE: projects/datastar/data-on-signal-patch-filter/data-on-signal-patch-filter.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "data-on-signal-patch-filter", "data-on-signal-patch-filter.csproj", "{D3622615-5487-0672-5E06-26195AAEC5C2}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {D3622615-5487-0672-5E06-26195AAEC5C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D3622615-5487-0672-5E06-26195AAEC5C2}.Debug|Any CPU.Build.0 = Debug|Any CPU {D3622615-5487-0672-5E06-26195AAEC5C2}.Release|Any CPU.ActiveCfg = Release|Any CPU {D3622615-5487-0672-5E06-26195AAEC5C2}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {E2D77481-A40C-48C8-AC11-71619DBECC74} EndGlobalSection EndGlobal ================================================ FILE: projects/datastar/data-patch-elements-outer/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#b1a853", "activityBar.background": "#b1a853", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#e9f5f4", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#b1a853", "statusBar.background": "#908841", "statusBar.debuggingBackground": "#414990", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#6d6731", "statusBarItem.remoteBackground": "#908841", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#908841", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#90884199", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#908841" } ================================================ FILE: projects/datastar/data-patch-elements-outer/Program.cs ================================================ using System.Text.Json; using System.Text.Json.Nodes; using System.Linq; using System.Runtime.CompilerServices; var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.MapGet("/sse", (HttpRequest req, CancellationToken cancellationToken) => { async IAsyncEnumerable GreetingAsync([EnumeratorCancellation] CancellationToken cancellationToken) { yield return "mode append"; yield return $"""elements
mode outer
"""; await Task.CompletedTask; } if (req.Headers["Datastar-Request"] != "true") return Results.BadRequest("Datastar request header is missing."); return Results.ServerSentEvents(GreetingAsync(cancellationToken), "datastar-patch-elements"); }); app.MapGet("/", async context => { await context.Response.WriteAsync($$"""

mode outer

Loading...
Loading...
"""); }); app.Run(); ================================================ FILE: projects/datastar/data-patch-elements-outer/README.md ================================================ # Hello World Use `data-on-load` attribute with `@get` action to receive SSE event from a Minimal API endpoint that returns `datastar-patch-elements` SSE event type. ================================================ FILE: projects/datastar/data-patch-elements-outer/data-patch-elements-outer.csproj ================================================ net10.0 true true preview ================================================ FILE: projects/datastar/data-patch-elements-outer/data-patch-elements-outer.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "data-patch-elements-outer", "data-patch-elements-outer.csproj", "{D0F07E4B-338A-3EF5-9A0C-40B5F133BFE1}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {D0F07E4B-338A-3EF5-9A0C-40B5F133BFE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D0F07E4B-338A-3EF5-9A0C-40B5F133BFE1}.Debug|Any CPU.Build.0 = Debug|Any CPU {D0F07E4B-338A-3EF5-9A0C-40B5F133BFE1}.Release|Any CPU.ActiveCfg = Release|Any CPU {D0F07E4B-338A-3EF5-9A0C-40B5F133BFE1}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {C6FDD6DD-668F-4B5A-8502-0A8A23108E93} EndGlobalSection EndGlobal ================================================ FILE: projects/datastar/data-ref/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#b1a853", "activityBar.background": "#b1a853", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#e9f5f4", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#b1a853", "statusBar.background": "#908841", "statusBar.debuggingBackground": "#414990", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#6d6731", "statusBarItem.remoteBackground": "#908841", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#908841", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#90884199", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#908841" } ================================================ FILE: projects/datastar/data-ref/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.MapGet("/", async context => { await context.Response.WriteAsync($$"""

data-ref


All signals on this page


        
    
    """);
});
 
app.Run();


================================================
FILE: projects/datastar/data-ref/README.md
================================================
# data-ref

This example shows to use `data-ref` to obtain a reference to the [HTML element](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement) itself. You can then access the properties available on that particular element.

================================================
FILE: projects/datastar/data-ref/data-ref.csproj
================================================

  
    net10.0
    true
    true
    preview
  
  
    
    
  


================================================
FILE: projects/datastar/data-ref/data-ref.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.2.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "data-ref", "data-ref.csproj", "{49316EA2-506C-82AA-AE0B-5B6B2064FDD5}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{49316EA2-506C-82AA-AE0B-5B6B2064FDD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{49316EA2-506C-82AA-AE0B-5B6B2064FDD5}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{49316EA2-506C-82AA-AE0B-5B6B2064FDD5}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{49316EA2-506C-82AA-AE0B-5B6B2064FDD5}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {3F1A0D12-4279-4D7B-9DEE-46E83930682F}
	EndGlobalSection
EndGlobal


================================================
FILE: projects/datastar/data-show/.vscode/settings.json
================================================
{
    "workbench.colorCustomizations": {
        "activityBar.activeBackground": "#b1a853",
        "activityBar.background": "#b1a853",
        "activityBar.foreground": "#15202b",
        "activityBar.inactiveForeground": "#15202b99",
        "activityBarBadge.background": "#e9f5f4",
        "activityBarBadge.foreground": "#15202b",
        "commandCenter.border": "#15202b99",
        "sash.hoverBorder": "#b1a853",
        "statusBar.background": "#908841",
        "statusBar.debuggingBackground": "#414990",
        "statusBar.debuggingForeground": "#e7e7e7",
        "statusBar.foreground": "#15202b",
        "statusBarItem.hoverBackground": "#6d6731",
        "statusBarItem.remoteBackground": "#908841",
        "statusBarItem.remoteForeground": "#15202b",
        "titleBar.activeBackground": "#908841",
        "titleBar.activeForeground": "#15202b",
        "titleBar.inactiveBackground": "#90884199",
        "titleBar.inactiveForeground": "#15202b99"
    },
    "peacock.color": "#908841"
}

================================================
FILE: projects/datastar/data-show/Program.cs
================================================
var builder = WebApplication.CreateBuilder();

var app = builder.Build();

app.MapGet("/", async context =>
{
    await context.Response.WriteAsync($$"""
    
        
          
          
        
        
            

data-show

Now you see me!

All signals on this page


        
    
    """);
});
 
app.Run();


================================================
FILE: projects/datastar/data-show/README.md
================================================
# data-show

This example shows to use `data-show` to run expression to hide or show an element. 

================================================
FILE: projects/datastar/data-show/data-show.csproj
================================================

  
    net10.0
    true
    true
    preview
  
  
    
    
  


================================================
FILE: projects/datastar/data-show/data-show.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.2.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "data-show", "data-show.csproj", "{021935D8-243D-A746-5B88-5FFCA35CD659}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{021935D8-243D-A746-5B88-5FFCA35CD659}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{021935D8-243D-A746-5B88-5FFCA35CD659}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{021935D8-243D-A746-5B88-5FFCA35CD659}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{021935D8-243D-A746-5B88-5FFCA35CD659}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {88B5EBD3-BAE1-4617-8FA0-F163E537D450}
	EndGlobalSection
EndGlobal


================================================
FILE: projects/datastar/data-style/.vscode/settings.json
================================================
{
    "workbench.colorCustomizations": {
        "activityBar.activeBackground": "#b1a853",
        "activityBar.background": "#b1a853",
        "activityBar.foreground": "#15202b",
        "activityBar.inactiveForeground": "#15202b99",
        "activityBarBadge.background": "#e9f5f4",
        "activityBarBadge.foreground": "#15202b",
        "commandCenter.border": "#15202b99",
        "sash.hoverBorder": "#b1a853",
        "statusBar.background": "#908841",
        "statusBar.debuggingBackground": "#414990",
        "statusBar.debuggingForeground": "#e7e7e7",
        "statusBar.foreground": "#15202b",
        "statusBarItem.hoverBackground": "#6d6731",
        "statusBarItem.remoteBackground": "#908841",
        "statusBarItem.remoteForeground": "#15202b",
        "titleBar.activeBackground": "#908841",
        "titleBar.activeForeground": "#15202b",
        "titleBar.inactiveBackground": "#90884199",
        "titleBar.inactiveForeground": "#15202b99"
    },
    "peacock.color": "#908841"
}

================================================
FILE: projects/datastar/data-style/Program.cs
================================================
var builder = WebApplication.CreateBuilder();

var app = builder.Build();

app.MapGet("/", async context =>
{
    await context.Response.WriteAsync($$"""
    
        
          
          
        
        
            

data-style


All signals on this page


            
"""); }); app.Run(); ================================================ FILE: projects/datastar/data-style/README.md ================================================ # data-style This example shows how to set inline CSS style using `data-style`. ================================================ FILE: projects/datastar/data-style/data-style.csproj ================================================ net10.0 true true preview ================================================ FILE: projects/datastar/data-style/data-style.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "data-style", "data-style.csproj", "{9C0931EA-E0B8-38F6-8B84-ADB2A6AA73EE}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {9C0931EA-E0B8-38F6-8B84-ADB2A6AA73EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9C0931EA-E0B8-38F6-8B84-ADB2A6AA73EE}.Debug|Any CPU.Build.0 = Debug|Any CPU {9C0931EA-E0B8-38F6-8B84-ADB2A6AA73EE}.Release|Any CPU.ActiveCfg = Release|Any CPU {9C0931EA-E0B8-38F6-8B84-ADB2A6AA73EE}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {EB9ECD10-D9BE-4741-87E5-8E0A1B5C14C2} EndGlobalSection EndGlobal ================================================ FILE: projects/datastar/global.json ================================================ { "sdk": { "version": "10.0.100", "rollForward": "major" } } ================================================ FILE: projects/datastar/hello-world/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#b1a853", "activityBar.background": "#b1a853", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#e9f5f4", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#b1a853", "statusBar.background": "#908841", "statusBar.debuggingBackground": "#414990", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#6d6731", "statusBarItem.remoteBackground": "#908841", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#908841", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#90884199", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#908841" } ================================================ FILE: projects/datastar/hello-world/Program.cs ================================================ using System.Text.Json; using System.Text.Json.Nodes; using System.Linq; using System.Runtime.CompilerServices; var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.MapGet("/sse", (HttpRequest req, CancellationToken cancellationToken) => { async IAsyncEnumerable GreetingAsync(JsonNode node, [EnumeratorCancellation] CancellationToken cancellationToken) { var elementIds = node.AsObject().Select(x => x.Key).ToArray(); foreach (var elementId in elementIds) yield return $"""elements
{node[elementId]} {DateTime.Now}
"""; await Task.CompletedTask; } if (req.Headers["Datastar-Request"] != "true") return Results.BadRequest("Datastar request header is missing."); var data = JsonNode.Parse(req.Query["datastar"]); return Results.ServerSentEvents(GreetingAsync(data, cancellationToken), "datastar-patch-elements"); }); app.MapGet("/", async context => { await context.Response.WriteAsync($$"""

Datastar SSE Hello World

Loading...
Loading...
"""); }); app.Run(); ================================================ FILE: projects/datastar/hello-world/README.md ================================================ # Hello World Use `data-on-load` attribute with `@get` action to receive SSE event from a Minimal API endpoint that returns `datastar-patch-elements` SSE event type. ================================================ FILE: projects/datastar/hello-world/hello-world.csproj ================================================ net10.0 true true preview ================================================ FILE: projects/datastar/hello-world/hello-world.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "hello-world", "hello-world.csproj", "{26DB1FEF-CF56-783B-DE0F-C184991DD0A7}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {26DB1FEF-CF56-783B-DE0F-C184991DD0A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {26DB1FEF-CF56-783B-DE0F-C184991DD0A7}.Debug|Any CPU.Build.0 = Debug|Any CPU {26DB1FEF-CF56-783B-DE0F-C184991DD0A7}.Release|Any CPU.ActiveCfg = Release|Any CPU {26DB1FEF-CF56-783B-DE0F-C184991DD0A7}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {A73CDFED-8771-49B1-9EA3-85A6AC0A6746} EndGlobalSection EndGlobal ================================================ FILE: projects/dependency-injection/README.md ================================================ # Dependency Injection (6) ASP.NET Core lives and dies by DI. It relies on `Microsoft.Extensions.DependencyInjection` library. * [Dependency Injection 1 - The basic](/projects/dependency-injection/dependency-injection-1) Demonstrate the three lifetime registrations for the out of the box DI functionality: singleton (one and only forever), scoped (one in every request) and transient (new everytime). * [Dependency Injection 2 - IServiceProvider](/projects/dependency-injection/dependency-injection-2) `IServiceProvider` is a service locator. It allows you to obtain objects from the dependency injection system. * [Dependency Injection 3 - Easy registration](/projects/dependency-injection/dependency-injection-3) Register all objects configured by classes that implements a specific interface (`IBootstrap` in this example). This is useful when you have large amount of classes in your project that needs registration. You can register them near where they are (usually in the same folder) instead of registering them somewhere in a giant registration function. * [Lazy Type](/projects/dependency-injection/dependency-injection-4) This shows how to register [Lazy](https://docs.microsoft.com/en-us/dotnet/api/system.lazy-1?view=net-5.0) types in the built in Dependency Injection. ## Keyed Services * [Keyed Services in Minimal API](keyed-service) Use `IServiceProvider.GetRequiredKeyedService(key)` to get different type of implementation instances based on string key in Minimal API * [Keyed Services in MVC](keyed-service-2) Use `IServiceProvider.GetRequiredKeyedService(key)` to get different type of implementation instances based on string key in MVC dotnet8 ================================================ FILE: projects/dependency-injection/build.bat ================================================ dotnet build dependency-injection-1 dotnet build dependency-injection-2 dotnet build dependency-injection-3 dotnet build dependency-injection-4 dotnet build keyed-service dotnet build keyed-service-2 ================================================ FILE: projects/dependency-injection/build.sh ================================================ #!/bin/bash dotnet build dependency-injection-1 dotnet build dependency-injection-2 dotnet build dependency-injection-3 dotnet build dependency-injection-4 dotnet build keyed-service dotnet build keyed-service-2 ================================================ FILE: projects/dependency-injection/dependency-injection-1/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddSingleton(x => new SingletonDate()); builder.Services.AddTransient(x => new TransientDate()); builder.Services.AddScoped(x => new ScopedDate()); var app = builder.Build(); app.Use(async (context, next) => { var single = context.RequestServices.GetService(); var scoped = context.RequestServices.GetService(); var transient = context.RequestServices.GetService(); await context.Response.WriteAsync("Open this page in two tabs \n"); await context.Response.WriteAsync("Keep refreshing and you will see the three different DI behaviors\n"); await context.Response.WriteAsync("----------------------------------\n"); await context.Response.WriteAsync($"Singleton : {single.Date.ToString("MM/dd/yyyy hh:mm:ss.fff tt")}\n"); await context.Response.WriteAsync($"Scoped: {scoped.Date.ToString("MM/dd/yyyy hh:mm:ss.fff tt")}\n"); await context.Response.WriteAsync($"Transient: {transient.Date.ToString("MM/dd/yyyy hh:mm:ss.fff tt")}\n"); await next.Invoke(); }); app.Run(async (context) => { await Task.Delay(100);//delay for 100 ms var single = context.RequestServices.GetService(); var scoped = context.RequestServices.GetService(); var transient = context.RequestServices.GetService(); await context.Response.WriteAsync("----------------------------------\n"); await context.Response.WriteAsync($"Singleton : {single.Date.ToString("MM/dd/yyyy hh:mm:ss.fff tt")}\n"); await context.Response.WriteAsync($"Scoped: {scoped.Date.ToString("MM/dd/yyyy hh:mm:ss.fff tt")}\n"); await context.Response.WriteAsync($"Transient: {transient.Date.ToString("MM/dd/yyyy hh:mm:ss.fff tt")}\n"); }); app.Run(); public class SingletonDate { public DateTime Date { get; set; } = DateTime.Now; } public class TransientDate { public DateTime Date { get; set; } = DateTime.Now; } public class ScopedDate { public DateTime Date { get; set; } = DateTime.Now; } ================================================ FILE: projects/dependency-injection/dependency-injection-1/dependency-injection-1.csproj ================================================ net10.0 true preview ================================================ FILE: projects/dependency-injection/dependency-injection-2/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddSingleton(); builder.Services.AddTransient(); builder.Services.AddScoped(); builder.Services.AddTransient(); var app = builder.Build(); app.Use(async (context, next) => { var dateProvider = context.RequestServices.GetService(); var single = dateProvider.Singleton; var scoped = dateProvider.Scoped; var transient = dateProvider.Transient; ; await context.Response.WriteAsync("Open this page in two tabs \n"); await context.Response.WriteAsync("Keep refreshing and you will see the three different DI behaviors\n"); await context.Response.WriteAsync("----------------------------------\n"); await context.Response.WriteAsync($"Singleton : {single.Date.ToString("MM/dd/yyyy hh:mm:ss.fff tt")}\n"); await context.Response.WriteAsync($"Scoped: {scoped.Date.ToString("MM/dd/yyyy hh:mm:ss.fff tt")}\n"); await context.Response.WriteAsync($"Transient: {transient.Date.ToString("MM/dd/yyyy hh:mm:ss.fff tt")}\n"); await next(context); }); app.Run(async (context) => { await Task.Delay(100);//delay for 100 ms var dateProvider = context.RequestServices.GetService(); var single = dateProvider.Singleton; var scoped = dateProvider.Scoped; var transient = dateProvider.Transient; ; await context.Response.WriteAsync("----------------------------------\n"); await context.Response.WriteAsync($"Singleton : {single.Date.ToString("MM/dd/yyyy hh:mm:ss.fff tt")}\n"); await context.Response.WriteAsync($"Scoped: {scoped.Date.ToString("MM/dd/yyyy hh:mm:ss.fff tt")}\n"); await context.Response.WriteAsync($"Transient: {transient.Date.ToString("MM/dd/yyyy hh:mm:ss.fff tt")}\n"); }); app.Run(); public class DateProvider { readonly IServiceProvider _provider; public SingletonDate Singleton => _provider.GetService(); public ScopedDate Scoped => _provider.GetService(); public TransientDate Transient => _provider.GetService(); public DateProvider(IServiceProvider provider) { _provider = provider; } } public class SingletonDate { public DateTime Date { get; set; } = DateTime.Now; } public class TransientDate { public DateTime Date { get; set; } = DateTime.Now; } public class ScopedDate { public DateTime Date { get; set; } = DateTime.Now; } ================================================ FILE: projects/dependency-injection/dependency-injection-2/README.md ================================================ # IServiceProvider `IServiceProvider` is a service locator. It allows you to obtain objects from the dependency injection system. It is considered a bad practice in common scenario. It is better to be explicit of your dependency in your constructor e.g. `MyObject(ILogger logger, IStringLocalizer)` than using `MyObject(IServiceProvider provider)` and obtain those objects via the provider. However when you encounter a situation where using a service locator is needed, `IServiceProvider` is there for you. ================================================ FILE: projects/dependency-injection/dependency-injection-2/dependency-injection-2.csproj ================================================ net10.0 true preview ================================================ FILE: projects/dependency-injection/dependency-injection-3/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); //Register all objects configured by classes that implements IBootstrap. //This is useful when you have large amount of classes in your project that needs //registration. You can register them near where they are (usually in the same folder) instead of //registering them somewhere in a giant registration function var type = typeof(IBootstrap); var types = System.AppDomain.CurrentDomain.GetAssemblies() .SelectMany(x => x.GetTypes()) .Where(p => type.IsAssignableFrom(p) && p.IsClass); foreach (var p in types) { var config = (IBootstrap)System.Activator.CreateInstance(p); config.Register(builder.Services); } var app = builder.Build(); app.Run(context => { var person = context.RequestServices.GetService(); var greeting = context.RequestServices.GetService(); return context.Response.WriteAsync($"{greeting.Message} {person.Name}"); }); app.Run(); public interface IBootstrap { void Register(IServiceCollection services); } public class Registration1 : IBootstrap { public void Register(IServiceCollection services) { services.AddTransient(x => new Person { Name = "Mahmoud" }); //continue registering all your classes here } } //This is a contrite sample but it demonstrates that you can have these two registration classes in farflung folders near the classes //they are registrating. public class Registration2 : IBootstrap { public void Register(IServiceCollection services) { services.AddTransient(x => new Greeting { Message = "Good Morning" }); //continue registering all your classes here } } public class Person { public string Name { get; set; } } public class Greeting { public string Message { get; set; } } ================================================ FILE: projects/dependency-injection/dependency-injection-3/dependency-injection-3.csproj ================================================ net10.0 true preview ================================================ FILE: projects/dependency-injection/dependency-injection-4/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddTransient(); builder.Services.AddTransient>(x => new Lazy(x.GetRequiredService())); var app = builder.Build(); app.Run(context => { var tell = context.RequestServices.GetService>(); return context.Response.WriteAsync($"{tell.Value.Time}"); }); app.Run(); public class TellTime { public DateTime Time => DateTime.Now; } ================================================ FILE: projects/dependency-injection/dependency-injection-4/README.md ================================================ # Use Lazy type in Microsoft Dependency Injection This example shows how to register types encapsulated using [Lazy Type](https://docs.microsoft.com/en-us/dotnet/api/system.lazy-1?view=net-5.0). This is very useful if you are registering large or resource-intensive object. ================================================ FILE: projects/dependency-injection/dependency-injection-4/dependency-injection-4.csproj ================================================ net10.0 true preview ================================================ FILE: projects/dependency-injection/keyed-service/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddKeyedSingleton("morning"); builder.Services.AddKeyedSingleton("day"); builder.Services.AddKeyedSingleton("evening"); var app = builder.Build(); app.MapGet("/", (IServiceProvider provider) => { string GetServiceKey() { var currentTime = DateTime.Now; if (currentTime.Hour < 12) return "morning"; else if (currentTime.Hour < 18) return "day"; else return "evening"; } var key = GetServiceKey(); var greeting = provider.GetRequiredKeyedService(key); return Results.Content($$""" {{ greeting.Message }} """, "text/html"); }); app.Run(); interface IGreeting { string Message { get; } } public class MorningGreeting : IGreeting { public string Message => "Good morning"; } public class DayGreeting : IGreeting { public string Message => "Good day"; } public class EveningGreeting : IGreeting { public string Message => "Good evening"; } ================================================ FILE: projects/dependency-injection/keyed-service/README.md ================================================ # Using Keyed Service with Minimal API Use `IServiceProvider.GetRequiredKeyedService(key)` to get different type of implementation instances based on string key. ================================================ FILE: projects/dependency-injection/keyed-service/keyed-service.csproj ================================================ net10.0 true preview ================================================ FILE: projects/dependency-injection/keyed-service/keyed-service.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "keyed-service", "keyed-service.csproj", "{1A4EF9A9-14AE-464D-8431-B35DA014E9D7}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {1A4EF9A9-14AE-464D-8431-B35DA014E9D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1A4EF9A9-14AE-464D-8431-B35DA014E9D7}.Debug|Any CPU.Build.0 = Debug|Any CPU {1A4EF9A9-14AE-464D-8431-B35DA014E9D7}.Release|Any CPU.ActiveCfg = Release|Any CPU {1A4EF9A9-14AE-464D-8431-B35DA014E9D7}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {2D48A138-5215-428D-8CF4-56F21D0D4194} EndGlobalSection EndGlobal ================================================ FILE: projects/dependency-injection/keyed-service-2/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddKeyedSingleton("morning"); builder.Services.AddKeyedSingleton("day"); builder.Services.AddKeyedSingleton("evening"); builder.Services.AddControllers(); var app = builder.Build(); app.MapControllers(); app.Run(); public class HomeController: ControllerBase { readonly IServiceProvider _keyProvider; public HomeController(IServiceProvider keyProvider) { _keyProvider = keyProvider; } [HttpGet("/")] public IActionResult Index() { string GetServiceKey() { var currentTime = DateTime.Now; if (currentTime.Hour < 12) return "morning"; else if (currentTime.Hour < 18) return "day"; else return "evening"; } var key = GetServiceKey(); var greeting = _keyProvider.GetRequiredKeyedService(key); return Content($$""" {{ greeting.Message }} """, "text/html"); } } interface IGreeting { string Message { get; } } public class MorningGreeting : IGreeting { public string Message => "Good morning"; } public class DayGreeting : IGreeting { public string Message => "Good day"; } public class EveningGreeting : IGreeting { public string Message => "Good evening"; } ================================================ FILE: projects/dependency-injection/keyed-service-2/README.md ================================================ # Using Keyed Service with MVC Use `IServiceProvider.GetRequiredKeyedService(key)` to get different type of implementation instances based on string key. ================================================ FILE: projects/dependency-injection/keyed-service-2/keyed-service-2.csproj ================================================ net10.0 true preview ================================================ FILE: projects/dependency-injection/keyed-service-2/keyed-service-2.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "keyed-service-2", "keyed-service-2.csproj", "{998CB752-9F46-470D-A2C6-669C3D23897F}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {998CB752-9F46-470D-A2C6-669C3D23897F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {998CB752-9F46-470D-A2C6-669C3D23897F}.Debug|Any CPU.Build.0 = Debug|Any CPU {998CB752-9F46-470D-A2C6-669C3D23897F}.Release|Any CPU.ActiveCfg = Release|Any CPU {998CB752-9F46-470D-A2C6-669C3D23897F}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {F6B469E4-30D1-4F0D-896D-139274C08BE2} EndGlobalSection EndGlobal ================================================ FILE: projects/device-detection/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#4b11ba", "activityBar.background": "#4b11ba", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#000000", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#4b11ba", "statusBar.background": "#380d8b", "statusBar.debuggingBackground": "#608b0d", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#4b11ba", "statusBarItem.remoteBackground": "#380d8b", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#380d8b", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#380d8b99", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#380d8b" } ================================================ FILE: projects/device-detection/Program.cs ================================================ using Wangkanai.Detection; using Wangkanai.Detection.Services; var builder = WebApplication.CreateBuilder(); builder.Services.AddDetection(); var app = builder.Build(); //These are the four default services available at Configure app.Run(context => { var device = context.RequestServices.GetService(); return context.Response.WriteAsync($@" Useragent : {device.UserAgent} Device Type: {device.Device.Type} "); }); app.Run(); ================================================ FILE: projects/device-detection/README.md ================================================ # Device Detection This is the most basic device detection. You will be able to detect whether the client is a desktop or a mobile client. dotnet8 ================================================ FILE: projects/device-detection/device-detection.csproj ================================================ net10.0 true preview ================================================ FILE: projects/device-detection/device-detection.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "device-detection", "device-detection.csproj", "{BCDDC43B-6734-48D6-856A-DC8D744EFC98}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {BCDDC43B-6734-48D6-856A-DC8D744EFC98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BCDDC43B-6734-48D6-856A-DC8D744EFC98}.Debug|Any CPU.Build.0 = Debug|Any CPU {BCDDC43B-6734-48D6-856A-DC8D744EFC98}.Release|Any CPU.ActiveCfg = Release|Any CPU {BCDDC43B-6734-48D6-856A-DC8D744EFC98}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {7A72F4D1-1EBB-4C53-98DD-B5676BAC6F5F} EndGlobalSection EndGlobal ================================================ FILE: projects/diagnostics/README.md ================================================ # Diagnostics (5) * [Welcome Page](/projects/diagnostics/diagnostics-1) Simply show a welcome page to indicate that the app is working properly. This sample does not use a startup class simply because it's just a one line code. * [Developer Exception Page](/projects/diagnostics/diagnostics-2) Show any unhandled exception in a nicely formatted page with error details. Only use this in development environment! * [Custom Global Exception Page](/projects/diagnostics/diagnostics-3) Use ```IExceptionHandlerFeature``` feature provided by ```Microsoft.AspNetCore.Diagnostics.Abstractions``` to create custom global exception page. * [Custom Global Exception Page - 2](/projects/diagnostics/diagnostics-4) Similar to the previous one except that that we use the custom error page defined in separate path. * [Status Pages](/projects/diagnostics/diagnostics-5) Use ```UseStatusCodePagesWithRedirects```. **Beware:** This extension method handles your 5xx return status code by redirecting it to a specific url. It will not handle your application exception in general (for this use ```UseExceptionHandler``` - check previous samples). dotnet8 ================================================ FILE: projects/diagnostics/build.bat ================================================ dotnet build diagnostics-1 dotnet build diagnostics-2 dotnet build diagnostics-3 dotnet build diagnostics-4 dotnet build diagnostics-5 ================================================ FILE: projects/diagnostics/build.sh ================================================ #!/bin/bash dotnet build diagnostics-1 dotnet build diagnostics-2 dotnet build diagnostics-3 dotnet build diagnostics-4 dotnet build diagnostics-5 ================================================ FILE: projects/diagnostics/diagnostics-1/Program.cs ================================================ var app = WebApplication.Create(); app.UseWelcomePage(); app.Run(); ================================================ FILE: projects/diagnostics/diagnostics-1/diagnostics.csproj ================================================ net10.0 true preview ================================================ FILE: projects/diagnostics/diagnostics-2/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/diagnostics-2.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart", "launchBrowser": { "enabled": true, "args": "${auto-detect-url}", "windows": { "command": "cmd.exe", "args": "/C start ${auto-detect-url}" }, "osx": { "command": "open" }, "linux": { "command": "xdg-open" } }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ,] } ================================================ FILE: projects/diagnostics/diagnostics-2/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/diagnostics-2.csproj" ], "problemMatcher": "$msCompile" } ] } ================================================ FILE: projects/diagnostics/diagnostics-2/Program.cs ================================================ var app = WebApplication.Create(); app.UseDeveloperExceptionPage(); app.Run(_ => throw new ApplicationException("Fake exception")); app.Run(); ================================================ FILE: projects/diagnostics/diagnostics-2/diagnostics-2.csproj ================================================ net10.0 true preview ================================================ FILE: projects/diagnostics/diagnostics-3/Program.cs ================================================ using System.Text.Encodings.Web; using Microsoft.AspNetCore.Diagnostics; var app = WebApplication.Create(); app.UseExceptionHandler(errorApp => { errorApp.Run(async context => { context.Response.StatusCode = 500; context.Response.ContentType = "text/html"; var feature = context.Features.Get(); if (feature != null) { await context.Response.WriteAsync($"

Custom Error Page

{HtmlEncoder.Default.Encode(feature.Error.Message)}"); await context.Response.WriteAsync($"
{HtmlEncoder.Default.Encode(feature.Error.Source)}"); } }); }); //trigger exception app.Run(context => throw new Exception("Hello World Exception")); app.Run(); ================================================ FILE: projects/diagnostics/diagnostics-3/diagnostics-3.csproj ================================================ net10.0 true preview ================================================ FILE: projects/diagnostics/diagnostics-4/Program.cs ================================================ using System.Text.Encodings.Web; using Microsoft.AspNetCore.Diagnostics; var app = WebApplication.Create(); app.UseExceptionHandler("/GlobalError"); app.Map("/GlobalError", errorApp => { errorApp.Run(async context => { context.Response.StatusCode = 500; context.Response.ContentType = "text/html"; var feature = context.Features.Get(); if (feature != null) { await context.Response.WriteAsync($"

Custom Error Page

{HtmlEncoder.Default.Encode(feature.Error.Message)}"); await context.Response.WriteAsync($"
{HtmlEncoder.Default.Encode(feature.Error.Source)}"); } }); }); app.Run(context => throw new ApplicationException("Hello World Exception")); app.Run(); ================================================ FILE: projects/diagnostics/diagnostics-4/diagnostics-4.csproj ================================================ net10.0 true preview ================================================ FILE: projects/diagnostics/diagnostics-5/Program.cs ================================================ var app = WebApplication.Create(); app.UseStatusCodePagesWithRedirects("/error?status={0}"); app.Map("/error", errorApp => { errorApp.Run(async context => { await context.Response.WriteAsync($"This is a redirected error message status {context.Request.Query["status"]}"); }); }); app.Run(context => { context.Response.StatusCode = 500;//change this as necessary return Task.CompletedTask; }); app.Run(); ================================================ FILE: projects/diagnostics/diagnostics-5/diagnostics-5.csproj ================================================ net10.0 true preview ================================================ FILE: projects/elsa/README.md ================================================ # ELSA Workflow (14) ELSA is a workflow engine for .NET Core. It is a library that can be used to build workflow applications. It is also a standalone application that can be used to run workflows. It is included in this ASP.NET Core samples repository because I believe that a workflow engine can play a very substiantial role in the future of ASP.NET Core applications. ## Activities - [WriteLine Activity](writeline-activity) This sample demonstrates a very simple workflow Activity that writes a line to the console. - [Sequence Activity](sequence-activity) This sample demonstrates the `Sequence` activity. The `Sequence` activity is a container activity that contains other activities. The `Sequence` activity executes the activities in the order they are added to the workflow. - [If Activity](if-activity) This sample demonstrates the `If` activity. The `If` activity is a container activity that contains two activities. The first activity is executed if the condition is true. The second activity is executed if the condition is false. - [SetVariable Activity](setvariable-activity) This sample demonstrates the `SetVariable` activity. The `SetVariable` activity is used to set a variable in the workflow. - [While Activity](while-activity) This sample demonstrates the `While` activity. The `While` activity has a `Condition` property that is used to specify the condition on when the workflow continues to be executed. - [For Activity](for-activity) This samples demonstrates the `For` activity. We use `For` activity to execute a workflow in a loop within specified parameters. - [ForEach Activity](foreach-activity) This samples demonstrates the use of `ForEach` activity. We use `ForEach` activity to execute a workflow in a loop based on a given collection. - [Composite Activity](composite-activity) Composite Activity is a way to encapsulate a set of activities into a single activity. - [Fork Activity](fork-activity) Fork Activity allows you to split a workflow into two or more branches, each with its own set of actions. All the branches in the workflow must be completed before the worfklow con continue to the next step after the fork. - [Fork Activity 2](fork-activity-2) This sample demonstrates on how to set and use variables in a fork activity. ## Workflow - [Workflow with variables](workflow) This sample demonstrates on how to create a custom workflow and pass a variable to it. - [Workflow custom properties](workflow-2) This sample shows how to set up custom properties for a workflow. We also use the basic workflow properties such as `DefinitionId`, `Description`, etc. - [Workflow that return result](workflow-3) This sample demonstrates on how to create a workflow that returns result. - [Workflow with runtime inputs](workflow-4) This sample demonstrates on how to create a workflow that take runtime inputs. - [Workflow data via constructor](workflow-5) This sample demonstrates on how to pass values to a workflow via constructor. ================================================ FILE: projects/elsa/build.bat ================================================ dotnet build composite-activity dotnet build for-activity dotnet build foreach-activity dotnet build fork-activity dotnet build fork-activity-2 dotnet build if-activity dotnet build readline-activity dotnet build sequence-activity dotnet build setname-activity dotnet build setvariable-activity dotnet build while-activity dotnet build workflow dotnet build workflow-2 dotnet build workflow-3 dotnet build workflow-4 dotnet build workflow-5 dotnet build writeline-activity ================================================ FILE: projects/elsa/build.sh ================================================ #!/bin/bash dotnet build composite-activity dotnet build for-activity dotnet build foreach-activity dotnet build fork-activity dotnet build fork-activity-2 dotnet build if-activity dotnet build readline-activity dotnet build sequence-activity dotnet build setname-activity dotnet build setvariable-activity dotnet build while-activity dotnet build workflow dotnet build workflow-2 dotnet build workflow-3 dotnet build workflow-4 dotnet build workflow-5 dotnet build writeline-activity ================================================ FILE: projects/elsa/composite-activity/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#9ecee7", "activityBar.background": "#9ecee7", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#d34ca5", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#9ecee7", "statusBar.background": "#75b9dd", "statusBar.debuggingBackground": "#dd9975", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#4ca4d3", "statusBarItem.remoteBackground": "#75b9dd", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#75b9dd", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#75b9dd99", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#75b9dd" } ================================================ FILE: projects/elsa/composite-activity/Program.cs ================================================ using System.Security.Cryptography; using Elsa.Extensions; using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Memory; var services = new ServiceCollection(); services.AddElsa(); var serviceProvider = services.BuildServiceProvider(); var runner = serviceProvider.GetRequiredService(); var magicNumber = new Variable("magic-number", 0); var workflow = new Sequence { Variables = { magicNumber }, Activities = { new GetRandom { Result = new(magicNumber) }, new WriteLine(ctx => { var number = magicNumber.Get(ctx); return $"The magic number is { number }"; }) } }; await runner.RunAsync(workflow); class GetRandom : Composite { private readonly Variable _random = new(); public GetRandom() { var random = RandomNumberGenerator.Create(); var bytes = new byte[sizeof(int)]; random.GetNonZeroBytes(bytes); var result = BitConverter.ToInt32(bytes); Root = new Sequence { Variables = { _random }, Activities = { new WriteLine($"{nameof(GetRandom)} compositve is generating random information"), new SetVariable(_random,result) } }; } protected override void OnCompleted(ActivityCompletedContext context) { var random = _random.Get(context.ChildContext); context.ChildContext.Set(Result, random); } } ================================================ FILE: projects/elsa/composite-activity/README.md ================================================ # Composite Activity Composite Activity is a way to encapsulate a set of activities into a single activity. It is a way to reuse activities in different workflows. ================================================ FILE: projects/elsa/composite-activity/composite-activity.csproj ================================================ net10.0 true ASP0000 preview ================================================ FILE: projects/elsa/composite-activity/composite-activity.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "composite-activity", "composite-activity.csproj", "{87938C62-2C03-49C9-B20B-B2D249A2F4E3}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {87938C62-2C03-49C9-B20B-B2D249A2F4E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {87938C62-2C03-49C9-B20B-B2D249A2F4E3}.Debug|Any CPU.Build.0 = Debug|Any CPU {87938C62-2C03-49C9-B20B-B2D249A2F4E3}.Release|Any CPU.ActiveCfg = Release|Any CPU {87938C62-2C03-49C9-B20B-B2D249A2F4E3}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {A4DD1435-B4CF-4661-B065-9AF8006DE99B} EndGlobalSection EndGlobal ================================================ FILE: projects/elsa/for-activity/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#2bec95", "activityBar.background": "#2bec95", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#b66df2", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#2bec95", "statusBar.background": "#13d17b", "statusBar.debuggingBackground": "#d11369", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#0fa25f", "statusBarItem.remoteBackground": "#13d17b", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#13d17b", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#13d17b99", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#13d17b" } ================================================ FILE: projects/elsa/for-activity/Program.cs ================================================ using Elsa.Extensions; using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Memory; using Elsa.Workflows.Models; var services = new ServiceCollection(); services.AddElsa(); var serviceProvider = services.BuildServiceProvider(); var runner = serviceProvider.GetRequiredService(); var counter = new Variable("counter", 1); var workflow = new Sequence { Variables = { counter }, Activities = { new For(start:1, end:10, step:1) { CurrentValue = new Output(counter), Body = new Sequence { Activities = { new WriteLine(context => $"Counter {counter.Get(context)}"), new SetVariable(counter, context => counter.Get(context) + 1) } } } } }; await runner.RunAsync(workflow); ================================================ FILE: projects/elsa/for-activity/README.md ================================================ # For activity We use `For` activity to execute a workflow in loop within specified parameters. The `For` activity has a `Start` property that is used to specify the start value. The `For` activity also has a `End` property that is used to specify the end value. The `For` activity also has a `Step` property that is used to specify the step value. The `For` activity also has a `Body` property that is used to specify the body of the `For` activity. We also use `Variable` class. The `Variable` class is used to create a variable that can be used in the workflow. The `Variable` class has a `Name` property that is used to specify the name of the variable. The `Variable` class also has a `Value` property that is used to specify the value of the variable. ================================================ FILE: projects/elsa/for-activity/for-activity.csproj ================================================ net10.0 true ASP0000 preview ================================================ FILE: projects/elsa/for-activity/for-activity.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "for-activity", "for-activity.csproj", "{395A446F-7329-4B18-A76E-B85D013C7A93}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {395A446F-7329-4B18-A76E-B85D013C7A93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {395A446F-7329-4B18-A76E-B85D013C7A93}.Debug|Any CPU.Build.0 = Debug|Any CPU {395A446F-7329-4B18-A76E-B85D013C7A93}.Release|Any CPU.ActiveCfg = Release|Any CPU {395A446F-7329-4B18-A76E-B85D013C7A93}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {4068C2BE-FEE8-4425-B0B2-466760C02F01} EndGlobalSection EndGlobal ================================================ FILE: projects/elsa/foreach-activity/Program.cs ================================================ using Elsa.Extensions; using Elsa.Workflows.Activities; using Elsa.Workflows; using Elsa.Workflows.Memory; using Elsa.Workflows.Models; var services = new ServiceCollection(); services.AddElsa(); var serviceProvider = services.BuildServiceProvider(); var runner = serviceProvider.GetRequiredService(); var counter = new Variable("current", 0); var numbers = new[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" }; var workflow = new Sequence { Variables = { counter }, Activities = { new ForEach() { Items = new Input>(numbers), CurrentValue = new Output(counter), Body = new Sequence { Activities = { new WriteLine(context => $"Counter {counter.Get(context)}") } } } } }; await runner.RunAsync(workflow); ================================================ FILE: projects/elsa/foreach-activity/README.md ================================================ # ForEach activity We use `ForEach` activity to execute a workflow in loop based on a given collection. The `ForEach` activity has a `Body` property that is used to specify the workflow to be executed in loop. The `ForEach` activity also has a `Values` property that is used to specify the enumerable collection. We also use `Variable` class. The `Variable` class is used to create a variable that can be used in the workflow. The `Variable` class has a `Name` property that is used to specify the name of the variable. The `Variable` class also has a `Value` property that is used to specify the value of the variable. ================================================ FILE: projects/elsa/foreach-activity/foreach-activity.csproj ================================================ net10.0 true ASP0000 preview ================================================ FILE: projects/elsa/foreach-activity/foreach-activity.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "foreach-activity", "foreach-activity.csproj", "{9ED18A15-FE53-441E-AE96-8F0CCDB89881}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {9ED18A15-FE53-441E-AE96-8F0CCDB89881}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9ED18A15-FE53-441E-AE96-8F0CCDB89881}.Debug|Any CPU.Build.0 = Debug|Any CPU {9ED18A15-FE53-441E-AE96-8F0CCDB89881}.Release|Any CPU.ActiveCfg = Release|Any CPU {9ED18A15-FE53-441E-AE96-8F0CCDB89881}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {3E633A85-02E5-4554-B406-43B08E0B7088} EndGlobalSection EndGlobal ================================================ FILE: projects/elsa/fork-activity/Program.cs ================================================ using Elsa.Extensions; using Elsa.Workflows.Activities; using Elsa.Workflows; using Elsa.Workflows.Memory; var services = new ServiceCollection(); services.AddElsa(); var serviceProvider = services.BuildServiceProvider(); var runner = serviceProvider.GetRequiredService(); var magicNumber = new Variable("magic-number", 0); var workflow = new Sequence { Activities = { new WriteLine("Start workflow before"), new Fork { Branches = { new Sequence { Activities = { new WriteLine("Branch 1 Step 1"), new WriteLine("Branch 1 Step 2") } }, new Sequence { Activities = { new WriteLine("Branch 2 Step 1"), new WriteLine("Branch 2 Step 2"), new WriteLine("Branch 2 Step 3"), } } } }, new WriteLine("Finish workflow") } }; await runner.RunAsync(workflow); ================================================ FILE: projects/elsa/fork-activity/README.md ================================================ # Fork Activity Fork Activity allows you to split a workflow into two or more branches, each with its own set of actions. All the branches in the workflow must be completed before the worfklow con continue to the next step after the fork. ================================================ FILE: projects/elsa/fork-activity/fork-activity.csproj ================================================ net10.0 true ASP0000 preview ================================================ FILE: projects/elsa/fork-activity/fork-activity.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "fork-activity", "fork-activity.csproj", "{FFDDFC87-A449-498C-8F65-918E79232B8E}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {FFDDFC87-A449-498C-8F65-918E79232B8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FFDDFC87-A449-498C-8F65-918E79232B8E}.Debug|Any CPU.Build.0 = Debug|Any CPU {FFDDFC87-A449-498C-8F65-918E79232B8E}.Release|Any CPU.ActiveCfg = Release|Any CPU {FFDDFC87-A449-498C-8F65-918E79232B8E}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {B70D532E-9009-447E-856C-6EC0FC5949C4} EndGlobalSection EndGlobal ================================================ FILE: projects/elsa/fork-activity-2/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#8ae9b2", "activityBar.background": "#8ae9b2", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#a779e6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#8ae9b2", "statusBar.background": "#5fe196", "statusBar.debuggingBackground": "#e15faa", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#34d97a", "statusBarItem.remoteBackground": "#5fe196", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#5fe196", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#5fe19699", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#5fe196" } ================================================ FILE: projects/elsa/fork-activity-2/Program.cs ================================================ using Elsa.Extensions; using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Memory; var services = new ServiceCollection(); services.AddElsa(); var serviceProvider = services.BuildServiceProvider(); var runner = serviceProvider.GetRequiredService(); var magicNumber = new Variable("magic-number", 0); var msg1 = new Variable("msg1", string.Empty); var msg2 = new Variable("msg2", string.Empty); var workflow = new Sequence { Variables = { msg1, msg2 }, Activities = { new WriteLine("Start workflow before"), new Fork { JoinMode = ForkJoinMode.WaitAny, Branches = { new Sequence { Variables = { msg1 }, Activities = { new WriteLine("Branch 1 Step 1"), new SetVariable(msg1, "branch 1") } }, new Sequence { Variables = { msg2 }, Activities = { new WriteLine("Branch 2 Step 1"), new SetVariable(msg2, "branch 2") } } } }, new WriteLine(ctx => $"""Finish workflow with msg1="{ msg1.Get(ctx)}" and msg2="{ msg2.Get(ctx)}" """) } }; await runner.RunAsync(workflow); ================================================ FILE: projects/elsa/fork-activity-2/README.md ================================================ # Fork Activity 2 This sample shows how to set variables in Fork Activity. ================================================ FILE: projects/elsa/fork-activity-2/fork-activity-2.csproj ================================================ net10.0 true ASP0000 preview ================================================ FILE: projects/elsa/fork-activity-2/fork-activity-2.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "fork-activity-2", "fork-activity-2.csproj", "{B27042DF-3973-408A-9972-35F871DC87D3}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {B27042DF-3973-408A-9972-35F871DC87D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B27042DF-3973-408A-9972-35F871DC87D3}.Debug|Any CPU.Build.0 = Debug|Any CPU {B27042DF-3973-408A-9972-35F871DC87D3}.Release|Any CPU.ActiveCfg = Release|Any CPU {B27042DF-3973-408A-9972-35F871DC87D3}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {EF2941F6-42E1-4ADF-81F8-AE89DDD45C8B} EndGlobalSection EndGlobal ================================================ FILE: projects/elsa/global.json ================================================ { "sdk": { "version": "8.0.100", "rollForward": "major" } } ================================================ FILE: projects/elsa/if-activity/Program.cs ================================================ using Elsa.Extensions; using Elsa.Workflows.Activities; using Elsa.Workflows; using Elsa.Workflows.Memory; using Elsa.Workflows.Models; var services = new ServiceCollection(); services.AddElsa(); var serviceProvider = services.BuildServiceProvider(); var runner = serviceProvider.GetRequiredService(); var money = new Variable("money", 200); var workflow = new Sequence{ Variables = { money }, Activities = { new If { Condition = new Input(context => money.Get(context) > 70), Then = new WriteLine("You have enough money purchase this Nintendo game"), Else = new WriteLine("You don't have enough money to purchase this Nintendo game") } } }; await runner.RunAsync(workflow); ================================================ FILE: projects/elsa/if-activity/README.md ================================================ # If activity We use the `If` activity to execute a set of activities based on a condition. The `If` activity has a `Condition` property that is used to specify the condition. The `Condition` property is of type `Expression` and is used to specify the condition. The `If` activity also has an `Then` property that is used to specify the activities that will be executed if the condition is true. The `If` activity also has an `Else` property that is used to specify the activities that will be executed if the condition is false. We also use `Variable` class. The `Variable` class is used to create a variable that can be used in the workflow. The `Variable` class has a `Name` property that is used to specify the name of the variable. The `Variable` class also has a `Value` property that is used to specify the value of the variable. ================================================ FILE: projects/elsa/if-activity/if-activity.csproj ================================================ net10.0 true ASP0000 preview ================================================ FILE: projects/elsa/if-activity/if-activity.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "if-activity", "if-activity.csproj", "{79002360-F50D-4A51-AEF8-8141E854C88D}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {79002360-F50D-4A51-AEF8-8141E854C88D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {79002360-F50D-4A51-AEF8-8141E854C88D}.Debug|Any CPU.Build.0 = Debug|Any CPU {79002360-F50D-4A51-AEF8-8141E854C88D}.Release|Any CPU.ActiveCfg = Release|Any CPU {79002360-F50D-4A51-AEF8-8141E854C88D}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {E6034C04-C002-498D-A055-E33FC054FA9F} EndGlobalSection EndGlobal ================================================ FILE: projects/elsa/readline-activity/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#f2f5f0", "activityBar.background": "#f2f5f0", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#9facbf", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#f2f5f0", "statusBar.background": "#d7e0d2", "statusBar.debuggingBackground": "#dbd2e0", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#bccbb4", "statusBarItem.remoteBackground": "#d7e0d2", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#d7e0d2", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#d7e0d299", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#d7e0d2" } ================================================ FILE: projects/elsa/readline-activity/Program.cs ================================================ using Elsa.Extensions; using Elsa.Workflows.Activities; using Elsa.Workflows; using Elsa.Workflows.Memory; using Elsa.Workflows.Models; var services = new ServiceCollection(); services.AddElsa(); var input = new Input("What is your name"); var name = new Variable("name", string.Empty); var serviceProvider = services.BuildServiceProvider(); var workflow = new Sequence { Variables = { name }, Activities = { new WriteLine("What is your name?"), new ReadLine(name), new WriteLine(ctx => "My name is " + name.Get(ctx)) } }; var runner = serviceProvider.GetRequiredService(); await runner.RunAsync(workflow); ================================================ FILE: projects/elsa/readline-activity/README.md ================================================ # ReadLine Activity This sample demonstrate a simple use of the ReadLine activity that reads a line from the console. Note: not working. Needs fixing. ================================================ FILE: projects/elsa/readline-activity/readline-activity.csproj ================================================ net10.0 true ASP0000 preview ================================================ FILE: projects/elsa/readline-activity/readline-activity.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "readline-activity", "readline-activity.csproj", "{CBDD4A47-9179-4DF7-BA2B-91F7BAE4B163}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {CBDD4A47-9179-4DF7-BA2B-91F7BAE4B163}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CBDD4A47-9179-4DF7-BA2B-91F7BAE4B163}.Debug|Any CPU.Build.0 = Debug|Any CPU {CBDD4A47-9179-4DF7-BA2B-91F7BAE4B163}.Release|Any CPU.ActiveCfg = Release|Any CPU {CBDD4A47-9179-4DF7-BA2B-91F7BAE4B163}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {EC3A0A5D-EAEC-4959-9A5B-644122154B50} EndGlobalSection EndGlobal ================================================ FILE: projects/elsa/sequence-activity/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#fcf722", "activityBar.background": "#fcf722", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#03bdb8", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#fcf722", "statusBar.background": "#e8e303", "statusBar.debuggingBackground": "#0308e8", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#b6b202", "statusBarItem.remoteBackground": "#e8e303", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#e8e303", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#e8e30399", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#e8e303" } ================================================ FILE: projects/elsa/sequence-activity/Program.cs ================================================ using Elsa.Extensions; using Elsa.Workflows.Activities; using Elsa.Workflows; using Elsa.Workflows.Memory; var services = new ServiceCollection(); services.AddElsa(); var serviceProvider = services.BuildServiceProvider(); var runner = serviceProvider.GetRequiredService(); var message = new Variable("message", "Hello world!"); var workflow = new Sequence{ Variables = { message }, Activities = { new WriteLine("Printing variable name and value"), new WriteLine($"Variable name : value = {message.Name} : {message.Value}") } }; await runner.RunAsync(workflow); ================================================ FILE: projects/elsa/sequence-activity/README.md ================================================ # Sequence activity We use the `Sequence` activity to create a sequence of activities. The `Sequence` activity is a container activity that contains other activities. The `Sequence` activity executes the activities in the order they are added to the workflow. We also use `Variable` class. The `Variable` class is used to create a variable that can be used in the workflow. The `Variable` class has a `Name` property that is used to specify the name of the variable. The `Variable` class also has a `Value` property that is used to specify the value of the variable. ================================================ FILE: projects/elsa/sequence-activity/sequence-activity.csproj ================================================ net10.0 true ASP0000 preview ================================================ FILE: projects/elsa/sequence-activity/sequence-activity.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "sequence-activity", "sequence-activity.csproj", "{BF5F2B76-24A9-4C8C-A0E6-BC60F4F4E4D6}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {BF5F2B76-24A9-4C8C-A0E6-BC60F4F4E4D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BF5F2B76-24A9-4C8C-A0E6-BC60F4F4E4D6}.Debug|Any CPU.Build.0 = Debug|Any CPU {BF5F2B76-24A9-4C8C-A0E6-BC60F4F4E4D6}.Release|Any CPU.ActiveCfg = Release|Any CPU {BF5F2B76-24A9-4C8C-A0E6-BC60F4F4E4D6}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {7AE388D6-02DE-434C-B54A-4C1C059259EE} EndGlobalSection EndGlobal ================================================ FILE: projects/elsa/setname-activity/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#95f7cb", "activityBar.background": "#95f7cb", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#b66bf4", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#95f7cb", "statusBar.background": "#65f4b4", "statusBar.debuggingBackground": "#f465a5", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#35f19d", "statusBarItem.remoteBackground": "#65f4b4", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#65f4b4", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#65f4b499", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#65f4b4" } ================================================ FILE: projects/elsa/setname-activity/Program.cs ================================================ using Elsa.Extensions; using Elsa.Workflows; using Elsa.Workflows.Activities; var services = new ServiceCollection(); services.AddElsa(); var serviceProvider = services.BuildServiceProvider(); var runner = serviceProvider.GetRequiredService(); var workflow = new SetNameWorkflow(); var result = await runner.RunAsync(workflow); public class SetNameWorkflow : WorkflowBase { protected override void Build(IWorkflowBuilder builder) { builder.Root = new Sequence { Activities = { new SetName("My Simple Workflow"), new ShowName() } }; } } public class ShowName : Activity { protected override ValueTask ExecuteAsync(ActivityExecutionContext context) { var instanceName = context.WorkflowExecutionContext.GetProperty("WorkflowInstanceName"); Console.WriteLine($"WorkflowInstanceName {instanceName}"); return ValueTask.CompletedTask; } } ================================================ FILE: projects/elsa/setname-activity/README.md ================================================ # Sequence activity We use the `Sequence` activity to create a sequence of activities. The `Sequence` activity is a container activity that contains other activities. The `Sequence` activity executes the activities in the order they are added to the workflow. We also use `Variable` class. The `Variable` class is used to create a variable that can be used in the workflow. The `Variable` class has a `Name` property that is used to specify the name of the variable. The `Variable` class also has a `Value` property that is used to specify the value of the variable. ================================================ FILE: projects/elsa/setname-activity/setname-activity.csproj ================================================ net10.0 true ASP0000 preview ================================================ FILE: projects/elsa/setname-activity/setname-activity.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "setname-activity", "setname-activity.csproj", "{1028085A-93D9-4EAD-91A2-44571C72F079}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {1028085A-93D9-4EAD-91A2-44571C72F079}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1028085A-93D9-4EAD-91A2-44571C72F079}.Debug|Any CPU.Build.0 = Debug|Any CPU {1028085A-93D9-4EAD-91A2-44571C72F079}.Release|Any CPU.ActiveCfg = Release|Any CPU {1028085A-93D9-4EAD-91A2-44571C72F079}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {E2677B8A-65FF-4FB9-9CB1-A8ABDD9DCB87} EndGlobalSection EndGlobal ================================================ FILE: projects/elsa/setvariable-activity/Program.cs ================================================ using Elsa.Extensions; using Elsa.Workflows.Activities; using Elsa.Workflows; using Elsa.Workflows.Memory; var services = new ServiceCollection(); services.AddElsa(); var serviceProvider = services.BuildServiceProvider(); var runner = serviceProvider.GetRequiredService(); var msg = new Variable("message", "hello"); var workflow = new Sequence { Variables = { msg }, Activities = { new WriteLine(msg.Get), new SetVariable(msg, "hello world"), new WriteLine(msg.Get), new SetVariable(msg, "hello world from Cairo"), new WriteLine(msg.Get), } }; await runner.RunAsync(workflow); ================================================ FILE: projects/elsa/setvariable-activity/README.md ================================================ # SetVariable activity We use `SetVariable` to set value to a variable in a workflow. The `SetVariable` activity has a `VariableName` property that is used to specify the name of the variable. The `SetVariable` activity also has a `Value` property that is used to specify the value of the variable. We also use `Variable` class. The `Variable` class is used to create a variable that can be used in the workflow. The `Variable` class has a `Name` property that is used to specify the name of the variable. The `Variable` class also has a `Value` property that is used to specify the value of the variable. ================================================ FILE: projects/elsa/setvariable-activity/setvariable-activity.csproj ================================================ net10.0 true ASP0000 preview ================================================ FILE: projects/elsa/setvariable-activity/setvariable-activity.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "setvariable-activity", "setvariable-activity.csproj", "{7479DD91-1621-45E5-857C-A60C3DA0738F}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {7479DD91-1621-45E5-857C-A60C3DA0738F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7479DD91-1621-45E5-857C-A60C3DA0738F}.Debug|Any CPU.Build.0 = Debug|Any CPU {7479DD91-1621-45E5-857C-A60C3DA0738F}.Release|Any CPU.ActiveCfg = Release|Any CPU {7479DD91-1621-45E5-857C-A60C3DA0738F}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {92928C6E-784F-4AC4-9415-C4BEA3259A8A} EndGlobalSection EndGlobal ================================================ FILE: projects/elsa/while-activity/Program.cs ================================================ using Elsa.Extensions; using Elsa.Workflows.Activities; using Elsa.Workflows; using Elsa.Workflows.Memory; using Elsa.Workflows.Models; using Elsa.Workflows.Services; var services = new ServiceCollection(); services.AddElsa(); var serviceProvider = services.BuildServiceProvider(); var runner = serviceProvider.GetRequiredService(); var counter = new Variable("counter", 1); var workflow = new Sequence { Variables = { counter }, Activities = { new While(context => counter.Get(context) <= 10) { Body = new Sequence { Activities = { new WriteLine(context => $"Counter {counter.Get(context)}"), new SetVariable(counter, context => counter.Get(context) + 1) } } } } }; await runner.RunAsync(workflow); ================================================ FILE: projects/elsa/while-activity/README.md ================================================ # While activity We use `While` activity to execute a workflow while a condition is true. The `While` activity has a `Condition` property that is used to specify the condition. The `While` activity also has a `Body` property that is used to specify the body of the `While` activity. The `Body` property will continue to be executed while the `Condition` is true. We also use `Variable` class. The `Variable` class is used to create a variable that can be used in the workflow. The `Variable` class has a `Name` property that is used to specify the name of the variable. The `Variable` class also has a `Value` property that is used to specify the value of the variable. ================================================ FILE: projects/elsa/while-activity/while-activity.csproj ================================================ net10.0 true ASP0000 preview ================================================ FILE: projects/elsa/while-activity/while-activity.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "while-activity", "while-activity.csproj", "{E9050699-8553-4353-A9FB-99DB87828B69}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {E9050699-8553-4353-A9FB-99DB87828B69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E9050699-8553-4353-A9FB-99DB87828B69}.Debug|Any CPU.Build.0 = Debug|Any CPU {E9050699-8553-4353-A9FB-99DB87828B69}.Release|Any CPU.ActiveCfg = Release|Any CPU {E9050699-8553-4353-A9FB-99DB87828B69}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {A0E1BCA6-2B74-49E7-B366-6A07C0AF7B88} EndGlobalSection EndGlobal ================================================ FILE: projects/elsa/workflow/Program.cs ================================================ using Elsa.Extensions; using Elsa.Workflows; using Elsa.Workflows.Activities; var services = new ServiceCollection(); services.AddElsa(); var serviceProvider = services.BuildServiceProvider(); var workflow = new MessageWorkflow(); var runner = serviceProvider.GetRequiredService(); await runner.RunAsync(workflow); public class MessageWorkflow : WorkflowBase { protected override void Build(IWorkflowBuilder builder) { builder.WithVariable("message", "hello workflow"); builder.Root = new Sequence { Activities = { new WriteLine(context => context.GetVariable("message")) } }; } } ================================================ FILE: projects/elsa/workflow/README.md ================================================ # Passing a variable to a workflow This sample demonstrates on how to create a custom workflow and pass a variable to it. ================================================ FILE: projects/elsa/workflow/workflow.csproj ================================================ net10.0 true ASP0000 preview ================================================ FILE: projects/elsa/workflow/workflow.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "workflow", "workflow.csproj", "{D13EDA84-3EF8-48DC-9035-1DB352DD57B6}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {D13EDA84-3EF8-48DC-9035-1DB352DD57B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D13EDA84-3EF8-48DC-9035-1DB352DD57B6}.Debug|Any CPU.Build.0 = Debug|Any CPU {D13EDA84-3EF8-48DC-9035-1DB352DD57B6}.Release|Any CPU.ActiveCfg = Release|Any CPU {D13EDA84-3EF8-48DC-9035-1DB352DD57B6}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {B5D0F378-ECC4-4311-A22B-65E330C14972} EndGlobalSection EndGlobal ================================================ FILE: projects/elsa/workflow-2/Program.cs ================================================ using Elsa.Extensions; using Elsa.Workflows; using Elsa.Workflows.Activities; var services = new ServiceCollection(); services.AddElsa(); var serviceProvider = services.BuildServiceProvider(); var workflow = new MessageWorkflow(); var runner = serviceProvider.GetRequiredService(); var result = await runner.RunAsync(workflow); Console.WriteLine($"Workflow Name: {result.Workflow.WorkflowMetadata.Name}"); Console.WriteLine($"Worfklow DefinitionId: { result.Workflow.Identity.DefinitionId }"); Console.WriteLine($"Workflow Description: {result.Workflow.WorkflowMetadata.Description}"); Console.WriteLine($"Workflow Property[workflow]: { result.Workflow.CustomProperties["workflow"]}"); Console.WriteLine($"Workflow Property[created on]: { Convert.ToDateTime(result.Workflow.CustomProperties["created on"]) }"); public class MessageWorkflow : WorkflowBase { protected override void Build(IWorkflowBuilder builder) { builder.Name = "Workflow for message"; builder.Description = "This is a sample worfklow definition"; builder.WithCustomProperty("workflow", "This is a workflow"); builder.WithCustomProperty("created on", DateTime.UtcNow); builder.Root = new Sequence { Activities = { } }; } } ================================================ FILE: projects/elsa/workflow-2/README.md ================================================ # Workflow properties including custom properties This sample shows how to set up custom properties for a workflow. We also use the basic workflow properties such as `DefinitionId`, `Description`, etc. ================================================ FILE: projects/elsa/workflow-2/workflow.csproj ================================================ net10.0 true ASP0000 preview ================================================ FILE: projects/elsa/workflow-3/Program.cs ================================================ using System.Security.Cryptography; using Elsa.Extensions; using Elsa.Workflows; using Elsa.Workflows.Activities; var services = new ServiceCollection(); services.AddElsa(); var serviceProvider = services.BuildServiceProvider(); var runner = serviceProvider.GetRequiredService(); var result = await runner.RunAsync(new RandomWorkflow()); Console.WriteLine($"Result {result.Result}"); public class RandomWorkflow : WorkflowBase { protected override void Build(IWorkflowBuilder builder) { var random = RandomNumberGenerator.Create(); var bytes = new byte[sizeof(int)]; // 4 bytes random.GetNonZeroBytes(bytes); var result = BitConverter.ToInt32(bytes); builder.Root = new SetVariable { Variable = Result, Value = new Elsa.Workflows.Models.Input(ctx => result) }; } } ================================================ FILE: projects/elsa/workflow-3/README.md ================================================ # A workflow that return results This sample demonstrates on how to create a workflow that returns result. ================================================ FILE: projects/elsa/workflow-3/workflow-3.csproj ================================================ net10.0 true ASP0000 preview ================================================ FILE: projects/elsa/workflow-3/workflow-3.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "workflow-3", "workflow-3.csproj", "{05D12AB1-3C67-43E2-BB2A-C48CDAF625B5}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {05D12AB1-3C67-43E2-BB2A-C48CDAF625B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {05D12AB1-3C67-43E2-BB2A-C48CDAF625B5}.Debug|Any CPU.Build.0 = Debug|Any CPU {05D12AB1-3C67-43E2-BB2A-C48CDAF625B5}.Release|Any CPU.ActiveCfg = Release|Any CPU {05D12AB1-3C67-43E2-BB2A-C48CDAF625B5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {958E8D64-4047-422A-BA9F-3A8818CE2770} EndGlobalSection EndGlobal ================================================ FILE: projects/elsa/workflow-4/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#339eef", "activityBar.background": "#339eef", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#b10e6b", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#339eef", "statusBar.background": "#1186df", "statusBar.debuggingBackground": "#df6a11", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#339eef", "statusBarItem.remoteBackground": "#1186df", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#1186df", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#1186df99", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#1186df" } ================================================ FILE: projects/elsa/workflow-4/Program.cs ================================================ using Elsa.Extensions; using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Memory; using Elsa.Workflows.Models; using Elsa.Workflows.Options; var services = new ServiceCollection(); services.AddElsa(); var serviceProvider = services.BuildServiceProvider(); var runner = serviceProvider.GetRequiredService(); var input = new Dictionary{ ["name"] = "Anne", ["age"] = 37 }; var option = new RunWorkflowOptions { Input = input }; await runner.RunAsync(option); public class InputWorkflow : WorkflowBase { protected override void Build(IWorkflowBuilder builder) { var nameInput = new Variable(); var ageInput = new Variable(); builder.Root = new Sequence { Variables = { nameInput, ageInput }, Activities = { new SetVariable { Variable = nameInput, Value = new Input(ctx => ctx.GetInput("name")) }, new SetVariable { Variable = ageInput, Value = new Input(ctx => ctx.GetInput("age")) }, new WriteLine(ctx => $"Name: {nameInput.Get(ctx)}"), new WriteLine(ctx => $"Age: {ageInput.Get(ctx)}") } }; } } ================================================ FILE: projects/elsa/workflow-4/README.md ================================================ # A workflow with runtime inputs This sample demonstrates on how to create a workflow that take runtime inputs. ================================================ FILE: projects/elsa/workflow-4/workflow-4.csproj ================================================ net10.0 true ASP0000 preview ================================================ FILE: projects/elsa/workflow-4/workflow-4.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "workflow-4", "workflow-4.csproj", "{723CAD56-A2AE-4DE1-B5C9-43F2C40C651A}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {723CAD56-A2AE-4DE1-B5C9-43F2C40C651A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {723CAD56-A2AE-4DE1-B5C9-43F2C40C651A}.Debug|Any CPU.Build.0 = Debug|Any CPU {723CAD56-A2AE-4DE1-B5C9-43F2C40C651A}.Release|Any CPU.ActiveCfg = Release|Any CPU {723CAD56-A2AE-4DE1-B5C9-43F2C40C651A}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {732F282F-17C5-4AAD-9070-43CFF23A7762} EndGlobalSection EndGlobal ================================================ FILE: projects/elsa/workflow-5/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#f05543", "activityBar.background": "#f05543", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#13ec29", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#f05543", "statusBar.background": "#ec2a14", "statusBar.debuggingBackground": "#14d6ec", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#f05543", "statusBarItem.remoteBackground": "#ec2a14", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#ec2a14", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#ec2a1499", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#ec2a14" } ================================================ FILE: projects/elsa/workflow-5/Program.cs ================================================ using Elsa.Extensions; using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Memory; var builder = Host.CreateApplicationBuilder(args); builder.Services.AddElsa(); var app = builder.Build(); // Use the service provider from the host var runner = app.Services.GetRequiredService(); await runner.RunAsync(new ConstructorWorkflow("Anne", 37)); public class ConstructorWorkflow : WorkflowBase { private readonly Variable _name; private readonly Variable _age; public ConstructorWorkflow(string name, int age) { _name = new Variable("name", name); _age = new Variable("age", age); } protected override void Build(IWorkflowBuilder builder) { builder.Root = new Sequence { Variables = { _name, _age }, Activities = { new WriteLine(ctx => $"Name: {_name.Get(ctx)}"), new WriteLine(ctx => $"Age: {_age.Get(ctx)}") } }; } } ================================================ FILE: projects/elsa/workflow-5/README.md ================================================ # Passing values to workflow via constructor This sample demonstrates on how to pass values to a workflow via constructor. ================================================ FILE: projects/elsa/workflow-5/workflow-5.csproj ================================================ net10.0 true preview ================================================ FILE: projects/elsa/workflow-5/workflow-5.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "workflow-5", "workflow-5.csproj", "{780A3DFE-7E76-4DA2-B24F-91847FFE237B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {780A3DFE-7E76-4DA2-B24F-91847FFE237B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {780A3DFE-7E76-4DA2-B24F-91847FFE237B}.Debug|Any CPU.Build.0 = Debug|Any CPU {780A3DFE-7E76-4DA2-B24F-91847FFE237B}.Release|Any CPU.ActiveCfg = Release|Any CPU {780A3DFE-7E76-4DA2-B24F-91847FFE237B}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {298EB2BE-7EBD-4B92-BB90-F1D3094555AF} EndGlobalSection EndGlobal ================================================ FILE: projects/elsa/writeline-activity/Program.cs ================================================ using Elsa.Extensions; using Elsa.Workflows.Activities; using Elsa.Workflows; var services = new ServiceCollection(); services.AddElsa(); var serviceProvider = services.BuildServiceProvider(); var workflow = new WriteLine("Hello world"); //This is an Esla activity var runner = serviceProvider.GetRequiredService(); await runner.RunAsync(workflow); ================================================ FILE: projects/elsa/writeline-activity/README.md ================================================ # WriteLine Activity This sample demonstrates a very simple workflow Activity that writes a line to the console. ================================================ FILE: projects/elsa/writeline-activity/writeline-activity.csproj ================================================ net10.0 true ASP0000 preview ================================================ FILE: projects/elsa/writeline-activity/writeline-activity.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "writeline-activity", "writeline-activity.csproj", "{BFD65E28-39E2-4D86-8458-62F9B595B358}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {BFD65E28-39E2-4D86-8458-62F9B595B358}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BFD65E28-39E2-4D86-8458-62F9B595B358}.Debug|Any CPU.Build.0 = Debug|Any CPU {BFD65E28-39E2-4D86-8458-62F9B595B358}.Release|Any CPU.ActiveCfg = Release|Any CPU {BFD65E28-39E2-4D86-8458-62F9B595B358}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {1A939CDF-507C-497D-BFCC-CC6EFBBEDA2A} EndGlobalSection EndGlobal ================================================ FILE: projects/endpoint-routing/README.md ================================================ # Endpoint Routing (32) * [Endpoint Routing - Razor Page](/projects/endpoint-routing/new-routing) ASP.NET Core 3 allows more control on how to organize your endpoints using `app.UseEndpoints`. In this example, we just map Razor Pages routes and nothing else. * [Endpoint Routing - MVC](/projects/endpoint-routing/new-routing-2) ASP.NET Core 3 allows more control on how to organize your endpoints using `app.UseEndpoints`. In this example, we just map MVC routes (attribute routing only, not convention routing) and nothing else. * [Endpoint Routing - MVC with default route](/projects/endpoint-routing/new-routing-3) Map MVC routes with default `{controller=Home}/{action=Index}/{id?}` set up. * [Endpoint Routing - RequestDelegate](/projects/endpoint-routing/new-routing-4) This example shows how to use `RequestDelegate` directly in `app.UseEndpoints` for `GET` operation using `MapGet`. `MapPost`, `MapPut`, and `MapDelete` are also available for use. This allow the creation of very minimalistic web services apps. * [Endpoint Routing - RequestDelegate](/projects/endpoint-routing/new-routing-5) This example shows how to use `RequestDelegate` directly in `app.UseEndpoints` using `Map`. * [Endpoint Routing - Interrogate available endpoints](/projects/endpoint-routing/new-routing-6) This example shows how to list all available endpoints in your app. * [Endpoint Routing - RequestDelegate with HTTP verb filter](/projects/endpoint-routing/new-routing-7) This example shows how to use `RequestDelegate` directly in `app.UseEndpoints` using `MapMethods` that filter request based on one or more HTTP verbs. * [Endpoint Routing - Static file fallback](/projects/endpoint-routing/new-routing-8) Return a static page when your request does not match anything else using `MapFallbackToFile`. * [Endpoint Routing - Razor Page fallback](/projects/endpoint-routing/new-routing-9) Return a Razor Page when your request does not match anything else using `MapFallbackToPage`. * [Endpoint Routing - Obtaining an Endpoint from your Middleware](/projects/endpoint-routing/new-routing-10) Use the brand new `HttpContext.GetEndPoint` extension method to examine the current endpoint that is being executed. * [Endpoint Routing - How to obtain metadata in an Endpoint from a Razor page](/projects/endpoint-routing/new-routing-11) Use the brand new `EndPoint.Metadata.GetMetadata<>()` to get values from attributes at your Razor Page. * [Endpoint Routing - Obtaining an Endpoint metadata from your Razor Page depending on the request method](/projects/endpoint-routing/new-routing-12) Unlike in MVC, you can't use `Attribute` from the method of a Razor Page. You can only use it from the Model class. This makes getting obtaining the appropriate metadata for each request require an extra step. * [Endpoint Routing - Obtaining an Endpoint metadata from your MVC Controller](/projects/endpoint-routing/new-routing-13) Obtain Endpoint metadata from MVC Controller's Action methods. * [Endpoint Routing - Obtaining Endpoint feature via IEndpointFeature](/projects/endpoint-routing/new-routing-14) Use `HttpContext.Features.Get();` to obtain `Endpoint` information for a given Middleware. You can accomplish the same thing using `HttpContext.GetEndpoint`. * [Endpoint Routing - Attaching Metadata information to your inline Middleware](/projects/endpoint-routing/new-routing-15) Use `IEndpointConventionBuilder.WithMetadata` to attach metadata information to your inline Middleware. * [Endpoint Routing - Map Areas by Convention](/projects/endpoint-routing/new-routing-16) Use `IEndpointRouteBuilder.MapAreaControllerRoute` to configure routing for your areas. * [Endpoint Routing - enable MVC but without Views support](/projects/endpoint-routing/new-routing-17) Use `services.AddControllers` to provide MVC without Views supports. Razor Pages is not available. Perfect for Web APIs. * [Endpoint Routing - enable MVC but with Views support but without Razor Page](/projects/endpoint-routing/new-routing-18) Use `services.AddControllersWithViews();` to provide MVC with Views supports. Razor Page is not available. So this similar to the "classic" MVC configuration. * [Endpoint Routing - enable Razor Pages with MVC API support](/projects/endpoint-routing/new-routing-19) Use `services.AddRazorPages()` add supports for Razor Pages and MVC API. * [Endpoint Routing - Convention based Routing](/projects/endpoint-routing/new-routing-20) Use `IEndpointRouteBuilder.MapControllerRoute` to configure convention based routing. * [Endpoint Routing - A new way to map health check](/projects/endpoint-routing/new-routing-21) Use `IEndpointRouteBuilder.MapHealthChecks` to configure health check instead of `IApplicationBuilder.UseHealthChecks`. * [Endpoint Routing - Configure Endpoints default on Kestrel](/projects/endpoint-routing/new-routing-22) We configure `KestrelServerOptions.ConfigureEndpointDefaults` so the Endpoints will run only on HTTP/2. * [Endpoint Routing - Host Matching](/projects/endpoint-routing/new-routing-23) This example demonstrates on how to configure your endpoint to respond to a request from a specific host. In this example, GET `/` returns a different result depending whether you access it from `localhost:8111` and `localhost:8112`. * [Endpoint Routing - Host Matching 2](/projects/endpoint-routing/new-routing-24) This produces the same exact effect as the [previous example above - Host Matching](/projects/endpoint-routing/new-routing-23) except that here we use `IEndpointConventionBuilder.WithMetadata` and `HostAttribute` instead of `IEndpointConventionBuilder.RequireHost`. * [Endpoint Routing - Handle MVC routing dynamically](/projects/endpoint-routing/new-routing-25) This example shows how to handle MVC routing dynamically using `MapDynamicControllerRoute` and `DynamicRouteValueTransformer`. * [Endpoint Routing - Handle Razor Pages routing dynamically](/projects/endpoint-routing/new-routing-26) This example shows how to handle Razor Pages routing dynamically using `MapDynamicPageRoute` and `DynamicRouteValueTransformer`. * [Endpoint Routing - Setup to Razor Pages areas](/projects/endpoint-routing/new-routing-28) This example shows how to create Razor Pages areas. * [Endpoint Routing - Map a route to a Razor Pages in an area](/projects/endpoint-routing/new-routing-27) Map a route to a Razor Pages located in an Area using `Conventions.AddAreaPageRoute`. * [Endpoint routing - setup a fallback page in a Razor Pages area](/projects/endpoint-routing/new-routing-29) This sample shows you how to setup a fallback page located in a Razor Pages area. * [Endpoint routing - serve different fallback pages depending on route pattern match](/projects/endpoint-routing/new-routing-30) This sample shows how to return different fallback page located in areas depending on the route pattern that matches the request. * [Endpoint routing - anonymous access and authorization](/projects/endpoint-routing/new-routing-31) Allow anonymous access and require authorization to endpoints. * [Parameter Transformer ](/projects/endpoint-routing/parameter-transformer) Use Parameter Transformer to control the creation of route token `[area]`, `[controller]` and `[action]`. In this example we use it on `[controller]` and `[action]`. dotnet8 ================================================ FILE: projects/endpoint-routing/build.bat ================================================ dotnet build endpoint-routing dotnet build endpoint-routing-2 dotnet build endpoint-routing-3 dotnet build endpoint-routing-4 dotnet build endpoint-routing-6 dotnet build new-routing dotnet build new-routing-2 dotnet build new-routing-3 dotnet build new-routing-4 dotnet build new-routing-5 dotnet build new-routing-6 dotnet build new-routing-7 dotnet build new-routing-8 dotnet build new-routing-9 dotnet build new-routing-10 dotnet build new-routing-11 dotnet build new-routing-12 dotnet build new-routing-13 dotnet build new-routing-14 dotnet build new-routing-15 dotnet build new-routing-16 dotnet build new-routing-17 dotnet build new-routing-18 dotnet build new-routing-19 dotnet build new-routing-20 dotnet build new-routing-21 dotnet build new-routing-22 dotnet build new-routing-23 dotnet build new-routing-24 dotnet build new-routing-25 dotnet build new-routing-26 dotnet build new-routing-27 dotnet build new-routing-28 dotnet build new-routing-29 dotnet build new-routing-30 dotnet build new-routing-31 dotnet build parameter-transformer ================================================ FILE: projects/endpoint-routing/build.sh ================================================ #!/bin/bash dotnet build endpoint-routing dotnet build endpoint-routing-2 dotnet build endpoint-routing-3 dotnet build endpoint-routing-4 dotnet build endpoint-routing-6 dotnet build new-routing dotnet build new-routing-2 dotnet build new-routing-3 dotnet build new-routing-4 dotnet build new-routing-5 dotnet build new-routing-6 dotnet build new-routing-7 dotnet build new-routing-8 dotnet build new-routing-9 dotnet build new-routing-10 dotnet build new-routing-11 dotnet build new-routing-12 dotnet build new-routing-13 dotnet build new-routing-14 dotnet build new-routing-15 dotnet build new-routing-16 dotnet build new-routing-17 dotnet build new-routing-18 dotnet build new-routing-19 dotnet build new-routing-20 dotnet build new-routing-21 dotnet build new-routing-22 dotnet build new-routing-23 dotnet build new-routing-24 dotnet build new-routing-25 dotnet build new-routing-26 dotnet build new-routing-27 dotnet build new-routing-28 dotnet build new-routing-29 dotnet build new-routing-30 dotnet build new-routing-31 dotnet build parameter-transformer ================================================ FILE: projects/endpoint-routing/endpoint-routing/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapDefaultControllerRoute(); app.Run(); public class HomeController : Controller { public ActionResult Index() { return new ContentResult { Content = @" Hello World running on Endpoint Routing

As you can see, all the existing routing methods just works. Now they are just faster. We will explore the cool stuff that Endpoint Routing brings in the next samples.

  • /
  • / home
  • /home/index
  • ", ContentType = "text/html" }; } } ================================================ FILE: projects/endpoint-routing/endpoint-routing/endpoint-routing.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/endpoint-routing-2/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.Use(async (HttpContext context, RequestDelegate next) => { var linkGenerator = context.RequestServices.GetService(); var url = linkGenerator.GetUriByAction(context, controller: "Hello", action: "World" ); context.Response.ContentType = "text/plain"; await context.Response.WriteAsync($"Generated Url: {url}"); }); app.MapDefaultControllerRoute(); app.Run(); public class HelloController { public ActionResult World() { return null; } } ================================================ FILE: projects/endpoint-routing/endpoint-routing-2/endpoint-routing-2.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/endpoint-routing-3/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.Use(async (HttpContext context, RequestDelegate next) => { var linkGenerator = context.RequestServices.GetService(); var url = linkGenerator.GetUriByAction(context, controller: "Hello", action: "World" ); var url2 = linkGenerator.GetUriByAction(context, controller: "Hello", action: "Goodbye" ); var url3 = linkGenerator.GetUriByAction(context, controller: "Hello", action: "CallMe" ); var url4 = linkGenerator.GetUriByAction(context, controller: "Greet", action: "Index" ); var url5 = linkGenerator.GetUriByAction(context, controller: "Wave", action: "Away" ); var url6 = linkGenerator.GetUriByAction(context, controller: "XXXX", action: "YYYY" ); context.Response.ContentType = "text/plain"; await context.Response.WriteAsync($@"Generated Url: {url} {url2} {url3} {url4} {url5} {url6}(It won't produce any link if it cannot figure out controller and action information)"); }); app.MapDefaultControllerRoute(); app.Run(); [Route("[controller]")] public class HelloController { [HttpGet("")] public ActionResult World() => null; [HttpGet("Goodbye")] public ActionResult Goodbye() => null; [HttpGet("[action]")] public ActionResult CallMe() => null; } [Route("Greet")] public class GreetController { public ActionResult Index() => null; } public class WaveController { [Route("Wave-Away")] public ActionResult Away() => null; } ================================================ FILE: projects/endpoint-routing/endpoint-routing-3/endpoint-routing-3.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/endpoint-routing-4/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/endpoint-routing-3.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart", "launchBrowser": { "enabled": true, "args": "${auto-detect-url}", "windows": { "command": "cmd.exe", "args": "/C start ${auto-detect-url}" }, "osx": { "command": "open" }, "linux": { "command": "xdg-open" } }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ,] } ================================================ FILE: projects/endpoint-routing/endpoint-routing-4/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/endpoint-routing-4.csproj" ], "problemMatcher": "$msCompile" } ] } ================================================ FILE: projects/endpoint-routing/endpoint-routing-4/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.Use(async (HttpContext context, RequestDelegate next) => { var linkGenerator = context.RequestServices.GetService(); var url = linkGenerator.GetUriByAction(context, controller: "Hello", action: "World", values: new { name = "One" } ); var url2 = linkGenerator.GetUriByAction(context, controller: "Hello", action: "Goodbye", values: new { age = 40 } ); var url3 = linkGenerator.GetUriByAction(context, controller: "Hello", action: "CallMe" ); var url4 = linkGenerator.GetUriByAction(context, controller: "Greet", action: "Index", values: new { isNice = false } ); var url5 = linkGenerator.GetUriByAction(context, controller: "Wave", action: "Away", values: new { danger = "real danger", ahead = "5 km ahead" } ); context.Response.ContentType = "text/plain"; await context.Response.WriteAsync($@"Generated Url: {url} {url2} {url3} (the route value is optional) {url4} {url5}"); }); app.MapDefaultControllerRoute(); app.Run(); [Route("[controller]")] public class HelloController { [HttpGet("{name}")] public ActionResult World(string name) => null; [HttpGet("Goodbye/{age:int}")] public ActionResult Goodbye(int age) => null; [HttpGet("[action]/{byYourName?}")] public ActionResult CallMe(string byYourName) => null; } [Route("Greet/{isNice:bool}")] public class GreetController { public ActionResult Index() => null; } public class WaveController { [Route("Wave-Away/{danger:required}/{ahead:required}")] public ActionResult Away(string danger, string ahead) => null; } ================================================ FILE: projects/endpoint-routing/endpoint-routing-4/endpoint-routing-4.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/endpoint-routing-6/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/endpoint-routing-3.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart", "launchBrowser": { "enabled": true, "args": "${auto-detect-url}", "windows": { "command": "cmd.exe", "args": "/C start ${auto-detect-url}" }, "osx": { "command": "open" }, "linux": { "command": "xdg-open" } }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ,] } ================================================ FILE: projects/endpoint-routing/endpoint-routing-6/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/endpoint-routing-4.csproj" ], "problemMatcher": "$msCompile" } ] } ================================================ FILE: projects/endpoint-routing/endpoint-routing-6/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.Use(async (HttpContext context, RequestDelegate next) => { var linkGenerator = context.RequestServices.GetService(); var url = linkGenerator.GetPathByAction( controller: "Hello", action: "World", values: new { name = "Annie" } ); var url2 = linkGenerator.GetPathByAction( controller: "Hello", action: "Goodbye", values: new { age = 55 } ); var url3 = linkGenerator.GetPathByAction( controller: "Hello", action: "CallMe" ); var url4 = linkGenerator.GetPathByAction( controller: "Greet", action: "Index", values: new { isNice = true } ); var url5 = linkGenerator.GetPathByAction( controller: "Wave", action: "Away", values: new { danger = "see", ahead = "soon" } ); context.Response.ContentType = "text/plain"; await context.Response.WriteAsync($@"Generated Url: {url} {url2} {url3} {url4} {url5} "); }); app.MapDefaultControllerRoute(); app.Run(); [Route("[controller]")] public class HelloController { [HttpGet("{name}")] public ActionResult World(string name) => null; [HttpGet("Goodbye/{age:int}")] public ActionResult Goodbye(int age) => null; [HttpGet("[action]/{byYourName?}")] public ActionResult CallMe(string byYourName) => null; } [Route("Greet/{isNice:bool}")] public class GreetController { public ActionResult Index() => null; } public class WaveController { [Route("Wave-Away/{danger:required}/{ahead:required}")] public ActionResult Away(string danger, string ahead) => null; } ================================================ FILE: projects/endpoint-routing/endpoint-routing-6/endpoint-routing-6.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing/Pages/Index.cshtml ================================================ @page

    Razor Pages using new routing

    In this example, only Razor Pages works. If you create an MVC Controller in this sample, it won't work.

    ================================================ FILE: projects/endpoint-routing/new-routing/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); var app = builder.Build(); app.MapRazorPages(); app.Run(); ================================================ FILE: projects/endpoint-routing/new-routing/README.md ================================================ # New Routing - enable just Razor Pages This example shows how to enable *just* Razor Pages routes in your app using the method `app.UseRouting`. MVC Controllers won't work at all in this sample. ================================================ FILE: projects/endpoint-routing/new-routing/new-routing.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing-10/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "launchBrowser": { "enabled": true }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-10/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "publish", "command": "dotnet", "type": "process", "args": [ "publish", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "watch", "command": "dotnet", "type": "process", "args": [ "watch", "run", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-10/Pages/about.cshtml ================================================ @page

    @HttpContext.Items["GreetingFromMiddleWare"]

    ================================================ FILE: projects/endpoint-routing/new-routing-10/Pages/index.cshtml ================================================ @page

    An example of accessing Endpoint class from a middleware

    ================================================ FILE: projects/endpoint-routing/new-routing-10/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); builder.Services.AddRazorPages(); var app = builder.Build(); app.UseMiddleware(); app.MapRazorPages(); app.Run(); public class GreeterMiddleware { RequestDelegate _next; readonly LinkGenerator _linkGenerator; public GreeterMiddleware(RequestDelegate next, LinkGenerator linkGenerator) { _next = next; _linkGenerator = linkGenerator; } public async Task InvokeAsync(HttpContext httpContext) { Endpoint endPoint = httpContext.GetEndpoint(); if (endPoint.DisplayName == "/about") { httpContext.Items.Add("GreetingFromMiddleWare", "Hello world from GreetingMiddleware"); } await _next.Invoke(httpContext); } } ================================================ FILE: projects/endpoint-routing/new-routing-10/README.md ================================================ # New Routing - Obtaining an Endpoint from your Middleware Use the brand new `HttpContext.GetEndPoint` extension method to examine the current endpoint that is being executed. ================================================ FILE: projects/endpoint-routing/new-routing-10/new-routing-10.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing-11/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "launchBrowser": { "enabled": true }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-11/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#aa94f4", "activityBar.background": "#aa94f4", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#fce8e2", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#aa94f4", "statusBar.background": "#8566ef", "statusBar.debuggingBackground": "#d0ef66", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#aa94f4", "statusBarItem.remoteBackground": "#8566ef", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#8566ef", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#8566ef99", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#8566ef" } ================================================ FILE: projects/endpoint-routing/new-routing-11/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "publish", "command": "dotnet", "type": "process", "args": [ "publish", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "watch", "command": "dotnet", "type": "process", "args": [ "watch", "run", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-11/Pages/about.cshtml ================================================ @page @model PracticalAspNetCore.AboutModel

    @HttpContext.Items["GreetingFromMiddleWare"]

    ================================================ FILE: projects/endpoint-routing/new-routing-11/Pages/about.cshtml.cs ================================================ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc.RazorPages; namespace PracticalAspNetCore { [Message(Content = "Hello world message from attribute")] public class AboutModel : PageModel { public void OnGet() { } } } ================================================ FILE: projects/endpoint-routing/new-routing-11/Pages/index.cshtml ================================================ @page

    An example of accessing Razor Page attribute values from a middleware using Endpoint class

    ================================================ FILE: projects/endpoint-routing/new-routing-11/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); builder.Services.AddRazorPages(); var app = builder.Build(); app.UseMiddleware(); app.MapRazorPages(); app.Run(); public class GreeterMiddleware { RequestDelegate _next; readonly LinkGenerator _linkGenerator; public GreeterMiddleware(RequestDelegate next, LinkGenerator linkGenerator) { _next = next; _linkGenerator = linkGenerator; } public async Task InvokeAsync(HttpContext httpContext) { Endpoint endPoint = httpContext.GetEndpoint(); var message = endPoint.Metadata.GetMetadata(); if (message != null) { httpContext.Items.Add("GreetingFromMiddleWare", message.Content); } await _next.Invoke(httpContext); } } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] public class MessageAttribute : System.Attribute { public string Content { get; set; } } ================================================ FILE: projects/endpoint-routing/new-routing-11/README.md ================================================ # New Routing - Obtaining an Endpoint metadata from your Razor Page Use the brand new `EndPoint.Metadata.GetMetadata<>()` to get values from attributes at your Razor Page. ================================================ FILE: projects/endpoint-routing/new-routing-11/new-routing-11.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing-11/new-routing-11.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "new-routing-11", "new-routing-11.csproj", "{AA9F3970-577F-4ADB-AC5F-B9E7D441819D}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {AA9F3970-577F-4ADB-AC5F-B9E7D441819D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AA9F3970-577F-4ADB-AC5F-B9E7D441819D}.Debug|Any CPU.Build.0 = Debug|Any CPU {AA9F3970-577F-4ADB-AC5F-B9E7D441819D}.Release|Any CPU.ActiveCfg = Release|Any CPU {AA9F3970-577F-4ADB-AC5F-B9E7D441819D}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {790B1FCA-227F-4E9A-8A06-C9E7696B0885} EndGlobalSection EndGlobal ================================================ FILE: projects/endpoint-routing/new-routing-12/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "launchBrowser": { "enabled": true }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-12/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#c766b5", "activityBar.background": "#c766b5", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#bbcc73", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#c766b5", "statusBar.background": "#b743a2", "statusBar.debuggingBackground": "#43b758", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#c766b5", "statusBarItem.remoteBackground": "#b743a2", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#b743a2", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#b743a299", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#b743a2" } ================================================ FILE: projects/endpoint-routing/new-routing-12/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "publish", "command": "dotnet", "type": "process", "args": [ "publish", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "watch", "command": "dotnet", "type": "process", "args": [ "watch", "run", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-12/Pages/_ViewImports.cshtml ================================================ @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers @addTagHelper *, AuthoringTagHelpers ================================================ FILE: projects/endpoint-routing/new-routing-12/Pages/about.cshtml ================================================ @page @model PracticalAspNetCore.AboutModel

    @Model.Message

    ================================================ FILE: projects/endpoint-routing/new-routing-12/Pages/about.cshtml.cs ================================================ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc.RazorPages; namespace PracticalAspNetCore { [Message(ContentGet = "This message only shows up on GET", ContentPost = "This message only shows up on POST")] public class AboutModel : PageModel { public string Message { get; set; } public void OnGet() { Message = HttpContext.Items["GreetingFromMiddleWare"] as string; } public void OnPost() { Message = HttpContext.Items["GreetingFromMiddleWare"] as string; } } } ================================================ FILE: projects/endpoint-routing/new-routing-12/Pages/index.cshtml ================================================ @page

    An example of accessing Razor Page attribute values from a middleware using Endpoint class

    ================================================ FILE: projects/endpoint-routing/new-routing-12/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); builder.Services.AddRazorPages(); var app = builder.Build(); app.UseMiddleware(); app.MapRazorPages(); app.Run(); public class GreeterMiddleware { RequestDelegate _next; readonly LinkGenerator _linkGenerator; public GreeterMiddleware(RequestDelegate next, LinkGenerator linkGenerator) { _next = next; _linkGenerator = linkGenerator; } public async Task InvokeAsync(HttpContext httpContext) { Endpoint endPoint = httpContext.GetEndpoint(); var message = endPoint.Metadata.GetMetadata(); if (message != null) { if (httpContext.Request.Method == HttpMethods.Get) httpContext.Items.Add("GreetingFromMiddleWare", message.ContentGet); else if (httpContext.Request.Method == HttpMethods.Post) httpContext.Items.Add("GreetingFromMiddleWare", message.ContentPost); } await _next.Invoke(httpContext); } } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] public class MessageAttribute : System.Attribute { public string ContentGet { get; set; } public string ContentPost { get; set; } } ================================================ FILE: projects/endpoint-routing/new-routing-12/README.md ================================================ # New Routing - Obtaining an Endpoint metadata from your Razor Page depending on the request method Unlike in MVC, you can't use `Attribute` from the method of a Razor Page. You can only use it from the Model class. This makes getting obtaining the appropriate metadata for each request require an extra step. ================================================ FILE: projects/endpoint-routing/new-routing-12/new-routing-12.csproj ================================================ net10.0 new-routing-12 new-routing-12 true preview ================================================ FILE: projects/endpoint-routing/new-routing-12/new-routing-12.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "new-routing-12", "new-routing-12.csproj", "{CA42C8C6-20F5-4F11-BD41-64880CDC6164}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {CA42C8C6-20F5-4F11-BD41-64880CDC6164}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CA42C8C6-20F5-4F11-BD41-64880CDC6164}.Debug|Any CPU.Build.0 = Debug|Any CPU {CA42C8C6-20F5-4F11-BD41-64880CDC6164}.Release|Any CPU.ActiveCfg = Release|Any CPU {CA42C8C6-20F5-4F11-BD41-64880CDC6164}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {F135872C-C9AD-4853-BB6D-E7F97B3E5671} EndGlobalSection EndGlobal ================================================ FILE: projects/endpoint-routing/new-routing-13/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "launchBrowser": { "enabled": true }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-13/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "publish", "command": "dotnet", "type": "process", "args": [ "publish", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "watch", "command": "dotnet", "type": "process", "args": [ "watch", "run", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-13/Controllers/HomeController.cs ================================================ using System; using Microsoft.AspNetCore.Mvc; namespace PracticalAspNetCore { public class Data { public string Message { get; set; } } [Route("/")] public class HomeController : Controller { [HttpGet] public IActionResult Index() { return View(); } [HttpGet("about")] [Message("Hello World from the GreetingFromMiddleWare[GET]")] public IActionResult About() { return View(new Data { Message = HttpContext.Items["GreetingFromMiddleWare"] as string }); } [HttpPost("about")] [Message("Hello World from the GreetingFromMiddleWare[POST]")] public IActionResult AboutPost() { return View("About", new Data { Message = HttpContext.Items["GreetingFromMiddleWare"] as string }); } } } ================================================ FILE: projects/endpoint-routing/new-routing-13/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.UseMiddleware(); app.MapControllers(); app.Run(); public class GreeterMiddleware { RequestDelegate _next; readonly LinkGenerator _linkGenerator; public GreeterMiddleware(RequestDelegate next, LinkGenerator linkGenerator) { _next = next; _linkGenerator = linkGenerator; } public async Task InvokeAsync(HttpContext httpContext) { Endpoint endPoint = httpContext.GetEndpoint(); var message = endPoint.Metadata.GetMetadata(); if (message != null) httpContext.Items.Add("GreetingFromMiddleWare", message.Content); await _next.Invoke(httpContext); } } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] public class MessageAttribute : System.Attribute { public string Content { get; set; } public MessageAttribute(string content) => Content = content; } ================================================ FILE: projects/endpoint-routing/new-routing-13/README.md ================================================ # New Routing - Obtaining an Endpoint metadata from your MVC Controller Obtain Endpoint metadata from MVC Controller's Action methods. ================================================ FILE: projects/endpoint-routing/new-routing-13/Views/Home/About.cshtml ================================================ @model PracticalAspNetCore.Data

    @Model.Message

    ================================================ FILE: projects/endpoint-routing/new-routing-13/Views/Home/Index.cshtml ================================================

    An example of accessing MVC attribute values from a middleware using Endpoint class

    ================================================ FILE: projects/endpoint-routing/new-routing-13/Views/_ViewImports.cshtml ================================================ @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers @addTagHelper *, AuthoringTagHelpers ================================================ FILE: projects/endpoint-routing/new-routing-13/new-routing-13.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing-14/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "launchBrowser": { "enabled": true }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-14/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "publish", "command": "dotnet", "type": "process", "args": [ "publish", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "watch", "command": "dotnet", "type": "process", "args": [ "watch", "run", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-14/Program.cs ================================================ using Microsoft.AspNetCore.Http.Features; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapGet("/", async context => { var feature = context.Features.Get(); await context.Response.WriteAsync($"Endpoint Name {feature.Endpoint.DisplayName}"); }); app.Run(); ================================================ FILE: projects/endpoint-routing/new-routing-14/README.md ================================================ # New Routing - Obtaining Endpoint feature via IEndpointFeature Use `HttpContext.Features.Get();` to obtain `Endpoint` information for a given Middleware. You can accomplish the same thing using `HttpContext.GetEndpoint`. ================================================ FILE: projects/endpoint-routing/new-routing-14/new-routing-14.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing-15/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "launchBrowser": { "enabled": true }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-15/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "publish", "command": "dotnet", "type": "process", "args": [ "publish", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "watch", "command": "dotnet", "type": "process", "args": [ "watch", "run", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-15/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapGet("/", async context => { var endpoint = context.GetEndpoint(); var greeting = endpoint.Metadata.GetMetadata(); await context.Response.WriteAsync($"Greeting from metadata : {greeting.Greeting}"); }).WithMetadata(new HelloWorld { Greeting = "Hello World" }); app.Run(); public class HelloWorld { public string Greeting { get; set; } } ================================================ FILE: projects/endpoint-routing/new-routing-15/README.md ================================================ # New Routing - Attaching Metadata information to your inline Middleware Use `IEndpointConventionBuilder.WithMetadata` to attach metadata information to your inline Middleware. ================================================ FILE: projects/endpoint-routing/new-routing-15/new-routing-15.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing-16/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "launchBrowser": { "enabled": true }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-16/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "publish", "command": "dotnet", "type": "process", "args": [ "publish", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "watch", "command": "dotnet", "type": "process", "args": [ "watch", "run", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-16/Areas/Admin/Controllers/HomeController.cs ================================================ using Microsoft.AspNetCore.Mvc; namespace PracticalAspNetCore.Areas.Admin.Controllers { [Area("Admin")] public class HomeController : Controller { public ActionResult Index() => View(); public ActionResult About() => Content("About"); } } ================================================ FILE: projects/endpoint-routing/new-routing-16/Areas/Admin/Views/Home/Index.cshtml ================================================ Admin Home ================================================ FILE: projects/endpoint-routing/new-routing-16/Areas/Customer/Controllers/HomeController.cs ================================================ using Microsoft.AspNetCore.Mvc; namespace PracticalAspNetCore.Areas.Customer.Controllers { [Area("Customer")] public class HomeController : Controller { public ActionResult Index() => View(); } } ================================================ FILE: projects/endpoint-routing/new-routing-16/Areas/Customer/Views/Home/Index.cshtml ================================================ Customer Home ================================================ FILE: projects/endpoint-routing/new-routing-16/Controllers/HomeController.cs ================================================ using Microsoft.AspNetCore.Mvc; namespace PracticalAspNetCore.Controllers { public class HomeController : Controller { public IActionResult Index() => View(); } } ================================================ FILE: projects/endpoint-routing/new-routing-16/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); //Don't forget that the area name specified must match the name of the area at [Area()] attribute used at the area controllers. app.MapAreaControllerRoute("AdminArea", "Admin", "Admin/{controller=Home}/{action=Index}/{id?}"); app.MapAreaControllerRoute("CustomerArea", "Customer", "Customer/{controller=Home}/{action=Index}/{id?}"); app.MapDefaultControllerRoute(); app.Run(); ================================================ FILE: projects/endpoint-routing/new-routing-16/README.md ================================================ # New Routing - Map Areas by Convention Use `IEndpointRouteBuilder.MapAreaControllerRoute` to configure routing for your areas. ================================================ FILE: projects/endpoint-routing/new-routing-16/Views/Home/Index.cshtml ================================================

    Setup Areas

    ================================================ FILE: projects/endpoint-routing/new-routing-16/new-routing-16.csproj ================================================ net10.0 new-routing-16 new-routing-14 true preview ================================================ FILE: projects/endpoint-routing/new-routing-17/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllers(); var app = builder.Build(); app.MapControllers(); app.Run(); [Route("")] public class HomeController : Controller { public IActionResult Index() => Content("Using services.AddControllers to provide MVC without Views supports. Perfect for Web APIs."); } ================================================ FILE: projects/endpoint-routing/new-routing-17/README.md ================================================ # New Routing - enable MVC but without Views support or Razor Page. Using `services.AddControllers` to provide MVC without Views supports. Perfect for Web APIs. ================================================ FILE: projects/endpoint-routing/new-routing-17/new-routing-17.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing-18/Controllers/HomeController.cs ================================================ using Microsoft.AspNetCore.Mvc; namespace PracticalAspNetCore { [Route("")] public class HomeController : Controller { public IActionResult Index() => View(); } } ================================================ FILE: projects/endpoint-routing/new-routing-18/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapControllers(); app.Run(); ================================================ FILE: projects/endpoint-routing/new-routing-18/README.md ================================================ # New Routing - enable MVC but with Views support but without Razor Page Using `services.AddControllersWithViews();` to provide MVC with Views supports. Razor Page is not available. So this similar to the "classic" MVC configuration. ================================================ FILE: projects/endpoint-routing/new-routing-18/Views/Home/Index.cshtml ================================================

    Classic MVC Configuration

    services.AddControllersWithViews() add supports for MVC and Views. Razor Page is not available. So this similar to the "classic" MVC configuration. ================================================ FILE: projects/endpoint-routing/new-routing-18/new-routing-18.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing-19/Pages/Index.cshtml ================================================ @page

    Razor Page and MVC API

    services.AddRazorPages() add supports for Razor Page and MVC API (click to fetch a GET API). ================================================ FILE: projects/endpoint-routing/new-routing-19/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); var app = builder.Build(); app.MapControllers(); app.MapRazorPages(); app.Run(); [Route("/API/Message")] public class APIController : ControllerBase { [HttpGet("")] public ActionResult GetMessage() { return Ok(new { Message = "services.AddRazorPages() add supports for Razor Pages and MVC API. There is no MVC Views support." }); } } ================================================ FILE: projects/endpoint-routing/new-routing-19/README.md ================================================ # New Routing - enable Razor Pages with MVC API support `services.AddRazorPages()` add supports for Razor Pages and MVC API (click to fetch a GET API). ================================================ FILE: projects/endpoint-routing/new-routing-19/new-routing-19.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing-2/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapControllers(); app.Run(); [Route("")] public class HomeController : Controller { public IActionResult Index() => Content("Hello World. Razor Pages won't work in this sample."); } ================================================ FILE: projects/endpoint-routing/new-routing-2/README.md ================================================ # New Routing - enable just MVC This example shows how to enable *just* MVC routes (with attribute routing, not convention routing) in your app using the method `app.UseRouting`. Razor Pages won't work at all in this sample. ================================================ FILE: projects/endpoint-routing/new-routing-2/new-routing-2.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing-20/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "launchBrowser": { "enabled": true }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-20/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "publish", "command": "dotnet", "type": "process", "args": [ "publish", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "watch", "command": "dotnet", "type": "process", "args": [ "watch", "run", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-20/Controllers/AdminController.cs ================================================ using Microsoft.AspNetCore.Mvc; namespace PracticalAspNetCore.Controllers { public class AdminController : Controller { public IActionResult Index() => Content("Admin Page"); } } ================================================ FILE: projects/endpoint-routing/new-routing-20/Controllers/HomeController.cs ================================================ using Microsoft.AspNetCore.Mvc; namespace PracticalAspNetCore.Controllers { public class HomeController : Controller { public IActionResult Index() => View(); public IActionResult About() => Content("About Page"); } } ================================================ FILE: projects/endpoint-routing/new-routing-20/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapControllerRoute("Admin", "Admin", new { Controller = "Admin", Action = "Index" }); app.MapControllerRoute("About", "About", new { Controller = "Home", Action = "About" }); app.MapControllerRoute("Default", "{controller=Home}/{action=Index}/{id?}"); app.Run(); ================================================ FILE: projects/endpoint-routing/new-routing-20/README.md ================================================ # Convention based Routing Use `IEndpointRouteBuilder.MapControllerRoute` to configure convention based routing. ================================================ FILE: projects/endpoint-routing/new-routing-20/Views/Home/Index.cshtml ================================================

    Home Page - Convention based Routing

    Use IEndpointRouteBuilder.MapControllerRoute to configure convention based routing. ================================================ FILE: projects/endpoint-routing/new-routing-20/new-routing-20.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing-21/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "launchBrowser": { "enabled": true }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-21/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "publish", "command": "dotnet", "type": "process", "args": [ "publish", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "watch", "command": "dotnet", "type": "process", "args": [ "watch", "run", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-21/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddHealthChecks(); var app = builder.Build(); app.MapHealthChecks("/WhatsUp"); app.MapGet("/", async context => { await context.Response.WriteAsync(@"

    Health Check

    The health check service checks on this url /WhatsUp. "); }); app.Run(); ================================================ FILE: projects/endpoint-routing/new-routing-21/README.md ================================================ # A new way to map health check Use `IEndpointRouteBuilder.MapHealthChecks` to configure health check instead of `IApplicationBuilder.UseHealthChecks`. [This is how it's done in ASP.NET Core 2.2](/practical-aspnetcore/blob/master/projects/2-2/health-check/src/Program.cs). ================================================ FILE: projects/endpoint-routing/new-routing-21/new-routing-21.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing-22/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "launchBrowser": { "enabled": true }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-22/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "publish", "command": "dotnet", "type": "process", "args": [ "publish", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "watch", "command": "dotnet", "type": "process", "args": [ "watch", "run", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-22/Program.cs ================================================ using Microsoft.AspNetCore.Server.Kestrel.Core; var builder = WebApplication.CreateBuilder(); builder.WebHost.ConfigureKestrel(k => { k.ConfigureEndpointDefaults(e => { e.Protocols = HttpProtocols.Http2; }); } ); var app = builder.Build(); app.MapGet("/", async context => { await context.Response.WriteAsync(@" This endpoint runs on HTTP/2. It is only accessible from the browser over HTTPS connection. "); }); app.Run(); ================================================ FILE: projects/endpoint-routing/new-routing-22/README.md ================================================ # Configure Kestrel defaults for Endpoints We configure `KestrelServerOptions.ConfigureEndpointDefaults` so the Endpoints will run only on HTTP/2. You can only access this sample over HTTPS. Hence use `https://localhost:5001/` instead of `http://localhost:5000/`. ================================================ FILE: projects/endpoint-routing/new-routing-22/new-routing-22.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing-23/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.WebHost.ConfigureKestrel(k => { k.ListenLocalhost(8111); k.ListenLocalhost(8112); }); var app = builder.Build(); app.MapGet("/", async context => { await context.Response.WriteAsync("hello world from http://localhost:8111"); }).RequireHost("localhost:8111"); app.MapGet("/", async context => { await context.Response.WriteAsync("hello world from http://localhost:8112"); }).RequireHost("localhost:8112"); app.Run(); ================================================ FILE: projects/endpoint-routing/new-routing-23/README.md ================================================ # Host Matching on your middleware This example demonstrates on how to configure your endpoint to respond to a request from a specific host. In this example, GET `/` returns a different result depending whether you access it from `localhost:8111` and `localhost:8112`. **Run this sample through command line `dotnet watch run`**. ================================================ FILE: projects/endpoint-routing/new-routing-23/new-routing-23.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing-24/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.WebHost.ConfigureKestrel(k => { k.ListenLocalhost(8111); k.ListenLocalhost(8112); }); var app = builder.Build(); app.MapGet("/", async context => { await context.Response.WriteAsync("hello world from http://localhost:8111"); }).WithMetadata(new HostAttribute("localhost:8111")); app.MapGet("/", async context => { await context.Response.WriteAsync("hello world from http://localhost:8112"); }).WithMetadata(new HostAttribute("localhost:8112")); app.Run(); ================================================ FILE: projects/endpoint-routing/new-routing-24/README.md ================================================ # Host Matching on your middleware version 2 This example demonstrates on how to configure your endpoint to respond to a request from a specific host. In this example, GET `/` returns a different result depending whether you access it from `localhost:8111` and `localhost:8112`. This produces the same exact effect as the [previous example](/projects/3-0/new-routing-23) except that here we use `IEndpointConventionBuilder.WithMetadata` and `HostAttribute` instead of `IEndpointConventionBuilder.RequireHost`. ================================================ FILE: projects/endpoint-routing/new-routing-24/new-routing-24.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing-25/Program.cs ================================================ using Microsoft.AspNetCore.Mvc.Routing; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddSingleton(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapControllers(); app.MapDynamicControllerRoute("{number}"); app.Run(); public class NumberTransformer : DynamicRouteValueTransformer { public override ValueTask TransformAsync(HttpContext httpContext, RouteValueDictionary values) { if (!values.ContainsKey("number")) return new ValueTask(values); values["controller"] = "Home"; var action = values["number"] switch { "1" => "one", "2" => "two", "3" => "three", _ => "undefined" }; values["action"] = action; return new ValueTask(values); } } public class HomeController : Controller { [Route("")] public ActionResult Index() { return Content(@" ", "text/html"); } public ActionResult One() { return Content(@"One"); } public ActionResult Two() { return Content(@"Two"); } public ActionResult Three() { return Content(@"Three"); } public ActionResult Undefined() { return Content("Undefined"); } } ================================================ FILE: projects/endpoint-routing/new-routing-25/README.md ================================================ # Handle MVC route dynamically This example shows how to handle MVC routing dynamically using `MapDynamicControllerRoute` and `DynamicRouteValueTransformer`. This will allows you to process a given url pattern and then set values to the `RouteValueDictionary` as you see fit. ================================================ FILE: projects/endpoint-routing/new-routing-25/new-routing-25.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing-26/Pages/Index.cshtml ================================================ @page

    Dynamic Route for Razor Pages

    ================================================ FILE: projects/endpoint-routing/new-routing-26/Pages/One.cshtml ================================================ @page

    One

    ================================================ FILE: projects/endpoint-routing/new-routing-26/Pages/Three.cshtml ================================================ @page

    Three

    ================================================ FILE: projects/endpoint-routing/new-routing-26/Pages/Two.cshtml ================================================ @page

    Two

    ================================================ FILE: projects/endpoint-routing/new-routing-26/Pages/Undefined.cshtml ================================================ @page

    Undefined

    ================================================ FILE: projects/endpoint-routing/new-routing-26/Program.cs ================================================ using Microsoft.AspNetCore.Mvc.Routing; var builder = WebApplication.CreateBuilder(); builder.Services.AddSingleton(); builder.Services.AddRazorPages(); var app = builder.Build(); app.MapRazorPages(); app.MapDynamicPageRoute("{number}"); app.Run(); public class NumberTransformer : DynamicRouteValueTransformer { public override ValueTask TransformAsync(HttpContext httpContext, RouteValueDictionary values) { if (!values.ContainsKey("number")) return new ValueTask(values); var page = values["number"] switch { "1" => "/one", "2" => "/two", "3" => "/three", _ => "/undefined" }; Console.WriteLine("Route Page"); foreach (var k in values) { Console.WriteLine("Key" + k); } values["page"] = page; return new ValueTask(values); } } ================================================ FILE: projects/endpoint-routing/new-routing-26/README.md ================================================ # Handle Razor Pages route dynamically This example shows how to handle Razor Pages routing dynamically using `MapDynamicPageRoute` and `DynamicRouteValueTransformer`. This will allows you to process a given url pattern and then set values to the `RouteValueDictionary` as you see fit. ================================================ FILE: projects/endpoint-routing/new-routing-26/new-routing-26.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing-27/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "launchBrowser": { "enabled": true }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-27/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "publish", "command": "dotnet", "type": "process", "args": [ "publish", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "watch", "command": "dotnet", "type": "process", "args": [ "watch", "run", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-27/Areas/Admin/Pages/Index.cshtml ================================================ @page

    Admin Area

    ================================================ FILE: projects/endpoint-routing/new-routing-27/Areas/Customer/Pages/Index.cshtml ================================================ @page

    Customer Area

    ================================================ FILE: projects/endpoint-routing/new-routing-27/Pages/Index.cshtml ================================================ @page

    Razor Pages Areas

    ================================================ FILE: projects/endpoint-routing/new-routing-27/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(x => { x.Conventions.AddAreaPageRoute("Admin", "/Index", "/Manage"); x.Conventions.AddAreaPageRoute("Customer", "/Index", "/CustomerService"); }); var app = builder.Build(); app.MapRazorPages(); app.Run(); ================================================ FILE: projects/endpoint-routing/new-routing-27/README.md ================================================ # New Routing - Map a route to a Razor Pages located in Areas Map a route to a Razor Pages located in an Area using `Conventions.AddAreaPageRoute`. ================================================ FILE: projects/endpoint-routing/new-routing-27/new-routing-27.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing-28/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "launchBrowser": { "enabled": true }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-28/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "publish", "command": "dotnet", "type": "process", "args": [ "publish", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "watch", "command": "dotnet", "type": "process", "args": [ "watch", "run", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-28/Areas/Admin/Pages/Index.cshtml ================================================ @page

    Admin Area

    ================================================ FILE: projects/endpoint-routing/new-routing-28/Areas/Admin/Pages/Manage.cshtml ================================================ @page

    Admin Area - Manage

    ================================================ FILE: projects/endpoint-routing/new-routing-28/Areas/Admin/Pages/Reports.cshtml ================================================ @page

    Admin Area - Reports

    ================================================ FILE: projects/endpoint-routing/new-routing-28/Areas/Customer/Pages/Index.cshtml ================================================ @page

    Customer Area

    ================================================ FILE: projects/endpoint-routing/new-routing-28/Areas/Customer/Pages/Tickets.cshtml ================================================ @page

    Customer Area - Tickets

    ================================================ FILE: projects/endpoint-routing/new-routing-28/Pages/Index.cshtml ================================================ @page

    Razor Pages Areas

    ================================================ FILE: projects/endpoint-routing/new-routing-28/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); var app = builder.Build(); app.MapRazorPages(); app.Run(); ================================================ FILE: projects/endpoint-routing/new-routing-28/README.md ================================================ # New Routing - Setup a Razor Page Area This sample shows you how to setup a Razor Pages area. You need to create the following folders structure `Areas//Pages/Index.cshtml` e.g. `Areas/Admin/Pages/Index.cshtml`. This page will be accessible via `/Admin/`. ================================================ FILE: projects/endpoint-routing/new-routing-28/new-routing-28.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing-29/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "launchBrowser": { "enabled": true }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-29/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "publish", "command": "dotnet", "type": "process", "args": [ "publish", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "watch", "command": "dotnet", "type": "process", "args": [ "watch", "run", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-29/Areas/Admin/Pages/Index.cshtml ================================================ @page

    Admin Area

    ================================================ FILE: projects/endpoint-routing/new-routing-29/Areas/Admin/Pages/Manage.cshtml ================================================ @page

    Admin Area - Manage

    ================================================ FILE: projects/endpoint-routing/new-routing-29/Areas/Admin/Pages/Other.cshtml ================================================ @page

    Admin Area - Other - Fallback

    ================================================ FILE: projects/endpoint-routing/new-routing-29/Areas/Admin/Pages/Reports.cshtml ================================================ @page

    Admin Area - Reports

    ================================================ FILE: projects/endpoint-routing/new-routing-29/Areas/Customer/Pages/Index.cshtml ================================================ @page

    Customer Area

    ================================================ FILE: projects/endpoint-routing/new-routing-29/Areas/Customer/Pages/Tickets.cshtml ================================================ @page

    Customer Area - Tickets

    ================================================ FILE: projects/endpoint-routing/new-routing-29/Pages/Index.cshtml ================================================ @page

    Razor Pages Fallback in area

    We configure a fallback page located in an area. Try these links to see its effects. Fallback page only works for non file name route (e.g. without extensions).

    ================================================ FILE: projects/endpoint-routing/new-routing-29/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); var app = builder.Build(); app.MapRazorPages(); app.MapFallbackToAreaPage("/Other", "Admin"); app.Run(); ================================================ FILE: projects/endpoint-routing/new-routing-29/README.md ================================================ # New Routing - Fallback page for Razor Pages areas This sample shows you how to setup a fallback page located in a Razor Page area. When the router cannot match any given non file route (e.g without extension), it will resort to returning the fallback page. You can only have one `endpoints.MapFallbackToAreaPage` or `endpoints.MapFallbackToPage` or `endpoints.MapFallbackToFile` definition in your system. If you want to have multiple fallback pages, you need to use the ones with pattern. ================================================ FILE: projects/endpoint-routing/new-routing-29/new-routing-29.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing-3/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "launchBrowser": { "enabled": true }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-3/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "publish", "command": "dotnet", "type": "process", "args": [ "publish", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "watch", "command": "dotnet", "type": "process", "args": [ "watch", "run", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-3/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapDefaultControllerRoute(); app.Run(); public class HomeController : Controller { public IActionResult Index() => Content("Hello World. We are using default controller route."); } ================================================ FILE: projects/endpoint-routing/new-routing-3/README.md ================================================ # New Routing - enable just MVC This example shows how to enable *just* MVC with **default** (`{controller=Home}/{action=Index}/{id?}`) route in your app using the method `app.UseRouting`. Razor Pages won't work at all in this sample. ================================================ FILE: projects/endpoint-routing/new-routing-3/new-routing-3.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing-30/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "launchBrowser": { "enabled": true }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-30/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "publish", "command": "dotnet", "type": "process", "args": [ "publish", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "watch", "command": "dotnet", "type": "process", "args": [ "watch", "run", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-30/Areas/Admin/Pages/Index.cshtml ================================================ @page

    Admin Area

    ================================================ FILE: projects/endpoint-routing/new-routing-30/Areas/Admin/Pages/Manage.cshtml ================================================ @page

    Admin Area - Manage

    ================================================ FILE: projects/endpoint-routing/new-routing-30/Areas/Admin/Pages/Other.cshtml ================================================ @page

    Admin Area - Other - Fallback

    ================================================ FILE: projects/endpoint-routing/new-routing-30/Areas/Admin/Pages/OtherLevel.cshtml ================================================ @page

    Admin Area - Deep Level Pattern - Fallback

    ================================================ FILE: projects/endpoint-routing/new-routing-30/Areas/Admin/Pages/OtherNumber.cshtml ================================================ @page

    Admin Area - Other Number - Fallback

    ================================================ FILE: projects/endpoint-routing/new-routing-30/Areas/Admin/Pages/Reports.cshtml ================================================ @page

    Admin Area - Reports

    ================================================ FILE: projects/endpoint-routing/new-routing-30/Areas/Customer/Pages/Index.cshtml ================================================ @page

    Customer Area

    ================================================ FILE: projects/endpoint-routing/new-routing-30/Areas/Customer/Pages/Tickets.cshtml ================================================ @page

    Customer Area - Tickets

    ================================================ FILE: projects/endpoint-routing/new-routing-30/Pages/Index.cshtml ================================================ @page

    Razor Pages Fallback in area

    We configure a fallback page located in an area using route patterns. Try these links to see its effects. Fallback page only works for non file name route (e.g. without extensions).

    ================================================ FILE: projects/endpoint-routing/new-routing-30/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); var app = builder.Build(); app.MapRazorPages(); app.MapFallbackToAreaPage("/Other", "Admin"); app.MapFallbackToAreaPage("{segment}/{segment2}", "/OtherLevel", "Admin"); app.MapFallbackToAreaPage("{number:int}", "/OtherNumber", "Admin"); app.Run(); ================================================ FILE: projects/endpoint-routing/new-routing-30/README.md ================================================ # New Routing - Fallback page for Razor Pages areas with route patterns This sample shows how to return different fallback page located in areas depending on the route pattern that matches the request. ================================================ FILE: projects/endpoint-routing/new-routing-30/new-routing-30.csproj ================================================ net10.0 new-routing-29 true preview ================================================ FILE: projects/endpoint-routing/new-routing-31/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "launchBrowser": { "enabled": true }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-31/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "publish", "command": "dotnet", "type": "process", "args": [ "publish", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "watch", "command": "dotnet", "type": "process", "args": [ "watch", "run", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-31/Program.cs ================================================ using Microsoft.AspNetCore.Authentication.Cookies; var builder = WebApplication.CreateBuilder(); builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(options => { options.LoginPath = new PathString("/login"); }); builder.Services.AddAuthorization(); var app = builder.Build(); app.UseAuthentication(); app.UseAuthorization(); app.MapGet("/", async context => { await context.Response.WriteAsync(@" This is home page
    Click here trying to access protected area "); }) .AllowAnonymous(); app.MapGet("/login", async context => { await context.Response.WriteAsync("You must login"); }); app.MapGet("/protected", async context => { await context.Response.WriteAsync("Valuable area"); }).RequireAuthorization(); app.Run(); ================================================ FILE: projects/endpoint-routing/new-routing-31/README.md ================================================ # Allow anonymous access and require authorization to endpoints Use `.AllowAnonymous()` and `.RequireAuthorization` extension methods to allow anonymous access and demand authorization. ================================================ FILE: projects/endpoint-routing/new-routing-31/new-routing-31.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing-4/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "launchBrowser": { "enabled": true }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-4/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "publish", "command": "dotnet", "type": "process", "args": [ "publish", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "watch", "command": "dotnet", "type": "process", "args": [ "watch", "run", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-4/Program.cs ================================================ var app = WebApplication.Create(); app.MapGet("/", async context => { await context.Response.WriteAsync("Hello world"); }); app.Run(); ================================================ FILE: projects/endpoint-routing/new-routing-4/README.md ================================================ # New Routing - use RequestDelegate directly This example shows how to use `RequestDelegate` directly in `app.UseRouting` for `GET` operation using `MapGet`. `MapPost`, `MapPut`, and `MapDelete` are also available for use. ================================================ FILE: projects/endpoint-routing/new-routing-4/new-routing-4.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing-5/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "launchBrowser": { "enabled": true }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-5/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "publish", "command": "dotnet", "type": "process", "args": [ "publish", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "watch", "command": "dotnet", "type": "process", "args": [ "watch", "run", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-5/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.Map("/", async context => { if (context.Request.Method == "GET") await context.Response.WriteAsync("Hello world"); }); app.Run(); ================================================ FILE: projects/endpoint-routing/new-routing-5/README.md ================================================ # New Routing - use RequestDelegate directly This example shows how to use `RequestDelegate` directly in `app.UseRouting` using `Map`. `Map` does not filter based on HTTP Verb, hence you will have to check the request Verb yourself. It's useful to handle request such as `PATCH` that does not have helper methods already. ================================================ FILE: projects/endpoint-routing/new-routing-5/new-routing-5.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing-6/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "launchBrowser": { "enabled": true }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-6/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "publish", "command": "dotnet", "type": "process", "args": [ "publish", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "watch", "command": "dotnet", "type": "process", "args": [ "watch", "run", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-6/Pages/About.cshtml ================================================ @page "/about-us"

    This is about us

    ================================================ FILE: projects/endpoint-routing/new-routing-6/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddMvc(); var app = builder.Build(); app.MapGet("hello", async context => await context.Response.WriteAsync("hello")); app.MapPost("new-hello", async context => await context.Response.WriteAsync("hello")); app.MapDelete("hello", async context => await context.Response.WriteAsync("hello")); app.MapPut("hello", async context => await context.Response.WriteAsync("hello")); app.MapControllers(); app.MapRazorPages(); app.Map("", async context => { var route = app as IEndpointRouteBuilder; foreach (EndpointDataSource x in route.DataSources) { await context.Response.WriteAsync($"{x}\n"); foreach (RouteEndpoint e in x.Endpoints) { await context.Response.WriteAsync($"Display Name: {e.DisplayName}\n"); await context.Response.WriteAsync($"Route Pattern: {e.RoutePattern.RawText}\n"); await context.Response.WriteAsync($"Metadata Count: {e.Metadata.Count}\n"); foreach (var mm in e.Metadata) { await context.Response.WriteAsync($"Metadata: {mm}\n"); } await context.Response.WriteAsync("\n"); } await context.Response.WriteAsync("\n\n"); } }); app.Run(); [Route("MVC")] public class HomeController : Controller { [HttpGet("Greeting")] public IActionResult Index() => Content("Oi"); [HttpPost("Greeting")] public IActionResult Greeting() => Content("Oi"); } ================================================ FILE: projects/endpoint-routing/new-routing-6/README.md ================================================ # New Routing - interrogate available endpoints in your app Use `route.DataSources` to interrogate all the available endpoints in your app. It's really handy. ================================================ FILE: projects/endpoint-routing/new-routing-6/new-routing-6.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing-7/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "launchBrowser": { "enabled": true }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-7/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "publish", "command": "dotnet", "type": "process", "args": [ "publish", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "watch", "command": "dotnet", "type": "process", "args": [ "watch", "run", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-7/Pages/About.cshtml ================================================ @page "/about-us"

    This is about us

    ================================================ FILE: projects/endpoint-routing/new-routing-7/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapMethods("", new[] { "GET" }, async context => { var content = @"

    Hello World

    "; await context.Response.WriteAsync(content); }); app.MapMethods("about", new[] { "POST" }, async context => { var content = @"

    This page only supports POST method

    If you try to retrieve this page directly, you will see nothing.

    "; await context.Response.WriteAsync(content); }); app.Run(); ================================================ FILE: projects/endpoint-routing/new-routing-7/README.md ================================================ # New Routing - using RequestDelegate with HTTP verb filter Respond to a url pattern and filter the request based on HTTP verbs. ================================================ FILE: projects/endpoint-routing/new-routing-7/new-routing-7.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing-8/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "launchBrowser": { "enabled": true }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-8/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "publish", "command": "dotnet", "type": "process", "args": [ "publish", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "watch", "command": "dotnet", "type": "process", "args": [ "watch", "run", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-8/Program.cs ================================================ using Microsoft.Extensions.FileProviders; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapGet("/contact/us", async context => { await context.Response.WriteAsync("Contact Us"); }); app.MapFallbackToFile("index.html", new StaticFileOptions() { FileProvider = new PhysicalFileProvider(Path.Combine(app.Environment.ContentRootPath, "static")), }); app.Run(); ================================================ FILE: projects/endpoint-routing/new-routing-8/README.md ================================================ # New Routing - Static file fallback Return a static page when your request does not match anything else using `MapFallbackToFile`. ================================================ FILE: projects/endpoint-routing/new-routing-8/new-routing-8.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/new-routing-8/static/index.html ================================================

    This is a static page that got served when nothing else matches your request

    ================================================ FILE: projects/endpoint-routing/new-routing-9/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "launchBrowser": { "enabled": true }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-9/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "publish", "command": "dotnet", "type": "process", "args": [ "publish", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" }, { "label": "watch", "command": "dotnet", "type": "process", "args": [ "watch", "run", "${workspaceFolder}/new-routing-3.csproj" ], "problemMatcher": "$tsc" } ] } ================================================ FILE: projects/endpoint-routing/new-routing-9/Pages/index.cshtml ================================================ @page

    This is a Razor Page that got served when nothing else matches your request

    ================================================ FILE: projects/endpoint-routing/new-routing-9/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); builder.Services.AddRazorPages(); var app = builder.Build(); app.MapRazorPages(); app.MapGet("/contact/us", async context => { await context.Response.WriteAsync("Contact Us"); }); app.MapFallbackToPage("/Index"); app.Run(); ================================================ FILE: projects/endpoint-routing/new-routing-9/README.md ================================================ # New Routing - Razor Page fallback Return a Razor Page when your request does not match anything else using `MapFallbackToPage`. ================================================ FILE: projects/endpoint-routing/new-routing-9/new-routing-9.csproj ================================================ net10.0 true preview ================================================ FILE: projects/endpoint-routing/parameter-transformer/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Configuration; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Routing; using Microsoft.AspNetCore.Mvc.ApplicationModels; using System.Text.RegularExpressions; var builder = WebApplication.CreateBuilder(); builder.Services.AddMvc(options => { options.Conventions.Add(new RouteTokenTransformerConvention(new SlugifyParameterTransformer())); }); var app = builder.Build(); app.MapDefaultControllerRoute(); app.Run(); [Route("")] [Route("[controller]/[action]")] public class HomeController : Controller { [HttpGet("")] public ActionResult Index() { return new ContentResult { Content = @"

    Parameter Transformer

    Now all your PascalCase action becomes kebab-case, e.g. AboutUs becomes about-us. Remember that the transformation happens only on the token replacement [controller] and [action].

    ", ContentType = "text/html" }; } public ActionResult AboutUs() { return new ContentResult { Content = @"

    About Us

    ", ContentType = "text/html" }; } public ActionResult OrderItemsNow() { return new ContentResult { Content = @"

    Order Items Now

    ", ContentType = "text/html" }; } [Route("WeAreAmazing")] public ActionResult Random() { return new ContentResult { Content = @"

    We are Amazing

    ", ContentType = "text/html" }; } } [Route("[controller]")] public class GetThisOffersNowController : Controller { public ActionResult TheNameOfThisActionDoesNotMatterBecauseThisIsTheOnlyOneInThisController() { return new ContentResult { Content = @"

    Get This Offers Now

    This is an example where the transformation applied to the [controller] token. ", ContentType = "text/html" }; } } public class SlugifyParameterTransformer : IOutboundParameterTransformer { public string TransformOutbound(object value) { if (value == null) return null; return Regex.Replace(value.ToString(), "([a-z])([A-Z])", "$1-$2").ToLower(); } } ================================================ FILE: projects/endpoint-routing/parameter-transformer/parameter-transformer.csproj ================================================ net10.0 parameter-transformer preview ================================================ FILE: projects/exception-handler-middleware/README.md ================================================ # IExceptionHandler * [IExceptionHandler](iexception-handler) Implement `IExceptionHandler` to handle ASP.NET Core exceptions. * [Multiple IExceptionHandler](iexception-handler-2) Implement multiple `IExceptionHandler` to handle ASP.NET Core exceptions. dotnet8 ================================================ FILE: projects/exception-handler-middleware/build.bat ================================================ dotnet build iexception-handler dotnet build iexception-handler-2 ================================================ FILE: projects/exception-handler-middleware/build.sh ================================================ #!/bin/bash dotnet build iexception-handler dotnet build iexception-handler-2 ================================================ FILE: projects/exception-handler-middleware/iexception-handler/Program.cs ================================================ using Microsoft.AspNetCore.Diagnostics; var builder = WebApplication.CreateBuilder(); builder.Services.AddExceptionHandler(); var app = builder.Build(); app.UseExceptionHandler(opt => { }); app.MapGet("/", () => { throw new Exception("Something went wrong"); }); app.Run(); public class DefaultExceptionHandler : IExceptionHandler { public async ValueTask TryHandleAsync(HttpContext httpContext, Exception exception, CancellationToken cancellationToken) { await httpContext.Response.WriteAsync($""" Opps sorry. Exception message is {exception.Message} at {httpContext.Request.Method} {httpContext.Request.Path}. """); return true; } } ================================================ FILE: projects/exception-handler-middleware/iexception-handler/README.md ================================================ # Implement IExceptionHandler to handle unhandled exceptions Implement `IExceptionHandler` for handling exceptions. ================================================ FILE: projects/exception-handler-middleware/iexception-handler/iexception-handler.csproj ================================================ net10.0 true preview ================================================ FILE: projects/exception-handler-middleware/iexception-handler/iexception-handler.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "iexception-handler", "iexception-handler.csproj", "{14D0E714-54E8-409E-A7F7-DAE9860E46AD}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {14D0E714-54E8-409E-A7F7-DAE9860E46AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {14D0E714-54E8-409E-A7F7-DAE9860E46AD}.Debug|Any CPU.Build.0 = Debug|Any CPU {14D0E714-54E8-409E-A7F7-DAE9860E46AD}.Release|Any CPU.ActiveCfg = Release|Any CPU {14D0E714-54E8-409E-A7F7-DAE9860E46AD}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {066322E2-9E78-45D8-BDD7-7679632BD24A} EndGlobalSection EndGlobal ================================================ FILE: projects/exception-handler-middleware/iexception-handler-2/Program.cs ================================================ using Microsoft.AspNetCore.Diagnostics; var builder = WebApplication.CreateBuilder(); builder.Services.AddExceptionHandler(); builder.Services.AddExceptionHandler(); var app = builder.Build(); app.UseExceptionHandler(opt => { }); app.MapGet("/", () => { return Results.Content(""" """, "text/html"); }); app.MapGet("/other-exception", () => { throw new Exception("Something went wrong"); }); app.MapGet("/time-out", () => { throw new TimeoutException("Out of time"); }); app.Run(); public class TimeOutHandler : IExceptionHandler { public async ValueTask TryHandleAsync(HttpContext httpContext, Exception exception, CancellationToken cancellationToken) { if (exception is TimeoutException) { await httpContext.Response.WriteAsync($""" From {nameof(TimeOutHandler)}. The exception message is {exception.Message} at {httpContext.Request.Method} {httpContext.Request.Path}. """); return true; } return false; } } public class DefaultExceptionHandler : IExceptionHandler { public async ValueTask TryHandleAsync(HttpContext httpContext, Exception exception, CancellationToken cancellationToken) { await httpContext.Response.WriteAsync($""" From {nameof(DefaultExceptionHandler)}. The exception message is {exception.Message} at {httpContext.Request.Method} {httpContext.Request.Path}. """); return true; } } ================================================ FILE: projects/exception-handler-middleware/iexception-handler-2/README.md ================================================ # Implement multiple IExceptionHandler to handle unhandled exceptions Implement multiple `IExceptionHandler` for handling exceptions. ```csharp builder.Services.AddExceptionHandler(); builder.Services.AddExceptionHandler(); ``` In this case **the order** of the handles are **important**. `TimeOutHandler` is called first then `DefaultExceptionHandler`. ================================================ FILE: projects/exception-handler-middleware/iexception-handler-2/iexception-handler-2.csproj ================================================ net10.0 true preview ================================================ FILE: projects/exception-handler-middleware/iexception-handler-2/iexception-handler-2.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "iexception-handler-2", "iexception-handler-2.csproj", "{01EC414C-2BCA-4A70-905B-F38AA550B4BC}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {01EC414C-2BCA-4A70-905B-F38AA550B4BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {01EC414C-2BCA-4A70-905B-F38AA550B4BC}.Debug|Any CPU.Build.0 = Debug|Any CPU {01EC414C-2BCA-4A70-905B-F38AA550B4BC}.Release|Any CPU.ActiveCfg = Release|Any CPU {01EC414C-2BCA-4A70-905B-F38AA550B4BC}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {295FBCEC-01B4-4876-8090-EB36054B692A} EndGlobalSection EndGlobal ================================================ FILE: projects/features/README.md ================================================ # Features (11) Features are collection of objects you can obtain from the framework at runtime that serve different purposes. * [Server Addresses Feature](/projects/features/features-server-addresses) Use this Feature to obtain a list of urls that your app is responding to. * [Server Addresses Feature - 2](/projects/features/features-server-addresses-2) Use `IServer` interface to access server addressess when you don't have access to `IApplicationBuilder`. * [Request Feature](/projects/features/features-server-request) Obtain details of a current request. It has some similarity to HttpContext.Request. They are not equal. `HttpContext.Request` has more properties. * [Connection Feature](/projects/features/features-connection) Use `IHttpConnectionFeature` interface to obtain local ip/port and remote ip/port. * [Custom Feature](/projects/features/features-server-custom) Create your own custom Feature and pass it along from a middleware. * [Custom Feature - Override](/projects/features/features-server-custom-override) Shows how you can replace an implementation of a Feature with another within the request pipeline. * [Request Culture Feature](/projects/features/features-request-culture) Use this feature to detect the culture of a web request through `IRequestCultureFeature`. * [Session Feature](/projects/features/features-session) Use session within your middlewares. This sample shows a basic usage of in memory session. * [Session Feature with Redis](/projects/features/features-session-redis-2) Use session within your middlewares. This sample uses Redis to store session data. * [Maximum Request Body Size Feature](/projects/features/features-max-request-body-size) Use this feature to read and set maximum HTTP Request body size. * [IHttpResponseBodyFeature](/projects/features/features-http-body-response) This new Feature interface consolidate previous version's three response body APIs into one dotnet8 ================================================ FILE: projects/features/build.bat ================================================ dotnet build features-connection dotnet build features-http-body-response dotnet build features-max-request-body-size dotnet build features-request-culture dotnet build features-server-addresses dotnet build features-server-addresses-2 dotnet build features-server-custom dotnet build features-server-custom-override dotnet build features-server-request dotnet build features-session dotnet build features-session-redis-2 ================================================ FILE: projects/features/build.sh ================================================ #!/bin/bash dotnet build features-connection dotnet build features-http-body-response dotnet build features-max-request-body-size dotnet build features-request-culture dotnet build features-server-addresses dotnet build features-server-addresses-2 dotnet build features-server-custom dotnet build features-server-custom-override dotnet build features-server-request dotnet build features-session dotnet build features-session-redis-2 ================================================ FILE: projects/features/features-connection/Program.cs ================================================ using Microsoft.AspNetCore.Http.Features; var app = WebApplication.Create(); app.Run(context => { var connection = context.Features.Get(); var str = string.Empty; str += $"Local IP:Port: {connection?.LocalIpAddress}:{connection?.LocalPort}\n"; str += $"Remote IP:Port: {connection?.RemoteIpAddress}:{connection?.RemotePort}\n"; str += $"Connection Id: {connection?.ConnectionId}\n"; return context.Response.WriteAsync($"{str}"); }); app.Run(); ================================================ FILE: projects/features/features-connection/features-connection.csproj ================================================ net10.0 true preview ================================================ FILE: projects/features/features-http-body-response/Program.cs ================================================ using Microsoft.AspNetCore.Http.Features; using System.Text; var app = WebApplication.Create(); app.Run(async context => { context.Response.Headers.Append("Content-Type", "text/html; charset=utf-8"); var feature = context.Features.Get(); await feature.StartAsync(); await feature.Stream.WriteAsync(Encoding.UTF8.GetBytes("Hello 🌍")); await feature.CompleteAsync(); }); app.Run(); ================================================ FILE: projects/features/features-http-body-response/README.MD ================================================ # Feature IHttpResponseBodyFeature This new interface consolidates previous features: - IHttpResponseFeature.Body - IHttpSendFileFeature.SendFileAsync - IHttpBufferingFeature.DisableResponseBuffering into a single interface. More info can be found in this [github issue](https://github.com/aspnet/AspNetCore/issues/12635). ================================================ FILE: projects/features/features-http-body-response/features-http-body-response.csproj ================================================ net10.0 true preview ================================================ FILE: projects/features/features-max-request-body-size/Program.cs ================================================ using Microsoft.AspNetCore.Http.Features; var builder = WebApplication.CreateBuilder(); builder.WebHost.ConfigureKestrel(k => { k.Limits.MaxRequestBodySize = 5000; }); var app = builder.Build(); app.Run(context => { var bodySize = context.Features.Get(); bodySize.MaxRequestBodySize = 555; var str = ""; str += $"Max Request Body Size {bodySize.MaxRequestBodySize}(Is Read Only: {bodySize.IsReadOnly}) You can also set this value at KestrelServerOptions.Limits.MaxRequestBodySize"; str += ""; context.Response.Headers.Append("Content-Type", "text/html"); return context.Response.WriteAsync($"{str}"); }); app.Run(); ================================================ FILE: projects/features/features-max-request-body-size/README.md ================================================ # Feature IHttpMaxRequestBodySizeFeature Feature to inspect and modify the maximum request body size for a single request ([doc](https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.features.ihttpmaxrequestbodysizefeature?view=aspnetcore-3.1)). ================================================ FILE: projects/features/features-max-request-body-size/features-max-request-body-size.csproj ================================================ net10.0 true preview ================================================ FILE: projects/features/features-request-culture/Program.cs ================================================ using Microsoft.AspNetCore.Localization; var app = WebApplication.Create(); app.UseRequestLocalization(); app.Run(async context => { var cultureFeature = context.Features.Get(); await context.Response.WriteAsync($"Request culture: {cultureFeature?.RequestCulture.Culture.EnglishName}"); }); app.Run(); ================================================ FILE: projects/features/features-request-culture/features-request-culture.csproj ================================================ net10.0 true preview ================================================ FILE: projects/features/features-server-addresses/Program.cs ================================================ using Microsoft.AspNetCore.Hosting.Server.Features; var app = WebApplication.Create(); var serverAddress = (app as IApplicationBuilder).ServerFeatures.Get(); app.Run(context => { var str = string.Empty; foreach(var a in serverAddress.Addresses) { str += $"{a}\n"; } return context.Response.WriteAsync(str); }); app.Run(); ================================================ FILE: projects/features/features-server-addresses/features-server-addresses.csproj ================================================ net10.0 features-server-addresses features-server-addresses true preview ================================================ FILE: projects/features/features-server-addresses-2/Program.cs ================================================ using Microsoft.AspNetCore.Hosting.Server.Features; using Microsoft.AspNetCore.Hosting.Server; var app = WebApplication.Create(); app.UseMiddleware(); app.Run(); public class AddressesMiddleware { IServer _server; IReadOnlyCollection _addresses; public AddressesMiddleware(RequestDelegate next, IServer server) { _server = server; } public async Task Invoke(HttpContext context) { var str = string.Empty; // We cache the result because the addresses are not going to change. // Remember middlewares are singletons, so we can just do this simple check. if (_addresses == null) { var address = _server.Features.Get(); _addresses = address.Addresses.ToList(); } foreach (var a in _addresses) { str += $"{a}\n"; } await context.Response.WriteAsync(str); } } ================================================ FILE: projects/features/features-server-addresses-2/features-server-addresses-2.csproj ================================================ net10.0 true preview ================================================ FILE: projects/features/features-server-custom/Program.cs ================================================ var app = WebApplication.Create(); app.Use(async (context, next ) =>{ context.Features.Set(new CustomFeature()); await next.Invoke(); }); app.Run(context => { var custom = context.Features.Get(); if (custom == null) return context.Response.WriteAsync($"Custom is null"); else return context.Response.WriteAsync($"{custom.Greetings}"); }); app.Run(); interface ICustomFeature { string Greetings {get;} } public class CustomFeature : ICustomFeature { public string Greetings => "This is my custom feature set from previous middleware"; } ================================================ FILE: projects/features/features-server-custom/features-server-custom.csproj ================================================ net10.0 true preview ================================================ FILE: projects/features/features-server-custom-override/Program.cs ================================================ var app = WebApplication.Create(); app.Use(async (context, next) => { context.Features.Set(new CustomFeature("First greeting")); await next.Invoke(); }); app.Use(async (context, next) => { var custom = context.Features.Get(); await context.Response.WriteAsync($"{custom?.Greetings}\n"); context.Features.Set(new CustomFeature("Second greeting")); await next.Invoke(); }); app.Run(context => { var custom = context.Features.Get(); return context.Response.WriteAsync($"{custom?.Greetings}"); }); app.Run(); interface ICustomFeature { string Greetings { get; } } public class CustomFeature : ICustomFeature { string _greetings; public CustomFeature(string greetings) { _greetings = greetings; } public string Greetings => _greetings; } ================================================ FILE: projects/features/features-server-custom-override/features-server-custom-override.csproj ================================================ net10.0 true preview ================================================ FILE: projects/features/features-server-request/Program.cs ================================================ using Microsoft.AspNetCore.Http.Features; var app = WebApplication.Create(); app.Use(async (context, next) => { var request = context.Features.Get(); request.Headers.Append("greetings", "hello world"); await next.Invoke(); }); app.Run(context => { return context.Response.WriteAsync($"hello {context.Request.Headers["greetings"]}"); }); app.Run(); ================================================ FILE: projects/features/features-server-request/features-server-request.csproj ================================================ net10.0 true preview ================================================ FILE: projects/features/features-session/Program.cs ================================================ using Microsoft.AspNetCore.Http.Features; var builder = WebApplication.CreateBuilder(); builder.Services.AddDistributedMemoryCache(); builder.Services.AddSession(); var app = builder.Build(); app.UseSession(); app.Use(async (context, next) => { var session = context.Features.Get(); try { session.Session.SetString("Message", "Hello world"); session.Session.SetInt32("Year", DateTime.Now.Year); } catch (Exception ex) { await context.Response.WriteAsync($"{ex.Message}"); } await next.Invoke(); }); app.Run(async context => { var session = context.Features.Get(); try { string msg = session.Session.GetString("Message"); int? year = session.Session.GetInt32("Year"); await context.Response.WriteAsync($"{msg} {year}"); } catch (Exception ex) { await context.Response.WriteAsync($"{ex.Message}"); } }); app.Run(); ================================================ FILE: projects/features/features-session/features-session.csproj ================================================ net10.0 true preview ================================================ FILE: projects/features/features-session-redis-2/Program.cs ================================================ using System.Text.Json; using Microsoft.AspNetCore.Http.Features; var builder = WebApplication.CreateBuilder(); builder.Services.AddStackExchangeRedisCache(options => { options.Configuration = builder.Configuration["redisConnectionString"]; }); builder.Services.AddSession(); var app = builder.Build(); app.UseSession(); app.Use(async (context, next) => { var person = new Person { FirstName = "Anne", LastName = "M" }; var session = context.Features.Get(); try { session.Session.SetString("Message", "Buon giorno cuore"); session.Session.SetInt32("Year", DateTime.Now.Year); session.Session.SetString("Amore", JsonSerializer.Serialize(person)); } catch (Exception ex) { await context.Response.WriteAsync($"{ex.Message}"); } await next.Invoke(); }); app.Run(async context => { var session = context.Features.Get(); try { string msg = session.Session.GetString("Message"); int? year = session.Session.GetInt32("Year"); var amore = JsonSerializer.Deserialize(session.Session.GetString("Amore")); await context.Response.WriteAsync($"{amore.FirstName}, {msg} {year}"); } catch (Exception ex) { await context.Response.WriteAsync($"{ex.Message}"); } }); app.Run(); public class Person { public string FirstName { get; set; } public string LastName { get; set; } } ================================================ FILE: projects/features/features-session-redis-2/appSettings.json ================================================ { "redisConnectionString": "localhost:6379" } ================================================ FILE: projects/features/features-session-redis-2/features-session-redis-2.csproj ================================================ net10.0 true preview ================================================ FILE: projects/file-provider/README.md ================================================ # File Provider (10) * [Serve static files](serve-static-files-1) Simply serve static files (html, css, images, etc). There are two static files being served in this project, index.html and hello.css. They are stored under ```wwwroot``` folder, which is the default folder location for this library. To access them you have to refer them directly e.g. ```localhost:5000/index.html``` and ```localhost:5000/hello.css```. * [Allow Directory Browsing](serve-static-files-2) Allow listing and browsing of your ```wwwroot``` folder. * [Use File Server](serve-static-files-3) Combines the functionality of ```UseStaticFiles, UseDefaultFiles, and UseDirectoryBrowser```. * [Custom Directory Formatter](serve-static-files-4) Customize the way Directory Browsing is displayed. In this sample the custom view only handles flat directory. We will deal with more complex scenario in the next sample. * [Custom Directory Formatter - 2](serve-static-files-5) Show custom Directory Browsing and handle directory listing as well as files. * [Allow Directory Browsing](serve-static-files-6) Use Directory Browsing on a certain path using ```DirectoryBrowserOptions.RequestPath```, e.g. ```/browse```. * [Serve Static Files from more than one folders](serve-static-files-7) This example shows how to serve static files from multiple directories (even outside your application path). * [Physical File Provider - Content and Web roots](file-provider-physical) Access the file information on your Web and Content roots. * [Custom File Provider](file-provider-custom) Implement a simple and largely nonsense file provider. It is a good starting point to implement your own proper File Provider. * [Log Static File Servings](serve-static-files-8) Log information about the static file being served. dotnet8 ================================================ FILE: projects/file-provider/build.bat ================================================ dotnet build file-provider-custom dotnet build file-provider-physical dotnet build serve-static-files-1 dotnet build serve-static-files-2 dotnet build serve-static-files-3 dotnet build serve-static-files-4 dotnet build serve-static-files-5 dotnet build serve-static-files-6 dotnet build serve-static-files-7 dotnet build serve-static-files-8 ================================================ FILE: projects/file-provider/build.sh ================================================ #!/bin/bash dotnet build file-provider-custom dotnet build file-provider-physical dotnet build serve-static-files-1 dotnet build serve-static-files-2 dotnet build serve-static-files-3 dotnet build serve-static-files-4 dotnet build serve-static-files-5 dotnet build serve-static-files-6 dotnet build serve-static-files-7 dotnet build serve-static-files-8 ================================================ FILE: projects/file-provider/file-provider-custom/Program.cs ================================================ using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Primitives; using System.Collections; using System.Text; var builder = WebApplication.CreateBuilder(); builder.Environment.ContentRootFileProvider = new CustomFileProvider(); var app = builder.Build(); app.Run(async context => { context.Response.Headers.Append("content-type", "text/html"); using (var stream = app.Environment.ContentRootFileProvider.GetFileInfo("").CreateReadStream()) { var reader = new StreamReader(stream); await context.Response.WriteAsync(reader.ReadToEnd()); } }); app.Run(); public class CustomDirectoryContents : IDirectoryContents { readonly IEnumerable _entries; public CustomDirectoryContents(IEnumerable files) { _entries = files; } public bool Exists => true; public IEnumerator GetEnumerator() => _entries.GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() => _entries.GetEnumerator(); } public class AlwaysTheSameFile : IFileInfo { public bool Exists => true; public long Length { get; } public string PhysicalPath => null; public string Name { get; } public DateTimeOffset LastModified { get; } public bool IsDirectory => false; public Stream CreateReadStream() { var text = @" Dhritarashtra said: O Sanjaya, after my sons and the sons of Pandu assembled in the place of pilgrimage at Kurukshetra, desiring to fight, what did they do? "; return new MemoryStream(Encoding.UTF8.GetBytes(text)); } } //https://docs.microsoft.com/en-us/aspnet/core/api/microsoft.extensions.fileproviders.ifileinfo#Microsoft_Extensions_FileProviders_IFileInfo public class CustomDirectory : IFileInfo { public bool Exists => true; public long Length => -1; // read the offical doc public string PhysicalPath => null; // read the offical doc public string Name { get; } public DateTimeOffset LastModified { get; } public bool IsDirectory => true; public Stream CreateReadStream() { throw new InvalidOperationException("Create Stream is not applicable for directory"); } } public class CustomFileProvider : IFileProvider { public IDirectoryContents GetDirectoryContents(string subpath) { var list = new List { new AlwaysTheSameFile() }; var contents = new CustomDirectoryContents(list); return contents; } public IFileInfo GetFileInfo(string subpath) => new AlwaysTheSameFile(); public IChangeToken Watch(string filter) => NullChangeToken.Singleton; } ================================================ FILE: projects/file-provider/file-provider-custom/file-provider-custom.csproj ================================================ net10.0 true preview ================================================ FILE: projects/file-provider/file-provider-physical/Program.cs ================================================ using Microsoft.Extensions.FileProviders; var app = WebApplication.Create(); app.Run(async context => { context.Response.Headers.Append("Content-Type", "text/html"); var contentRoot = app.Environment.ContentRootFileProvider; var contentPhysical = app.Environment.ContentRootFileProvider as PhysicalFileProvider; await context.Response.WriteAsync("

    Content Root

    "); await context.Response.WriteAsync($"{contentPhysical.Root}"); await context.Response.WriteAsync($"
      "); foreach (var f in contentRoot.GetDirectoryContents("")) { if (f.IsDirectory) await context.Response.WriteAsync($"
    • {f.Name} - Directory
    • "); else await context.Response.WriteAsync($"
    • {f.Name}
    • "); } await context.Response.WriteAsync($"
    "); var webRoot = app.Environment.WebRootFileProvider; var webPhysical = app.Environment.WebRootFileProvider as PhysicalFileProvider; await context.Response.WriteAsync("

    Web Root

    "); await context.Response.WriteAsync($"{webPhysical.Root}"); await context.Response.WriteAsync($"
      "); foreach (var f in webRoot.GetDirectoryContents("")) { if (f.IsDirectory) await context.Response.WriteAsync($"
    • {f.Name} - Directory
    • "); else await context.Response.WriteAsync($"
    • {f.Name}
    • "); } await context.Response.WriteAsync($"
    "); }); app.Run(); ================================================ FILE: projects/file-provider/file-provider-physical/file-provider-physical.csproj ================================================ net10.0 true preview ================================================ FILE: projects/file-provider/file-provider-physical/wwwroot/hello-world.txt ================================================ ================================================ FILE: projects/file-provider/serve-static-files-1/Program.cs ================================================ var app = WebApplication.Create(); app.UseStaticFiles(); app.Run(); ================================================ FILE: projects/file-provider/serve-static-files-1/README.md ================================================ # Static File This sample is really simple. It's consisted of a single line of code of `app.UseStaticFiles();` to enable full static files support. You have to open `http://localhost:5000/index.html` instead of `http://localhost:5000/` to access the `index.html` files located at the `wwwroot` folder. ================================================ FILE: projects/file-provider/serve-static-files-1/serve-static-files.csproj ================================================ net10.0 true preview ================================================ FILE: projects/file-provider/serve-static-files-1/wwwroot/hello.css ================================================ body { font-size: large; } h1 { color: blueviolet; } ================================================ FILE: projects/file-provider/serve-static-files-1/wwwroot/index.html ================================================

    Static File

    This is a static file located at wwwroot folder ================================================ FILE: projects/file-provider/serve-static-files-2/Program.cs ================================================ var app = WebApplication.Create(); app.UseStaticFiles(); app.UseDirectoryBrowser(); app.Run(); ================================================ FILE: projects/file-provider/serve-static-files-2/serve-static-files-2.csproj ================================================ net10.0 true preview ================================================ FILE: projects/file-provider/serve-static-files-2/wwwroot/hello.css ================================================ .hello-world { font-size: large; } ================================================ FILE: projects/file-provider/serve-static-files-2/wwwroot/index.html ================================================ This is a static file located at wwwroot folder ================================================ FILE: projects/file-provider/serve-static-files-2/wwwroot/secrets/one.txt ================================================ Secret One ================================================ FILE: projects/file-provider/serve-static-files-3/Program.cs ================================================ var app = WebApplication.Create(); app.UseFileServer(enableDirectoryBrowsing: true); app.Run(); ================================================ FILE: projects/file-provider/serve-static-files-3/serve-static-files-3.csproj ================================================ net10.0 true preview ================================================ FILE: projects/file-provider/serve-static-files-3/wwwroot/hello.css ================================================ .hello-world { font-size: large; } ================================================ FILE: projects/file-provider/serve-static-files-3/wwwroot/index2.html ================================================ This is a static file located at wwwroot folder ================================================ FILE: projects/file-provider/serve-static-files-3/wwwroot/secrets/one.txt ================================================ Secret One ================================================ FILE: projects/file-provider/serve-static-files-4/Program.cs ================================================ using Microsoft.AspNetCore.StaticFiles; var app = WebApplication.Create(); app.UseStaticFiles(); app.UseDirectoryBrowser(new DirectoryBrowserOptions { Formatter = new DirectoryFormatter() }); app.Run(); public class DirectoryFormatter : IDirectoryFormatter { public async Task GenerateContentAsync(HttpContext context, IEnumerable contents) { context.Response.ContentType = "text/html"; await context.Response.WriteAsync(@"
    "); foreach (var c in contents) { if (c.Name.Contains(".png") || c.Name.Contains(".jpg")) await context.Response.WriteAsync($@"
    "); else await context.Response.WriteAsync($@"
    {c.Name}
    "); } await context.Response.WriteAsync("
    "); } } ================================================ FILE: projects/file-provider/serve-static-files-4/serve-static-files-4.csproj ================================================ net10.0 true preview ================================================ FILE: projects/file-provider/serve-static-files-4/wwwroot/hello.css ================================================ .hello-world { font-size: large; } ================================================ FILE: projects/file-provider/serve-static-files-4/wwwroot/index.html ================================================ This is a static file located at wwwroot folder ================================================ FILE: projects/file-provider/serve-static-files-5/Program.cs ================================================ using Microsoft.AspNetCore.StaticFiles; var app = WebApplication.Create(); app.UseStaticFiles(); app.UseDirectoryBrowser(new DirectoryBrowserOptions { Formatter = new DirectoryFormatter() }); app.Run(); public class DirectoryFormatter : IDirectoryFormatter { public async Task GenerateContentAsync(HttpContext context, IEnumerable contents) { context.Response.ContentType = "text/html"; await context.Response.WriteAsync(@"
    "); await context.Response.WriteAsync("\n"); foreach (var c in contents) { await context.Response.WriteAsync($"
    \n"); if (c.IsDirectory) { await context.Response.WriteAsync($"
    Directory {c.Name}
    \n"); } else { if (c.Name.Contains(".png") || c.Name.Contains(".jpg")) await context.Response.WriteAsync($"
    \n"); else await context.Response.WriteAsync($"\n"); } await context.Response.WriteAsync("
    \n"); } await context.Response.WriteAsync("\n
    "); } } ================================================ FILE: projects/file-provider/serve-static-files-5/serve-static-files-5.csproj ================================================ net10.0 true preview ================================================ FILE: projects/file-provider/serve-static-files-5/wwwroot/hello.css ================================================ .hello-world { font-size: large; } ================================================ FILE: projects/file-provider/serve-static-files-5/wwwroot/index.html ================================================ This is a static file located at wwwroot folder ================================================ FILE: projects/file-provider/serve-static-files-6/Program.cs ================================================ var app = WebApplication.Create(); app.UseStaticFiles(); app.UseDirectoryBrowser(new DirectoryBrowserOptions { RequestPath = new PathString("/browse") }); app.Run(async context => { await context.Response.WriteAsync("browse directory"); }); app.Run(); ================================================ FILE: projects/file-provider/serve-static-files-6/serve-static-files-6.csproj ================================================ net10.0 true preview ================================================ FILE: projects/file-provider/serve-static-files-6/wwwroot/hello.css ================================================ .hello-world { font-size: large; } ================================================ FILE: projects/file-provider/serve-static-files-6/wwwroot/index.html ================================================ This is a static file located at wwwroot folder ================================================ FILE: projects/file-provider/serve-static-files-6/wwwroot/secrets/one.txt ================================================ Secret One ================================================ FILE: projects/file-provider/serve-static-files-7/Program.cs ================================================ using Microsoft.Extensions.FileProviders; var app = WebApplication.Create(); app.UseStaticFiles(); // By default this will server files out of wwwroot folder app.UseStaticFiles(new StaticFileOptions() { //The PhysialFileProvider will take any valid path. This way you can //specify which folders will server the static files FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot2")), RequestPath = new PathString("/2") }); app.Run(async context => { context.Response.Headers.Append("content-type", "text/html"); await context.Response.WriteAsync(@" From wwwroot

    From wwwroot2
    "); }); app.Run(); ================================================ FILE: projects/file-provider/serve-static-files-7/README.md ================================================ # Serve static files from multiple folders There are many scenarios where you need to serve static files from multiple folders, including those ones outside your application folder. This example shows you how. ================================================ FILE: projects/file-provider/serve-static-files-7/serve-static-files-7.csproj ================================================ net10.0 true preview ================================================ FILE: projects/file-provider/serve-static-files-8/Program.cs ================================================ using Microsoft.Extensions.FileProviders; var app = WebApplication.Create(); app.UseStaticFiles(new StaticFileOptions { OnPrepareResponse = ctx => { app.Logger.LogInformation($"Serving static file: {ctx.File.Name}"); } }); // By default this will server files out of wwwroot folder app.UseStaticFiles(new StaticFileOptions() { OnPrepareResponse = ctx => { app.Logger.LogInformation($"Serving static file: {ctx.File.Name}"); }, //The PhysialFileProvider will take any valid path. This way you can //specify which folders will server the static files FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot2")), RequestPath = new PathString("/2") }); app.Run(async context => { context.Response.Headers.Append("content-type", "text/html"); await context.Response.WriteAsync(@" From wwwroot

    From wwwroot2
    "); }); app.Run(); ================================================ FILE: projects/file-provider/serve-static-files-8/README.md ================================================ # Logging Static File Servings There may be a scenario where you need to log information about static file being served. This example shows you how. ``` public void Configure(IApplicationBuilder app, ILogger logger) { app.UseStaticFiles(new StaticFileOptions { OnPrepareResponse = ctx => { logger.LogInformation($"Serving static file: {ctx.File.Name}"); } }); } ``` Contribution by [Lohit](https://github.com/lohithgn). ================================================ FILE: projects/file-provider/serve-static-files-8/serve-static-files-7.csproj ================================================ net10.0 true preview ================================================ FILE: projects/generic-host/README.md ================================================ # Generic Host (9) Generic Host is an awesome way to host all sort of long running tasks and applications, e.g. messaging, background tasks, etc. * [Configure Logging](/projects/generic-host/generic-host-configure-logging) Configure logging for your Generic Host. This technique will be used in the subsequent samples. * [Hello World](/projects/generic-host/generic-host-1) This is the hello world equivalent of a Generic Host service. * [Hello World using Console Lifetime](/projects/generic-host/generic-host-2) Use `UseConsoleLifetime` implicitly. * [Startup and Shutdown order](/projects/generic-host/generic-host-3) Demonstrates the startup and shutdown order of hosted services. * [Start and stop the host](/projects/generic-host/generic-host-4) Demonstrates starting and stopping the host programmatically. * [A service with timed execution](/projects/generic-host/generic-host-5) Demonstrate processing a task on a regular interval using `Task.Delay`. * [Configure Host using Dictionary](/projects/generic-host/generic-host-configure-host) Demonstrate the way to inject configuration values to the host using Dictionary. * [Configure Environment](/projects/generic-host/generic-host-environment) Set your environment using `EnvironmentName.Development` or `EnvironmentName.Production` or `EnvironmentName.Staging`. * [Listen to IHostApplicationLifetime events](/projects/generic-host/generic-host-ihostapplicationlifetime) Inject `IHostApplicationLifetime` and listen to `ApplicationStarted`, `ApplicationStopping` and `ApplicationStopped` events. This is important to allow services to be shutdown gracefully. The shutdown process blocks until `ApplicatinStopping` and `ApplicationStopped` events complete. dotnet8 ================================================ FILE: projects/generic-host/build.bat ================================================ dotnet build generic-host-1 dotnet build generic-host-2 dotnet build generic-host-3 dotnet build generic-host-4 dotnet build generic-host-5 dotnet build generic-host-configure-app dotnet build generic-host-configure-host dotnet build generic-host-configure-logging dotnet build generic-host-environment dotnet build generic-host-ihostapplicationlifetime ================================================ FILE: projects/generic-host/build.sh ================================================ #!/bin/bash dotnet build generic-host-1 dotnet build generic-host-2 dotnet build generic-host-3 dotnet build generic-host-4 dotnet build generic-host-5 dotnet build generic-host-configure-app dotnet build generic-host-configure-host dotnet build generic-host-configure-logging dotnet build generic-host-environment dotnet build generic-host-ihostapplicationlifetime ================================================ FILE: projects/generic-host/generic-host-1/Program.cs ================================================ await Host.CreateDefaultBuilder(args) .ConfigureServices((hostContext, services) => { services.AddHostedService(); }) .ConfigureLogging(logging => { logging.ClearProviders(); logging.AddConsole(); logging.AddFilter((provider, category, logLevel) => { return !category.Contains("Microsoft"); }); }).Build() .RunAsync(); public class HelloWorldService : IHostedService { ILogger _log; public HelloWorldService(ILogger logger) { _log = logger; } public Task StartAsync(CancellationToken cancellationToken) { _log.LogDebug("Start Hello world"); return Task.CompletedTask; } public Task StopAsync(CancellationToken cancellationToken) { _log.LogDebug("Goodbye"); return Task.CompletedTask; } } ================================================ FILE: projects/generic-host/generic-host-1/generic-host.csproj ================================================ net10.0 true preview ================================================ FILE: projects/generic-host/generic-host-2/Program.cs ================================================ await Host.CreateDefaultBuilder(args) .ConfigureServices((hostContext, services) => { services.AddHostedService(); }) .ConfigureLogging(logging => { logging.ClearProviders(); logging.AddConsole(); logging.AddFilter((provider, category, logLevel) => { return !category.Contains("Microsoft"); }); }) .RunConsoleAsync(); public class HelloWorldService : IHostedService { ILogger _log; public HelloWorldService(ILogger logger) { _log = logger; } public Task StartAsync(CancellationToken cancellationToken) { _log.LogDebug("Start Hello world"); return Task.CompletedTask; } public Task StopAsync(CancellationToken cancellationToken) { _log.LogDebug("Goodbye"); return Task.CompletedTask; } } ================================================ FILE: projects/generic-host/generic-host-2/generic-host-2.csproj ================================================ net10.0 true preview ================================================ FILE: projects/generic-host/generic-host-3/Program.cs ================================================ await new HostBuilder() .ConfigureServices((hostContext, services) => { services.AddHostedService(); services.AddHostedService(); services.AddHostedService(); }) .ConfigureLogging(logging => { logging.ClearProviders(); logging.AddConsole(); logging.AddFilter((provider, category, logLevel) => { return !category.Contains("Microsoft"); }); }).RunConsoleAsync(); public class HelloWorldService : IHostedService { readonly ILogger _log; public HelloWorldService(ILogger logger) { _log = logger; } public Task StartAsync(CancellationToken cancellationToken) { _log.LogDebug("Hello world 1"); return Task.CompletedTask; } public Task StopAsync(CancellationToken cancellationToken) { _log.LogDebug("Goodbye 1"); return Task.CompletedTask; } } public class HelloWorldService2 : IHostedService { readonly ILogger _log; public HelloWorldService2(ILogger logger) { _log = logger; } public Task StartAsync(CancellationToken cancellationToken) { _log.LogDebug("Hello world 2"); return Task.CompletedTask; } public Task StopAsync(CancellationToken cancellationToken) { _log.LogDebug("Goodbye 2"); return Task.CompletedTask; } } public class HelloWorldService3 : IHostedService { readonly ILogger _log; public HelloWorldService3(ILogger logger) { _log = logger; } public Task StartAsync(CancellationToken cancellationToken) { _log.LogDebug("Hello world 3"); return Task.CompletedTask; } public Task StopAsync(CancellationToken cancellationToken) { _log.LogDebug("Goodbye 3"); return Task.CompletedTask; } } ================================================ FILE: projects/generic-host/generic-host-3/generic-host-3.csproj ================================================ net10.0 true preview ================================================ FILE: projects/generic-host/generic-host-4/Program.cs ================================================ var host = new HostBuilder() .ConfigureServices((hostContext, services) => { services.AddHostedService(); }) .ConfigureLogging(logging => { logging.ClearProviders(); logging.AddConsole(); logging.AddFilter((provider, category, logLevel) => { return !category.Contains("Microsoft"); }); }) .Build(); using (host) { host.Start(); await host.StopAsync(TimeSpan.FromSeconds(5)); } public class HelloWorldService : IHostedService { readonly ILogger _log; public HelloWorldService(ILogger logger) { _log = logger; } public Task StartAsync(CancellationToken cancellationToken) { _log.LogDebug("Hello world 1"); return Task.CompletedTask; } public Task StopAsync(CancellationToken cancellationToken) { _log.LogDebug("Goodbye 1"); return Task.CompletedTask; } } ================================================ FILE: projects/generic-host/generic-host-4/generic-host-4.csproj ================================================ net10.0 true preview ================================================ FILE: projects/generic-host/generic-host-5/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/generic-host-4.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart", "launchBrowser": { "enabled": true, "args": "${auto-detect-url}", "windows": { "command": "cmd.exe", "args": "/C start ${auto-detect-url}" }, "osx": { "command": "open" }, "linux": { "command": "xdg-open" } }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ,] } ================================================ FILE: projects/generic-host/generic-host-5/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/generic-host-5.csproj" ], "problemMatcher": "$msCompile" } ] } ================================================ FILE: projects/generic-host/generic-host-5/Program.cs ================================================ await new HostBuilder() .ConfigureServices((hostContext, services) => { services.AddHostedService(); }) .UseConsoleLifetime() .ConfigureLogging(logging => { logging.ClearProviders(); logging.AddConsole(); logging.AddFilter((provider, category, logLevel) => { return !category.Contains("Microsoft"); }); }) .Build().RunAsync(); public class CountingService : IHostedService, IDisposable { CancellationTokenSource _stoppingCts = new CancellationTokenSource(); Task _executingTask; readonly ILogger _log; public CountingService(ILogger logger) { _log = logger; } public Task StartAsync(CancellationToken cancellationToken) { _executingTask = ExecuteAsync(_stoppingCts.Token); return _executingTask.IsCompleted ? _executingTask : Task.CompletedTask; } async Task ExecuteAsync(CancellationToken cancellationToken) { var count = 0; do { _log.LogDebug(count.ToString()); count++; await Task.Delay(1000, cancellationToken); } while (!cancellationToken.IsCancellationRequested); } public async Task StopAsync(CancellationToken cancellationToken) { if (_executingTask == null) return; try { _stoppingCts.Cancel(); } finally { await Task.WhenAny(_executingTask, Task.Delay(Timeout.Infinite, cancellationToken)); } } public void Dispose() => _stoppingCts.Cancel(); } ================================================ FILE: projects/generic-host/generic-host-5/generic-host-5.csproj ================================================ net10.0 true preview ================================================ FILE: projects/generic-host/generic-host-configure-app/Program.cs ================================================ await new HostBuilder() .ConfigureAppConfiguration(configHost => { var dict = new Dictionary { {"Greet", "Hello World"}, {"Goodbye", "Goodbye Luv"} }; configHost.AddInMemoryCollection(dict); }) .ConfigureServices((hostContext, services) => { services.AddHostedService(); }) .ConfigureLogging(logging => { logging.ClearProviders(); logging.AddConsole(); logging.AddFilter((provider, category, logLevel) => { return !category.Contains("Microsoft"); }); }) .Build().RunAsync(); public class HelloWorldService : IHostedService { readonly IConfiguration _config; readonly ILogger _log; public HelloWorldService(IConfiguration config, ILogger logger) { _config = config; _log = logger; } public Task StartAsync(CancellationToken cancellationToken) { _log.LogDebug($"{_config["Greet"]}"); return Task.CompletedTask; } public Task StopAsync(CancellationToken cancellationToken) { _log.LogDebug($"{_config["Goodbye"]}"); return Task.CompletedTask; } } ================================================ FILE: projects/generic-host/generic-host-configure-app/generic-host-configure-app.csproj ================================================ net10.0 true preview ================================================ FILE: projects/generic-host/generic-host-configure-host/Program.cs ================================================ await new HostBuilder() .ConfigureHostConfiguration(configHost => { var dict = new Dictionary { {"Greet", "Hello World"}, {"Goodbye", "Goodbye Luv"} }; configHost.AddInMemoryCollection(dict); }) .ConfigureServices((hostContext, services) => { services.AddHostedService(); }) .ConfigureLogging(logging => { logging.ClearProviders(); logging.AddConsole(); logging.AddFilter((provider, category, logLevel) => { return !category.Contains("Microsoft"); }); }) .Build().RunAsync(); public class HelloWorldService : IHostedService { readonly IConfiguration _config; readonly ILogger _log; public HelloWorldService(IConfiguration config, ILogger logger) { _config = config; _log = logger; } public Task StartAsync(CancellationToken cancellationToken) { _log.LogDebug($"{_config["Greet"]}"); return Task.CompletedTask; } public Task StopAsync(CancellationToken cancellationToken) { _log.LogDebug($"{_config["Goodbye"]}"); return Task.CompletedTask; } } ================================================ FILE: projects/generic-host/generic-host-configure-host/generic-host-configure-host.csproj ================================================ net10.0 true preview ================================================ FILE: projects/generic-host/generic-host-configure-logging/Program.cs ================================================ await new HostBuilder() .ConfigureLogging((hostContext, configLogging) => { configLogging.ClearProviders(); configLogging.AddConsole(); configLogging.SetMinimumLevel(LogLevel.Trace); }) .ConfigureServices((hostContext, services) => { services.AddHostedService(); }) .Build().RunAsync(); public class HelloWorldService : IHostedService { readonly ILogger _logger; public HelloWorldService(ILogger logger) { _logger = logger; } public Task StartAsync(CancellationToken cancellationToken) { _logger.LogDebug("Hello world"); return Task.CompletedTask; } public Task StopAsync(CancellationToken cancellationToken) { _logger.LogDebug("Goodbye"); return Task.CompletedTask; } } ================================================ FILE: projects/generic-host/generic-host-configure-logging/generic-host-configure-logging.csproj ================================================ net10.0 true preview ================================================ FILE: projects/generic-host/generic-host-environment/Program.cs ================================================ await new HostBuilder() .UseEnvironment(Environments.Development) // change this to use other .ConfigureServices((hostContext, services) => { services.AddHostedService(); }) .ConfigureLogging(logging => { logging.ClearProviders(); logging.AddConsole(); logging.AddFilter((provider, category, logLevel) => { return !category.Contains("Microsoft"); }); }) .Build().RunAsync(); public class HelloWorldService : IHostedService { readonly IHostEnvironment _env; readonly ILogger _log; public HelloWorldService(IHostEnvironment env, ILogger logger) { _env = env; _log = logger; } public Task StartAsync(CancellationToken cancellationToken) { if (_env.IsProduction()) _log.LogDebug("Hello world production"); else if (_env.IsStaging()) _log.LogDebug("Hello world staging"); else if (_env.IsDevelopment()) _log.LogDebug("Hello world development"); return Task.CompletedTask; } public Task StopAsync(CancellationToken cancellationToken) { return Task.CompletedTask; } } ================================================ FILE: projects/generic-host/generic-host-environment/generic-host-environment.csproj ================================================ net10.0 true preview ================================================ FILE: projects/generic-host/generic-host-ihostapplicationlifetime/Program.cs ================================================ await new HostBuilder() .ConfigureServices((hostContext, services) => { services.AddHostedService(); }) .ConfigureLogging(logging => { logging.ClearProviders(); logging.AddConsole(); logging.AddFilter((provider, category, logLevel) => { return !category.Contains("Microsoft"); }); }) .Build().RunAsync(); public class HelloWorldService : IHostedService { readonly IHostApplicationLifetime _lifetime; readonly ILogger _log; public HelloWorldService(IHostApplicationLifetime lifetime, ILogger logger) { _log = logger; _lifetime = lifetime; _lifetime.ApplicationStarted.Register(OnStarted); _lifetime.ApplicationStopping.Register(OnStopping); _lifetime.ApplicationStopped.Register(OnStopped); } public Task StartAsync(CancellationToken cancellationToken) { _log.LogDebug("StartAsync"); return Task.CompletedTask; } public Task StopAsync(CancellationToken cancellationToken) { _log.LogDebug("StopAsync"); return Task.CompletedTask; } void OnStarted() { _log.LogDebug("OnStarted"); } void OnStopping() { _log.LogDebug("OnStopping"); } void OnStopped() { _log.LogDebug("OnStopped"); } } ================================================ FILE: projects/generic-host/generic-host-ihostapplicationlifetime/generic-host-ihostapplicationlifetime.csproj ================================================ net10.0 true preview ================================================ FILE: projects/grpc/README.md ================================================ # GRPC (12) * [Unary - Hello World](/projects/grpc/grpc) This sample shows a simple request/response gRPC call. * [Server Streaming - Message Server](/projects/grpc/grpc-2) This sample shows how to do simple gRPC sever streaming. * [Client Streaming - Fortune Cookie Server](/projects/grpc/grpc-3) This sample shows how to do simple gRPC client streaming. * [Bidirectional Streaming - Forever Ping Pong](/projects/grpc/grpc-4) This sample shows how to do simple gRPC client/server bidirectional streaming. * [Data format - string, enum and datetime](/projects/grpc/grpc-5) This sample shows how to define Protocol Buffers format to support sending enum, string and datetime. * [Data format - nested types and repeated values (list)](/projects/grpc/grpc-6) This sample shows how to define Protocol Buffers format to support sending nested types and repeated values (list). * [Data format - map values (dictionary)](/projects/grpc/grpc-7) This sample shows how to define Protocol Buffers format to support sending map values (dictionary). * [Data format - oneof](/projects/grpc/grpc-8) This sample demonstrates how to use `oneof` type to allow you to check whether the value of a property is set or not, essentialy emulating nullable type. * [Server Streaming - Kitty Server](/projects/grpc/grpc-9) This sample shows how to stream an image in chunks from server to client. ## gRPC-Web This is a version of gRPC that runs on HTTP 1.1 and support Unary call and Server Streaming. **Client Streaming and bi-Directional Streaming are not supported**. gRPC-Web has been released. You can find the details [here](https://devblogs.microsoft.com/aspnet/grpc-web-for-net-now-available/). * [Unary - Hello World](/projects/grpc/grpc-10) This sample shows a simple request/response gRPC call. * [Server Streaming - Message Server](/projects/grpc/grpc-11) This sample shows how to do simple gRPC sever streaming. * [Server Streaming - Message Server - Blazor Web Assembly](/projects/grpc/grpc-12) This sample shows how to do simple gRPC sever streaming with Blazor Web Assembly client. * [gRPC - 13](grpc-13) This sample shows how to make a GET HTTP call to a gRPC endpoint via gRPC JSON transcoding. * [gRPC - 14](grpc-14) This sample shows how to make a POST HTTP call to a gRPC endpoint via gRPC JSON transcoding. * [gRPC - 15](grpc-15) This sample shows how to make a POST HTTP call to a gRPC endpoint via gRPC JSON transcoding by combining route parameter and body. * [gRPC - 16](grpc-16) This sample shows how to make a PUT HTTP call to a gRPC endpoint via gRPC JSON transcoding. * [gRPC - 17](grpc-17) This sample shows how to make a PATCH HTTP call to a gRPC endpoint via gRPC JSON transcoding. ## Other collections of gRPC samples * [grpc-dotnet examples](https://github.com/grpc/grpc-dotnet/tree/master/examples) dotnet8 ================================================ FILE: projects/grpc/build.bat ================================================ dotnet build grpc/client dotnet build grpc/server dotnet build grpc-2/client dotnet build grpc-2/server dotnet build grpc-3/client dotnet build grpc-3/server dotnet build grpc-4/client dotnet build grpc-4/server dotnet build grpc-5/client dotnet build grpc-5/server dotnet build grpc-6/client dotnet build grpc-6/server dotnet build grpc-7/client dotnet build grpc-7/server dotnet build grpc-8/client dotnet build grpc-8/server dotnet build grpc-9/client dotnet build grpc-9/server dotnet build grpc-10/client dotnet build grpc-10/server dotnet build grpc-11/client dotnet build grpc-11/server dotnet build grpc-12/client dotnet build grpc-12/server dotnet build grpc-13 dotnet build grpc-14 dotnet build grpc-15 dotnet build grpc-16 dotnet build grpc-17 ================================================ FILE: projects/grpc/build.sh ================================================ #!/bin/bash dotnet build grpc/client dotnet build grpc/server dotnet build grpc-2/client dotnet build grpc-2/server dotnet build grpc-3/client dotnet build grpc-3/server dotnet build grpc-4/client dotnet build grpc-4/server dotnet build grpc-5/client dotnet build grpc-5/server dotnet build grpc-6/client dotnet build grpc-6/server dotnet build grpc-7/client dotnet build grpc-7/server dotnet build grpc-8/client dotnet build grpc-8/server dotnet build grpc-9/client dotnet build grpc-9/server dotnet build grpc-10/client dotnet build grpc-10/server dotnet build grpc-11/client dotnet build grpc-11/server dotnet build grpc-12/client dotnet build grpc-12/server dotnet build grpc-13 dotnet build grpc-14 dotnet build grpc-15 dotnet build grpc-16 dotnet build grpc-17 ================================================ FILE: projects/grpc/grpc/README.md ================================================ # gRPC Hello World If you are not familiar with gRPC, it's useful to spend some time reading up about it [here](https://grpc.io/docs/guides/concepts/). It is also useful to read about [Protocol Buffers](https://developers.google.com/protocol-buffers/), the data format that it's implemented in. This sample demonstrate a simple Unary RPC. The client side is located on `client` folder and the server at the `server` folder. Make sure you run the server **first** before running the client. The copies of `billboard.proto` on both folders are identical. ================================================ FILE: projects/grpc/grpc/client/Program.cs ================================================ using Grpc.Net.Client; var app = WebApplication.Create(); app.Run(async context => { var channel = GrpcChannel.ForAddress("https://localhost:5500"); var client = new Billboard.Board.BoardClient(channel); var reply = await client.ShowMessageAsync(new Billboard.MessageRequest { Message = "Good morning people of the world", Sender = "Dody Gunawinata" }); var displayDate = new DateTime(reply.DisplayTime); await context.Response.WriteAsync($"This server sends a gRPC request to a server and get the following result: Received message on {displayDate} from {reply.ReceiveFrom}"); }); app.Run(); ================================================ FILE: projects/grpc/grpc/client/billboard.proto ================================================ syntax = "proto3"; package Billboard; service Board { rpc ShowMessage (MessageRequest) returns (MessageReply) {} } message MessageRequest { string sender = 1; string message = 2; } message MessageReply { string receive_from = 1; int64 display_time = 2; } ================================================ FILE: projects/grpc/grpc/client/grpc-client.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc/server/Program.cs ================================================ using Grpc.Core; using Microsoft.AspNetCore.Server.Kestrel.Core; var builder = WebApplication.CreateBuilder(); builder.Services.AddGrpc(); builder.WebHost.ConfigureKestrel(k => { k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2); k.ListenLocalhost(5500, o => o.UseHttps()); }); var app = builder.Build(); app.MapGrpcService(); app.MapGet("/", () => "This server contains a gRPC service"); app.Run(); public class BillboardService : Billboard.Board.BoardBase { public override Task ShowMessage(Billboard.MessageRequest request, ServerCallContext context) { var now = DateTime.UtcNow; return Task.FromResult(new Billboard.MessageReply { DisplayTime = now.Ticks, ReceiveFrom = request.Sender }); } } ================================================ FILE: projects/grpc/grpc/server/billboard.proto ================================================ syntax = "proto3"; package Billboard; service Board { rpc ShowMessage (MessageRequest) returns (MessageReply) {} } message MessageRequest { string sender = 1; string message = 2; } message MessageReply { string receive_from = 1; int64 display_time = 2; } ================================================ FILE: projects/grpc/grpc/server/grpc-server.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc-10/README.md ================================================ # gRPC-Web Hello World This sample demonstrate a simple Unary RPC. The client side is located on `client` folder and the server at the `server` folder. Make sure you run the server **first** before running the client. The copies of `billboard.proto` on both folders are identical. You will notice that the server is running on HTTP 1.1 instead of HTTP 2.0. ================================================ FILE: projects/grpc/grpc-10/client/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#805584", "activityBar.background": "#805584", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#3a3825", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#805584", "statusBar.background": "#624165", "statusBar.debuggingBackground": "#446541", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#805584", "statusBarItem.remoteBackground": "#624165", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#624165", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#62416599", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#624165" } ================================================ FILE: projects/grpc/grpc-10/client/Program.cs ================================================ using Grpc.Net.Client; using Grpc.Net.Client.Web; var app = WebApplication.Create(); app.Run(async context => { var handler = new GrpcWebHandler(GrpcWebMode.GrpcWebText, new HttpClientHandler()); var channel = GrpcChannel.ForAddress("https://localhost:5500", new GrpcChannelOptions { HttpClient = new HttpClient(handler) }); var client = new Billboard.Board.BoardClient(channel); var reply = await client.ShowMessageAsync(new Billboard.MessageRequest { Message = "Good morning people of the world", Sender = "Dody Gunawinata" }); Console.WriteLine("Connecting"); var displayDate = new DateTime(reply.DisplayTime); await context.Response.WriteAsync($"This server sends a gRPC request to a server and get the following result: Received message on {displayDate} from {reply.ReceiveFrom}"); }); app.Run(); ================================================ FILE: projects/grpc/grpc-10/client/billboard.proto ================================================ syntax = "proto3"; package Billboard; service Board { rpc ShowMessage (MessageRequest) returns (MessageReply) {} } message MessageRequest { string sender = 1; string message = 2; } message MessageReply { string receive_from = 1; int64 display_time = 2; } ================================================ FILE: projects/grpc/grpc-10/client/grpc-client.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc-10/server/Program.cs ================================================ using Grpc.Core; using Microsoft.AspNetCore.Server.Kestrel.Core; var builder = WebApplication.CreateBuilder(); builder.Services.AddGrpc(); builder.WebHost.ConfigureKestrel(k => { k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2); k.ListenLocalhost(5500, o => o.UseHttps()); }); var app = builder.Build(); app.UseGrpcWeb(); app.MapGrpcService().EnableGrpcWeb(); app.MapGet("/", () => "This server contains a gRPCWeb service"); app.Run(); public class BillboardService : Billboard.Board.BoardBase { public override Task ShowMessage(Billboard.MessageRequest request, ServerCallContext context) { var now = DateTime.UtcNow; return Task.FromResult(new Billboard.MessageReply { DisplayTime = now.Ticks, ReceiveFrom = request.Sender }); } } ================================================ FILE: projects/grpc/grpc-10/server/billboard.proto ================================================ syntax = "proto3"; package Billboard; service Board { rpc ShowMessage (MessageRequest) returns (MessageReply) {} } message MessageRequest { string sender = 1; string message = 2; } message MessageReply { string receive_from = 1; int64 display_time = 2; } ================================================ FILE: projects/grpc/grpc-10/server/grpc-server.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc-11/README.md ================================================ # gRPC-Web Server Streaming This is a sample of gRPC-Web [Server Streaming](https://grpc.io/docs/guides/concepts/). In this case the server just repeat the same message 10 times every 5 seconds. Make sure you run both the server and the client. The server is running on HTTP 1.1 instead of HTTP 2. ================================================ FILE: projects/grpc/grpc-11/client/Program.cs ================================================ using Grpc.Net.Client; using Grpc.Net.Client.Web; using Grpc.Core; var app = WebApplication.Create(); //Make sure that the grpc-server is run app.Run(async context => { var handler = new GrpcWebHandler(GrpcWebMode.GrpcWebText, new HttpClientHandler()); var channel = GrpcChannel.ForAddress("https://localhost:5500", new GrpcChannelOptions { HttpClient = new HttpClient(handler) }); var client = new Billboard.Board.BoardClient(channel); var result = client.ShowMessage(new Billboard.MessageRequest { Name = "Anne" }); context.Response.Headers["Content-Type"] = "text/event-stream"; using var tokenSource = new CancellationTokenSource(); CancellationToken token = tokenSource.Token; var streamReader = result.ResponseStream; await foreach (var reply in streamReader.ReadAllAsync(token)) { var displayDate = new DateTime(reply.DisplayTime); await context.Response.WriteAsync($"Received \"{reply.Message}\" on {displayDate.ToLongTimeString()} \n"); await context.Response.Body.FlushAsync(); } }); app.Run(); ================================================ FILE: projects/grpc/grpc-11/client/billboard.proto ================================================ syntax = "proto3"; package Billboard; service Board { rpc ShowMessage (MessageRequest) returns (stream MessageReply) {} } message MessageRequest { string name = 1; } message MessageReply { string message = 1; int64 display_time = 2; } ================================================ FILE: projects/grpc/grpc-11/client/grpc-client.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc-11/server/Program.cs ================================================ using Grpc.Core; using Billboard; using Microsoft.AspNetCore.Server.Kestrel.Core; var builder = WebApplication.CreateBuilder(); builder.Services.AddGrpc(); builder.WebHost.ConfigureKestrel(k => { k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2); k.ListenLocalhost(5500, o => o.UseHttps()); }); var app = builder.Build(); app.UseGrpcWeb(); app.MapGrpcService().EnableGrpcWeb(); app.MapGet("/", () => "This server contains a gRPCWeb service"); app.Run(); public class BillboardService : Billboard.Board.BoardBase { public override async Task ShowMessage(MessageRequest request, IServerStreamWriter responseStream, ServerCallContext context) { foreach (var x in Enumerable.Range(1, 10)) { var now = DateTime.UtcNow; await responseStream.WriteAsync(new Billboard.MessageReply { DisplayTime = now.Ticks, Message = $"Hello {request.Name}" }); await Task.Delay(5000); } } } ================================================ FILE: projects/grpc/grpc-11/server/billboard.proto ================================================ syntax = "proto3"; package Billboard; service Board { rpc ShowMessage (MessageRequest) returns (stream MessageReply) {} } message MessageRequest { string name = 1; } message MessageReply { string message = 1; int64 display_time = 2; } ================================================ FILE: projects/grpc/grpc-11/server/grpc-server.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc-12/README.md ================================================ # gRPC-Web Server Streaming This is a sample of gRPC-Web [Server Streaming](https://grpc.io/docs/guides/concepts/). In this case the server just repeat the same message 10 times every 5 seconds. Make sure you run both the server and the client. The server is running on HTTP 1.1 instead of HTTP 2. The client is a Blazor Web Assembly application. ================================================ FILE: projects/grpc/grpc-12/client/App.razor ================================================

    Page not found

    Sorry, but there's nothing here!

    ================================================ FILE: projects/grpc/grpc-12/client/GrpcClient.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc-12/client/Pages/Index.razor ================================================ @page "/" @inject Billboard.Board.BoardClient Client; @using System.Threading

    @((MarkupString)Message)

    @code { public string Message { get; set; } async Task Click() { var result = Client.ShowMessage(new Billboard.MessageRequest { Name = "Anne" }); using var tokenSource = new CancellationTokenSource(); System.Threading.CancellationToken token = tokenSource.Token; var streamReader = result.ResponseStream; await foreach (var reply in streamReader.ReadAllAsync(token)) { var displayDate = new DateTime(reply.DisplayTime); Message += $"Received \"{reply.Message}\" on {displayDate.ToLongTimeString()}
    \n"; StateHasChanged(); } } } ================================================ FILE: projects/grpc/grpc-12/client/Program.cs ================================================ using Grpc.Net.Client; using Grpc.Net.Client.Web; using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using GrpcClient; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); builder.Services.AddSingleton(x => { var handler = new GrpcWebHandler(GrpcWebMode.GrpcWebText, new HttpClientHandler()); var channel = GrpcChannel.ForAddress("https://localhost:5500", new GrpcChannelOptions { HttpClient = new HttpClient(handler) }); var client = new Billboard.Board.BoardClient(channel); return client; }); var app = builder.Build(); await app.RunAsync(); ================================================ FILE: projects/grpc/grpc-12/client/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
    @Body
    ================================================ FILE: projects/grpc/grpc-12/client/_Imports.razor ================================================ @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.JSInterop @using GrpcClient @using GrpcClient.Shared @using Grpc.Net.Client @using Grpc.Net.Client.Web @using Grpc.Core ================================================ FILE: projects/grpc/grpc-12/client/billboard.proto ================================================ syntax = "proto3"; package Billboard; service Board { rpc ShowMessage (MessageRequest) returns (stream MessageReply) {} } message MessageRequest { string name = 1; } message MessageReply { string message = 1; int64 display_time = 2; } ================================================ FILE: projects/grpc/grpc-12/client/wwwroot/index.html ================================================ GRPC Client Blazor Loading... ================================================ FILE: projects/grpc/grpc-12/server/Program.cs ================================================ using Grpc.Core; using Billboard; using Microsoft.AspNetCore.Server.Kestrel.Core; var builder = WebApplication.CreateBuilder(); builder.Services.AddGrpc(); builder.Services.AddCors(o => o.AddPolicy("AllowAll", builder => { builder.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader() .WithExposedHeaders("Grpc-Status", "Grpc-Message", "Grpc-Encoding", "Grpc-Accept-Encoding"); })); builder.WebHost.ConfigureKestrel(k => { k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2); k.ListenLocalhost(5500, o => o.UseHttps()); }); var app = builder.Build(); app.UseCors(); app.UseGrpcWeb(); app.MapGrpcService().EnableGrpcWeb().RequireCors("AllowAll"); app.MapGet("/", () => "This server contains a gRPCWeb service"); app.Run(); public class BillboardService : Billboard.Board.BoardBase { public override async Task ShowMessage(MessageRequest request, IServerStreamWriter responseStream, ServerCallContext context) { foreach (var x in Enumerable.Range(1, 10)) { var now = DateTime.UtcNow; await responseStream.WriteAsync(new Billboard.MessageReply { DisplayTime = now.Ticks, Message = $"Hello {request.Name}" }); await Task.Delay(5000); } } } ================================================ FILE: projects/grpc/grpc-12/server/billboard.proto ================================================ syntax = "proto3"; package Billboard; service Board { rpc ShowMessage (MessageRequest) returns (stream MessageReply) {} } message MessageRequest { string name = 1; } message MessageReply { string message = 1; int64 display_time = 2; } ================================================ FILE: projects/grpc/grpc-12/server/grpc-server.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc-13/Program.cs ================================================ using Grpc.Core; using Microsoft.AspNetCore.Server.Kestrel.Core; using Microsoft.AspNetCore.Grpc.JsonTranscoding; var builder = WebApplication.CreateBuilder(); builder.Services.AddGrpc().AddJsonTranscoding(); builder.WebHost.ConfigureKestrel(k => { k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2); k.ListenLocalhost(5500, o => o.UseHttps()); }); var app = builder.Build(); app.MapGrpcService(); app.MapGet("/", () => Results.Content(""" The endpoint

    sender:

    time:

    """, "text/html")); app.Run(); public class BillboardService : Billboard.Board.BoardBase { public override Task ShowMessage(Billboard.MessageRequest request, ServerCallContext context) { var now = DateTime.UtcNow; return Task.FromResult(new Billboard.MessageReply { DisplayTime = now.Ticks, ReceiveFrom = request.Sender }); } } ================================================ FILE: projects/grpc/grpc-13/README.md ================================================ # gRPC JSON transcoding GET This sample shows how to make a GET HTTP call to a gRPC endpoint via gRPC JSON transcoding. ================================================ FILE: projects/grpc/grpc-13/billboard.proto ================================================ syntax = "proto3"; import "google/api/annotations.proto"; package Billboard; service Board { rpc ShowMessage (MessageRequest) returns (MessageReply) { option (google.api.http) = { get: "/v1/message/{sender}" }; } } message MessageRequest { string sender = 1; } message MessageReply { string receive_from = 1; int64 display_time = 2; } ================================================ FILE: projects/grpc/grpc-13/google/api/annotations.proto ================================================ // Copyright (c) 2015, Google Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. syntax = "proto3"; package google.api; import "google/api/http.proto"; import "google/protobuf/descriptor.proto"; option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; option java_multiple_files = true; option java_outer_classname = "AnnotationsProto"; option java_package = "com.google.api"; option objc_class_prefix = "GAPI"; extend google.protobuf.MethodOptions { // See `HttpRule`. HttpRule http = 72295728; } ================================================ FILE: projects/grpc/grpc-13/google/api/http.proto ================================================ // Copyright 2019 Google LLC. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // syntax = "proto3"; package google.api; option cc_enable_arenas = true; option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; option java_multiple_files = true; option java_outer_classname = "HttpProto"; option java_package = "com.google.api"; option objc_class_prefix = "GAPI"; // Defines the HTTP configuration for an API service. It contains a list of // [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method // to one or more HTTP REST API methods. message Http { // A list of HTTP configuration rules that apply to individual API methods. // // **NOTE:** All service configuration rules follow "last one wins" order. repeated HttpRule rules = 1; // When set to true, URL path parameters will be fully URI-decoded except in // cases of single segment matches in reserved expansion, where "%2F" will be // left encoded. // // The default behavior is to not decode RFC 6570 reserved characters in multi // segment matches. bool fully_decode_reserved_expansion = 2; } // # gRPC Transcoding // // gRPC Transcoding is a feature for mapping between a gRPC method and one or // more HTTP REST endpoints. It allows developers to build a single API service // that supports both gRPC APIs and REST APIs. Many systems, including [Google // APIs](https://github.com/googleapis/googleapis), // [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC // Gateway](https://github.com/grpc-ecosystem/grpc-gateway), // and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature // and use it for large scale production services. // // `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies // how different portions of the gRPC request message are mapped to the URL // path, URL query parameters, and HTTP request body. It also controls how the // gRPC response message is mapped to the HTTP response body. `HttpRule` is // typically specified as an `google.api.http` annotation on the gRPC method. // // Each mapping specifies a URL path template and an HTTP method. The path // template may refer to one or more fields in the gRPC request message, as long // as each field is a non-repeated field with a primitive (non-message) type. // The path template controls how fields of the request message are mapped to // the URL path. // // Example: // // service Messaging { // rpc GetMessage(GetMessageRequest) returns (Message) { // option (google.api.http) = { // get: "/v1/{name=messages/*}" // }; // } // } // message GetMessageRequest { // string name = 1; // Mapped to URL path. // } // message Message { // string text = 1; // The resource content. // } // // This enables an HTTP REST to gRPC mapping as below: // // HTTP | gRPC // -----|----- // `GET /v1/messages/123456` | `GetMessage(name: "messages/123456")` // // Any fields in the request message which are not bound by the path template // automatically become HTTP query parameters if there is no HTTP request body. // For example: // // service Messaging { // rpc GetMessage(GetMessageRequest) returns (Message) { // option (google.api.http) = { // get:"/v1/messages/{message_id}" // }; // } // } // message GetMessageRequest { // message SubMessage { // string subfield = 1; // } // string message_id = 1; // Mapped to URL path. // int64 revision = 2; // Mapped to URL query parameter `revision`. // SubMessage sub = 3; // Mapped to URL query parameter `sub.subfield`. // } // // This enables a HTTP JSON to RPC mapping as below: // // HTTP | gRPC // -----|----- // `GET /v1/messages/123456?revision=2&sub.subfield=foo` | // `GetMessage(message_id: "123456" revision: 2 sub: SubMessage(subfield: // "foo"))` // // Note that fields which are mapped to URL query parameters must have a // primitive type or a repeated primitive type or a non-repeated message type. // In the case of a repeated type, the parameter can be repeated in the URL // as `...?param=A¶m=B`. In the case of a message type, each field of the // message is mapped to a separate parameter, such as // `...?foo.a=A&foo.b=B&foo.c=C`. // // For HTTP methods that allow a request body, the `body` field // specifies the mapping. Consider a REST update method on the // message resource collection: // // service Messaging { // rpc UpdateMessage(UpdateMessageRequest) returns (Message) { // option (google.api.http) = { // patch: "/v1/messages/{message_id}" // body: "message" // }; // } // } // message UpdateMessageRequest { // string message_id = 1; // mapped to the URL // Message message = 2; // mapped to the body // } // // The following HTTP JSON to RPC mapping is enabled, where the // representation of the JSON in the request body is determined by // protos JSON encoding: // // HTTP | gRPC // -----|----- // `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: // "123456" message { text: "Hi!" })` // // The special name `*` can be used in the body mapping to define that // every field not bound by the path template should be mapped to the // request body. This enables the following alternative definition of // the update method: // // service Messaging { // rpc UpdateMessage(Message) returns (Message) { // option (google.api.http) = { // patch: "/v1/messages/{message_id}" // body: "*" // }; // } // } // message Message { // string message_id = 1; // string text = 2; // } // // // The following HTTP JSON to RPC mapping is enabled: // // HTTP | gRPC // -----|----- // `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: // "123456" text: "Hi!")` // // Note that when using `*` in the body mapping, it is not possible to // have HTTP parameters, as all fields not bound by the path end in // the body. This makes this option more rarely used in practice when // defining REST APIs. The common usage of `*` is in custom methods // which don't use the URL at all for transferring data. // // It is possible to define multiple HTTP methods for one RPC by using // the `additional_bindings` option. Example: // // service Messaging { // rpc GetMessage(GetMessageRequest) returns (Message) { // option (google.api.http) = { // get: "/v1/messages/{message_id}" // additional_bindings { // get: "/v1/users/{user_id}/messages/{message_id}" // } // }; // } // } // message GetMessageRequest { // string message_id = 1; // string user_id = 2; // } // // This enables the following two alternative HTTP JSON to RPC mappings: // // HTTP | gRPC // -----|----- // `GET /v1/messages/123456` | `GetMessage(message_id: "123456")` // `GET /v1/users/me/messages/123456` | `GetMessage(user_id: "me" message_id: // "123456")` // // ## Rules for HTTP mapping // // 1. Leaf request fields (recursive expansion nested messages in the request // message) are classified into three categories: // - Fields referred by the path template. They are passed via the URL path. // - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They are passed via the HTTP // request body. // - All other fields are passed via the URL query parameters, and the // parameter name is the field path in the request message. A repeated // field can be represented as multiple query parameters under the same // name. // 2. If [HttpRule.body][google.api.HttpRule.body] is "*", there is no URL query parameter, all fields // are passed via URL path and HTTP request body. // 3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP request body, all // fields are passed via URL path and URL query parameters. // // ### Path template syntax // // Template = "/" Segments [ Verb ] ; // Segments = Segment { "/" Segment } ; // Segment = "*" | "**" | LITERAL | Variable ; // Variable = "{" FieldPath [ "=" Segments ] "}" ; // FieldPath = IDENT { "." IDENT } ; // Verb = ":" LITERAL ; // // The syntax `*` matches a single URL path segment. The syntax `**` matches // zero or more URL path segments, which must be the last part of the URL path // except the `Verb`. // // The syntax `Variable` matches part of the URL path as specified by its // template. A variable template must not contain other variables. If a variable // matches a single path segment, its template may be omitted, e.g. `{var}` // is equivalent to `{var=*}`. // // The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL` // contains any reserved character, such characters should be percent-encoded // before the matching. // // If a variable contains exactly one path segment, such as `"{var}"` or // `"{var=*}"`, when such a variable is expanded into a URL path on the client // side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The // server side does the reverse decoding. Such variables show up in the // [Discovery // Document](https://developers.google.com/discovery/v1/reference/apis) as // `{var}`. // // If a variable contains multiple path segments, such as `"{var=foo/*}"` // or `"{var=**}"`, when such a variable is expanded into a URL path on the // client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded. // The server side does the reverse decoding, except "%2F" and "%2f" are left // unchanged. Such variables show up in the // [Discovery // Document](https://developers.google.com/discovery/v1/reference/apis) as // `{+var}`. // // ## Using gRPC API Service Configuration // // gRPC API Service Configuration (service config) is a configuration language // for configuring a gRPC service to become a user-facing product. The // service config is simply the YAML representation of the `google.api.Service` // proto message. // // As an alternative to annotating your proto file, you can configure gRPC // transcoding in your service config YAML files. You do this by specifying a // `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same // effect as the proto annotation. This can be particularly useful if you // have a proto that is reused in multiple services. Note that any transcoding // specified in the service config will override any matching transcoding // configuration in the proto. // // Example: // // http: // rules: // # Selects a gRPC method and applies HttpRule to it. // - selector: example.v1.Messaging.GetMessage // get: /v1/messages/{message_id}/{sub.subfield} // // ## Special notes // // When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the // proto to JSON conversion must follow the [proto3 // specification](https://developers.google.com/protocol-buffers/docs/proto3#json). // // While the single segment variable follows the semantics of // [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String // Expansion, the multi segment variable **does not** follow RFC 6570 Section // 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion // does not expand special characters like `?` and `#`, which would lead // to invalid URLs. As the result, gRPC Transcoding uses a custom encoding // for multi segment variables. // // The path variables **must not** refer to any repeated or mapped field, // because client libraries are not capable of handling such variable expansion. // // The path variables **must not** capture the leading "/" character. The reason // is that the most common use case "{var}" does not capture the leading "/" // character. For consistency, all path variables must share the same behavior. // // Repeated message fields must not be mapped to URL query parameters, because // no client library can support such complicated mapping. // // If an API needs to use a JSON array for request or response body, it can map // the request or response body to a repeated field. However, some gRPC // Transcoding implementations may not support this feature. message HttpRule { // Selects a method to which this rule applies. // // Refer to [selector][google.api.DocumentationRule.selector] for syntax details. string selector = 1; // Determines the URL pattern is matched by this rules. This pattern can be // used with any of the {get|put|post|delete|patch} methods. A custom method // can be defined using the 'custom' field. oneof pattern { // Maps to HTTP GET. Used for listing and getting information about // resources. string get = 2; // Maps to HTTP PUT. Used for replacing a resource. string put = 3; // Maps to HTTP POST. Used for creating a resource or performing an action. string post = 4; // Maps to HTTP DELETE. Used for deleting a resource. string delete = 5; // Maps to HTTP PATCH. Used for updating a resource. string patch = 6; // The custom pattern is used for specifying an HTTP method that is not // included in the `pattern` field, such as HEAD, or "*" to leave the // HTTP method unspecified for this rule. The wild-card rule is useful // for services that provide content to Web (HTML) clients. CustomHttpPattern custom = 8; } // The name of the request field whose value is mapped to the HTTP request // body, or `*` for mapping all request fields not captured by the path // pattern to the HTTP body, or omitted for not having any HTTP request body. // // NOTE: the referred field must be present at the top-level of the request // message type. string body = 7; // Optional. The name of the response field whose value is mapped to the HTTP // response body. When omitted, the entire response message will be used // as the HTTP response body. // // NOTE: The referred field must be present at the top-level of the response // message type. string response_body = 12; // Additional HTTP bindings for the selector. Nested bindings must // not contain an `additional_bindings` field themselves (that is, // the nesting may only be one level deep). repeated HttpRule additional_bindings = 11; } // A custom pattern is used for defining custom HTTP verb. message CustomHttpPattern { // The name of this custom HTTP verb. string kind = 1; // The path matched by this custom verb. string path = 2; } ================================================ FILE: projects/grpc/grpc-13/grpc-server.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc-14/Program.cs ================================================ using Grpc.Core; using Microsoft.AspNetCore.Server.Kestrel.Core; using Microsoft.AspNetCore.Grpc.JsonTranscoding; var builder = WebApplication.CreateBuilder(); builder.Services.AddGrpc().AddJsonTranscoding(); builder.WebHost.ConfigureKestrel(k => { k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2); k.ListenLocalhost(5500, o => o.UseHttps()); }); var app = builder.Build(); app.MapGrpcService(); app.MapGet("/", () => Results.Content("""

    gRPC JSON Transcoding POST


    sender:

    time:

    """, "text/html")); app.Run(); public class BillboardService : Billboard.Board.BoardBase { public override Task ShowMessage(Billboard.MessageRequest request, ServerCallContext context) { var now = DateTime.UtcNow; return Task.FromResult(new Billboard.MessageReply { DisplayTime = now.Ticks, ReceiveFrom = request.Content.Sender }); } } ================================================ FILE: projects/grpc/grpc-14/README.md ================================================ # gRPC JSON transcoding POST This sample shows how to make a POST call to a gRPC endpoint via gRPC JSON transcoding. ================================================ FILE: projects/grpc/grpc-14/billboard.proto ================================================ syntax = "proto3"; import "google/api/annotations.proto"; package Billboard; service Board { rpc ShowMessage (MessageRequest) returns (MessageReply) { option (google.api.http) = { post: "/v1/message", body: "content" }; } } message MessageRequest { MessageBody content = 1; } message MessageBody { string sender = 1; } message MessageReply { string receive_from = 1; int64 display_time = 2; } ================================================ FILE: projects/grpc/grpc-14/google/api/annotations.proto ================================================ // Copyright (c) 2015, Google Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. syntax = "proto3"; package google.api; import "google/api/http.proto"; import "google/protobuf/descriptor.proto"; option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; option java_multiple_files = true; option java_outer_classname = "AnnotationsProto"; option java_package = "com.google.api"; option objc_class_prefix = "GAPI"; extend google.protobuf.MethodOptions { // See `HttpRule`. HttpRule http = 72295728; } ================================================ FILE: projects/grpc/grpc-14/google/api/http.proto ================================================ // Copyright 2019 Google LLC. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // syntax = "proto3"; package google.api; option cc_enable_arenas = true; option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; option java_multiple_files = true; option java_outer_classname = "HttpProto"; option java_package = "com.google.api"; option objc_class_prefix = "GAPI"; // Defines the HTTP configuration for an API service. It contains a list of // [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method // to one or more HTTP REST API methods. message Http { // A list of HTTP configuration rules that apply to individual API methods. // // **NOTE:** All service configuration rules follow "last one wins" order. repeated HttpRule rules = 1; // When set to true, URL path parameters will be fully URI-decoded except in // cases of single segment matches in reserved expansion, where "%2F" will be // left encoded. // // The default behavior is to not decode RFC 6570 reserved characters in multi // segment matches. bool fully_decode_reserved_expansion = 2; } // # gRPC Transcoding // // gRPC Transcoding is a feature for mapping between a gRPC method and one or // more HTTP REST endpoints. It allows developers to build a single API service // that supports both gRPC APIs and REST APIs. Many systems, including [Google // APIs](https://github.com/googleapis/googleapis), // [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC // Gateway](https://github.com/grpc-ecosystem/grpc-gateway), // and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature // and use it for large scale production services. // // `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies // how different portions of the gRPC request message are mapped to the URL // path, URL query parameters, and HTTP request body. It also controls how the // gRPC response message is mapped to the HTTP response body. `HttpRule` is // typically specified as an `google.api.http` annotation on the gRPC method. // // Each mapping specifies a URL path template and an HTTP method. The path // template may refer to one or more fields in the gRPC request message, as long // as each field is a non-repeated field with a primitive (non-message) type. // The path template controls how fields of the request message are mapped to // the URL path. // // Example: // // service Messaging { // rpc GetMessage(GetMessageRequest) returns (Message) { // option (google.api.http) = { // get: "/v1/{name=messages/*}" // }; // } // } // message GetMessageRequest { // string name = 1; // Mapped to URL path. // } // message Message { // string text = 1; // The resource content. // } // // This enables an HTTP REST to gRPC mapping as below: // // HTTP | gRPC // -----|----- // `GET /v1/messages/123456` | `GetMessage(name: "messages/123456")` // // Any fields in the request message which are not bound by the path template // automatically become HTTP query parameters if there is no HTTP request body. // For example: // // service Messaging { // rpc GetMessage(GetMessageRequest) returns (Message) { // option (google.api.http) = { // get:"/v1/messages/{message_id}" // }; // } // } // message GetMessageRequest { // message SubMessage { // string subfield = 1; // } // string message_id = 1; // Mapped to URL path. // int64 revision = 2; // Mapped to URL query parameter `revision`. // SubMessage sub = 3; // Mapped to URL query parameter `sub.subfield`. // } // // This enables a HTTP JSON to RPC mapping as below: // // HTTP | gRPC // -----|----- // `GET /v1/messages/123456?revision=2&sub.subfield=foo` | // `GetMessage(message_id: "123456" revision: 2 sub: SubMessage(subfield: // "foo"))` // // Note that fields which are mapped to URL query parameters must have a // primitive type or a repeated primitive type or a non-repeated message type. // In the case of a repeated type, the parameter can be repeated in the URL // as `...?param=A¶m=B`. In the case of a message type, each field of the // message is mapped to a separate parameter, such as // `...?foo.a=A&foo.b=B&foo.c=C`. // // For HTTP methods that allow a request body, the `body` field // specifies the mapping. Consider a REST update method on the // message resource collection: // // service Messaging { // rpc UpdateMessage(UpdateMessageRequest) returns (Message) { // option (google.api.http) = { // patch: "/v1/messages/{message_id}" // body: "message" // }; // } // } // message UpdateMessageRequest { // string message_id = 1; // mapped to the URL // Message message = 2; // mapped to the body // } // // The following HTTP JSON to RPC mapping is enabled, where the // representation of the JSON in the request body is determined by // protos JSON encoding: // // HTTP | gRPC // -----|----- // `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: // "123456" message { text: "Hi!" })` // // The special name `*` can be used in the body mapping to define that // every field not bound by the path template should be mapped to the // request body. This enables the following alternative definition of // the update method: // // service Messaging { // rpc UpdateMessage(Message) returns (Message) { // option (google.api.http) = { // patch: "/v1/messages/{message_id}" // body: "*" // }; // } // } // message Message { // string message_id = 1; // string text = 2; // } // // // The following HTTP JSON to RPC mapping is enabled: // // HTTP | gRPC // -----|----- // `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: // "123456" text: "Hi!")` // // Note that when using `*` in the body mapping, it is not possible to // have HTTP parameters, as all fields not bound by the path end in // the body. This makes this option more rarely used in practice when // defining REST APIs. The common usage of `*` is in custom methods // which don't use the URL at all for transferring data. // // It is possible to define multiple HTTP methods for one RPC by using // the `additional_bindings` option. Example: // // service Messaging { // rpc GetMessage(GetMessageRequest) returns (Message) { // option (google.api.http) = { // get: "/v1/messages/{message_id}" // additional_bindings { // get: "/v1/users/{user_id}/messages/{message_id}" // } // }; // } // } // message GetMessageRequest { // string message_id = 1; // string user_id = 2; // } // // This enables the following two alternative HTTP JSON to RPC mappings: // // HTTP | gRPC // -----|----- // `GET /v1/messages/123456` | `GetMessage(message_id: "123456")` // `GET /v1/users/me/messages/123456` | `GetMessage(user_id: "me" message_id: // "123456")` // // ## Rules for HTTP mapping // // 1. Leaf request fields (recursive expansion nested messages in the request // message) are classified into three categories: // - Fields referred by the path template. They are passed via the URL path. // - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They are passed via the HTTP // request body. // - All other fields are passed via the URL query parameters, and the // parameter name is the field path in the request message. A repeated // field can be represented as multiple query parameters under the same // name. // 2. If [HttpRule.body][google.api.HttpRule.body] is "*", there is no URL query parameter, all fields // are passed via URL path and HTTP request body. // 3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP request body, all // fields are passed via URL path and URL query parameters. // // ### Path template syntax // // Template = "/" Segments [ Verb ] ; // Segments = Segment { "/" Segment } ; // Segment = "*" | "**" | LITERAL | Variable ; // Variable = "{" FieldPath [ "=" Segments ] "}" ; // FieldPath = IDENT { "." IDENT } ; // Verb = ":" LITERAL ; // // The syntax `*` matches a single URL path segment. The syntax `**` matches // zero or more URL path segments, which must be the last part of the URL path // except the `Verb`. // // The syntax `Variable` matches part of the URL path as specified by its // template. A variable template must not contain other variables. If a variable // matches a single path segment, its template may be omitted, e.g. `{var}` // is equivalent to `{var=*}`. // // The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL` // contains any reserved character, such characters should be percent-encoded // before the matching. // // If a variable contains exactly one path segment, such as `"{var}"` or // `"{var=*}"`, when such a variable is expanded into a URL path on the client // side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The // server side does the reverse decoding. Such variables show up in the // [Discovery // Document](https://developers.google.com/discovery/v1/reference/apis) as // `{var}`. // // If a variable contains multiple path segments, such as `"{var=foo/*}"` // or `"{var=**}"`, when such a variable is expanded into a URL path on the // client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded. // The server side does the reverse decoding, except "%2F" and "%2f" are left // unchanged. Such variables show up in the // [Discovery // Document](https://developers.google.com/discovery/v1/reference/apis) as // `{+var}`. // // ## Using gRPC API Service Configuration // // gRPC API Service Configuration (service config) is a configuration language // for configuring a gRPC service to become a user-facing product. The // service config is simply the YAML representation of the `google.api.Service` // proto message. // // As an alternative to annotating your proto file, you can configure gRPC // transcoding in your service config YAML files. You do this by specifying a // `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same // effect as the proto annotation. This can be particularly useful if you // have a proto that is reused in multiple services. Note that any transcoding // specified in the service config will override any matching transcoding // configuration in the proto. // // Example: // // http: // rules: // # Selects a gRPC method and applies HttpRule to it. // - selector: example.v1.Messaging.GetMessage // get: /v1/messages/{message_id}/{sub.subfield} // // ## Special notes // // When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the // proto to JSON conversion must follow the [proto3 // specification](https://developers.google.com/protocol-buffers/docs/proto3#json). // // While the single segment variable follows the semantics of // [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String // Expansion, the multi segment variable **does not** follow RFC 6570 Section // 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion // does not expand special characters like `?` and `#`, which would lead // to invalid URLs. As the result, gRPC Transcoding uses a custom encoding // for multi segment variables. // // The path variables **must not** refer to any repeated or mapped field, // because client libraries are not capable of handling such variable expansion. // // The path variables **must not** capture the leading "/" character. The reason // is that the most common use case "{var}" does not capture the leading "/" // character. For consistency, all path variables must share the same behavior. // // Repeated message fields must not be mapped to URL query parameters, because // no client library can support such complicated mapping. // // If an API needs to use a JSON array for request or response body, it can map // the request or response body to a repeated field. However, some gRPC // Transcoding implementations may not support this feature. message HttpRule { // Selects a method to which this rule applies. // // Refer to [selector][google.api.DocumentationRule.selector] for syntax details. string selector = 1; // Determines the URL pattern is matched by this rules. This pattern can be // used with any of the {get|put|post|delete|patch} methods. A custom method // can be defined using the 'custom' field. oneof pattern { // Maps to HTTP GET. Used for listing and getting information about // resources. string get = 2; // Maps to HTTP PUT. Used for replacing a resource. string put = 3; // Maps to HTTP POST. Used for creating a resource or performing an action. string post = 4; // Maps to HTTP DELETE. Used for deleting a resource. string delete = 5; // Maps to HTTP PATCH. Used for updating a resource. string patch = 6; // The custom pattern is used for specifying an HTTP method that is not // included in the `pattern` field, such as HEAD, or "*" to leave the // HTTP method unspecified for this rule. The wild-card rule is useful // for services that provide content to Web (HTML) clients. CustomHttpPattern custom = 8; } // The name of the request field whose value is mapped to the HTTP request // body, or `*` for mapping all request fields not captured by the path // pattern to the HTTP body, or omitted for not having any HTTP request body. // // NOTE: the referred field must be present at the top-level of the request // message type. string body = 7; // Optional. The name of the response field whose value is mapped to the HTTP // response body. When omitted, the entire response message will be used // as the HTTP response body. // // NOTE: The referred field must be present at the top-level of the response // message type. string response_body = 12; // Additional HTTP bindings for the selector. Nested bindings must // not contain an `additional_bindings` field themselves (that is, // the nesting may only be one level deep). repeated HttpRule additional_bindings = 11; } // A custom pattern is used for defining custom HTTP verb. message CustomHttpPattern { // The name of this custom HTTP verb. string kind = 1; // The path matched by this custom verb. string path = 2; } ================================================ FILE: projects/grpc/grpc-14/grpc-server.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc-15/Program.cs ================================================ using Grpc.Core; using Microsoft.AspNetCore.Server.Kestrel.Core; using Microsoft.AspNetCore.Grpc.JsonTranscoding; var builder = WebApplication.CreateBuilder(); builder.Services.AddGrpc().AddJsonTranscoding(); builder.WebHost.ConfigureKestrel(k => { k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2); k.ListenLocalhost(5500, o => o.UseHttps()); }); var app = builder.Build(); app.MapGrpcService(); app.MapGet("/", () => Results.Content("""

    gRPC JSON Transcoding POST




    sender:

    city:

    sender:

    time:

    """, "text/html")); app.Run(); public class BillboardService : Billboard.Board.BoardBase { public override Task ShowMessage(Billboard.MessageRequest request, ServerCallContext context) { var now = DateTime.UtcNow; return Task.FromResult(new Billboard.MessageReply { DisplayTime = now.Ticks, ReceivedFrom = request.Sender, ReceivedAge = request.Age, ReceivedCity = request.City }); } } ================================================ FILE: projects/grpc/grpc-15/README.md ================================================ # gRPC JSON transcoding POST This sample shows how to make a POST call to a gRPC endpoint via gRPC JSON transcoding by combining route parameter and body. ================================================ FILE: projects/grpc/grpc-15/billboard.proto ================================================ syntax = "proto3"; import "google/api/annotations.proto"; package Billboard; service Board { rpc ShowMessage (MessageRequest) returns (MessageReply) { option (google.api.http) = { post: "/v1/message/{sender}", body: "*" }; } } message MessageRequest { string sender = 1; string city = 2; int32 age = 3; } message MessageBody { } message MessageReply { string received_from = 1; int64 display_time = 2; string received_city = 3; int32 received_age = 4; } ================================================ FILE: projects/grpc/grpc-15/google/api/annotations.proto ================================================ // Copyright (c) 2015, Google Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. syntax = "proto3"; package google.api; import "google/api/http.proto"; import "google/protobuf/descriptor.proto"; option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; option java_multiple_files = true; option java_outer_classname = "AnnotationsProto"; option java_package = "com.google.api"; option objc_class_prefix = "GAPI"; extend google.protobuf.MethodOptions { // See `HttpRule`. HttpRule http = 72295728; } ================================================ FILE: projects/grpc/grpc-15/google/api/http.proto ================================================ // Copyright 2019 Google LLC. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // syntax = "proto3"; package google.api; option cc_enable_arenas = true; option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; option java_multiple_files = true; option java_outer_classname = "HttpProto"; option java_package = "com.google.api"; option objc_class_prefix = "GAPI"; // Defines the HTTP configuration for an API service. It contains a list of // [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method // to one or more HTTP REST API methods. message Http { // A list of HTTP configuration rules that apply to individual API methods. // // **NOTE:** All service configuration rules follow "last one wins" order. repeated HttpRule rules = 1; // When set to true, URL path parameters will be fully URI-decoded except in // cases of single segment matches in reserved expansion, where "%2F" will be // left encoded. // // The default behavior is to not decode RFC 6570 reserved characters in multi // segment matches. bool fully_decode_reserved_expansion = 2; } // # gRPC Transcoding // // gRPC Transcoding is a feature for mapping between a gRPC method and one or // more HTTP REST endpoints. It allows developers to build a single API service // that supports both gRPC APIs and REST APIs. Many systems, including [Google // APIs](https://github.com/googleapis/googleapis), // [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC // Gateway](https://github.com/grpc-ecosystem/grpc-gateway), // and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature // and use it for large scale production services. // // `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies // how different portions of the gRPC request message are mapped to the URL // path, URL query parameters, and HTTP request body. It also controls how the // gRPC response message is mapped to the HTTP response body. `HttpRule` is // typically specified as an `google.api.http` annotation on the gRPC method. // // Each mapping specifies a URL path template and an HTTP method. The path // template may refer to one or more fields in the gRPC request message, as long // as each field is a non-repeated field with a primitive (non-message) type. // The path template controls how fields of the request message are mapped to // the URL path. // // Example: // // service Messaging { // rpc GetMessage(GetMessageRequest) returns (Message) { // option (google.api.http) = { // get: "/v1/{name=messages/*}" // }; // } // } // message GetMessageRequest { // string name = 1; // Mapped to URL path. // } // message Message { // string text = 1; // The resource content. // } // // This enables an HTTP REST to gRPC mapping as below: // // HTTP | gRPC // -----|----- // `GET /v1/messages/123456` | `GetMessage(name: "messages/123456")` // // Any fields in the request message which are not bound by the path template // automatically become HTTP query parameters if there is no HTTP request body. // For example: // // service Messaging { // rpc GetMessage(GetMessageRequest) returns (Message) { // option (google.api.http) = { // get:"/v1/messages/{message_id}" // }; // } // } // message GetMessageRequest { // message SubMessage { // string subfield = 1; // } // string message_id = 1; // Mapped to URL path. // int64 revision = 2; // Mapped to URL query parameter `revision`. // SubMessage sub = 3; // Mapped to URL query parameter `sub.subfield`. // } // // This enables a HTTP JSON to RPC mapping as below: // // HTTP | gRPC // -----|----- // `GET /v1/messages/123456?revision=2&sub.subfield=foo` | // `GetMessage(message_id: "123456" revision: 2 sub: SubMessage(subfield: // "foo"))` // // Note that fields which are mapped to URL query parameters must have a // primitive type or a repeated primitive type or a non-repeated message type. // In the case of a repeated type, the parameter can be repeated in the URL // as `...?param=A¶m=B`. In the case of a message type, each field of the // message is mapped to a separate parameter, such as // `...?foo.a=A&foo.b=B&foo.c=C`. // // For HTTP methods that allow a request body, the `body` field // specifies the mapping. Consider a REST update method on the // message resource collection: // // service Messaging { // rpc UpdateMessage(UpdateMessageRequest) returns (Message) { // option (google.api.http) = { // patch: "/v1/messages/{message_id}" // body: "message" // }; // } // } // message UpdateMessageRequest { // string message_id = 1; // mapped to the URL // Message message = 2; // mapped to the body // } // // The following HTTP JSON to RPC mapping is enabled, where the // representation of the JSON in the request body is determined by // protos JSON encoding: // // HTTP | gRPC // -----|----- // `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: // "123456" message { text: "Hi!" })` // // The special name `*` can be used in the body mapping to define that // every field not bound by the path template should be mapped to the // request body. This enables the following alternative definition of // the update method: // // service Messaging { // rpc UpdateMessage(Message) returns (Message) { // option (google.api.http) = { // patch: "/v1/messages/{message_id}" // body: "*" // }; // } // } // message Message { // string message_id = 1; // string text = 2; // } // // // The following HTTP JSON to RPC mapping is enabled: // // HTTP | gRPC // -----|----- // `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: // "123456" text: "Hi!")` // // Note that when using `*` in the body mapping, it is not possible to // have HTTP parameters, as all fields not bound by the path end in // the body. This makes this option more rarely used in practice when // defining REST APIs. The common usage of `*` is in custom methods // which don't use the URL at all for transferring data. // // It is possible to define multiple HTTP methods for one RPC by using // the `additional_bindings` option. Example: // // service Messaging { // rpc GetMessage(GetMessageRequest) returns (Message) { // option (google.api.http) = { // get: "/v1/messages/{message_id}" // additional_bindings { // get: "/v1/users/{user_id}/messages/{message_id}" // } // }; // } // } // message GetMessageRequest { // string message_id = 1; // string user_id = 2; // } // // This enables the following two alternative HTTP JSON to RPC mappings: // // HTTP | gRPC // -----|----- // `GET /v1/messages/123456` | `GetMessage(message_id: "123456")` // `GET /v1/users/me/messages/123456` | `GetMessage(user_id: "me" message_id: // "123456")` // // ## Rules for HTTP mapping // // 1. Leaf request fields (recursive expansion nested messages in the request // message) are classified into three categories: // - Fields referred by the path template. They are passed via the URL path. // - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They are passed via the HTTP // request body. // - All other fields are passed via the URL query parameters, and the // parameter name is the field path in the request message. A repeated // field can be represented as multiple query parameters under the same // name. // 2. If [HttpRule.body][google.api.HttpRule.body] is "*", there is no URL query parameter, all fields // are passed via URL path and HTTP request body. // 3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP request body, all // fields are passed via URL path and URL query parameters. // // ### Path template syntax // // Template = "/" Segments [ Verb ] ; // Segments = Segment { "/" Segment } ; // Segment = "*" | "**" | LITERAL | Variable ; // Variable = "{" FieldPath [ "=" Segments ] "}" ; // FieldPath = IDENT { "." IDENT } ; // Verb = ":" LITERAL ; // // The syntax `*` matches a single URL path segment. The syntax `**` matches // zero or more URL path segments, which must be the last part of the URL path // except the `Verb`. // // The syntax `Variable` matches part of the URL path as specified by its // template. A variable template must not contain other variables. If a variable // matches a single path segment, its template may be omitted, e.g. `{var}` // is equivalent to `{var=*}`. // // The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL` // contains any reserved character, such characters should be percent-encoded // before the matching. // // If a variable contains exactly one path segment, such as `"{var}"` or // `"{var=*}"`, when such a variable is expanded into a URL path on the client // side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The // server side does the reverse decoding. Such variables show up in the // [Discovery // Document](https://developers.google.com/discovery/v1/reference/apis) as // `{var}`. // // If a variable contains multiple path segments, such as `"{var=foo/*}"` // or `"{var=**}"`, when such a variable is expanded into a URL path on the // client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded. // The server side does the reverse decoding, except "%2F" and "%2f" are left // unchanged. Such variables show up in the // [Discovery // Document](https://developers.google.com/discovery/v1/reference/apis) as // `{+var}`. // // ## Using gRPC API Service Configuration // // gRPC API Service Configuration (service config) is a configuration language // for configuring a gRPC service to become a user-facing product. The // service config is simply the YAML representation of the `google.api.Service` // proto message. // // As an alternative to annotating your proto file, you can configure gRPC // transcoding in your service config YAML files. You do this by specifying a // `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same // effect as the proto annotation. This can be particularly useful if you // have a proto that is reused in multiple services. Note that any transcoding // specified in the service config will override any matching transcoding // configuration in the proto. // // Example: // // http: // rules: // # Selects a gRPC method and applies HttpRule to it. // - selector: example.v1.Messaging.GetMessage // get: /v1/messages/{message_id}/{sub.subfield} // // ## Special notes // // When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the // proto to JSON conversion must follow the [proto3 // specification](https://developers.google.com/protocol-buffers/docs/proto3#json). // // While the single segment variable follows the semantics of // [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String // Expansion, the multi segment variable **does not** follow RFC 6570 Section // 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion // does not expand special characters like `?` and `#`, which would lead // to invalid URLs. As the result, gRPC Transcoding uses a custom encoding // for multi segment variables. // // The path variables **must not** refer to any repeated or mapped field, // because client libraries are not capable of handling such variable expansion. // // The path variables **must not** capture the leading "/" character. The reason // is that the most common use case "{var}" does not capture the leading "/" // character. For consistency, all path variables must share the same behavior. // // Repeated message fields must not be mapped to URL query parameters, because // no client library can support such complicated mapping. // // If an API needs to use a JSON array for request or response body, it can map // the request or response body to a repeated field. However, some gRPC // Transcoding implementations may not support this feature. message HttpRule { // Selects a method to which this rule applies. // // Refer to [selector][google.api.DocumentationRule.selector] for syntax details. string selector = 1; // Determines the URL pattern is matched by this rules. This pattern can be // used with any of the {get|put|post|delete|patch} methods. A custom method // can be defined using the 'custom' field. oneof pattern { // Maps to HTTP GET. Used for listing and getting information about // resources. string get = 2; // Maps to HTTP PUT. Used for replacing a resource. string put = 3; // Maps to HTTP POST. Used for creating a resource or performing an action. string post = 4; // Maps to HTTP DELETE. Used for deleting a resource. string delete = 5; // Maps to HTTP PATCH. Used for updating a resource. string patch = 6; // The custom pattern is used for specifying an HTTP method that is not // included in the `pattern` field, such as HEAD, or "*" to leave the // HTTP method unspecified for this rule. The wild-card rule is useful // for services that provide content to Web (HTML) clients. CustomHttpPattern custom = 8; } // The name of the request field whose value is mapped to the HTTP request // body, or `*` for mapping all request fields not captured by the path // pattern to the HTTP body, or omitted for not having any HTTP request body. // // NOTE: the referred field must be present at the top-level of the request // message type. string body = 7; // Optional. The name of the response field whose value is mapped to the HTTP // response body. When omitted, the entire response message will be used // as the HTTP response body. // // NOTE: The referred field must be present at the top-level of the response // message type. string response_body = 12; // Additional HTTP bindings for the selector. Nested bindings must // not contain an `additional_bindings` field themselves (that is, // the nesting may only be one level deep). repeated HttpRule additional_bindings = 11; } // A custom pattern is used for defining custom HTTP verb. message CustomHttpPattern { // The name of this custom HTTP verb. string kind = 1; // The path matched by this custom verb. string path = 2; } ================================================ FILE: projects/grpc/grpc-15/grpc-server.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc-16/Program.cs ================================================ using Grpc.Core; using Microsoft.AspNetCore.Server.Kestrel.Core; using Microsoft.AspNetCore.Grpc.JsonTranscoding; var builder = WebApplication.CreateBuilder(); builder.Services.AddGrpc().AddJsonTranscoding(); builder.WebHost.ConfigureKestrel(k => { k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2); k.ListenLocalhost(5500, o => o.UseHttps()); }); var app = builder.Build(); app.MapGrpcService(); app.MapGet("/", () => Results.Content("""

    gRPC JSON Transcoding PUT




    sender:

    city:

    sender:

    """, "text/html")); app.Run(); public class BillboardService : Billboard.Board.BoardBase { public override Task ShowMessage(Billboard.MessageRequest request, ServerCallContext context) { var now = DateTime.UtcNow; return Task.FromResult(new Billboard.MessageReply { ReceivedFrom = request.Sender, ReceivedAge = request.Age, ReceivedCity = request.City }); } } ================================================ FILE: projects/grpc/grpc-16/README.md ================================================ # gRPC JSON transcoding PUT This sample shows how to make a PUT call to a gRPC endpoint via gRPC JSON transcoding ================================================ FILE: projects/grpc/grpc-16/billboard.proto ================================================ syntax = "proto3"; import "google/api/annotations.proto"; package Billboard; service Board { rpc ShowMessage (MessageRequest) returns (MessageReply) { option (google.api.http) = { put: "/v1/message/{sender}", body: "*" }; } } message MessageRequest { string sender = 1; string city = 2; int32 age = 3; } message MessageBody { } message MessageReply { string received_from = 1; string received_city = 2; int32 received_age = 3; } ================================================ FILE: projects/grpc/grpc-16/google/api/annotations.proto ================================================ // Copyright (c) 2015, Google Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. syntax = "proto3"; package google.api; import "google/api/http.proto"; import "google/protobuf/descriptor.proto"; option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; option java_multiple_files = true; option java_outer_classname = "AnnotationsProto"; option java_package = "com.google.api"; option objc_class_prefix = "GAPI"; extend google.protobuf.MethodOptions { // See `HttpRule`. HttpRule http = 72295728; } ================================================ FILE: projects/grpc/grpc-16/google/api/http.proto ================================================ // Copyright 2019 Google LLC. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // syntax = "proto3"; package google.api; option cc_enable_arenas = true; option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; option java_multiple_files = true; option java_outer_classname = "HttpProto"; option java_package = "com.google.api"; option objc_class_prefix = "GAPI"; // Defines the HTTP configuration for an API service. It contains a list of // [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method // to one or more HTTP REST API methods. message Http { // A list of HTTP configuration rules that apply to individual API methods. // // **NOTE:** All service configuration rules follow "last one wins" order. repeated HttpRule rules = 1; // When set to true, URL path parameters will be fully URI-decoded except in // cases of single segment matches in reserved expansion, where "%2F" will be // left encoded. // // The default behavior is to not decode RFC 6570 reserved characters in multi // segment matches. bool fully_decode_reserved_expansion = 2; } // # gRPC Transcoding // // gRPC Transcoding is a feature for mapping between a gRPC method and one or // more HTTP REST endpoints. It allows developers to build a single API service // that supports both gRPC APIs and REST APIs. Many systems, including [Google // APIs](https://github.com/googleapis/googleapis), // [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC // Gateway](https://github.com/grpc-ecosystem/grpc-gateway), // and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature // and use it for large scale production services. // // `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies // how different portions of the gRPC request message are mapped to the URL // path, URL query parameters, and HTTP request body. It also controls how the // gRPC response message is mapped to the HTTP response body. `HttpRule` is // typically specified as an `google.api.http` annotation on the gRPC method. // // Each mapping specifies a URL path template and an HTTP method. The path // template may refer to one or more fields in the gRPC request message, as long // as each field is a non-repeated field with a primitive (non-message) type. // The path template controls how fields of the request message are mapped to // the URL path. // // Example: // // service Messaging { // rpc GetMessage(GetMessageRequest) returns (Message) { // option (google.api.http) = { // get: "/v1/{name=messages/*}" // }; // } // } // message GetMessageRequest { // string name = 1; // Mapped to URL path. // } // message Message { // string text = 1; // The resource content. // } // // This enables an HTTP REST to gRPC mapping as below: // // HTTP | gRPC // -----|----- // `GET /v1/messages/123456` | `GetMessage(name: "messages/123456")` // // Any fields in the request message which are not bound by the path template // automatically become HTTP query parameters if there is no HTTP request body. // For example: // // service Messaging { // rpc GetMessage(GetMessageRequest) returns (Message) { // option (google.api.http) = { // get:"/v1/messages/{message_id}" // }; // } // } // message GetMessageRequest { // message SubMessage { // string subfield = 1; // } // string message_id = 1; // Mapped to URL path. // int64 revision = 2; // Mapped to URL query parameter `revision`. // SubMessage sub = 3; // Mapped to URL query parameter `sub.subfield`. // } // // This enables a HTTP JSON to RPC mapping as below: // // HTTP | gRPC // -----|----- // `GET /v1/messages/123456?revision=2&sub.subfield=foo` | // `GetMessage(message_id: "123456" revision: 2 sub: SubMessage(subfield: // "foo"))` // // Note that fields which are mapped to URL query parameters must have a // primitive type or a repeated primitive type or a non-repeated message type. // In the case of a repeated type, the parameter can be repeated in the URL // as `...?param=A¶m=B`. In the case of a message type, each field of the // message is mapped to a separate parameter, such as // `...?foo.a=A&foo.b=B&foo.c=C`. // // For HTTP methods that allow a request body, the `body` field // specifies the mapping. Consider a REST update method on the // message resource collection: // // service Messaging { // rpc UpdateMessage(UpdateMessageRequest) returns (Message) { // option (google.api.http) = { // patch: "/v1/messages/{message_id}" // body: "message" // }; // } // } // message UpdateMessageRequest { // string message_id = 1; // mapped to the URL // Message message = 2; // mapped to the body // } // // The following HTTP JSON to RPC mapping is enabled, where the // representation of the JSON in the request body is determined by // protos JSON encoding: // // HTTP | gRPC // -----|----- // `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: // "123456" message { text: "Hi!" })` // // The special name `*` can be used in the body mapping to define that // every field not bound by the path template should be mapped to the // request body. This enables the following alternative definition of // the update method: // // service Messaging { // rpc UpdateMessage(Message) returns (Message) { // option (google.api.http) = { // patch: "/v1/messages/{message_id}" // body: "*" // }; // } // } // message Message { // string message_id = 1; // string text = 2; // } // // // The following HTTP JSON to RPC mapping is enabled: // // HTTP | gRPC // -----|----- // `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: // "123456" text: "Hi!")` // // Note that when using `*` in the body mapping, it is not possible to // have HTTP parameters, as all fields not bound by the path end in // the body. This makes this option more rarely used in practice when // defining REST APIs. The common usage of `*` is in custom methods // which don't use the URL at all for transferring data. // // It is possible to define multiple HTTP methods for one RPC by using // the `additional_bindings` option. Example: // // service Messaging { // rpc GetMessage(GetMessageRequest) returns (Message) { // option (google.api.http) = { // get: "/v1/messages/{message_id}" // additional_bindings { // get: "/v1/users/{user_id}/messages/{message_id}" // } // }; // } // } // message GetMessageRequest { // string message_id = 1; // string user_id = 2; // } // // This enables the following two alternative HTTP JSON to RPC mappings: // // HTTP | gRPC // -----|----- // `GET /v1/messages/123456` | `GetMessage(message_id: "123456")` // `GET /v1/users/me/messages/123456` | `GetMessage(user_id: "me" message_id: // "123456")` // // ## Rules for HTTP mapping // // 1. Leaf request fields (recursive expansion nested messages in the request // message) are classified into three categories: // - Fields referred by the path template. They are passed via the URL path. // - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They are passed via the HTTP // request body. // - All other fields are passed via the URL query parameters, and the // parameter name is the field path in the request message. A repeated // field can be represented as multiple query parameters under the same // name. // 2. If [HttpRule.body][google.api.HttpRule.body] is "*", there is no URL query parameter, all fields // are passed via URL path and HTTP request body. // 3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP request body, all // fields are passed via URL path and URL query parameters. // // ### Path template syntax // // Template = "/" Segments [ Verb ] ; // Segments = Segment { "/" Segment } ; // Segment = "*" | "**" | LITERAL | Variable ; // Variable = "{" FieldPath [ "=" Segments ] "}" ; // FieldPath = IDENT { "." IDENT } ; // Verb = ":" LITERAL ; // // The syntax `*` matches a single URL path segment. The syntax `**` matches // zero or more URL path segments, which must be the last part of the URL path // except the `Verb`. // // The syntax `Variable` matches part of the URL path as specified by its // template. A variable template must not contain other variables. If a variable // matches a single path segment, its template may be omitted, e.g. `{var}` // is equivalent to `{var=*}`. // // The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL` // contains any reserved character, such characters should be percent-encoded // before the matching. // // If a variable contains exactly one path segment, such as `"{var}"` or // `"{var=*}"`, when such a variable is expanded into a URL path on the client // side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The // server side does the reverse decoding. Such variables show up in the // [Discovery // Document](https://developers.google.com/discovery/v1/reference/apis) as // `{var}`. // // If a variable contains multiple path segments, such as `"{var=foo/*}"` // or `"{var=**}"`, when such a variable is expanded into a URL path on the // client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded. // The server side does the reverse decoding, except "%2F" and "%2f" are left // unchanged. Such variables show up in the // [Discovery // Document](https://developers.google.com/discovery/v1/reference/apis) as // `{+var}`. // // ## Using gRPC API Service Configuration // // gRPC API Service Configuration (service config) is a configuration language // for configuring a gRPC service to become a user-facing product. The // service config is simply the YAML representation of the `google.api.Service` // proto message. // // As an alternative to annotating your proto file, you can configure gRPC // transcoding in your service config YAML files. You do this by specifying a // `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same // effect as the proto annotation. This can be particularly useful if you // have a proto that is reused in multiple services. Note that any transcoding // specified in the service config will override any matching transcoding // configuration in the proto. // // Example: // // http: // rules: // # Selects a gRPC method and applies HttpRule to it. // - selector: example.v1.Messaging.GetMessage // get: /v1/messages/{message_id}/{sub.subfield} // // ## Special notes // // When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the // proto to JSON conversion must follow the [proto3 // specification](https://developers.google.com/protocol-buffers/docs/proto3#json). // // While the single segment variable follows the semantics of // [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String // Expansion, the multi segment variable **does not** follow RFC 6570 Section // 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion // does not expand special characters like `?` and `#`, which would lead // to invalid URLs. As the result, gRPC Transcoding uses a custom encoding // for multi segment variables. // // The path variables **must not** refer to any repeated or mapped field, // because client libraries are not capable of handling such variable expansion. // // The path variables **must not** capture the leading "/" character. The reason // is that the most common use case "{var}" does not capture the leading "/" // character. For consistency, all path variables must share the same behavior. // // Repeated message fields must not be mapped to URL query parameters, because // no client library can support such complicated mapping. // // If an API needs to use a JSON array for request or response body, it can map // the request or response body to a repeated field. However, some gRPC // Transcoding implementations may not support this feature. message HttpRule { // Selects a method to which this rule applies. // // Refer to [selector][google.api.DocumentationRule.selector] for syntax details. string selector = 1; // Determines the URL pattern is matched by this rules. This pattern can be // used with any of the {get|put|post|delete|patch} methods. A custom method // can be defined using the 'custom' field. oneof pattern { // Maps to HTTP GET. Used for listing and getting information about // resources. string get = 2; // Maps to HTTP PUT. Used for replacing a resource. string put = 3; // Maps to HTTP POST. Used for creating a resource or performing an action. string post = 4; // Maps to HTTP DELETE. Used for deleting a resource. string delete = 5; // Maps to HTTP PATCH. Used for updating a resource. string patch = 6; // The custom pattern is used for specifying an HTTP method that is not // included in the `pattern` field, such as HEAD, or "*" to leave the // HTTP method unspecified for this rule. The wild-card rule is useful // for services that provide content to Web (HTML) clients. CustomHttpPattern custom = 8; } // The name of the request field whose value is mapped to the HTTP request // body, or `*` for mapping all request fields not captured by the path // pattern to the HTTP body, or omitted for not having any HTTP request body. // // NOTE: the referred field must be present at the top-level of the request // message type. string body = 7; // Optional. The name of the response field whose value is mapped to the HTTP // response body. When omitted, the entire response message will be used // as the HTTP response body. // // NOTE: The referred field must be present at the top-level of the response // message type. string response_body = 12; // Additional HTTP bindings for the selector. Nested bindings must // not contain an `additional_bindings` field themselves (that is, // the nesting may only be one level deep). repeated HttpRule additional_bindings = 11; } // A custom pattern is used for defining custom HTTP verb. message CustomHttpPattern { // The name of this custom HTTP verb. string kind = 1; // The path matched by this custom verb. string path = 2; } ================================================ FILE: projects/grpc/grpc-16/grpc-server.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc-17/Program.cs ================================================ using Grpc.Core; using Microsoft.AspNetCore.Server.Kestrel.Core; var builder = WebApplication.CreateBuilder(); builder.Services.AddGrpc().AddJsonTranscoding(); builder.Services.AddSingleton(); builder.WebHost.ConfigureKestrel(k => { k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2); k.ListenLocalhost(5500, o => o.UseHttps()); }); var app = builder.Build(); app.MapGrpcService(); app.MapGet("/", () => Results.Content("""

    gRPC JSON Transcoding PATCH


    total:

    """, "text/html")); app.Run(); public class Accumulator { public int Total { get; set;} public void Add(int number) => Total += number; } public class BillboardService : Billboard.Board.BoardBase { Accumulator _acc; public BillboardService(Accumulator acc) { _acc = acc; } public override Task ShowMessage(Billboard.MessageRequest request, ServerCallContext context) { _acc.Add(request.AddNumber); return Task.FromResult(new Billboard.MessageReply { TotalNumber = _acc.Total }); } } ================================================ FILE: projects/grpc/grpc-17/README.md ================================================ # gRPC JSON transcoding PATCH This sample shows how to make a PATCH call to a gRPC endpoint via gRPC JSON transcoding ================================================ FILE: projects/grpc/grpc-17/billboard.proto ================================================ syntax = "proto3"; import "google/api/annotations.proto"; package Billboard; service Board { rpc ShowMessage (MessageRequest) returns (MessageReply) { option (google.api.http) = { patch: "/v1/message", body: "*" }; } } message MessageRequest { int32 addNumber = 1; } message MessageBody { } message MessageReply { int32 total_number = 1; } ================================================ FILE: projects/grpc/grpc-17/google/api/annotations.proto ================================================ // Copyright (c) 2015, Google Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. syntax = "proto3"; package google.api; import "google/api/http.proto"; import "google/protobuf/descriptor.proto"; option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; option java_multiple_files = true; option java_outer_classname = "AnnotationsProto"; option java_package = "com.google.api"; option objc_class_prefix = "GAPI"; extend google.protobuf.MethodOptions { // See `HttpRule`. HttpRule http = 72295728; } ================================================ FILE: projects/grpc/grpc-17/google/api/http.proto ================================================ // Copyright 2019 Google LLC. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // syntax = "proto3"; package google.api; option cc_enable_arenas = true; option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; option java_multiple_files = true; option java_outer_classname = "HttpProto"; option java_package = "com.google.api"; option objc_class_prefix = "GAPI"; // Defines the HTTP configuration for an API service. It contains a list of // [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method // to one or more HTTP REST API methods. message Http { // A list of HTTP configuration rules that apply to individual API methods. // // **NOTE:** All service configuration rules follow "last one wins" order. repeated HttpRule rules = 1; // When set to true, URL path parameters will be fully URI-decoded except in // cases of single segment matches in reserved expansion, where "%2F" will be // left encoded. // // The default behavior is to not decode RFC 6570 reserved characters in multi // segment matches. bool fully_decode_reserved_expansion = 2; } // # gRPC Transcoding // // gRPC Transcoding is a feature for mapping between a gRPC method and one or // more HTTP REST endpoints. It allows developers to build a single API service // that supports both gRPC APIs and REST APIs. Many systems, including [Google // APIs](https://github.com/googleapis/googleapis), // [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC // Gateway](https://github.com/grpc-ecosystem/grpc-gateway), // and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature // and use it for large scale production services. // // `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies // how different portions of the gRPC request message are mapped to the URL // path, URL query parameters, and HTTP request body. It also controls how the // gRPC response message is mapped to the HTTP response body. `HttpRule` is // typically specified as an `google.api.http` annotation on the gRPC method. // // Each mapping specifies a URL path template and an HTTP method. The path // template may refer to one or more fields in the gRPC request message, as long // as each field is a non-repeated field with a primitive (non-message) type. // The path template controls how fields of the request message are mapped to // the URL path. // // Example: // // service Messaging { // rpc GetMessage(GetMessageRequest) returns (Message) { // option (google.api.http) = { // get: "/v1/{name=messages/*}" // }; // } // } // message GetMessageRequest { // string name = 1; // Mapped to URL path. // } // message Message { // string text = 1; // The resource content. // } // // This enables an HTTP REST to gRPC mapping as below: // // HTTP | gRPC // -----|----- // `GET /v1/messages/123456` | `GetMessage(name: "messages/123456")` // // Any fields in the request message which are not bound by the path template // automatically become HTTP query parameters if there is no HTTP request body. // For example: // // service Messaging { // rpc GetMessage(GetMessageRequest) returns (Message) { // option (google.api.http) = { // get:"/v1/messages/{message_id}" // }; // } // } // message GetMessageRequest { // message SubMessage { // string subfield = 1; // } // string message_id = 1; // Mapped to URL path. // int64 revision = 2; // Mapped to URL query parameter `revision`. // SubMessage sub = 3; // Mapped to URL query parameter `sub.subfield`. // } // // This enables a HTTP JSON to RPC mapping as below: // // HTTP | gRPC // -----|----- // `GET /v1/messages/123456?revision=2&sub.subfield=foo` | // `GetMessage(message_id: "123456" revision: 2 sub: SubMessage(subfield: // "foo"))` // // Note that fields which are mapped to URL query parameters must have a // primitive type or a repeated primitive type or a non-repeated message type. // In the case of a repeated type, the parameter can be repeated in the URL // as `...?param=A¶m=B`. In the case of a message type, each field of the // message is mapped to a separate parameter, such as // `...?foo.a=A&foo.b=B&foo.c=C`. // // For HTTP methods that allow a request body, the `body` field // specifies the mapping. Consider a REST update method on the // message resource collection: // // service Messaging { // rpc UpdateMessage(UpdateMessageRequest) returns (Message) { // option (google.api.http) = { // patch: "/v1/messages/{message_id}" // body: "message" // }; // } // } // message UpdateMessageRequest { // string message_id = 1; // mapped to the URL // Message message = 2; // mapped to the body // } // // The following HTTP JSON to RPC mapping is enabled, where the // representation of the JSON in the request body is determined by // protos JSON encoding: // // HTTP | gRPC // -----|----- // `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: // "123456" message { text: "Hi!" })` // // The special name `*` can be used in the body mapping to define that // every field not bound by the path template should be mapped to the // request body. This enables the following alternative definition of // the update method: // // service Messaging { // rpc UpdateMessage(Message) returns (Message) { // option (google.api.http) = { // patch: "/v1/messages/{message_id}" // body: "*" // }; // } // } // message Message { // string message_id = 1; // string text = 2; // } // // // The following HTTP JSON to RPC mapping is enabled: // // HTTP | gRPC // -----|----- // `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: // "123456" text: "Hi!")` // // Note that when using `*` in the body mapping, it is not possible to // have HTTP parameters, as all fields not bound by the path end in // the body. This makes this option more rarely used in practice when // defining REST APIs. The common usage of `*` is in custom methods // which don't use the URL at all for transferring data. // // It is possible to define multiple HTTP methods for one RPC by using // the `additional_bindings` option. Example: // // service Messaging { // rpc GetMessage(GetMessageRequest) returns (Message) { // option (google.api.http) = { // get: "/v1/messages/{message_id}" // additional_bindings { // get: "/v1/users/{user_id}/messages/{message_id}" // } // }; // } // } // message GetMessageRequest { // string message_id = 1; // string user_id = 2; // } // // This enables the following two alternative HTTP JSON to RPC mappings: // // HTTP | gRPC // -----|----- // `GET /v1/messages/123456` | `GetMessage(message_id: "123456")` // `GET /v1/users/me/messages/123456` | `GetMessage(user_id: "me" message_id: // "123456")` // // ## Rules for HTTP mapping // // 1. Leaf request fields (recursive expansion nested messages in the request // message) are classified into three categories: // - Fields referred by the path template. They are passed via the URL path. // - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They are passed via the HTTP // request body. // - All other fields are passed via the URL query parameters, and the // parameter name is the field path in the request message. A repeated // field can be represented as multiple query parameters under the same // name. // 2. If [HttpRule.body][google.api.HttpRule.body] is "*", there is no URL query parameter, all fields // are passed via URL path and HTTP request body. // 3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP request body, all // fields are passed via URL path and URL query parameters. // // ### Path template syntax // // Template = "/" Segments [ Verb ] ; // Segments = Segment { "/" Segment } ; // Segment = "*" | "**" | LITERAL | Variable ; // Variable = "{" FieldPath [ "=" Segments ] "}" ; // FieldPath = IDENT { "." IDENT } ; // Verb = ":" LITERAL ; // // The syntax `*` matches a single URL path segment. The syntax `**` matches // zero or more URL path segments, which must be the last part of the URL path // except the `Verb`. // // The syntax `Variable` matches part of the URL path as specified by its // template. A variable template must not contain other variables. If a variable // matches a single path segment, its template may be omitted, e.g. `{var}` // is equivalent to `{var=*}`. // // The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL` // contains any reserved character, such characters should be percent-encoded // before the matching. // // If a variable contains exactly one path segment, such as `"{var}"` or // `"{var=*}"`, when such a variable is expanded into a URL path on the client // side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The // server side does the reverse decoding. Such variables show up in the // [Discovery // Document](https://developers.google.com/discovery/v1/reference/apis) as // `{var}`. // // If a variable contains multiple path segments, such as `"{var=foo/*}"` // or `"{var=**}"`, when such a variable is expanded into a URL path on the // client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded. // The server side does the reverse decoding, except "%2F" and "%2f" are left // unchanged. Such variables show up in the // [Discovery // Document](https://developers.google.com/discovery/v1/reference/apis) as // `{+var}`. // // ## Using gRPC API Service Configuration // // gRPC API Service Configuration (service config) is a configuration language // for configuring a gRPC service to become a user-facing product. The // service config is simply the YAML representation of the `google.api.Service` // proto message. // // As an alternative to annotating your proto file, you can configure gRPC // transcoding in your service config YAML files. You do this by specifying a // `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same // effect as the proto annotation. This can be particularly useful if you // have a proto that is reused in multiple services. Note that any transcoding // specified in the service config will override any matching transcoding // configuration in the proto. // // Example: // // http: // rules: // # Selects a gRPC method and applies HttpRule to it. // - selector: example.v1.Messaging.GetMessage // get: /v1/messages/{message_id}/{sub.subfield} // // ## Special notes // // When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the // proto to JSON conversion must follow the [proto3 // specification](https://developers.google.com/protocol-buffers/docs/proto3#json). // // While the single segment variable follows the semantics of // [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String // Expansion, the multi segment variable **does not** follow RFC 6570 Section // 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion // does not expand special characters like `?` and `#`, which would lead // to invalid URLs. As the result, gRPC Transcoding uses a custom encoding // for multi segment variables. // // The path variables **must not** refer to any repeated or mapped field, // because client libraries are not capable of handling such variable expansion. // // The path variables **must not** capture the leading "/" character. The reason // is that the most common use case "{var}" does not capture the leading "/" // character. For consistency, all path variables must share the same behavior. // // Repeated message fields must not be mapped to URL query parameters, because // no client library can support such complicated mapping. // // If an API needs to use a JSON array for request or response body, it can map // the request or response body to a repeated field. However, some gRPC // Transcoding implementations may not support this feature. message HttpRule { // Selects a method to which this rule applies. // // Refer to [selector][google.api.DocumentationRule.selector] for syntax details. string selector = 1; // Determines the URL pattern is matched by this rules. This pattern can be // used with any of the {get|put|post|delete|patch} methods. A custom method // can be defined using the 'custom' field. oneof pattern { // Maps to HTTP GET. Used for listing and getting information about // resources. string get = 2; // Maps to HTTP PUT. Used for replacing a resource. string put = 3; // Maps to HTTP POST. Used for creating a resource or performing an action. string post = 4; // Maps to HTTP DELETE. Used for deleting a resource. string delete = 5; // Maps to HTTP PATCH. Used for updating a resource. string patch = 6; // The custom pattern is used for specifying an HTTP method that is not // included in the `pattern` field, such as HEAD, or "*" to leave the // HTTP method unspecified for this rule. The wild-card rule is useful // for services that provide content to Web (HTML) clients. CustomHttpPattern custom = 8; } // The name of the request field whose value is mapped to the HTTP request // body, or `*` for mapping all request fields not captured by the path // pattern to the HTTP body, or omitted for not having any HTTP request body. // // NOTE: the referred field must be present at the top-level of the request // message type. string body = 7; // Optional. The name of the response field whose value is mapped to the HTTP // response body. When omitted, the entire response message will be used // as the HTTP response body. // // NOTE: The referred field must be present at the top-level of the response // message type. string response_body = 12; // Additional HTTP bindings for the selector. Nested bindings must // not contain an `additional_bindings` field themselves (that is, // the nesting may only be one level deep). repeated HttpRule additional_bindings = 11; } // A custom pattern is used for defining custom HTTP verb. message CustomHttpPattern { // The name of this custom HTTP verb. string kind = 1; // The path matched by this custom verb. string path = 2; } ================================================ FILE: projects/grpc/grpc-17/grpc-server.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc-2/README.md ================================================ # gRPC Server Streaming This is a sample of gRPC [Server Streaming](https://grpc.io/docs/guides/concepts/). In this case the server just repeat the same message 10 times every 5 seconds. Make sure you run both the server and the client. ================================================ FILE: projects/grpc/grpc-2/client/Program.cs ================================================ using Grpc.Net.Client; using Grpc.Core; var app = WebApplication.Create(); app.Run(async context => { var channel = GrpcChannel.ForAddress("https://localhost:5500"); var client = new Billboard.Board.BoardClient(channel); var result = client.ShowMessage(new Billboard.MessageRequest { Name = "Johny" }); context.Response.Headers["Content-Type"] = "text/event-stream"; using var tokenSource = new CancellationTokenSource(); CancellationToken token = tokenSource.Token; var streamReader = result.ResponseStream; await foreach (var reply in streamReader.ReadAllAsync(token)) { var displayDate = new DateTime(reply.DisplayTime); await context.Response.WriteAsync($"Received \"{reply.Message}\" on {displayDate.ToLongTimeString()} \n"); await context.Response.Body.FlushAsync(); } }); app.Run(); ================================================ FILE: projects/grpc/grpc-2/client/billboard.proto ================================================ syntax = "proto3"; package Billboard; service Board { rpc ShowMessage (MessageRequest) returns (stream MessageReply) {} } message MessageRequest { string name = 1; } message MessageReply { string message = 1; int64 display_time = 2; } ================================================ FILE: projects/grpc/grpc-2/client/grpc-client.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc-2/server/Program.cs ================================================ using Grpc.Core; using Microsoft.AspNetCore.Server.Kestrel.Core; using Billboard; var builder = WebApplication.CreateBuilder(); builder.Services.AddGrpc(); builder.WebHost.ConfigureKestrel(k => { k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2); k.ListenLocalhost(5500, o => o.UseHttps()); }); var app = builder.Build(); app.MapGrpcService(); app.MapGet("/", () => "This server contains a gRPC service"); app.Run(); public class BillboardService : Billboard.Board.BoardBase { public override async Task ShowMessage(MessageRequest request, IServerStreamWriter responseStream, ServerCallContext context) { foreach (var x in Enumerable.Range(1, 10)) { var now = DateTime.UtcNow; await responseStream.WriteAsync(new Billboard.MessageReply { DisplayTime = now.Ticks, Message = $"Hello {request.Name}" }); await Task.Delay(5000); } } } ================================================ FILE: projects/grpc/grpc-2/server/billboard.proto ================================================ syntax = "proto3"; package Billboard; service Board { rpc ShowMessage (MessageRequest) returns (stream MessageReply) {} } message MessageRequest { string name = 1; } message MessageReply { string message = 1; int64 display_time = 2; } ================================================ FILE: projects/grpc/grpc-2/server/grpc-server.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc-3/README.md ================================================ # gRPC Client Streaming This is a sample of gRPC [Client Streaming](https://grpc.io/docs/guides/concepts/). In this case the client is sending a list of fortune cookies messages and the server convert them to "Friends' In Bed" version cookie and send it back to the client at the end of the streaming. ================================================ FILE: projects/grpc/grpc-3/client/Program.cs ================================================ using Grpc.Net.Client; var fortunes = new List() { "The fortune you seek is in another cookie.", "A closed mouth gathers no feet.", "A conclusion is simply the place where you got tired of thinking.", "A cynic is only a frustrated optimist.", "A foolish man listens to his heart. A wise man listens to cookies.", "You will die alone and poorly dressed.", "A fanatic is one who can't change his mind, and won't change the subject.", "If you look back, you'll soon be going that way.", "You will live long enough to open many fortune cookies.", "An alien of some sort will be appearing to you shortly." }; var app = WebApplication.Create(); //Make sure that the grpc-server is run app.Run(async context => { var channel = GrpcChannel.ForAddress("https://localhost:5500"); //check the values at /server project var client = new Billboard.Board.BoardClient(channel); context.Response.Headers["Content-Type"] = "text/event-stream"; using var tokenSource = new CancellationTokenSource(); CancellationToken token = tokenSource.Token; using var stream = client.ShowMessage(cancellationToken: token); foreach (var f in fortunes) { if (token.IsCancellationRequested) break; await stream.RequestStream.WriteAsync(new Billboard.MessageRequest { FortuneCookie = f }); await context.Response.WriteAsync($"Sending \"{f}\" \n"); await context.Response.Body.FlushAsync(); await Task.Delay(1000); //1 second } await stream.RequestStream.CompleteAsync(); var response = await stream.ResponseAsync; await context.Response.WriteAsync("\n\n"); foreach (var r in response.Fortunes) { await context.Response.WriteAsync($"Reply \"{r.Message}\". Original cookied received on {new DateTime(r.ReceivedTime)}. \n"); } }); app.Run(); ================================================ FILE: projects/grpc/grpc-3/client/billboard.proto ================================================ syntax = "proto3"; package Billboard; service Board { rpc ShowMessage (stream MessageRequest) returns (MessageReply) {} } message MessageRequest { string fortune_cookie = 1; } message MessageReply { repeated TranslatedFortune fortunes = 1; } message TranslatedFortune { string message = 1; int64 received_time = 2; } ================================================ FILE: projects/grpc/grpc-3/client/grpc-client.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc-3/server/Program.cs ================================================ using Grpc.Core; using Microsoft.AspNetCore.Server.Kestrel.Core; using Billboard; var builder = WebApplication.CreateBuilder(); builder.Services.AddGrpc(); builder.WebHost.ConfigureKestrel(k => { k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2); k.ListenLocalhost(5500, o => o.UseHttps()); }); var app = builder.Build(); app.MapGrpcService(); app.MapGet("/", () => "This server contains a gRPC service"); app.Run(); public class ReceivedFortune { public string Message { get; set; } public DateTimeOffset Received { get; set; } = DateTimeOffset.UtcNow; } public class BillboardService : Billboard.Board.BoardBase { public override async Task ShowMessage(IAsyncStreamReader requestStream, ServerCallContext context) { var fortunes = new List(); using var tokenSource = new CancellationTokenSource(); CancellationToken token = tokenSource.Token; await foreach (var request in requestStream.ReadAllAsync(token)) { var inBed = request.FortuneCookie[0..^1] + " in bed."; fortunes.Add(new ReceivedFortune { Message = inBed }); } var reply = new MessageReply(); foreach (var f in fortunes) { reply.Fortunes.Add(new TranslatedFortune { Message = f.Message, ReceivedTime = f.Received.Ticks }); } return reply; } } ================================================ FILE: projects/grpc/grpc-3/server/billboard.proto ================================================ syntax = "proto3"; package Billboard; service Board { rpc ShowMessage (stream MessageRequest) returns (MessageReply) {} } message MessageRequest { string fortune_cookie = 1; } message MessageReply { repeated TranslatedFortune fortunes = 1; } message TranslatedFortune { string message = 1; int64 received_time = 2; } ================================================ FILE: projects/grpc/grpc-3/server/grpc-server.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc-4/README.md ================================================ # gRPC Client/Server bidirectional Streaming This is a sample of gRPC [bidirectional Streaming](https://grpc.io/docs/guides/concepts/). In this case the client is sending a ping with a delay timing that increment by one second for every server's pong. This interaction will run virtually forever. ================================================ FILE: projects/grpc/grpc-4/client/Program.cs ================================================ using Grpc.Net.Client; var app = WebApplication.Create(); app.Run(async context => { var channel = GrpcChannel.ForAddress("https://localhost:5500"); //check the values at /server project var client = new Billboard.Board.BoardClient(channel); context.Response.Headers["Content-Type"] = "text/event-stream"; using var tokenSource = new CancellationTokenSource(); CancellationToken token = tokenSource.Token; using var stream = client.ShowMessage(cancellationToken: token); bool response = true; int inc = 1; do { try { var delay = checked(1000 * inc); await stream.RequestStream.WriteAsync(new Billboard.MessageRequest { Ping = "Ping", DelayTime = delay }); inc++; await context.Response.WriteAsync($"Send ping on {DateTimeOffset.UtcNow} \n"); response = await stream.ResponseStream.MoveNext(token); if (response) { var result = stream.ResponseStream.Current; await context.Response.WriteAsync($"Receive {result.Pong} on {DateTimeOffset.UtcNow} \n\n"); } } catch (System.OverflowException) { inc = 1; } } while (response); }); app.Run(); ================================================ FILE: projects/grpc/grpc-4/client/billboard.proto ================================================ syntax = "proto3"; package Billboard; service Board { rpc ShowMessage (stream MessageRequest) returns (stream MessageReply) {} } message MessageRequest { string ping = 1; int32 delay_time = 2; } message MessageReply { string pong = 1; } ================================================ FILE: projects/grpc/grpc-4/client/grpc-client.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc-4/server/Program.cs ================================================ using Billboard; using Grpc.Core; using Microsoft.AspNetCore.Server.Kestrel.Core; var builder = WebApplication.CreateBuilder(); builder.Services.AddGrpc(); builder.WebHost.ConfigureKestrel(k => { k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2); k.ListenLocalhost(5500, o => o.UseHttps()); }); var app = builder.Build(); app.MapGrpcService(); app.MapGet("/", () => "This server contains a gRPC service"); app.Run(); public class ReceivedFortune { public string Message { get; set; } public DateTimeOffset Received { get; set; } = DateTimeOffset.UtcNow; } public class BillboardService : Billboard.Board.BoardBase { public override async Task ShowMessage(IAsyncStreamReader requestStream, IServerStreamWriter responseStream, ServerCallContext context) { using var tokenSource = new CancellationTokenSource(); CancellationToken token = tokenSource.Token; await foreach (var request in requestStream.ReadAllAsync(token)) { await responseStream.WriteAsync(new MessageReply { Pong = "pong" }); await Task.Delay(request.DelayTime); } } } ================================================ FILE: projects/grpc/grpc-4/server/billboard.proto ================================================ syntax = "proto3"; package Billboard; service Board { rpc ShowMessage (stream MessageRequest) returns (stream MessageReply) {} } message MessageRequest { string ping = 1; int32 delay_time = 2; } message MessageReply { string pong = 1; } ================================================ FILE: projects/grpc/grpc-4/server/grpc-server.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc-5/README.md ================================================ # Sending enum, string and datetime values This sample shows how to define Protocol Buffers format to support sending enum, string and datetime. ================================================ FILE: projects/grpc/grpc-5/client/Program.cs ================================================ using Grpc.Net.Client; var app = WebApplication.Create(); //Make sure that the grpc-server is run app.Run(async context => { var channel = GrpcChannel.ForAddress("https://localhost:5500"); //check the values at /server project var client = new Billboard.Board.BoardClient(channel); var reply = await client.ShowMessageAsync(new Billboard.MessageRequest { Message = "Hello World", Sender = "Dody Gunawinata", Type = Billboard.MessageRequest.Types.MessageType.LongForm }); var displayDate = new DateTime(reply.ReceivedTime); await context.Response.WriteAsync($"We sent a message to a gRPC server and received the following reply '{reply.Message}' on {displayDate} "); }); app.Run(); ================================================ FILE: projects/grpc/grpc-5/client/billboard.proto ================================================ syntax = "proto3"; package Billboard; service Board { rpc ShowMessage (MessageRequest) returns (MessageReply) {} } message MessageRequest { string sender = 1; string message = 2; enum MessageType { UNKNOWN = 0; SMS = 1; TWEET = 2; LONG_FORM = 3; } MessageType type = 3; } message MessageReply { string message = 1; int64 received_time = 2; } ================================================ FILE: projects/grpc/grpc-5/client/grpc-client.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc-5/server/Program.cs ================================================ using Grpc.Core; using Microsoft.AspNetCore.Server.Kestrel.Core; var builder = WebApplication.CreateBuilder(); builder.Services.AddGrpc(); builder.WebHost.ConfigureKestrel(k => { k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2); k.ListenLocalhost(5500, o => o.UseHttps()); }); var app = builder.Build(); app.MapGrpcService(); app.MapGet("/", () => "This server contains a gRPC service"); app.Run(); public class BillboardService : Billboard.Board.BoardBase { public override Task ShowMessage(Billboard.MessageRequest request, ServerCallContext context) { var message = $"Your {request.Type} with the following content `{request.Message}` has arrived well."; var now = DateTime.UtcNow; return Task.FromResult(new Billboard.MessageReply { ReceivedTime = now.Ticks, Message = message }); } } ================================================ FILE: projects/grpc/grpc-5/server/billboard.proto ================================================ syntax = "proto3"; package Billboard; service Board { rpc ShowMessage (MessageRequest) returns (MessageReply) {} } message MessageRequest { string sender = 1; string message = 2; enum MessageType { UNKNOWN = 0; SMS = 1; TWEET = 2; LONG_FORM = 3; } MessageType type = 3; } message MessageReply { string message = 1; int64 received_time = 2; } ================================================ FILE: projects/grpc/grpc-5/server/grpc-server.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc-6/README.md ================================================ # Sending nested types and repeated values (list) This sample shows how to define Protocol Buffers format to support sending nested types and repeated values (list). ================================================ FILE: projects/grpc/grpc-6/client/Program.cs ================================================ using Grpc.Net.Client; var app = WebApplication.Create(); app.Run(async context => { var channel = GrpcChannel.ForAddress("https://localhost:5500"); //check the values at /server project var client = new Billboard.Board.BoardClient(channel); var request = new Billboard.MessageRequest(); request.Capabilities.Add(new Billboard.MessageRequest.Types.SuperPower { Name = "Flying", Level = 1 }); request.Capabilities.Add(new Billboard.MessageRequest.Types.SuperPower { Name = "Invisibility", Level = 10 }); request.Capabilities.Add(new Billboard.MessageRequest.Types.SuperPower { Name = "Speed", Level = 5 }); var reply = await client.ShowMessageAsync(request); var displayDate = new DateTime(reply.ReceivedTime); await context.Response.WriteAsync($"We sent a message to a gRPC server and received the following reply \n'\n{reply.Message}' \non {displayDate} "); }); app.Run(); ================================================ FILE: projects/grpc/grpc-6/client/billboard.proto ================================================ syntax = "proto3"; package Billboard; service Board { rpc ShowMessage (MessageRequest) returns (MessageReply) {} } message MessageRequest { message SuperPower { string name = 1; int32 level = 2; } repeated SuperPower capabilities = 1; } message MessageReply { string message = 1; int64 received_time = 2; } ================================================ FILE: projects/grpc/grpc-6/client/grpc-client.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc-6/server/Program.cs ================================================ using Grpc.Core; using Microsoft.AspNetCore.Server.Kestrel.Core; using System.Text; var builder = WebApplication.CreateBuilder(); builder.Services.AddGrpc(); builder.WebHost.ConfigureKestrel(k => { k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2); k.ListenLocalhost(5500, o => o.UseHttps()); }); var app = builder.Build(); app.MapGrpcService(); app.MapGet("/", () => "This server contains a gRPC service"); app.Run(); public class BillboardService : Billboard.Board.BoardBase { public override Task ShowMessage(Billboard.MessageRequest request, ServerCallContext context) { var message = new StringBuilder(); foreach (var c in request.Capabilities) { message.AppendLine($"{c.Name} level {c.Level}"); } var now = DateTime.UtcNow; return Task.FromResult(new Billboard.MessageReply { ReceivedTime = now.Ticks, Message = message.ToString() }); } } ================================================ FILE: projects/grpc/grpc-6/server/billboard.proto ================================================ syntax = "proto3"; package Billboard; service Board { rpc ShowMessage (MessageRequest) returns (MessageReply) {} } message MessageRequest { message SuperPower { string name = 1; int32 level = 2; } repeated SuperPower capabilities = 1; } message MessageReply { string message = 1; int64 received_time = 2; } ================================================ FILE: projects/grpc/grpc-6/server/grpc-server.csproj ================================================ net10.0 grpc-server grpc-server true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc-7/README.md ================================================ # Sending map values (dictionary) This sample shows how to define Protocol Buffers format to support sending map values (dictionary). The key must not repeat and can be string or scalar types except floating points and bytes. The value can be anything except another map. More details can be found at this [Protocol Buffers documentation](https://developers.google.com/protocol-buffers/docs/proto3#maps). ================================================ FILE: projects/grpc/grpc-7/client/Program.cs ================================================ using Grpc.Net.Client; var app = WebApplication.Create(); //Make sure that the grpc-server is run app.Run(async context => { var channel = GrpcChannel.ForAddress("https://localhost:5500"); //check the values at /server project var client = new Billboard.Board.BoardClient(channel); var request = new Billboard.MessageRequest(); request.Capabilities.Add("fly", new Billboard.MessageRequest.Types.SuperPower { Name = "Flying", Level = 1 }); request.Capabilities.Add("inv", new Billboard.MessageRequest.Types.SuperPower { Name = "Invisibility", Level = 10 }); request.Capabilities.Add("spe", new Billboard.MessageRequest.Types.SuperPower { Name = "Speed", Level = 5 }); var reply = await client.ShowMessageAsync(request); var displayDate = new DateTime(reply.ReceivedTime); await context.Response.WriteAsync($"We sent a message to a gRPC server and received the following reply \n'\n{reply.Message}' \non {displayDate} "); }); app.Run(); ================================================ FILE: projects/grpc/grpc-7/client/billboard.proto ================================================ syntax = "proto3"; package Billboard; service Board { rpc ShowMessage (MessageRequest) returns (MessageReply) {} } message MessageRequest { message SuperPower { string name = 1; int32 level = 2; } map capabilities = 1; } message MessageReply { string message = 1; int64 received_time = 2; } ================================================ FILE: projects/grpc/grpc-7/client/grpc-client.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc-7/server/Program.cs ================================================ using Grpc.Core; using Microsoft.AspNetCore.Server.Kestrel.Core; using System.Text; var builder = WebApplication.CreateBuilder(); builder.Services.AddGrpc(); builder.WebHost.ConfigureKestrel(k => { k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2); k.ListenLocalhost(5500, o => o.UseHttps()); }); var app = builder.Build(); app.MapGrpcService(); app.MapGet("/", () => "This server contains a gRPC service"); app.Run(); public class BillboardService : Billboard.Board.BoardBase { public override Task ShowMessage(Billboard.MessageRequest request, ServerCallContext context) { var message = new StringBuilder(); foreach (var (k, c) in request.Capabilities) { message.AppendLine($"'{k}' = {c.Name} level {c.Level}"); } var now = DateTime.UtcNow; return Task.FromResult(new Billboard.MessageReply { ReceivedTime = now.Ticks, Message = message.ToString() }); } } ================================================ FILE: projects/grpc/grpc-7/server/billboard.proto ================================================ syntax = "proto3"; package Billboard; service Board { rpc ShowMessage (MessageRequest) returns (MessageReply) {} } message MessageRequest { message SuperPower { string name = 1; int32 level = 2; } map capabilities = 1; } message MessageReply { string message = 1; int64 received_time = 2; } ================================================ FILE: projects/grpc/grpc-7/server/grpc-server.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc-8/README.md ================================================ # Using oneof type to simulate nullable value `oneof` type allows you check whether the value of a property is set or not, essentialy emulating nullable type. ================================================ FILE: projects/grpc/grpc-8/client/Program.cs ================================================ using Grpc.Net.Client; var app = WebApplication.Create(); //Make sure that the grpc-server is run app.Run(async context => { var channel = GrpcChannel.ForAddress("https://localhost:5500"); //check the values at /server project var client = new Billboard.Board.BoardClient(channel); var request = new Billboard.MessageRequest(); request.WageValue = 10_000; var reply = await client.ShowMessageAsync(request); var displayDate = new DateTime(reply.ReceivedTime); await context.Response.WriteAsync($"We sent a message to a gRPC server and received the following reply \n'\n{reply.Message}' \non {displayDate} "); }); app.Run(); ================================================ FILE: projects/grpc/grpc-8/client/billboard.proto ================================================ syntax = "proto3"; package Billboard; service Board { rpc ShowMessage (MessageRequest) returns (MessageReply) {} } message MessageRequest { oneof wage { double wage_value = 1; } oneof bonus { double bonus_value = 2; } } message MessageReply { string message = 1; int64 received_time = 2; } ================================================ FILE: projects/grpc/grpc-8/client/grpc-client.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc-8/server/Program.cs ================================================ using Grpc.Core; using Microsoft.AspNetCore.Server.Kestrel.Core; using System.Text; var builder = WebApplication.CreateBuilder(); builder.Services.AddGrpc(); builder.WebHost.ConfigureKestrel(k => { k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2); k.ListenLocalhost(5500, o => o.UseHttps()); }); var app = builder.Build(); app.MapGrpcService(); app.MapGet("/", () => "This server contains a gRPC service"); app.Run(); public class BillboardService : Billboard.Board.BoardBase { public override Task ShowMessage(Billboard.MessageRequest request, ServerCallContext context) { var message = new StringBuilder(); message.AppendLine($"WageCase {request.WageCase}"); message.AppendLine($"WageValue {request.WageValue}"); message.AppendLine($"BonusCase {request.BonusCase}"); if (request.BonusCase == Billboard.MessageRequest.BonusOneofCase.None) { message.AppendLine("BonusCase None means that BonusValue property is never set by the requester. So you can ignore whatever values you see at BonusValue property."); } message.AppendLine($"BonusValue {request.BonusValue}"); var now = DateTime.UtcNow; return Task.FromResult(new Billboard.MessageReply { ReceivedTime = now.Ticks, Message = message.ToString() }); } } ================================================ FILE: projects/grpc/grpc-8/server/billboard.proto ================================================ syntax = "proto3"; package Billboard; service Board { rpc ShowMessage (MessageRequest) returns (MessageReply) {} } message MessageRequest { oneof wage { double wage_value = 1; } oneof bonus { double bonus_value = 2; } } message MessageReply { string message = 1; int64 received_time = 2; } ================================================ FILE: projects/grpc/grpc-8/server/grpc-server.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc-9/README.md ================================================ # gRPC Server Streaming This gRPC server streams a picture of a kitty to the client. 'Nuff said. ================================================ FILE: projects/grpc/grpc-9/client/Program.cs ================================================ using Grpc.Net.Client; using Grpc.Core; var app = WebApplication.Create(); app.UseStaticFiles(); //Make sure that the grpc-server is run app.Run(async context => { var channel = GrpcChannel.ForAddress("https://localhost:5500"); //check the values at /server project var client = new Billboard.Board.BoardClient(channel); var result = client.ShowMessage(new Google.Protobuf.WellKnownTypes.Empty()); context.Response.Headers["Content-Type"] = "text/html"; await context.Response.WriteAsync("

    Kitty Streaming

    "); using var tokenSource = new CancellationTokenSource(); CancellationToken token = tokenSource.Token; var streamReader = result.ResponseStream; //get metdata string path = null; await streamReader.MoveNext(token); var initial = streamReader.Current; if (initial.ImageCase == Billboard.MessageReply.ImageOneofCase.MetaData) { var env = context.RequestServices.GetService(); path = Path.Combine(env.WebRootPath, initial.MetaData.FileName); } if (path == null) throw new ApplicationException("Metadata is missing from the server"); using FileStream file = new FileStream(path, FileMode.Create); int position = 0; await foreach (var data in streamReader.ReadAllAsync(token)) { var chunk = data.Chunk; await file.WriteAsync(chunk.Data.ToByteArray(), 0, chunk.Length); position += chunk.Length; await context.Response.WriteAsync(position + " "); } file.Close(); await context.Response.WriteAsync($""); await context.Response.WriteAsync(""); }); app.Run(); ================================================ FILE: projects/grpc/grpc-9/client/billboard.proto ================================================ syntax = "proto3"; package Billboard; import "google/protobuf/Empty.proto"; service Board { rpc ShowMessage (google.protobuf.Empty) returns (stream MessageReply) {} } message ImageMetaData { string mime_type = 1; string file_name = 2; } message ImageChunk { bytes data = 1; int32 length = 2; } message MessageReply { oneof image { ImageMetaData meta_data = 1; ImageChunk chunk = 2; } } ================================================ FILE: projects/grpc/grpc-9/client/grpc-client.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/grpc/grpc-9/server/Program.cs ================================================ using Grpc.Core; using Microsoft.AspNetCore.Server.Kestrel.Core; using Billboard; using Google.Protobuf; var builder = WebApplication.CreateBuilder(); builder.Services.AddGrpc(); builder.WebHost.ConfigureKestrel(k => { k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2); k.ListenLocalhost(5500, o => o.UseHttps()); }); var app = builder.Build(); app.MapGrpcService(); app.MapGet("/", () => "This server contains a gRPC service"); app.Run(); public class BillboardService : Billboard.Board.BoardBase { IHostEnvironment _env; public BillboardService(IHostEnvironment env) { _env = env; } public override async Task ShowMessage(Google.Protobuf.WellKnownTypes.Empty _, IServerStreamWriter responseStream, ServerCallContext context) { using var tokenSource = new CancellationTokenSource(); CancellationToken token = tokenSource.Token; var meta = new MessageReply(); var metaData = new ImageMetaData(); metaData.FileName = "kitty.jpg"; metaData.MimeType = "image/jpeg"; meta.MetaData = metaData; await responseStream.WriteAsync(meta); var kitty = Path.Combine(_env.ContentRootPath, "kitty.jpg"); using var reader = new FileStream(kitty, FileMode.Open); int chunkSize = 100; int bytesRead; byte[] buffer = new byte[chunkSize]; int position = 0; long length = reader.Length; while ((bytesRead = await reader.ReadAsync(buffer, 0, buffer.Length)) > 0) { var reply = new MessageReply(); var chunk = new ImageChunk(); chunk.Length = bytesRead; chunk.Data = ByteString.CopyFrom(buffer); reply.Chunk = chunk; await responseStream.WriteAsync(reply); position += bytesRead; Console.WriteLine(position); } reader.Close(); Console.WriteLine("Done"); } } ================================================ FILE: projects/grpc/grpc-9/server/billboard.proto ================================================ syntax = "proto3"; package Billboard; import "google/protobuf/Empty.proto"; service Board { rpc ShowMessage (google.protobuf.Empty) returns (stream MessageReply) {} } message ImageMetaData { string mime_type = 1; string file_name = 2; } message ImageChunk { bytes data = 1; int32 length = 2; } message MessageReply { oneof image { ImageMetaData meta_data = 1; ImageChunk chunk = 2; } } ================================================ FILE: projects/grpc/grpc-9/server/grpc-server.csproj ================================================ net10.0 true preview all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/health-check/README.md ================================================ # Health Check (6) * [Health Check - Check URL](health-check-1) Show the simplest way to use health check functionality using `app.UseHealthChecks`. * [Health Check - Check URL - 2](health-check-2) Customize the message returned by `app.UseHealthChecks`. * [Health Check - Check URL - 3](health-check-3) Start implementing `IHealthCheck` to provide status information for the health check service. In this example, it will always return failure because we just throw an exception in the implementation. You will see how the health check handles an unhandled exception. * [Health Check - Check URL - 4](health-check-4) Implement a `IHealthCheck` that check the status of a url. This is the first version of the check so it is primitive but it is also easier to understand. We will go to a more sophisticated multi check in the next examples. * [Health Check - Check URL - 5](health-check-5) Similar to the previous example except that now there are two checks, one fails and one successful. * [Health Check - Check URL - 6](health-check-6) Similar to the previous example except that one of the check reports "Degraded" status by using `context.Registration.FailureStatus = HealthStatus.Degraded;`. dotnet8 ================================================ FILE: projects/health-check/build.bat ================================================ dotnet build health-check-1 dotnet build health-check-2 dotnet build health-check-3 dotnet build health-check-4 dotnet build health-check-5 dotnet build health-check-6 ================================================ FILE: projects/health-check/build.sh ================================================ #!/bin/bash dotnet build health-check-1 dotnet build health-check-2 dotnet build health-check-3 dotnet build health-check-4 dotnet build health-check-5 dotnet build health-check-6 ================================================ FILE: projects/health-check/health-check-1/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddHealthChecks(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapHealthChecks("/WhatsUp"); app.MapDefaultControllerRoute(); app.Run(); public class HomeController : Controller { public ActionResult Index() { return new ContentResult { Content = @"

    Health Check

    The health check service checks on this url /WhatsUp. ", ContentType = "text/html" }; } } ================================================ FILE: projects/health-check/health-check-1/health-check.csproj ================================================ net10.0 true preview ================================================ FILE: projects/health-check/health-check-2/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Diagnostics.HealthChecks; var builder = WebApplication.CreateBuilder(); builder.Services.AddHealthChecks(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapHealthChecks("/IsUp", new HealthCheckOptions { ResponseWriter = async (context, health) => { await context.Response.WriteAsync("Mucho Bien"); } }); app.MapDefaultControllerRoute(); app.Run(); public class HomeController : Controller { public ActionResult Index() { return new ContentResult { Content = @"

    Health Check - custom message

    The health check service checks on this url /isup. It will return `Mucho Bien` thanks to the customized health message. ", ContentType = "text/html" }; } } ================================================ FILE: projects/health-check/health-check-2/health-check-2.csproj ================================================ net10.0 true preview ================================================ FILE: projects/health-check/health-check-3/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Diagnostics.HealthChecks; var builder = WebApplication.CreateBuilder(); builder.Services.AddHealthChecks().AddCheck("Bad"); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapHealthChecks("/IsUp"); app.MapDefaultControllerRoute(); app.Run(); public class AlwaysBadHealthCheck : IHealthCheck { public Task CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); } } public class HomeController : Controller { public ActionResult Index() { return new ContentResult { Content = @"

    Health Check - Failed check

    This /IsUp always fails. ", ContentType = "text/html" }; } } ================================================ FILE: projects/health-check/health-check-3/health-check-3.csproj ================================================ net10.0 true preview ================================================ FILE: projects/health-check/health-check-4/Program.cs ================================================ using System.Net; using Microsoft.AspNetCore.Diagnostics.HealthChecks; using Microsoft.AspNetCore.Hosting.Server; using Microsoft.AspNetCore.Hosting.Server.Features; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Diagnostics.HealthChecks; var builder = WebApplication.CreateBuilder(); builder.Services.AddHttpContextAccessor(); builder.Services.AddHttpClient(); builder.Services.AddHealthChecks().AddCheck("HttpStatusCheck"); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapHealthChecks("/IsUp", new HealthCheckOptions { ResponseWriter = async (context, health) => { if (health.Status == HealthStatus.Healthy) await context.Response.WriteAsync("Everything is good"); else { foreach (var h in health.Entries) { await context.Response.WriteAsync($"{h.Key} {h.Value.Description}"); } } } }); app.MapDefaultControllerRoute(); app.Run(); public class HttpStatusCodeHealthCheck : IHealthCheck { readonly HttpClient _client; readonly IServer _server; public HttpStatusCodeHealthCheck(HttpClient client, IServer server) { _client = client; _server = server; } public async Task CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default(CancellationToken)) { try { var serverAddress = _server.Features.Get(); var localServer = serverAddress.Addresses.First(); var result = await _client.GetAsync(localServer + "/home/fakestatus/?statusCode=500"); if (result.StatusCode == HttpStatusCode.OK) return HealthCheckResult.Healthy("Everything is OK"); else return HealthCheckResult.Degraded($"Fails: Http Status returns {result.StatusCode}"); } catch (Exception ex) { return HealthCheckResult.Unhealthy($"Exception {ex.Message} : {ex.StackTrace}"); } } } public class HomeController : Controller { public ActionResult Index() { return new ContentResult { Content = @"

    Health Check - Failed/Success check

    This /IsUp always fails at the moment. If you want to see it works, change the following code
                        var result = await _client.GetAsync(localServer + ""/home/fakestatus/?statusCode=500"");
                    
    to
                        var result = await _client.GetAsync(localServer + ""/home/fakestatus/?statusCode=200"");
                    
    ", ContentType = "text/html" }; } public ActionResult FakeStatus(int statusCode) { return StatusCode(statusCode); } } ================================================ FILE: projects/health-check/health-check-4/health-check-4.csproj ================================================ net10.0 true preview ================================================ FILE: projects/health-check/health-check-5/Program.cs ================================================ using System.Net; using Microsoft.AspNetCore.Diagnostics.HealthChecks; using Microsoft.AspNetCore.Hosting.Server; using Microsoft.AspNetCore.Hosting.Server.Features; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Diagnostics.HealthChecks; var builder = WebApplication.CreateBuilder(); builder.Services.AddHttpContextAccessor(); builder.Services.AddHttpClient(); builder.Services.AddHttpClient(); builder.Services.AddSingleton().AddSingleton(); builder.Services.AddHealthChecks() .AddCheck("OK Status Check") .AddCheck("Error Status Check"); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapHealthChecks("/IsUp", new HealthCheckOptions { ResponseWriter = async (context, health) => { context.Response.Headers.Append("Content-Type", "text/plain"); if (health.Status == HealthStatus.Healthy) await context.Response.WriteAsync("Everything is good"); else { foreach (var h in health.Entries) { await context.Response.WriteAsync($"{h.Key} :: {h.Value.Description} \n"); } await context.Response.WriteAsync($"\n\n Overall Status: {health.Status}"); } } }); app.MapDefaultControllerRoute(); app.Run(); public class StatusOK { public short Status { get; set; } = StatusCodes.Status200OK; } public class StatusInternalServerError { public short Status { get; set; } = StatusCodes.Status500InternalServerError; } public abstract class HttpStatusCodeHealthCheck : IHealthCheck { readonly HttpClient _client; readonly IServer _server; readonly short _statusCode; public HttpStatusCodeHealthCheck(HttpClient client, IServer server, short statusCode) { _client = client; _server = server; _statusCode = statusCode; } public async Task CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default(CancellationToken)) { try { var serverAddress = _server.Features.Get(); var localServer = serverAddress.Addresses.First(); var result = await _client.GetAsync(localServer + $"/home/fakestatus/?statusCode={_statusCode}"); if (result.StatusCode == HttpStatusCode.OK) return HealthCheckResult.Healthy("Everything is OK"); else return HealthCheckResult.Degraded($"Fails: Http Status returns {result.StatusCode}"); } catch (Exception ex) { return HealthCheckResult.Unhealthy($"Exception {ex.Message} : {ex.StackTrace}"); } } } public class OKHttpStatusCodeHealthCheck : HttpStatusCodeHealthCheck { public OKHttpStatusCodeHealthCheck(HttpClient client, IServer server, StatusOK status) : base(client, server, status.Status) { } } public class ErrorHttpStatusCodeHealthCheck : HttpStatusCodeHealthCheck { public ErrorHttpStatusCodeHealthCheck(HttpClient client, IServer server, StatusInternalServerError status) : base(client, server, status.Status) { } } public class HomeController : Controller { public ActionResult Index() { return new ContentResult { Content = @"

    Health Check - Failed/Success check

    Check Status ", ContentType = "text/html" }; } public ActionResult FakeStatus(int statusCode) { return StatusCode(statusCode); } } ================================================ FILE: projects/health-check/health-check-5/health-check-5.csproj ================================================ net10.0 true preview ================================================ FILE: projects/health-check/health-check-6/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Diagnostics.HealthChecks; using Microsoft.Extensions.Diagnostics.HealthChecks; using System.Net; using Microsoft.AspNetCore.Hosting.Server.Features; using Microsoft.AspNetCore.Hosting.Server; var builder = WebApplication.CreateBuilder(); builder.Services.AddHttpContextAccessor(); builder.Services.AddHttpClient(); builder.Services.AddHttpClient(); builder.Services.AddSingleton().AddSingleton(); builder.Services.AddHealthChecks() .AddCheck("OK Status Check") .AddCheck("Error Status 2 Check"); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapHealthChecks("/IsUp", new HealthCheckOptions { ResponseWriter = async (context, health) => { context.Response.Headers.Append("Content-Type", "text/plain"); if (health.Status == HealthStatus.Healthy) await context.Response.WriteAsync("Everything is good"); else { foreach (var h in health.Entries) { await context.Response.WriteAsync($"Key = {h.Key} :: Description = {h.Value.Description} :: Status = {h.Value.Status} \n"); } await context.Response.WriteAsync($"\n\n Overall Status: {health.Status}"); } } }); app.MapDefaultControllerRoute(); app.Run(); public class StatusOK { public short Status { get; set; } = StatusCodes.Status200OK; } public class StatusBadRequest { public short Status { get; set; } = StatusCodes.Status400BadRequest; } public abstract class HttpStatusCodeHealthCheck : IHealthCheck { readonly HttpClient _client; readonly IServer _server; readonly short _statusCode; public HttpStatusCodeHealthCheck(HttpClient client, IServer server, short statusCode) { _client = client; _server = server; _statusCode = statusCode; } public async Task CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default(CancellationToken)) { try { var serverAddress = _server.Features.Get(); var localServer = serverAddress.Addresses.First(); var result = await _client.GetAsync(localServer + $"/home/fakestatus/?statusCode={_statusCode}"); if (result.StatusCode == HttpStatusCode.OK) return HealthCheckResult.Healthy("Everything is OK"); else if (result.StatusCode == HttpStatusCode.BadRequest) { context.Registration.FailureStatus = HealthStatus.Degraded; return HealthCheckResult.Degraded($"Degraded: Http Status returns {result.StatusCode}"); } else { return HealthCheckResult.Unhealthy($"Fails: Http Status returns {result.StatusCode}"); } } catch (Exception ex) { return HealthCheckResult.Unhealthy($"Exception {ex.Message} : {ex.StackTrace}"); } } } public class OKHttpStatusCodeHealthCheck : HttpStatusCodeHealthCheck { public OKHttpStatusCodeHealthCheck(HttpClient client, IServer server, StatusOK status) : base(client, server, status.Status) { } } public class Error2HttpStatusCodeHealthCheck : HttpStatusCodeHealthCheck { public Error2HttpStatusCodeHealthCheck(HttpClient client, IServer server, StatusBadRequest status) : base(client, server, status.Status) { } } public class HomeController : Controller { public ActionResult Index() { return new ContentResult { Content = @"

    Health Check - Failed/Success check

    Check Status ", ContentType = "text/html" }; } public ActionResult FakeStatus(int statusCode) { return StatusCode(statusCode); } } ================================================ FILE: projects/health-check/health-check-6/health-check-6.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/Readme.md ================================================ # HTMX (40) This example shows various examples on how to integrate [HTMX](https://htmx.org/) with ASP.NET Core Minimal API. We will be using [HTMX Nuget Package](https://www.nuget.org/packages/Htmx). We are using [HTMX 2](https://htmx.org/) in all samples. ## AJAX * [all-verbs](all-verbs) This example shows all HTTP Verbs supported by HTMX. * [query-string](query-string) This example shows how to access query string in all the HTTP Verbs supported by HTMX. * [hx-include](hx-include) This example shows how to pass parameters to all supported HTTP Verbs by targeting a single `input` element using `hx-include`. * [hx-vals](hx-vals) This example shows how to pass parameters (in JSON format) to all supported HTTP Verbs using `hx-vals` . * [hx-headers](hx-headers) This example shows how to pass values via HTTP headers using `hx-headers`. * [hx-confirm](hx-confirm) This example shows how to use `hx-confirm` to ask for user confirmation before making a request * [hx-prompt](hx-prompt) This example shows how to use `hx-prompt` to ask user for a single input before making a request * [hx-push-url](push-url) This example shows how to use `hx-push-url` to push url into browser location history. * [hx-select](select) This example shows how to use `hx-select` to pick up element from the server response. * [hx-select 2](select-2) This example shows how to use `hx-select` with multiple selectors to pick up multiple elements from server response. * [hx-select-oob](select-oob) This example shows how to use `hx-select-oob` to pick up a specific element from server response and swap it with element of the same selection criteria. * [hx-indicator](hx-indicator) This example demonstrates on how to show spinner indicator while waiting for AJAX requests to complete. ## Core Attributes * [hx-trigger-load](trigger-load) This example shows how to use HTMX `hx-trigger="load"` functionality. It will call a given url when the element is loaded. * [hx-trigger-load-2](trigger-load-2) This example shows how to use HTMX `hx-trigger="load"` with `delay:1s` event modifier and `hx-swap="outerHTML"` functionalities to create self updating element. * [hx-trigger-once](trigger-once) This example shows how to use HTMX event modifier `once` that only enable trigger to be activated one time. * [hx-trigger-every](trigger-every) This example shows how to use HTMX `hx-trigger="every"` that activate request every specified time (polling). * [hx-swap](swap) This example shows how to control where the response from the server will be swapped related to the target using `hx-swap`. * [hx-swap-oob](swap-2) This example shows how to use `hx-swap-oob` to enable out of band swap. It is used from the server response. * [hx-target](target) This example shows how to specify the target element where the response from the server will be swapped using `hx-target`. * [hx-boost](boost) This example shows how to use `hx-boost` to transform HTML links and form to use AJAX request and target `body` tag. * [hx-on](hx-on) This example shows how to use `hx-on` to respond to HTML events. * [hx-on-2](hx-on-2) This example shows how to use `hx-on` to respond to HTMX events. * [hx-replace-url](hx-replace-url) This example shows how to use `hx-replace-url` to replace the current browser location history. * [hx-replace-url-2](hx-replace-url) This example shows how to use `hx-replace-url` with a custom url to replace the current browser location history. * [hx-sync-queue](hx-sync-queue) This example shows how to use `hx-sync` to synchronize AJAX requests from a single element with option `queue first`, `queue last`, and `queue all`. * [hx-preserve](hx-preserve) This example shows how to use `hx-preserve` to keep an element unchanged during HTML swap. ## Form * [form](form) This example shows a very simple example on how to handle form submission using HTMX's `hx-post`. * [form-2](form-2) This example shows a more complex example on how to handle form submission using HTMX's `hx-post`. ## Modals * [modal-bootstrap](modal-bootstrap) This example shows how to show a modal dialog using HTMX and Bootstrap 5. ## Events * [htmx-config-request](htmx-config-request) This examples shows how to listen to `htmx:configRequest` event to modify parameters to be sent to the server. * [htmx-response-error](htmx-response-error) This examples shows how to listen to `htmx:responseError` event to obtain AJAX response error information. * [htmx-after-on-load](htmx-after-on-load) This example shows how to listen to `htmx:afterOnLoad` event, which is trigerred after the AJAX response has finished. ## Response Headers * [HX-Replace-Url](header-hx-replace-url) This example demonstrates how to use `HX-Replace-Url` response header to replace the current url at the browser history. * [HX-Trigger](header-hx-trigger) This example demonstrates how to use `HX-Trigger` response header to trigger a custom event at the browser. * [HX-Trigger-2](header-hx-trigger-2) This example demonstrates how to use `HX-Trigger` response header to trigger a custom event with JSON payload at the browser. * [HX-Trigger-3](header-hx-trigger-3) This example demonstrates how to use `HX-Trigger` response header to trigger multiple custom events at the browser. * [HX-Trigger-4](header-hx-trigger-4) This example demonstrates how to use `HX-Trigger` response header to trigger multiple custom events with JSON payloads at the browser. * [HX-Retarget](header-hx-retarget) This example demonstrates how to use `HX-Retarget` response header to override request's target and retarget to an element at the client using CSS selector. * [HX-Refresh](header-hx-refresh) This example demonstrates how to use `HX-Refresh` response header to instruct the web browser to refresh the page. * [HX-Reselect](header-hx-reselect) This example demonstrates how to use `HX-Reselect` response header to select which part of the response to swap using CSS selector and override `hx-select` in on the triggering element. ================================================ FILE: projects/htmx/all-verbs/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/all-verbs/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    All verbs supported in HTMX

    Click on the below links to see the response

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.IsHtmx() is false) return Results.Content(""); if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/", (HttpRequest request) => { return Results.Content($"GET => {DateTime.UtcNow}"); }); htmx.MapPost("/", (HttpRequest request) => { return Results.Content($"POST => {DateTime.UtcNow}"); }); htmx.MapDelete("/", (HttpRequest request) => { return Results.Content($"DELETE => {DateTime.UtcNow}"); }); htmx.MapPut("/", (HttpRequest request) => { return Results.Content($"PUT => {DateTime.UtcNow}"); }); htmx.MapPatch("/", (HttpRequest request) => { return Results.Content($"PATCH => {DateTime.UtcNow}"); }); app.Run(); ================================================ FILE: projects/htmx/all-verbs/README.md ================================================ # All HTTP Verbs supported by HTMX This example shows all the HTTP Verbs supported by HTMX ([doc](https://htmx.org/docs/#ajax)) ```html
    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    ``` ================================================ FILE: projects/htmx/all-verbs/all-verbs.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/all-verbs/all-verbs.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "all-verbs", "all-verbs.csproj", "{5769ACAC-842E-461E-BD5C-0F99F8C44B39}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {5769ACAC-842E-461E-BD5C-0F99F8C44B39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5769ACAC-842E-461E-BD5C-0F99F8C44B39}.Debug|Any CPU.Build.0 = Debug|Any CPU {5769ACAC-842E-461E-BD5C-0F99F8C44B39}.Release|Any CPU.ActiveCfg = Release|Any CPU {5769ACAC-842E-461E-BD5C-0F99F8C44B39}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {5F61E629-C920-4C16-9369-DEBD03434FB4} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/boost/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/boost/Program.cs ================================================ using Htmx; var app = WebApplication.Create(); app.MapGet("/", () => { var html = """ hx-boost

    hx-boost

    """; return Results.Content(html, "text/html"); }); app.MapGet("/htmx/{key}", (HttpRequest request, string key) => { if (request.IsHtmx() is false) return Results.Content(""); return key switch { "one" => Results.Content( $"""

    ONE

    """), "two" => Results.Content( $"""

    TWO

    """), _ => Results.Content("") }; }); app.Run(); ================================================ FILE: projects/htmx/boost/README.md ================================================ # HTMX hx-boost This example shows how to use `hx-boost` attribute [doc](https://htmx.org/attributes/hx-boost/). `hx-boost` make links and form tags to issue AJAX request and target the response to `body` tag. ```html ``` ================================================ FILE: projects/htmx/boost/boost.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/boost/boost.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "boost", "boost.csproj", "{B5ADE241-5FAC-4F89-953A-A61B2F6A83F1}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {B5ADE241-5FAC-4F89-953A-A61B2F6A83F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B5ADE241-5FAC-4F89-953A-A61B2F6A83F1}.Debug|Any CPU.Build.0 = Debug|Any CPU {B5ADE241-5FAC-4F89-953A-A61B2F6A83F1}.Release|Any CPU.ActiveCfg = Release|Any CPU {B5ADE241-5FAC-4F89-953A-A61B2F6A83F1}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BDCDB4ED-31A2-432B-81D3-51E2E2EDC2F8} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/form/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/form/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; WebApplication.Create(); var builder= WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, IAntiforgery antiforgery) => { var token = antiforgery.GetAndStoreTokens(context); var html = $"""

    Simple Form

    """; return Results.Content(html, "text/html"); }); app.MapPost("/simple", (HttpRequest request, [FromForm] Input i) => { if (request.IsHtmx() is false) return Results.Content(""); return Results.Content($"""
    Your data `{i.Name}` has been processed.
    """); }); app.Run(); class Input { public string Name { get; set; } = string.Empty; } ================================================ FILE: projects/htmx/form/README.md ================================================ # Processing form with HTMX hx-post This example shows the simplest way to handle form in HTMX using `hx-post`. ```html
    ``` ================================================ FILE: projects/htmx/form/form.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/form/form.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "form", "form.csproj", "{13C5884D-73B5-4302-93D3-C8801A867A78}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {13C5884D-73B5-4302-93D3-C8801A867A78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {13C5884D-73B5-4302-93D3-C8801A867A78}.Debug|Any CPU.Build.0 = Debug|Any CPU {13C5884D-73B5-4302-93D3-C8801A867A78}.Release|Any CPU.ActiveCfg = Release|Any CPU {13C5884D-73B5-4302-93D3-C8801A867A78}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {0E3BF668-CE45-4DE7-8FC0-CCC060C46AB9} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/form-2/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/form-2/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; WebApplication.Create(); var builder= WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, IAntiforgery antiforgery) => { var token = antiforgery.GetAndStoreTokens(context); var html = $"""

    Simple Form

    Preferred Transportation
    """; return Results.Content(html, "text/html"); }); app.MapPost("/simple", (HttpRequest request, [FromForm] Input i) => { if (request.IsHtmx() is false) return Results.Content(""); return Results.Content($"""
    Your data has been processed.
    Name Value
    Name {i.Name}
    Bio {i.Bio}
    Gender {i.Gender}
    Is Employed {i.IsEmployed}
    Transportation {i.Transportation}
    """); }); app.Run(); class Input { public string Name { get; set; } = string.Empty; public string Bio { get; set;} = string.Empty; public string Gender { get; set;} = string.Empty; public bool IsEmployed { get; set; } public string Transportation { get; set; } = string.Empty; } ================================================ FILE: projects/htmx/form-2/README.md ================================================ # Processing form with HTMX hx-post This example to handle form with more input in HTMX using `hx-post` ================================================ FILE: projects/htmx/form-2/form-2.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/form-2/form-2.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "form-2", "form-2.csproj", "{81F8B85A-18EB-4799-8941-16E6FB226CD0}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {81F8B85A-18EB-4799-8941-16E6FB226CD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {81F8B85A-18EB-4799-8941-16E6FB226CD0}.Debug|Any CPU.Build.0 = Debug|Any CPU {81F8B85A-18EB-4799-8941-16E6FB226CD0}.Release|Any CPU.ActiveCfg = Release|Any CPU {81F8B85A-18EB-4799-8941-16E6FB226CD0}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {3CF94AB5-0C6E-46E9-8D5F-70454A525BA6} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/header-hx-refresh/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/header-hx-refresh/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    HX-Refresh

    Click on the below links. This page will be refreshed. Check the date changes {{ DateTime.Now }}

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.IsHtmx() is false) return Results.Content(""); if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.Refresh(); }); return Results.Content($"GET => {DateTime.UtcNow}"); }); htmx.MapPost("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.Refresh(); }); return Results.Content($"POST => {DateTime.UtcNow}"); }); htmx.MapDelete("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.Refresh(); }); return Results.Content($"DELETE => {DateTime.UtcNow}"); }); htmx.MapPut("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.Refresh(); }); return Results.Content($"PUT => {DateTime.UtcNow}"); }); htmx.MapPatch("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.Refresh(); }); return Results.Content($"PATCH => {DateTime.UtcNow}"); }); app.Run(); ================================================ FILE: projects/htmx/header-hx-refresh/README.md ================================================ # HX-Refresh Response Header This example demonstrates the usage of `HX-Refresh` response header to instruct the web browser to refresh the page ([doc](https://htmx.org/reference/#response_headers)). We are using the nice utilities provided by the excellent [Htmx](https://www.nuget.org/packages/Htmx) package. ```csharp htmx.MapGet("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.Refresh(); }); return Results.Content($"GET => {DateTime.UtcNow}"); }); ``` ================================================ FILE: projects/htmx/header-hx-refresh/header-hx-refresh.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/header-hx-replace-url/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/header-hx-replace-url/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    HX-Replace-Url

    Click on the below links to see the response. Don't forget to check your browser url.

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.IsHtmx() is false) return Results.Content(""); if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.ReplaceUrl("/get"); }); return Results.Content($"GET => {DateTime.UtcNow}"); }); htmx.MapPost("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.ReplaceUrl("/post"); }); return Results.Content($"POST => {DateTime.UtcNow}"); }); htmx.MapDelete("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.ReplaceUrl("/delete"); }); return Results.Content($"DELETE => {DateTime.UtcNow}"); }); htmx.MapPut("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.ReplaceUrl("/put"); }); return Results.Content($"PUT => {DateTime.UtcNow}"); }); htmx.MapPatch("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.ReplaceUrl("/patch"); }); return Results.Content($"PATCH => {DateTime.UtcNow}"); }); app.Run(); ================================================ FILE: projects/htmx/header-hx-replace-url/README.md ================================================ # HX-Replace-Url Response Header This example demonstrates the usage of `HX-Replace-Url` response header to replace the current url at the browser history ([doc](https://htmx.org/headers/hx-replace-url/)). We are using the nice utilities provided by the excellent [Htmx](https://www.nuget.org/packages/Htmx) package. ```csharp htmx.MapGet("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.ReplaceUrl("/get"); }); return Results.Content($"GET => {DateTime.UtcNow}"); }); ``` ================================================ FILE: projects/htmx/header-hx-replace-url/header-hx-replace-url.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/header-hx-replace-url/header-hx-replace-url.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "header-hx-replace-url", "header-hx-replace-url.csproj", "{440ECC17-73DA-4411-AF1B-1C800D7E4EEE}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {440ECC17-73DA-4411-AF1B-1C800D7E4EEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {440ECC17-73DA-4411-AF1B-1C800D7E4EEE}.Debug|Any CPU.Build.0 = Debug|Any CPU {440ECC17-73DA-4411-AF1B-1C800D7E4EEE}.Release|Any CPU.ActiveCfg = Release|Any CPU {440ECC17-73DA-4411-AF1B-1C800D7E4EEE}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {6E86A573-55C1-449B-BA37-76946582856B} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/header-hx-reselect/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/header-hx-reselect/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    HX-Reselect header

    Click on the below links to see the response

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.IsHtmx() is false) return Results.Content(""); if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.Reselect("#get"); }); return Results.Content($""" GET => {DateTime.UtcNow}
    RESELECTED GET => {DateTime.UtcNow}
    """); }); htmx.MapPost("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.Reselect("#post"); }); return Results.Content($""" POST => {DateTime.UtcNow}
    RESELECTED POST => {DateTime.UtcNow}
    """); }); htmx.MapDelete("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.Reselect("#delete"); }); return Results.Content($""" DELETE => {DateTime.UtcNow}
    RESELECTED DELETE => {DateTime.UtcNow}
    """); }); htmx.MapPut("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.Reselect("#put"); }); return Results.Content($""" PUT => {DateTime.UtcNow}
    RESELECTED PUT => {DateTime.UtcNow}
    """); }); htmx.MapPatch("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.Reselect("#patch"); }); return Results.Content($""" PATCH => {DateTime.UtcNow}
    RESELECTED PATCH => {DateTime.UtcNow}
    """); }); app.Run(); ================================================ FILE: projects/htmx/header-hx-reselect/README.md ================================================ # Header HX-Reselect This example shows how to use HTTP Response `HX-Reselect` to select which part of the response to swap using CSS selector and override `hx-select` in on the triggering element. ([doc](https://htmx.org/reference/#response_headers)) ```csharp htmx.MapGet("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.Reselect("#get"); }); return Results.Content($""" GET => {DateTime.UtcNow}
    RESELECTED GET => {DateTime.UtcNow}
    """); }); ``` ================================================ FILE: projects/htmx/header-hx-reselect/header-hx-reselect.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/header-hx-retarget/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/header-hx-retarget/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    HX-Trigger

    Click on the below links to see the response.

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.IsHtmx() is false) return Results.Content(""); if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.Retarget("#get"); }); return Results.Content($"GET => {DateTime.UtcNow}"); }); htmx.MapPost("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.Retarget("#post"); }); return Results.Content($"POST => {DateTime.UtcNow}"); }); htmx.MapDelete("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.Retarget("#delete"); }); return Results.Content($"DELETE => {DateTime.UtcNow}"); }); htmx.MapPut("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.Retarget("#put"); }); return Results.Content($"PUT => {DateTime.UtcNow}"); }); htmx.MapPatch("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.Retarget("#patch"); }); return Results.Content($"PATCH => {DateTime.UtcNow}"); }); app.Run(); ================================================ FILE: projects/htmx/header-hx-retarget/README.md ================================================ # HX-Trigger Response Header This example demonstrates the usage of `HX-Retarget` response header to retarget an element (overriding the request) at the client using CSS selector([doc](https://htmx.org/reference/#events)). We are using the nice utilities provided by the excellent [Htmx](https://www.nuget.org/packages/Htmx) package. ```csharp htmx.MapGet("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.Retarget("#get"); }); return Results.Content($"GET => {DateTime.UtcNow}"); }); ``` ================================================ FILE: projects/htmx/header-hx-retarget/header-hx-retarget.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/header-hx-retarget/header-hx-retarget.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "header-hx-retarget", "header-hx-retarget.csproj", "{06FE4C32-287F-4D1E-95B4-A02BA2461805}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {06FE4C32-287F-4D1E-95B4-A02BA2461805}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {06FE4C32-287F-4D1E-95B4-A02BA2461805}.Debug|Any CPU.Build.0 = Debug|Any CPU {06FE4C32-287F-4D1E-95B4-A02BA2461805}.Release|Any CPU.ActiveCfg = Release|Any CPU {06FE4C32-287F-4D1E-95B4-A02BA2461805}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {68AF0B39-A20D-4C64-AF4F-708CF9A97A87} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/header-hx-trigger/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/header-hx-trigger/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    HX-Trigger

    Click on the below links to see the response.

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.IsHtmx() is false) return Results.Content(""); if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.WithTrigger("show-me"); }); return Results.Content($"GET => {DateTime.UtcNow}"); }); htmx.MapPost("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.WithTrigger("show-me"); }); return Results.Content($"POST => {DateTime.UtcNow}"); }); htmx.MapDelete("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.WithTrigger("show-me"); }); return Results.Content($"DELETE => {DateTime.UtcNow}"); }); htmx.MapPut("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.WithTrigger("show-me"); }); return Results.Content($"PUT => {DateTime.UtcNow}"); }); htmx.MapPatch("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.WithTrigger("show-me"); }); return Results.Content($"PATCH => {DateTime.UtcNow}"); }); app.Run(); ================================================ FILE: projects/htmx/header-hx-trigger/README.md ================================================ # HX-Trigger Response Header This example demonstrates the usage of `HX-Trigger` response header to emit custom events at the client([doc](https://htmx.org/headers/hx-trigger/)). We are using the nice utilities provided by the excellent [Htmx](https://www.nuget.org/packages/Htmx) package. ```csharp htmx.MapGet("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.WithTrigger("show-me"); }); return Results.Content($"GET => {DateTime.UtcNow}"); }); ``` ================================================ FILE: projects/htmx/header-hx-trigger/header-hx-trigger.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/header-hx-trigger/header-hx-trigger.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "header-hx-trigger", "header-hx-trigger.csproj", "{C97E8BEC-FD19-4726-8EE8-E4D8062E0A3D}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {C97E8BEC-FD19-4726-8EE8-E4D8062E0A3D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C97E8BEC-FD19-4726-8EE8-E4D8062E0A3D}.Debug|Any CPU.Build.0 = Debug|Any CPU {C97E8BEC-FD19-4726-8EE8-E4D8062E0A3D}.Release|Any CPU.ActiveCfg = Release|Any CPU {C97E8BEC-FD19-4726-8EE8-E4D8062E0A3D}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BB439578-82BE-40CC-B2D6-B1875C02EE98} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/header-hx-trigger-2/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/header-hx-trigger-2/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    HX-Trigger

    Click on the below links to see the response.

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.IsHtmx() is false) return Results.Content(""); if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.WithTrigger("show-me", new { message = "GET request" }); }); return Results.Content($"GET => {DateTime.UtcNow}"); }); htmx.MapPost("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.WithTrigger("show-me", new { message = "POST request" }); }); return Results.Content($"POST => {DateTime.UtcNow}"); }); htmx.MapDelete("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.WithTrigger("show-me", new { message = "DELETE request" }); }); return Results.Content($"DELETE => {DateTime.UtcNow}"); }); htmx.MapPut("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.WithTrigger("show-me", new { message = "PUT request" }); }); return Results.Content($"PUT => {DateTime.UtcNow}"); }); htmx.MapPatch("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.WithTrigger("show-me", new { message = "PATCH request" }); }); return Results.Content($"PATCH => {DateTime.UtcNow}"); }); app.Run(); ================================================ FILE: projects/htmx/header-hx-trigger-2/README.md ================================================ # HX-Trigger Response Header with JSON payload This example demonstrates the usage of `HX-Trigger` response header to emit custom events with JSON payload at the client([doc](https://htmx.org/headers/hx-trigger/)). We are using the nice utilities provided by the excellent [Htmx](https://www.nuget.org/packages/Htmx) package. ```csharp htmx.MapGet("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.WithTrigger("show-me", new { message = "GET request" }); }); return Results.Content($"GET => {DateTime.UtcNow}"); }); ``` ================================================ FILE: projects/htmx/header-hx-trigger-2/header-hx-trigger-2.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/header-hx-trigger-2/header-hx-trigger-2.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "header-hx-trigger-2", "header-hx-trigger-2.csproj", "{A156188D-B2EB-4287-BCBB-18F172DAD7CB}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {A156188D-B2EB-4287-BCBB-18F172DAD7CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A156188D-B2EB-4287-BCBB-18F172DAD7CB}.Debug|Any CPU.Build.0 = Debug|Any CPU {A156188D-B2EB-4287-BCBB-18F172DAD7CB}.Release|Any CPU.ActiveCfg = Release|Any CPU {A156188D-B2EB-4287-BCBB-18F172DAD7CB}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BB9EBD12-9613-423B-8586-FAFF6B28005A} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/header-hx-trigger-3/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/header-hx-trigger-3/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    HX-Trigger

    Click on the below links to see the response.

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.IsHtmx() is false) return Results.Content(""); if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.WithTrigger("show-me, show-you"); }); return Results.Content($"GET => {DateTime.UtcNow}"); }); htmx.MapPost("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.WithTrigger("show-me, show-you"); }); return Results.Content($"POST => {DateTime.UtcNow}"); }); htmx.MapDelete("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.WithTrigger("show-me, show-you"); }); return Results.Content($"DELETE => {DateTime.UtcNow}"); }); htmx.MapPut("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.WithTrigger("show-me, show-you"); }); return Results.Content($"PUT => {DateTime.UtcNow}"); }); htmx.MapPatch("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.WithTrigger("show-me, show-you"); }); return Results.Content($"PATCH => {DateTime.UtcNow}"); }); app.Run(); ================================================ FILE: projects/htmx/header-hx-trigger-3/README.md ================================================ # HX-Trigger Response Header This example demonstrates the usage of `HX-Trigger` response header to emit multiple custom events at the client([doc](https://htmx.org/headers/hx-trigger/)). We are using the nice utilities provided by the excellent [Htmx](https://www.nuget.org/packages/Htmx) package. ```csharp htmx.MapGet("/", (HttpRequest request, HttpResponse response) => { response.Htmx(x => { x.WithTrigger("show-me, show-you"); }); return Results.Content($"GET => {DateTime.UtcNow}"); }); ``` ================================================ FILE: projects/htmx/header-hx-trigger-3/header-hx-trigger-3.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/header-hx-trigger-3/header-hx-trigger-3.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "header-hx-trigger-3", "header-hx-trigger-3.csproj", "{6C84FFC6-DB7F-452D-894D-317CE6E26CB5}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {6C84FFC6-DB7F-452D-894D-317CE6E26CB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6C84FFC6-DB7F-452D-894D-317CE6E26CB5}.Debug|Any CPU.Build.0 = Debug|Any CPU {6C84FFC6-DB7F-452D-894D-317CE6E26CB5}.Release|Any CPU.ActiveCfg = Release|Any CPU {6C84FFC6-DB7F-452D-894D-317CE6E26CB5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {02E046AF-9591-4C85-BC3E-60F6092E29D8} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/header-hx-trigger-4/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/header-hx-trigger-4/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; using System.Text.Json; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    HX-Trigger

    Click on the below links to see the response.

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.IsHtmx() is false) return Results.Content(""); if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/", (HttpRequest request, HttpResponse response) => { var showMe = JsonSerializer.Serialize(new { message = "GET from show-me" }); var showYou = JsonSerializer.Serialize(new { message = "GET from show-you" }); response.Headers.Append("HX-Trigger", $$$"""{"show-me": {{{showMe}}}, "show-you": {{{showYou}}} }"""); return Results.Content($"GET => {DateTime.UtcNow}"); }); htmx.MapPost("/", (HttpRequest request, HttpResponse response) => { var showMe = JsonSerializer.Serialize(new { message = "POST from show-me" }); var showYou = JsonSerializer.Serialize(new { message = "POST from show-you" }); response.Headers.Append("HX-Trigger", $$$"""{"show-me": {{{showMe}}}, "show-you": {{{showYou}}} }"""); return Results.Content($"POST => {DateTime.UtcNow}"); }); htmx.MapDelete("/", (HttpRequest request, HttpResponse response) => { var showMe = JsonSerializer.Serialize(new { message = "DELETE from show-me" }); var showYou = JsonSerializer.Serialize(new { message = "DELETE from show-you" }); response.Headers.Append("HX-Trigger", $$$"""{"show-me": {{{showMe}}}, "show-you": {{{showYou}}} }"""); return Results.Content($"DELETE => {DateTime.UtcNow}"); }); htmx.MapPut("/", (HttpRequest request, HttpResponse response) => { var showMe = JsonSerializer.Serialize(new { message = "PUT from show-me" }); var showYou = JsonSerializer.Serialize(new { message = "PUT from show-you" }); response.Headers.Append("HX-Trigger", $$$"""{"show-me": {{{showMe}}}, "show-you": {{{showYou}}} }"""); return Results.Content($"PUT => {DateTime.UtcNow}"); }); htmx.MapPatch("/", (HttpRequest request, HttpResponse response) => { var showMe = JsonSerializer.Serialize(new { message = "PATCH from show-me" }); var showYou = JsonSerializer.Serialize(new { message = "PATCH from show-you" }); response.Headers.Append("HX-Trigger", $$$"""{"show-me": {{{showMe}}}, "show-you": {{{showYou}}} }"""); return Results.Content($"PATCH => {DateTime.UtcNow}"); }); app.Run(); ================================================ FILE: projects/htmx/header-hx-trigger-4/README.md ================================================ # HX-Trigger Response Header This example demonstrates the usage of `HX-Trigger` response header to emit multiple custom events with JSON payload at the client([doc](https://htmx.org/headers/hx-trigger/)). [Htmx](https://www.nuget.org/packages/Htmx) package doesn't support this construct so we have to build the `HX-Trigger` response manually. ```csharp htmx.MapGet("/", (HttpRequest request, HttpResponse response) => { var showMe = JsonSerializer.Serialize(new { message = "GET from show-me" }); var showYou = JsonSerializer.Serialize(new { message = "GET from show-you" }); response.Headers.Append("HX-Trigger", $$$"""{"show-me": {{{showMe}}}, "show-you": {{{showYou}}} }"""); return Results.Content($"GET => {DateTime.UtcNow}"); }); ``` ================================================ FILE: projects/htmx/header-hx-trigger-4/header-hx-trigger-4.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/header-hx-trigger-4/header-hx-trigger-4.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "header-hx-trigger-4", "header-hx-trigger-4.csproj", "{12E9C364-9310-4453-9943-B583DEED08D4}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {12E9C364-9310-4453-9943-B583DEED08D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {12E9C364-9310-4453-9943-B583DEED08D4}.Debug|Any CPU.Build.0 = Debug|Any CPU {12E9C364-9310-4453-9943-B583DEED08D4}.Release|Any CPU.ActiveCfg = Release|Any CPU {12E9C364-9310-4453-9943-B583DEED08D4}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {8353F27C-1554-4B4F-89FD-4D6FDE9C757D} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/htmx-after-on-load/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/htmx-after-on-load/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    htmx:afterOnLoad

    Click on the below links to see the response

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/", (HttpRequest request) => { if (request.IsHtmx() is false) return Results.Content(""); return Results.Content($"GET => {DateTime.UtcNow}"); }); htmx.MapPost("/", (HttpRequest request) => { if (request.IsHtmx() is false) return Results.Content(""); return Results.Content($"POST => {DateTime.UtcNow}"); }); htmx.MapDelete("/", (HttpRequest request) => { if (request.IsHtmx() is false) return Results.Content(""); return Results.Content($"DELETE => {DateTime.UtcNow}"); }); htmx.MapPut("/", (HttpRequest request) => { if (request.IsHtmx() is false) return Results.Content(""); return Results.Content($"PUT => {DateTime.UtcNow}"); }); htmx.MapPatch("/", (HttpRequest request) => { if (request.IsHtmx() is false) return Results.Content(""); return Results.Content($"PATCH => {DateTime.UtcNow}"); }); app.Run(); ================================================ FILE: projects/htmx/htmx-after-on-load/README.md ================================================ # Listen to htmx:afterOnLoad event This example shows how to listen to `htmx:afterOnLoad` ([doc](https://htmx.org/events/#htmx:afterOnLoad)). > This event is triggered after an AJAX onload has finished. Note that this does not mean that the content has been swapped or settled yet, only that the request has finished. ```js document.addEventListener("htmx:afterOnLoad", (evt) => { let li = evt.detail.elt; alert(li.id); }); ``` ================================================ FILE: projects/htmx/htmx-after-on-load/htmx-after-on-load.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/htmx-config-request/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/htmx-config-request/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    Passing parameters via htmx:configRequest

    Click on the below links to see the response

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/", (HttpRequest request) => { if (request.IsHtmx() is false) return Results.Content(""); return Results.Content($"GET => {DateTime.UtcNow} + {request.Query["Name"]}"); }); htmx.MapPost("/", (HttpRequest request) => { if (request.IsHtmx() is false) return Results.Content(""); return Results.Content($"POST => {DateTime.UtcNow} + {request.Form["Name"]}"); }); htmx.MapDelete("/", (HttpRequest request) => { if (request.IsHtmx() is false) return Results.Content(""); return Results.Content($"DELETE => {DateTime.UtcNow} + {request.Query["Name"]}"); }); htmx.MapPut("/", (HttpRequest request) => { if (request.IsHtmx() is false) return Results.Content(""); return Results.Content($"PUT => {DateTime.UtcNow} + {request.Form["Name"]}"); }); htmx.MapPatch("/", (HttpRequest request) => { if (request.IsHtmx() is false) return Results.Content(""); return Results.Content($"PATCH => {DateTime.UtcNow} + {request.Form["Name"]}"); }); app.Run(); ================================================ FILE: projects/htmx/htmx-config-request/README.md ================================================ # Listen to htmx:configRequest event to send parameters This example shows how to listen to `htmx:configRequest` to pass parameters to all supported HTTP verbs ([doc](https://htmx.org/events/#htmx:configRequest)) > This event is triggered after htmx has collected parameters for inclusion in the request. It can be used to include or update the parameters that htmx will send ```js document.addEventListener("htmx:configRequest", (evt) => { evt.detail.parameters["Name"] = "John Doe"; }); ``` On `GET` and `DELETE`, the parameters are accessible via `Request.Query`. For the rest, you can access the parameters via `Request.Form`. ================================================ FILE: projects/htmx/htmx-config-request/htmx-config-request.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/htmx-config-request/htmx-config-request.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "htmx-config-request", "htmx-config-request.csproj", "{6D65BCA1-66CF-4105-8D9A-146394D38F79}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {6D65BCA1-66CF-4105-8D9A-146394D38F79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6D65BCA1-66CF-4105-8D9A-146394D38F79}.Debug|Any CPU.Build.0 = Debug|Any CPU {6D65BCA1-66CF-4105-8D9A-146394D38F79}.Release|Any CPU.ActiveCfg = Release|Any CPU {6D65BCA1-66CF-4105-8D9A-146394D38F79}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {25CD0839-E518-4165-A331-2F725E0ECABA} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/htmx-response-error/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/htmx-response-error/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    Examine AJAX error response via htmx:responseError

    Click on the below links to see the response

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/", (HttpRequest request) => { if (request.IsHtmx() is false) return Results.Content(""); return Results.BadRequest(); }); htmx.MapPost("/", (HttpRequest request) => { if (request.IsHtmx() is false) return Results.Content(""); return Results.BadRequest(); }); htmx.MapDelete("/", (HttpRequest request) => { if (request.IsHtmx() is false) return Results.Content(""); return Results.BadRequest(); }); htmx.MapPut("/", (HttpRequest request) => { if (request.IsHtmx() is false) return Results.Content(""); return Results.BadRequest(); }); htmx.MapPatch("/", (HttpRequest request) => { if (request.IsHtmx() is false) return Results.Content(""); return Results.BadRequest(); }); app.Run(); ================================================ FILE: projects/htmx/htmx-response-error/README.md ================================================ # Listen to htmx:responseError event to obtain AJAX error message This example shows how to listen to `htmx:responseError` to obtain AJAX error message from the server([doc](https://htmx.org/events/#htmx:responseError)) ```js document.addEventListener("htmx:responseError", (evt) => { console.log("event", evt); alert(evt.detail.xhr.status + ":" + evt.detail.xhr.statusText); }); ``` ================================================ FILE: projects/htmx/htmx-response-error/htmx-response-error.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/htmx-response-error/htmx-response-error.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "htmx-response-error", "htmx-response-error.csproj", "{BA0D9995-5891-41EC-A35B-1B59C0D7FEC9}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {BA0D9995-5891-41EC-A35B-1B59C0D7FEC9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BA0D9995-5891-41EC-A35B-1B59C0D7FEC9}.Debug|Any CPU.Build.0 = Debug|Any CPU {BA0D9995-5891-41EC-A35B-1B59C0D7FEC9}.Release|Any CPU.ActiveCfg = Release|Any CPU {BA0D9995-5891-41EC-A35B-1B59C0D7FEC9}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {587204FC-73AA-4A05-B8FC-4DDC9DFCB28A} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/hx-confirm/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/hx-confirm/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    Asking for confirmation

    Click on the below links to see the response

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.IsHtmx() is false) return Results.Content(""); if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/", (HttpRequest request) => { return Results.Content($"GET => {DateTime.UtcNow}"); }); htmx.MapPost("/", (HttpRequest request) => { return Results.Content($"POST => {DateTime.UtcNow}"); }); htmx.MapDelete("/", (HttpRequest request) => { return Results.Content($"DELETE => {DateTime.UtcNow}"); }); htmx.MapPut("/", (HttpRequest request) => { return Results.Content($"PUT => {DateTime.UtcNow}"); }); htmx.MapPatch("/", (HttpRequest request) => { return Results.Content($"PATCH => {DateTime.UtcNow}"); }); app.Run(); ================================================ FILE: projects/htmx/hx-confirm/README.md ================================================ # Ask for confirmation using hx-confirm This example shows how to use `hx-confirm` to ask for user confirmation before making a request ([doc](https://htmx.org/docs/#confirming)) ```html
    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    ``` You can see here that `hx-confirm`, like many HTMX attributes, support inheritance. The HTML above has the same functional equivalent of the HTML below ```html
    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    ``` ================================================ FILE: projects/htmx/hx-confirm/hx-confirm.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/hx-confirm/hx-confirm.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "hx-confirm", "hx-confirm.csproj", "{C85561BC-9292-4FF5-BF56-7F4C5BE7BFAA}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {C85561BC-9292-4FF5-BF56-7F4C5BE7BFAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C85561BC-9292-4FF5-BF56-7F4C5BE7BFAA}.Debug|Any CPU.Build.0 = Debug|Any CPU {C85561BC-9292-4FF5-BF56-7F4C5BE7BFAA}.Release|Any CPU.ActiveCfg = Release|Any CPU {C85561BC-9292-4FF5-BF56-7F4C5BE7BFAA}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {7CDFA1B6-9C19-4493-BA2B-A5375F2C46F6} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/hx-headers/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/hx-headers/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    hx-headers

    Click on the below links to see the response

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.IsHtmx() is false) return Results.Content(""); if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/", (HttpRequest request) => { return Results.Content($"GET => {DateTime.UtcNow} + {request.Headers["X-NAME"]}"); }); htmx.MapPost("/", (HttpRequest request) => { return Results.Content($"POST => {DateTime.UtcNow} + {request.Headers["X-NAME"]}"); }); htmx.MapDelete("/", (HttpRequest request) => { return Results.Content($"DELETE => {DateTime.UtcNow} + {request.Headers["X-NAME"]}"); }); htmx.MapPut("/", (HttpRequest request) => { return Results.Content($"PUT => {DateTime.UtcNow} + {request.Headers["X-NAME"]}"); }); htmx.MapPatch("/", (HttpRequest request) => { return Results.Content($"PATCH => {DateTime.UtcNow} + {request.Headers["X-NAME"]}"); }); app.Run(); ================================================ FILE: projects/htmx/hx-headers/README.md ================================================ # Use hx-headers to pass values via HTTP headers This example shows how to use `hx-headers` to pass values via HTTP headers ([doc](https://htmx.org/attributes/hx-headers/)) ```html
    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    ``` ================================================ FILE: projects/htmx/hx-headers/hx-headers.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/hx-headers/hx-headers.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "hx-headers", "hx-headers.csproj", "{4C4D88E4-FF79-4008-AB86-60EDDD398ADD}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {4C4D88E4-FF79-4008-AB86-60EDDD398ADD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4C4D88E4-FF79-4008-AB86-60EDDD398ADD}.Debug|Any CPU.Build.0 = Debug|Any CPU {4C4D88E4-FF79-4008-AB86-60EDDD398ADD}.Release|Any CPU.ActiveCfg = Release|Any CPU {4C4D88E4-FF79-4008-AB86-60EDDD398ADD}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {3EDD06C7-B943-4643-AB57-D539FDD5A618} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/hx-include/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/hx-include/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    Passing parameters to all HTTP verbs via hx-include targeting an input form

    Click on the below links to see the response

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE

    Please fill this input



    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.IsHtmx() is false) return Results.Content(""); if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/", (HttpRequest request) => { return Results.Content($"GET => {DateTime.UtcNow} + {request.Query["Name"]}"); }); htmx.MapPost("/", (HttpRequest request) => { return Results.Content($"POST => {DateTime.UtcNow} + {request.Form["Name"]}"); }); htmx.MapDelete("/", (HttpRequest request) => { return Results.Content($"DELETE => {DateTime.UtcNow} + {request.Query["Name"]}"); }); htmx.MapPut("/", (HttpRequest request) => { return Results.Content($"PUT => {DateTime.UtcNow} + {request.Form["Name"]}"); }); htmx.MapPatch("/", (HttpRequest request) => { return Results.Content($"PATCH => {DateTime.UtcNow} + {request.Form["Name"]}"); }); app.Run(); ================================================ FILE: projects/htmx/hx-include/README.md ================================================ # Using hx-include on all HTTP verbs This example shows how to use `hx-include` targeting an input form to pass parameters to all supported HTTP verbs ([doc](https://htmx.org/attributes/hx-include/)) ```html
    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    ``` On `GET` and `DELETE`, the parameters are accessible via `Request.Query`. For the rest, you can access the parameters via `Request.Form`. ================================================ FILE: projects/htmx/hx-include/hx-include.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/hx-include/hx-include.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "hx-include", "hx-include.csproj", "{D2C5E35E-D55E-4364-AEF5-242118F81B27}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {D2C5E35E-D55E-4364-AEF5-242118F81B27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D2C5E35E-D55E-4364-AEF5-242118F81B27}.Debug|Any CPU.Build.0 = Debug|Any CPU {D2C5E35E-D55E-4364-AEF5-242118F81B27}.Release|Any CPU.ActiveCfg = Release|Any CPU {D2C5E35E-D55E-4364-AEF5-242118F81B27}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {2E8BFA0C-0057-4FE4-81AD-FA98D17320B6} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/hx-indicator/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/hx-indicator/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseStaticFiles(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    hx-spinner

    Click on the below links to see request spinner and the response

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.IsHtmx() is false) return Results.Content(""); if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/", async (HttpRequest request) => { await Task.Delay(5000); return Results.Content($"GET => {DateTime.UtcNow}"); }); htmx.MapPost("/", async (HttpRequest request) => { await Task.Delay(5000); return Results.Content($"POST => {DateTime.UtcNow}"); }); htmx.MapDelete("/", async (HttpRequest request) => { await Task.Delay(5000); return Results.Content($"DELETE => {DateTime.UtcNow}"); }); htmx.MapPut("/", async (HttpRequest request) => { await Task.Delay(5000); return Results.Content($"PUT => {DateTime.UtcNow}"); }); htmx.MapPatch("/", async (HttpRequest request) => { await Task.Delay(5000); return Results.Content($"PATCH => {DateTime.UtcNow}"); }); app.Run(); ================================================ FILE: projects/htmx/hx-indicator/README.md ================================================ # hx-indicator This example demonstrats how to show spinning indicators waiting for AJAX requests to complete([doc](https://htmx.org/attributes/hx-indicator/)) ```html
    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    ``` ================================================ FILE: projects/htmx/hx-indicator/hx-indicator.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/hx-indicator/hx-indicator.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "hx-indicator", "hx-indicator.csproj", "{4F9C02FB-1998-4739-B16E-F6C7D1BB7FF0}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {4F9C02FB-1998-4739-B16E-F6C7D1BB7FF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4F9C02FB-1998-4739-B16E-F6C7D1BB7FF0}.Debug|Any CPU.Build.0 = Debug|Any CPU {4F9C02FB-1998-4739-B16E-F6C7D1BB7FF0}.Release|Any CPU.ActiveCfg = Release|Any CPU {4F9C02FB-1998-4739-B16E-F6C7D1BB7FF0}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {C21F30CF-CA72-4B90-B6CD-E406F58A05AA} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/hx-on/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/hx-on/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    hx-on

    This is the complete list of HTMX events you can respond to using hx-on

    • hx-on:click
    • hx-on:mouseover
    • hx-on:dblclick
    """; return Results.Content(html, "text/html"); }); app.Run(); ================================================ FILE: projects/htmx/hx-on/README.md ================================================ # Using hx-on to handle events This example shows how to use `hx-on` to handle HTML Events using inline JavaScript code ([doc](https://htmx.org/attributes/hx-on/)) ```html
    • hx-on:click
    • hx-on:mouseover
    • hx-on:dblclick
    ``` `hx-on` handles [HTML Events](https://www.w3schools.com/tags/ref_eventattributes.asp) and [HTMX Events](https://htmx.org/reference/#events). ================================================ FILE: projects/htmx/hx-on/hx-on.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/hx-on/hx-on.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "hx-on", "hx-on.csproj", "{BD42C38B-604C-41B0-83C5-B64D08AA58AC}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {BD42C38B-604C-41B0-83C5-B64D08AA58AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BD42C38B-604C-41B0-83C5-B64D08AA58AC}.Debug|Any CPU.Build.0 = Debug|Any CPU {BD42C38B-604C-41B0-83C5-B64D08AA58AC}.Release|Any CPU.ActiveCfg = Release|Any CPU {BD42C38B-604C-41B0-83C5-B64D08AA58AC}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {8DBA2F7B-B399-4D04-95A6-1C7F52B226E4} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/hx-on-2/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/hx-on-2/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    All verbs supported in HTMX

    Click on the below links to see the response

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.IsHtmx() is false) return Results.Content(""); if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/", (HttpRequest request) => { return Results.Content($"GET => {DateTime.UtcNow}"); }); htmx.MapPost("/", (HttpRequest request) => { return Results.Content($"POST => {DateTime.UtcNow}"); }); htmx.MapDelete("/", (HttpRequest request) => { return Results.Content($"DELETE => {DateTime.UtcNow}"); }); htmx.MapPut("/", (HttpRequest request) => { return Results.Content($"PUT => {DateTime.UtcNow}"); }); htmx.MapPatch("/", (HttpRequest request) => { return Results.Content($"PATCH => {DateTime.UtcNow}"); }); app.Run(); ================================================ FILE: projects/htmx/hx-on-2/README.md ================================================ # Using hx-on to handle HTMX events This example shows how to use `hx-on` to handle HTMX events before AJAX request submitted and after AJAX request finished. ```html
    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    ``` `hx-on` handles [`htmx:beforeRequest`](https://htmx.org/events/#htmx:beforeRequest) and [`htmx:afterRequest`](https://htmx.org/events/#htmx:afterRequest) ================================================ FILE: projects/htmx/hx-on-2/all-verbs.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/hx-on-2/all-verbs.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "all-verbs", "all-verbs.csproj", "{5769ACAC-842E-461E-BD5C-0F99F8C44B39}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {5769ACAC-842E-461E-BD5C-0F99F8C44B39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5769ACAC-842E-461E-BD5C-0F99F8C44B39}.Debug|Any CPU.Build.0 = Debug|Any CPU {5769ACAC-842E-461E-BD5C-0F99F8C44B39}.Release|Any CPU.ActiveCfg = Release|Any CPU {5769ACAC-842E-461E-BD5C-0F99F8C44B39}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {5F61E629-C920-4C16-9369-DEBD03434FB4} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/hx-preserve/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/hx-preserve/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    hx-preserve

    Click on the below links to see the response

    • GET Preserved
    • POST Preserved
    • PUT Preserved
    • PATCH Preserved
    • DELETE Preserved
    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.IsHtmx() is false) return Results.Content(""); if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/", (HttpRequest request) => { return Results.Content($"""
    GET => {DateTime.UtcNow}"""); }); htmx.MapPost("/", (HttpRequest request) => { return Results.Content($"""
    POST => {DateTime.UtcNow}"""); }); htmx.MapDelete("/", (HttpRequest request) => { return Results.Content($"""
    DELETE => {DateTime.UtcNow}"""); }); htmx.MapPut("/", (HttpRequest request) => { return Results.Content($"""
    PUT => {DateTime.UtcNow}"""); }); htmx.MapPatch("/", (HttpRequest request) => { return Results.Content($"""
    PATCH => {DateTime.UtcNow}"""); }); app.Run(); ================================================ FILE: projects/htmx/hx-preserve/README.md ================================================ # hx-preserve This example how to use `hx-preserve` to keep an element unchanged during HTMX swap([doc](https://htmx.org/attributes/hx-preserve/)) ```html
    • GET Preserved
    • POST Preserved
    • PUT Preserved
    • PATCH Preserved
    • DELETE Preserved
    ``` ================================================ FILE: projects/htmx/hx-preserve/hx-preserve.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/hx-preserve/hx-preserve.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "hx-preserve", "hx-preserve.csproj", "{12250A32-5441-418F-8876-4ACE6AA6E7FC}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {12250A32-5441-418F-8876-4ACE6AA6E7FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {12250A32-5441-418F-8876-4ACE6AA6E7FC}.Debug|Any CPU.Build.0 = Debug|Any CPU {12250A32-5441-418F-8876-4ACE6AA6E7FC}.Release|Any CPU.ActiveCfg = Release|Any CPU {12250A32-5441-418F-8876-4ACE6AA6E7FC}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {E26EBD7D-FC09-4103-8B1B-3064E58F8845} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/hx-prompt/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/hx-prompt/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    Asking for prompt

    Click on the below links to see the response

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.IsHtmx() is false) return Results.Content(""); if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/", (HttpRequest request) => { request.IsHtmx(out var headers); return Results.Content($"GET => {DateTime.UtcNow} hello {headers.Prompt}"); }); htmx.MapPost("/", (HttpRequest request) => { request.IsHtmx(out var headers); return Results.Content($"POST => {DateTime.UtcNow} hello {headers.Prompt}"); }); htmx.MapDelete("/", (HttpRequest request) => { request.IsHtmx(out var headers); return Results.Content($"DELETE => {DateTime.UtcNow} hello {headers.Prompt}"); }); htmx.MapPut("/", (HttpRequest request) => { request.IsHtmx(out var headers); return Results.Content($"PUT => {DateTime.UtcNow} hello {headers.Prompt}"); }); htmx.MapPatch("/", (HttpRequest request) => { request.IsHtmx(out var headers); return Results.Content($"PATCH => {DateTime.UtcNow} hello {headers.Prompt}"); }); app.Run(); ================================================ FILE: projects/htmx/hx-prompt/README.md ================================================ # Ask for a prompt using hx-prompt This example shows how to use `hx-prompt` to ask a user for an input before making a request ([doc](https://htmx.org/attributes/hx-prompt/)) ```html
    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    ``` You can see here that `hx-prompt`, like many HTMX attributes, support inheritance. The HTML above has the same functional equivalent of the HTML below ```html
    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    ``` ================================================ FILE: projects/htmx/hx-prompt/hx-prompt.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/hx-prompt/hx-prompt.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "hx-prompt", "hx-prompt.csproj", "{CED5ACD5-68AE-4817-A185-CFBC1E2CD91C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {CED5ACD5-68AE-4817-A185-CFBC1E2CD91C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CED5ACD5-68AE-4817-A185-CFBC1E2CD91C}.Debug|Any CPU.Build.0 = Debug|Any CPU {CED5ACD5-68AE-4817-A185-CFBC1E2CD91C}.Release|Any CPU.ActiveCfg = Release|Any CPU {CED5ACD5-68AE-4817-A185-CFBC1E2CD91C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {05A9DDF3-4C38-461C-9A22-EE4EC78334D0} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/hx-replace-url/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/hx-replace-url/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    hx-replace-url

    Click on the below links to see the response and check the url change at the browser top bar

    Without hx-replace-url

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE

    With hx-replace-url

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.IsHtmx() is false) return Results.Content(""); if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/get", (HttpRequest request) => { return Results.Content($"GET => {DateTime.UtcNow}"); }); htmx.MapPost("/post", (HttpRequest request) => { return Results.Content($"POST => {DateTime.UtcNow}"); }); htmx.MapDelete("/delete", (HttpRequest request) => { return Results.Content($"DELETE => {DateTime.UtcNow}"); }); htmx.MapPut("/put", (HttpRequest request) => { return Results.Content($"PUT => {DateTime.UtcNow}"); }); htmx.MapPatch("/patch", (HttpRequest request) => { return Results.Content($"PATCH => {DateTime.UtcNow}"); }); app.Run(); ================================================ FILE: projects/htmx/hx-replace-url/README.md ================================================ # hx-replace-url This example shows how to use `hx-replace-url` to replace the current url of the browser location ([doc](https://htmx.org/attributes/hx-replace-url/)) ```html
    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    ``` ================================================ FILE: projects/htmx/hx-replace-url/hx-replace-url.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/hx-replace-url/hx-replace-url.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "hx-replace-url", "hx-replace-url.csproj", "{BE06A0CB-DE29-4BE0-9AC3-234587C89D66}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {BE06A0CB-DE29-4BE0-9AC3-234587C89D66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BE06A0CB-DE29-4BE0-9AC3-234587C89D66}.Debug|Any CPU.Build.0 = Debug|Any CPU {BE06A0CB-DE29-4BE0-9AC3-234587C89D66}.Release|Any CPU.ActiveCfg = Release|Any CPU {BE06A0CB-DE29-4BE0-9AC3-234587C89D66}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {366457EA-225D-469B-A936-5E819769B0BA} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/hx-replace-url-2/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/hx-replace-url-2/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    hx-replace-url

    Click on the below links to see the response and check the url change at the browser top bar

    With hx-replace-url="true"

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE

    With hx-replace-url="{other url}"

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.IsHtmx() is false) return Results.Content(""); if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/get", (HttpRequest request) => { return Results.Content($"GET => {DateTime.UtcNow}"); }); htmx.MapPost("/post", (HttpRequest request) => { return Results.Content($"POST => {DateTime.UtcNow}"); }); htmx.MapDelete("/delete", (HttpRequest request) => { return Results.Content($"DELETE => {DateTime.UtcNow}"); }); htmx.MapPut("/put", (HttpRequest request) => { return Results.Content($"PUT => {DateTime.UtcNow}"); }); htmx.MapPatch("/patch", (HttpRequest request) => { return Results.Content($"PATCH => {DateTime.UtcNow}"); }); app.Run(); ================================================ FILE: projects/htmx/hx-replace-url-2/README.md ================================================ # hx-replace-url This example shows how to use `hx-replace-url` with custom url to replace the current url of the browser location ([doc](https://htmx.org/attributes/hx-replace-url/)) ```html
    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    ``` ================================================ FILE: projects/htmx/hx-replace-url-2/hx-replace-url-2.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/hx-replace-url-2/hx-replace-url-2.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "hx-replace-url-2", "hx-replace-url-2.csproj", "{E5B295F9-F4FA-4B05-A698-F19C06FE1DDD}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {E5B295F9-F4FA-4B05-A698-F19C06FE1DDD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E5B295F9-F4FA-4B05-A698-F19C06FE1DDD}.Debug|Any CPU.Build.0 = Debug|Any CPU {E5B295F9-F4FA-4B05-A698-F19C06FE1DDD}.Release|Any CPU.ActiveCfg = Release|Any CPU {E5B295F9-F4FA-4B05-A698-F19C06FE1DDD}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {75A900D5-A55C-4138-87BF-44944696A65A} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/hx-sync-queue/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/hx-sync-queue/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    All verbs supported in HTMX

    Click on the below links to see the response

    hx-sync="this:queue first"

    queue first: Processes only the first click in a rapid succession.

    hx-sync="this:queue last"

    queue last: Processes the first click and the last click in a rapid succession, dropping intermediate ones.

    hx-sync="this:queue all"

    queue all: Processes every click, but with a delay.

    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.IsHtmx() is false) return Results.Content(""); if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/", async (HttpRequest request) => { await Task.Delay(2000); return Results.Content($"GET => {DateTime.UtcNow} =>" + request.Query["count"]); }); htmx.MapPost("/", async (HttpRequest request) => { await Task.Delay(2000); return Results.Content($"POST => {DateTime.UtcNow} =>" + request.Form["count"]); }); htmx.MapDelete("/", async (HttpRequest request) => { await Task.Delay(2000); return Results.Content($"DELETE => {DateTime.UtcNow} => " + request.Query["count"]); }); htmx.MapPut("/", async (HttpRequest request) => { await Task.Delay(2000); return Results.Content($"PUT => {DateTime.UtcNow} => " + request.Form["count"]); }); htmx.MapPatch("/", async (HttpRequest request) => { await Task.Delay(2000); return Results.Content($"PATCH => {DateTime.UtcNow} => " + request.Form["count"]); }); app.Run(); ================================================ FILE: projects/htmx/hx-sync-queue/README.md ================================================ # hx-sync queue This example demonstrates on how to use `hx-sync` attribute to sync a single element with optional behavior `queue first`, `queue last`, and `queue all`. ([doc](https://htmx.org/attributes/hx-sync/)) ================================================ FILE: projects/htmx/hx-sync-queue/hx-sync-queue.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/hx-vals/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/hx-vals/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    Passing parameters to all HTTP verbs via hx-vals

    Click on the below links to see the response

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.IsHtmx() is false) return Results.Content(""); if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/", (HttpRequest request) => { return Results.Content($"GET => {DateTime.UtcNow} + {request.Query["Name"]}"); }); htmx.MapPost("/", (HttpRequest request) => { return Results.Content($"POST => {DateTime.UtcNow} + {request.Form["Name"]}"); }); htmx.MapDelete("/", (HttpRequest request) => { return Results.Content($"DELETE => {DateTime.UtcNow} + {request.Query["Name"]}"); }); htmx.MapPut("/", (HttpRequest request) => { return Results.Content($"PUT => {DateTime.UtcNow} + {request.Form["Name"]}"); }); htmx.MapPatch("/", (HttpRequest request) => { return Results.Content($"PATCH => {DateTime.UtcNow} + {request.Form["Name"]}"); }); app.Run(); ================================================ FILE: projects/htmx/hx-vals/README.md ================================================ # Using hx-vals on all HTTP verbs This example shows how to use `hx-vals` to pass parameters to all supported HTTP verbs ([doc](https://htmx.org/attributes/hx-vals/)) ```html
    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    ``` On `GET` and `DELETE`, the parameters are accessible via `Request.Query`. For the rest, you can access the parameters via `Request.Form`. ================================================ FILE: projects/htmx/hx-vals/hx-vals.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/modal-bootstrap/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/modal-bootstrap/Program.cs ================================================ using Htmx; var app = WebApplication.Create(); app.MapGet("/", () => { var html = """

    Modal in Bootstrap 5

    A port from this HTMX example

    """; return Results.Content(html, "text/html"); }); app.MapGet("/htmx", (HttpRequest request, string key) => { if (request.IsHtmx() is false) return Results.Content(""); return Results.Content( $$""" """); }); app.Run(); ================================================ FILE: projects/htmx/modal-bootstrap/README.md ================================================ # Show modal dialog with Bootstrap 5 This example shows how to show a modal dialog using HTMX and Bootstrap 5. It is a port of this [HTMX sample](https://htmx.org/examples/modal-bootstrap/). ================================================ FILE: projects/htmx/modal-bootstrap/modal-bootstrap.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/modal-bootstrap/modal-bootstrap.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "modal-bootstrap", "modal-bootstrap.csproj", "{B833BEC0-40FC-44DE-9E37-3CCFF4C75271}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {B833BEC0-40FC-44DE-9E37-3CCFF4C75271}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B833BEC0-40FC-44DE-9E37-3CCFF4C75271}.Debug|Any CPU.Build.0 = Debug|Any CPU {B833BEC0-40FC-44DE-9E37-3CCFF4C75271}.Release|Any CPU.ActiveCfg = Release|Any CPU {B833BEC0-40FC-44DE-9E37-3CCFF4C75271}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {E67DDC0E-B94F-4F47-A240-CEBD79C1020F} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/push-url/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/push-url/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    Push URL to browser history

    Click on the links below to see the URL change in the browser address bar.

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.IsHtmx() is false) return Results.Content(""); if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/get", (HttpRequest request) => { return Results.Content($"GET => {DateTime.UtcNow}"); }); htmx.MapPost("/post", (HttpRequest request) => { return Results.Content($"POST => {DateTime.UtcNow}"); }); htmx.MapDelete("/delete", (HttpRequest request) => { return Results.Content($"DELETE => {DateTime.UtcNow}"); }); htmx.MapPut("/put", (HttpRequest request) => { return Results.Content($"PUT => {DateTime.UtcNow}"); }); htmx.MapPatch("/patch", (HttpRequest request) => { return Results.Content($"PATCH => {DateTime.UtcNow}"); }); app.Run(); ================================================ FILE: projects/htmx/push-url/README.md ================================================ # hx-push-url attribute This example shows how to use `hx-push-url` to push a URL into the browser location history ([doc](https://htmx.org/attributes/hx-push-url/)) ```html
    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    ``` ================================================ FILE: projects/htmx/push-url/push-url.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/push-url/push-url.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "push-url", "push-url.csproj", "{8B829D9F-E9BC-4257-A5E0-A55CF79AB067}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {8B829D9F-E9BC-4257-A5E0-A55CF79AB067}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8B829D9F-E9BC-4257-A5E0-A55CF79AB067}.Debug|Any CPU.Build.0 = Debug|Any CPU {8B829D9F-E9BC-4257-A5E0-A55CF79AB067}.Release|Any CPU.ActiveCfg = Release|Any CPU {8B829D9F-E9BC-4257-A5E0-A55CF79AB067}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {17475240-E5ED-4809-A2B4-25A5FDDAA3BD} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/query-string/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/query-string/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    Accessing query string in HTMX

    Click on the below links to see the response

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.IsHtmx() is false) return Results.Content(""); if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/", (HttpRequest request) => { return Results.Content($"GET => {DateTime.UtcNow} => {request.Query["name"]}"); }); htmx.MapPost("/", (HttpRequest request) => { return Results.Content($"POST => {DateTime.UtcNow} => {request.Query["name"]}"); }); htmx.MapDelete("/", (HttpRequest request) => { return Results.Content($"DELETE => {DateTime.UtcNow} => {request.Query["name"]}"); }); htmx.MapPut("/", (HttpRequest request) => { return Results.Content($"PUT => {DateTime.UtcNow} => {request.Query["name"]}"); }); htmx.MapPatch("/", (HttpRequest request) => { return Results.Content($"PATCH => {DateTime.UtcNow} => {request.Query["name"]}"); }); app.Run(); ================================================ FILE: projects/htmx/query-string/README.md ================================================ # Accessing query string in HTMX request You can pass values via query string in all HTTP verbs supported by HTMX. ```html
    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    ``` ================================================ FILE: projects/htmx/query-string/query-string.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/select/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/select/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    Select element from the server response

    Click on the below links to see the response

    Without hx-select

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE

    With hx-select

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.IsHtmx() is false) return Results.Content(""); if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/", (HttpRequest request) => { return Results.Content($""" This is the response
    GET => {DateTime.UtcNow}
    """); }); htmx.MapPost("/", (HttpRequest request) => { return Results.Content($""" This is the response
    POST => {DateTime.UtcNow}
    """); }); htmx.MapDelete("/", (HttpRequest request) => { return Results.Content($""" This is the response
    DELETE => {DateTime.UtcNow}
    """); }); htmx.MapPut("/", (HttpRequest request) => { return Results.Content($""" This is the response
    PUT => {DateTime.UtcNow}
    """); }); htmx.MapPatch("/", (HttpRequest request) => { return Results.Content($""" This is the response
    PATCH => {DateTime.UtcNow}
    """); }); app.Run(); ================================================ FILE: projects/htmx/select/README.md ================================================ # hx-select This example shows how to use `hx-select` to pick up specific element from server response ([doc](https://htmx.org/attributes/hx-select/)) ```html
    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    ``` ================================================ FILE: projects/htmx/select/select.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/select/select.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "select", "select.csproj", "{E90B311D-DC5B-4DA5-8FC9-E58C0A7EADE4}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {E90B311D-DC5B-4DA5-8FC9-E58C0A7EADE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E90B311D-DC5B-4DA5-8FC9-E58C0A7EADE4}.Debug|Any CPU.Build.0 = Debug|Any CPU {E90B311D-DC5B-4DA5-8FC9-E58C0A7EADE4}.Release|Any CPU.ActiveCfg = Release|Any CPU {E90B311D-DC5B-4DA5-8FC9-E58C0A7EADE4}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {42BA8835-D1E4-4A11-8D4F-77889EA24527} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/select-2/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/select-2/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    Select element from the server response

    Click on the below links to see the response

    Without hx-select

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE

    With hx-select

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.IsHtmx() is false) return Results.Content(""); if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/", (HttpRequest request) => { return Results.Content($""" This is the response
    GET => {DateTime.UtcNow}
    GET content via #result2
    """); }); htmx.MapPost("/", (HttpRequest request) => { return Results.Content($""" This is the response
    POST => {DateTime.UtcNow}
    POST content via .results class
    POST content via .results class
    """); }); htmx.MapDelete("/", (HttpRequest request) => { return Results.Content($""" This is the response
    DELETE => {DateTime.UtcNow}
    DELETE content via .results class
    """); }); htmx.MapPut("/", (HttpRequest request) => { return Results.Content($""" This is the response """); }); htmx.MapPatch("/", (HttpRequest request) => { return Results.Content($""" This is the response
    PATCH => {DateTime.UtcNow}
    PATCH content via #result2
    PATCH content via .results class
    """); }); app.Run(); ================================================ FILE: projects/htmx/select-2/README.md ================================================ # hx-select This example shows how to use `hx-select` with multiple selectors to pick up multiple elements from server response ([doc](https://htmx.org/attributes/hx-select/)) ```html
    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    ``` ================================================ FILE: projects/htmx/select-2/select.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/select-2/select.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "select", "select.csproj", "{E90B311D-DC5B-4DA5-8FC9-E58C0A7EADE4}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {E90B311D-DC5B-4DA5-8FC9-E58C0A7EADE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E90B311D-DC5B-4DA5-8FC9-E58C0A7EADE4}.Debug|Any CPU.Build.0 = Debug|Any CPU {E90B311D-DC5B-4DA5-8FC9-E58C0A7EADE4}.Release|Any CPU.ActiveCfg = Release|Any CPU {E90B311D-DC5B-4DA5-8FC9-E58C0A7EADE4}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {42BA8835-D1E4-4A11-8D4F-77889EA24527} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/select-oob/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/select-oob/Program.cs ================================================ using Htmx; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, [FromServices] IAntiforgery anti) => { var token = anti.GetAndStoreTokens(context); var html = $$"""

    Select element from the server response

    Click on the below links to see the response

    With hx-select

    • GET
    • POST
    • PUT
    • PATCH
    • DELETE

    Results

    GET


    POST


    PUT


    PATCH


    DELETE


    """; return Results.Content(html, "text/html"); }); var htmx = app.MapGroup("/htmx").AddEndpointFilter(async (context, next) => { if (context.HttpContext.Request.IsHtmx() is false) return Results.Content(""); if (context.HttpContext.Request.Method == "GET") return await next(context); await context.HttpContext.RequestServices.GetRequiredService()!.ValidateRequestAsync(context.HttpContext); return await next(context); }); htmx.MapGet("/", (HttpRequest request) => { return Results.Content($""" This is the response
    GET => {DateTime.UtcNow}
    GET content via #result2
    #result-get content
    """); }); htmx.MapPost("/", (HttpRequest request) => { return Results.Content($""" This is the response
    POST => {DateTime.UtcNow}
    POST content via .results class
    POST content via .results class
    #result-post content
    """); }); htmx.MapDelete("/", (HttpRequest request) => { return Results.Content($""" This is the response
    DELETE => {DateTime.UtcNow}
    DELETE content via .results class
    #result-delete content
    """); }); htmx.MapPut("/", (HttpRequest request) => { return Results.Content($""" This is the response
    #result-put content
    """); }); htmx.MapPatch("/", (HttpRequest request) => { return Results.Content($""" This is the response
    PATCH => {DateTime.UtcNow}
    PATCH content via #result2
    PATCH content via .results class
    #result-patch content
    """); }); app.Run(); ================================================ FILE: projects/htmx/select-oob/README.md ================================================ # hx-select-oob This example shows how to use `hx-select-oob` to pick up a specific element from server response and swap it with element of the same selection criteria ([doc](https://htmx.org/attributes/hx-select-oob/)) ```html
    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    ``` ================================================ FILE: projects/htmx/select-oob/select-oob.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/select-oob/select-oob.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "select-oob", "select-oob.csproj", "{44497EF1-B8AA-49AE-962B-EB0CD8A6B93C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {44497EF1-B8AA-49AE-962B-EB0CD8A6B93C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {44497EF1-B8AA-49AE-962B-EB0CD8A6B93C}.Debug|Any CPU.Build.0 = Debug|Any CPU {44497EF1-B8AA-49AE-962B-EB0CD8A6B93C}.Release|Any CPU.ActiveCfg = Release|Any CPU {44497EF1-B8AA-49AE-962B-EB0CD8A6B93C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {C8179F6F-2FD2-43BF-8978-6868C48253E9} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/swap/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/swap/Program.cs ================================================ using Htmx; var app = WebApplication.Create(); app.MapGet("/", () => { var html = """

    Various hx-swap options

    You can find the full documentation here

    innerHTML
    Click Me
    outerHTML
    Click Me
    textContent
    Click Me
    beforebegin
    Click Me
    afterbegin
    Click Me
    beforeend
    Click Me
    afterend
    Click Me
    delete
    Click Me
    none
    Click Me
    """; return Results.Content(html, "text/html"); }); app.MapGet("/htmx/{key}", (HttpRequest request, string key) => { if (request.IsHtmx() is false) return Results.Content(""); return key switch { "innerHtml" => Results.Content($"""Hello {DateTime.UtcNow}.

    Because this is hxSwap="innerHTML", you can keep clicking and the swap keeps working. Check the date.

    """), "outerHTML" => Results.Content($"""
    {DateTime.UtcNow}. Click stops working now because you replaced the element itself.
    """), "textContent" => Results.Content($"""
    {DateTime.UtcNow}. Everything is treated as text.
    """), "beforebegin" => Results.Content($"""
    {DateTime.UtcNow}. Click "Click Me".
    """), "afterbegin" => Results.Content($"""
    {DateTime.UtcNow}. You can click here
    """), "beforeend" => Results.Content($"""
    {DateTime.UtcNow}. You can click here.
    """), "afterend" => Results.Content($"""
    {DateTime.UtcNow}. Click "Click Me"
    """), _ => Results.Content("") }; }); app.Run(); ================================================ FILE: projects/htmx/swap/README.md ================================================ # HTMX hx-swap This example shows how to control where the response from the server will be swapped related to the target using `hx-swap` ([doc](https://htmx.org/attributes/hx-swap/)). ```html
    innerHTML
    Click Me
    outerHTML
    Click Me
    textContent
    Click Me
    beforebegin
    Click Me
    afterbegin
    Click Me
    beforeend
    Click Me
    afterend
    Click Me
    delete
    Click Me
    none
    Click Me
    ``` ================================================ FILE: projects/htmx/swap/swap.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/swap-2/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/swap-2/Program.cs ================================================ using Htmx; var app = WebApplication.Create(); app.MapGet("/", () => { var html = """

    hx-swap-oob for out of band swap

    You can find the full documentation here

    innerHTML
    Click Me
    This will be replaced once you click above
    """; return Results.Content(html, "text/html"); }); app.MapGet("/htmx/{key}", (HttpRequest request, string key) => { if (request.IsHtmx() is false) return Results.Content(""); return key switch { "innerHtml" => Results.Content($""" Hello {DateTime.UtcNow}.

    Because this is hxSwap="innerHTML", you can keep clicking and the swap keeps working. Check the date.

    New out of band message {DateTime.UtcNow}
    """), _ => Results.Content("") }; }); app.Run(); ================================================ FILE: projects/htmx/swap-2/README.md ================================================ # HTMX hx-swap-oob to perform out of band swap This example shows how to enable out of band swap using `hx-swap-oob` ([doc](https://htmx.org/docs/#oob_swaps)). The attribute is used in the response by the server. ```csharp return key switch { "innerHtml" => Results.Content($""" Hello {DateTime.UtcNow}.

    Because this is hxSwap="innerHTML", you can keep clicking and the swap keeps working. Check the date.

    New out of band message {DateTime.UtcNow}
    """), _ => Results.Content("") }; ``` ================================================ FILE: projects/htmx/swap-2/swap-2.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/swap-2/swap-2.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "swap-2", "swap-2.csproj", "{5286B386-4038-4A30-B51D-2B6829EE5DD1}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {5286B386-4038-4A30-B51D-2B6829EE5DD1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5286B386-4038-4A30-B51D-2B6829EE5DD1}.Debug|Any CPU.Build.0 = Debug|Any CPU {5286B386-4038-4A30-B51D-2B6829EE5DD1}.Release|Any CPU.ActiveCfg = Release|Any CPU {5286B386-4038-4A30-B51D-2B6829EE5DD1}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {DEFC7225-CEAC-4DC7-866C-35D2C4EDF2DC} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/target/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/target/Program.cs ================================================ using Htmx; var app = WebApplication.Create(); app.MapGet("/", () => { var html = """

    Various hx-target options

    You can find the full documentation here

    • this keyword
      Click Me
    • Tag Selector
      Click Me
    • Id Selector
      Click Me
    • Class Selector
      Click Me
    article tag
    div#message
    div.info
    """; return Results.Content(html, "text/html"); }); app.MapGet("/htmx/{key}", (HttpRequest request, string key) => { if (request.IsHtmx() is false) return Results.Content(""); return key switch { "this-keyword" => Results.Content($"""Hello {DateTime.UtcNow}.

    This content appears inside the element where hx-target attribute appears.

    """), "tag-selector" => Results.Content($"""Hello {DateTime.UtcNow}.

    This content appears inside the article tag.

    """), "id-selector" => Results.Content($"""Hello {DateTime.UtcNow}.

    This content appears inside a div with the matching id.

    """), "class-selector" => Results.Content($"""Hello {DateTime.UtcNow}.

    This content appears inside a div with the matching class.

    """), _ => Results.Content("") }; }); app.Run(); ================================================ FILE: projects/htmx/target/README.md ================================================ # HTMX hx-target This example shows how to specify the target element where the response from the server will be swapped using `hx-target` ([doc](https://htmx.org/docs/#targets)). ```html
    • this keyword
      Click Me
    • Tag Selector
      Click Me
    • Id Selector
      Click Me
    • Class Selector
      Click Me
    ``` ================================================ FILE: projects/htmx/target/target.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/target/target.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "target", "target.csproj", "{520425A0-9ECB-4E43-8621-87A18E2581D1}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {520425A0-9ECB-4E43-8621-87A18E2581D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {520425A0-9ECB-4E43-8621-87A18E2581D1}.Debug|Any CPU.Build.0 = Debug|Any CPU {520425A0-9ECB-4E43-8621-87A18E2581D1}.Release|Any CPU.ActiveCfg = Release|Any CPU {520425A0-9ECB-4E43-8621-87A18E2581D1}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {EE0023C7-3143-4114-AC78-3A825AC5AD60} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/trigger-every/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/trigger-every/Program.cs ================================================ using Htmx; var app = WebApplication.Create(); app.MapGet("/", () => { var html = """
    ..wait
    """; return Results.Content(html, "text/html"); }); app.MapGet("/htmx/", (HttpRequest request) => { if (request.IsHtmx() is false) return Results.Content(""); return Results.Content($"{DateTime.UtcNow}"); }); app.Run(); ================================================ FILE: projects/htmx/trigger-every/README.md ================================================ # HTMX polling using hx-trigger every This example shows `every` trigger that make request every x specified time([doc](https://htmx.org/docs/#polling)). ```html
    ..wait
    ``` ================================================ FILE: projects/htmx/trigger-every/trigger-every.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/trigger-every/trigger-every.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "trigger-every", "trigger-every.csproj", "{F6AFDD5E-AB62-481B-88A8-8624C5C8A3F6}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {F6AFDD5E-AB62-481B-88A8-8624C5C8A3F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F6AFDD5E-AB62-481B-88A8-8624C5C8A3F6}.Debug|Any CPU.Build.0 = Debug|Any CPU {F6AFDD5E-AB62-481B-88A8-8624C5C8A3F6}.Release|Any CPU.ActiveCfg = Release|Any CPU {F6AFDD5E-AB62-481B-88A8-8624C5C8A3F6}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {46A0146E-B699-4A08-94D5-881FF598E68E} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/trigger-load/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/trigger-load/Program.cs ================================================ using Htmx; var app = WebApplication.Create(); app.MapGet("/", () => { var html = """
    """; return Results.Content(html, "text/html"); }); app.MapGet("/htmx", (HttpRequest request) => { if (request.IsHtmx() is false) return Results.Content(""); return Results.Content("Hello world from HTMX"); }); app.Run(); ================================================ FILE: projects/htmx/trigger-load/Readme.md ================================================ # HTMX hx-trigger load This example shows `load` event trigger ([doc](https://htmx.org/docs/#special-events)). ```html
    ``` ================================================ FILE: projects/htmx/trigger-load/trigger-load.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/trigger-load/trigger-load.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "trigger-load", "trigger-load.csproj", "{07CC58E5-2CA2-496B-9846-533400BC8293}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {07CC58E5-2CA2-496B-9846-533400BC8293}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {07CC58E5-2CA2-496B-9846-533400BC8293}.Debug|Any CPU.Build.0 = Debug|Any CPU {07CC58E5-2CA2-496B-9846-533400BC8293}.Release|Any CPU.ActiveCfg = Release|Any CPU {07CC58E5-2CA2-496B-9846-533400BC8293}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {8297DD33-555D-459C-8028-85EB14B37D8F} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/trigger-load-2/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/trigger-load-2/Program.cs ================================================ using Htmx; var app = WebApplication.Create(); app.MapGet("/", () => { var html = """
    """; return Results.Content(html, "text/html"); }); app.MapGet("/htmx", (HttpRequest request) => { if (request.IsHtmx() is false) return Results.Content(""); return Results.Content($"""
    {DateTime.UtcNow}
    """); }); app.Run(); ================================================ FILE: projects/htmx/trigger-load-2/README.md ================================================ # Load polling using hx-trigger load with delay This example shows `load` event trigger ([doc](https://htmx.org/docs/#special-events)) with `delay` event modifier and [`hx-swap`](https://htmx.org/attributes/hx-swap/). ```html
    ``` `hx-swap="outerHTML` tells HTMX to replace the entire target element with the response. You will see at the API that we return the same exect element with additional content. HTMX will them process this new content and make another call in (so on and so forth). ```csharp return Results.Content($"""
    {DateTime.UtcNow}
    """); ``` ================================================ FILE: projects/htmx/trigger-load-2/trigger-load-2.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/trigger-load-2/trigger-load-2.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "trigger-load-2", "trigger-load-2.csproj", "{25128269-31E3-44F8-8BF2-75B7E26205C5}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {25128269-31E3-44F8-8BF2-75B7E26205C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {25128269-31E3-44F8-8BF2-75B7E26205C5}.Debug|Any CPU.Build.0 = Debug|Any CPU {25128269-31E3-44F8-8BF2-75B7E26205C5}.Release|Any CPU.ActiveCfg = Release|Any CPU {25128269-31E3-44F8-8BF2-75B7E26205C5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {21B3E906-6BB9-4A0C-A78E-013498E936CF} EndGlobalSection EndGlobal ================================================ FILE: projects/htmx/trigger-once/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/htmx/trigger-once/Program.cs ================================================ using Htmx; var app = WebApplication.Create(); app.MapGet("/", () => { var html = """

    Click once

    • Click
    • Click
    """; return Results.Content(html, "text/html"); }); app.MapGet("/htmx/{key}", (HttpRequest request, string key) => { if (request.IsHtmx() is false) return Results.Content(""); return key switch { "once" => Results.Content($"This is the only result you are going to get {DateTime.UtcNow}"), "unlimited" => Results.Content($"You can continue to click {DateTime.UtcNow}"), _ => Results.Content("") }; }); app.Run(); ================================================ FILE: projects/htmx/trigger-once/README.md ================================================ # HTMX hx-trigger click once This example shows `click` event trigger with modifier `once`([doc](https://htmx.org/docs/#trigger-modifiers)). ```html
    ``` ================================================ FILE: projects/htmx/trigger-once/trigger-once.csproj ================================================ net10.0 true preview ================================================ FILE: projects/htmx/trigger-once/trigger-once.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "trigger-once", "trigger-once.csproj", "{45E7D41F-79DB-43E0-9E1B-ADCC813CCE2F}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {45E7D41F-79DB-43E0-9E1B-ADCC813CCE2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {45E7D41F-79DB-43E0-9E1B-ADCC813CCE2F}.Debug|Any CPU.Build.0 = Debug|Any CPU {45E7D41F-79DB-43E0-9E1B-ADCC813CCE2F}.Release|Any CPU.ActiveCfg = Release|Any CPU {45E7D41F-79DB-43E0-9E1B-ADCC813CCE2F}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {2B3199E7-51B1-4C12-800A-5BF9F168D5AB} EndGlobalSection EndGlobal ================================================ FILE: projects/httpclientfactory/README.md ================================================ # IHttpClientFactory (4) * [HttpClientFactory](httpclientfactory-1) Now you can have centrally managed instance of HttpClient using ```IHttpClientFactory``` via dependency injection. * [HttpClientFactory - 2](httpclientfactory-2) Use preconfigured `HttpClient` via `IHttpClientFactory`. * [HttpClientFactory - 3](httpclientfactory-3) Use `IServiceCollection.AddHttpClient` to provide `HttpClient` for your classes. * [HttpClientFactory - 4](httpclientfactory-4) Use `IServiceCollection.AddHttpClient` to provide `HttpClient` for interface-implementing classes. dotnet8 ================================================ FILE: projects/httpclientfactory/build.bat ================================================ dotnet build httpclientfactory-1 dotnet build httpclientfactory-2 dotnet build httpclientfactory-3 dotnet build httpclientfactory-4 ================================================ FILE: projects/httpclientfactory/build.sh ================================================ #!/bin/bash dotnet build httpclientfactory-1 dotnet build httpclientfactory-2 dotnet build httpclientfactory-3 dotnet build httpclientfactory-4 ================================================ FILE: projects/httpclientfactory/httpclientfactory-1/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddHttpClient(); var app = builder.Build(); app.Run(async context => { var httpClient = context.RequestServices.GetService(); var client = httpClient.CreateClient(); var result = await client.GetStringAsync("http://scripting.com/rss.xml"); context.Response.Headers.Append("Content-Type", "application/rss+xml"); await context.Response.WriteAsync(result); }); app.Run(); ================================================ FILE: projects/httpclientfactory/httpclientfactory-1/httpclientfactory.csproj ================================================ net10.0 true preview ================================================ FILE: projects/httpclientfactory/httpclientfactory-2/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddHttpClient("rss", c => { // Configure your http client here c.DefaultRequestHeaders.Add("Accept", "application/rss+xml"); }); var app = builder.Build(); app.Run(async context => { var httpClient = context.RequestServices.GetService(); var client = httpClient.CreateClient("rss"); // use the preconfigured http client var result = await client.GetStringAsync("http://scripting.com/rss.xml"); context.Response.Headers.Append("Content-Type", "application/rss+xml"); await context.Response.WriteAsync(result); }); app.Run(); ================================================ FILE: projects/httpclientfactory/httpclientfactory-2/httpclientfactory-2.csproj ================================================ net10.0 true preview ================================================ FILE: projects/httpclientfactory/httpclientfactory-3/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/httpclientfactory-3.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart", "launchBrowser": { "enabled": true, "args": "${auto-detect-url}", "windows": { "command": "cmd.exe", "args": "/C start ${auto-detect-url}" }, "osx": { "command": "open" }, "linux": { "command": "xdg-open" } }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ,] } ================================================ FILE: projects/httpclientfactory/httpclientfactory-3/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/httpclientfactory-3.csproj" ], "problemMatcher": "$msCompile" } ] } ================================================ FILE: projects/httpclientfactory/httpclientfactory-3/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddTransient(); builder.Services.AddHttpClient(); var app = builder.Build(); app.Run(async context => { var rss = context.RequestServices.GetService(); var result = await rss.Get("http://scripting.com/rss.xml"); context.Response.Headers.Append("Content-Type", "application/rss+xml"); await context.Response.WriteAsync(result); }); app.Run(); public class RssReader { readonly HttpClient _client; public RssReader(HttpClient client) { _client = client; } public Task Get(string url) => _client.GetStringAsync(url); } ================================================ FILE: projects/httpclientfactory/httpclientfactory-3/httpclientfactory-3.csproj ================================================ net10.0 true preview ================================================ FILE: projects/httpclientfactory/httpclientfactory-4/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/httpclientfactory-3.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart", "launchBrowser": { "enabled": true, "args": "${auto-detect-url}", "windows": { "command": "cmd.exe", "args": "/C start ${auto-detect-url}" }, "osx": { "command": "open" }, "linux": { "command": "xdg-open" } }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ,] } ================================================ FILE: projects/httpclientfactory/httpclientfactory-4/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/httpclientfactory-3.csproj" ], "problemMatcher": "$msCompile" } ] } ================================================ FILE: projects/httpclientfactory/httpclientfactory-4/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddTransient(); builder.Services.AddHttpClient(); var app = builder.Build(); app.Run(async context => { var rss = context.RequestServices.GetService(); var result = await rss.Get("http://scripting.com/rss.xml"); context.Response.Headers.Append("Content-Type", "application/rss+xml"); await context.Response.WriteAsync(result); }); app.Run(); public interface IRss { Task Get(string url); } public class RssReader : IRss { readonly HttpClient _client; public RssReader(HttpClient client) { _client = client; } public Task Get(string url) => _client.GetStringAsync(url); } ================================================ FILE: projects/httpclientfactory/httpclientfactory-4/httpclientfactory-4.csproj ================================================ net10.0 true preview ================================================ FILE: projects/hydro/README.md ================================================ # Hydro Framework * [Hello World](hello-world) This sample introduces the usage of a Hydro component. * [Child to Parent Event](event-child-parent) This sample introduces the usage of dispatching event from child to parent component. * [Global event](event-global) This sample introduces the usage of dispatching global event so any subscribing component can receive it. * [Global event subject](event-global-subject) This sample demonstrates the ability to filter events based on specific subject. * [Cookies](cookies) This sample shows how to set and delete a cookie from a Hydro component. * [Component-1](component-1) This sample demonstrates how Hydro support nested components, how the data flow from parent to child, and how to communicate change from parent to child via **key** parameter. * [Component-2](component-2) This sample introduces the subtelties of component nested rendering. * [Component-3](component-3) This sample introduces how you can hook into Hydro's component lifecyle via `Mount/MountAsync` and 'Render/RenderAsync'. ================================================ FILE: projects/hydro/build.bat ================================================ dotnet build component-1 dotnet build component-2 dotnet build component-3 dotnet build cookies dotnet build event-child-parent dotnet build event-global dotnet build event-global-subject dotnet build hello-world ================================================ FILE: projects/hydro/build.sh ================================================ #!/bin/bash dotnet build component-1 dotnet build component-2 dotnet build component-3 dotnet build cookies dotnet build event-child-parent dotnet build event-global dotnet build event-global-subject dotnet build hello-world ================================================ FILE: projects/hydro/component-1/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#9a3acf", "activityBar.background": "#9a3acf", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#4d3813", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#9a3acf", "statusBar.background": "#7e2aac", "statusBar.debuggingBackground": "#58ac2a", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#9a3acf", "statusBarItem.remoteBackground": "#7e2aac", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#7e2aac", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#7e2aac99", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#7e2aac" } ================================================ FILE: projects/hydro/component-1/Pages/Components/Container.cshtml ================================================ @model Component1.Pages.Components.Container
    Container `Model.Text` property: @Model.Text
    This button below will change the `Model.Text` property of this component to current UTC time. Both components below receive the same `Model.Text` property.

    This declaration of message component does not use key attribute. Without the key attribute, the modification of the parent property is not propagated to the child component.

    This declaration of message component does use key attribute

    ================================================ FILE: projects/hydro/component-1/Pages/Components/Container.cshtml.cs ================================================ using Hydro; namespace Component1.Pages.Components; public class Container : HydroComponent { public string Text { get; set; } = "Hello, World!"; public void Show(string text) { Text = text; } } ================================================ FILE: projects/hydro/component-1/Pages/Components/Message.cshtml ================================================ @model Component1.Pages.Components.Message

    Text Property: @Model.Text

    Text2 Property: @Model.Text2

    ================================================ FILE: projects/hydro/component-1/Pages/Components/Message.cshtml.cs ================================================ using Hydro; namespace Component1.Pages.Components; public class Message : HydroComponent { public string Text { get; set; } public string Text2 { get; set;} public void TriggerRender() { Text2 = "Render Triggered"; } } ================================================ FILE: projects/hydro/component-1/Pages/Index.cshtml ================================================ @page "/" @using Hydro @{ Layout = "/Pages/Shared/_Layout.cshtml"; }

    This container demonstrates changing the property of the parent impacts the child components

    ================================================ FILE: projects/hydro/component-1/Pages/Shared/_Layout.cshtml ================================================ Component Data Flow
    @RenderBody()
    ================================================ FILE: projects/hydro/component-1/Pages/_ViewImports.cshtml ================================================ @addTagHelper *, Hydro @addTagHelper *, Component1 @using Component1.Pages.Components ================================================ FILE: projects/hydro/component-1/Program.cs ================================================ using Hydro.Configuration; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddHydro(); // Hydro var app = builder.Build(); app.UseStaticFiles(); app.UseRouting(); app.MapRazorPages(); app.UseHydro(); // Hydro app.Run(); ================================================ FILE: projects/hydro/component-1/README.md ================================================ # Component Nesting This sample introduces how Hydro supports component nesting and how data propagation flows from parent to child components and how communicate change from parent to child components using **key** parameter. ================================================ FILE: projects/hydro/component-1/component-1.csproj ================================================ net10.0 true Component1 preview ================================================ FILE: projects/hydro/component-1/component-1.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "component-1", "component-1.csproj", "{6DE940BA-BC4F-8C35-6BC7-91FB1B296E15}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {6DE940BA-BC4F-8C35-6BC7-91FB1B296E15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6DE940BA-BC4F-8C35-6BC7-91FB1B296E15}.Debug|Any CPU.Build.0 = Debug|Any CPU {6DE940BA-BC4F-8C35-6BC7-91FB1B296E15}.Release|Any CPU.ActiveCfg = Release|Any CPU {6DE940BA-BC4F-8C35-6BC7-91FB1B296E15}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {976A9C22-46CC-46BE-9F7C-F7F0D5A75F3F} EndGlobalSection EndGlobal ================================================ FILE: projects/hydro/component-2/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#9a3acf", "activityBar.background": "#9a3acf", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#4d3813", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#9a3acf", "statusBar.background": "#7e2aac", "statusBar.debuggingBackground": "#58ac2a", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#9a3acf", "statusBarItem.remoteBackground": "#7e2aac", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#7e2aac", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#7e2aac99", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#7e2aac" } ================================================ FILE: projects/hydro/component-2/Pages/Components/Container.cshtml ================================================ @model Component1.Pages.Components.Container

    Container `Model.Text` property: @Model.Text

    • This is a component called container. It has one child component, message.
    • message component has two properties, Text and Text2, and uses two instances of inner-message component.
    • Each inner-message component receives data from Text1 and Text2 properties respectively.

    This button below will change the `Model.Text` property of this component to current UTC time.

    ================================================ FILE: projects/hydro/component-2/Pages/Components/Container.cshtml.cs ================================================ using Hydro; namespace Component1.Pages.Components; public class Container : HydroComponent { public string Text { get; set; } = "Hello, World!"; public void Show(string text) { Text = text; } } ================================================ FILE: projects/hydro/component-2/Pages/Components/InnerMessage.cs ================================================ using Hydro; namespace Component1.Pages.Components; public class InnerMessage : HydroComponent { public string Text { get; set; } } ================================================ FILE: projects/hydro/component-2/Pages/Components/InnerMessage.cshtml ================================================ @model Component1.Pages.Components.InnerMessage
    Text Property: @Model.Text
    ================================================ FILE: projects/hydro/component-2/Pages/Components/Message.cshtml ================================================ @model Component1.Pages.Components.Message

    Text Property: @Model.Text

    Text2 Property: @Model.Text2


    Inner Message Component @@Model.Text

    In this case we do not need at use key property for inner-message component because the parent message component gets refreshed by container.

    Inner Message Component @@Model.Text2

    In this case we need to use key property because @@Model.Text2 is changed by parent message component.

    ================================================ FILE: projects/hydro/component-2/Pages/Components/Message.cshtml.cs ================================================ using Hydro; namespace Component1.Pages.Components; public class Message : HydroComponent { public string Text { get; set; } public string Text2 { get; set;} public void TriggerRender() { Text2 = "Render Triggered"; } } ================================================ FILE: projects/hydro/component-2/Pages/Index.cshtml ================================================ @page "/" @using Hydro @{ Layout = "/Pages/Shared/_Layout.cshtml"; }

    This container demonstrates changing the property of the parent impacts nested components. Here we uses two level nested components. The same principle applies to unlimited nested components.

    ================================================ FILE: projects/hydro/component-2/Pages/Shared/_Layout.cshtml ================================================ Component Data Flow
    @RenderBody()
    ================================================ FILE: projects/hydro/component-2/Pages/_ViewImports.cshtml ================================================ @addTagHelper *, Hydro @addTagHelper *, Component1 @using Component1.Pages.Components ================================================ FILE: projects/hydro/component-2/Program.cs ================================================ using Hydro.Configuration; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddHydro(); // Hydro var app = builder.Build(); app.UseStaticFiles(); app.UseRouting(); app.MapRazorPages(); app.UseHydro(); // Hydro app.Run(); ================================================ FILE: projects/hydro/component-2/README.md ================================================ # Component Nesting This sample introduces the subtleties of component nested rendering. ================================================ FILE: projects/hydro/component-2/component-1.csproj ================================================ net10.0 true Component1 preview ================================================ FILE: projects/hydro/component-2/component-1.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "component-1", "component-1.csproj", "{6DE940BA-BC4F-8C35-6BC7-91FB1B296E15}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {6DE940BA-BC4F-8C35-6BC7-91FB1B296E15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6DE940BA-BC4F-8C35-6BC7-91FB1B296E15}.Debug|Any CPU.Build.0 = Debug|Any CPU {6DE940BA-BC4F-8C35-6BC7-91FB1B296E15}.Release|Any CPU.ActiveCfg = Release|Any CPU {6DE940BA-BC4F-8C35-6BC7-91FB1B296E15}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {976A9C22-46CC-46BE-9F7C-F7F0D5A75F3F} EndGlobalSection EndGlobal ================================================ FILE: projects/hydro/component-3/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#9a3acf", "activityBar.background": "#9a3acf", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#4d3813", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#9a3acf", "statusBar.background": "#7e2aac", "statusBar.debuggingBackground": "#58ac2a", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#9a3acf", "statusBarItem.remoteBackground": "#7e2aac", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#7e2aac", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#7e2aac99", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#7e2aac" } ================================================ FILE: projects/hydro/component-3/Pages/Components/Container.cshtml ================================================ @model Component3.Pages.Components.Container

    This demonstrates that `MountAsync` is called after `Mount` and `RenderAsync` is called after `Render`.

    Here we just hook into `Mount` and `Render`.

    ================================================ FILE: projects/hydro/component-3/Pages/Components/Container.cshtml.cs ================================================ using Hydro; namespace Component3.Pages.Components; public class Container : HydroComponent { } ================================================ FILE: projects/hydro/component-3/Pages/Components/Message.cshtml ================================================ @model Component3.Pages.Components.Message

    Text Property: @Model.Text

    Text2 Property: @Model.Text2

    ================================================ FILE: projects/hydro/component-3/Pages/Components/Message.cshtml.cs ================================================ using Hydro; namespace Component3.Pages.Components; public class Message : HydroComponent { public string Text { get; set; } public string Text2 { get; set;} public override void Mount() { Text = "From Mount"; } public override Task MountAsync() { Text = "From MountAsync"; return Task.CompletedTask; } public override void Render() { Text2 = "From Render"; } public override Task RenderAsync() { Text2 = "From RenderAsync"; return Task.CompletedTask; } public void TriggerRender() { Text2 = "Render Triggered"; } } ================================================ FILE: projects/hydro/component-3/Pages/Components/Message2.cshtml ================================================ @model Component3.Pages.Components.Message2

    Text Property: @Model.Text

    Text2 Property: @Model.Text2

    ================================================ FILE: projects/hydro/component-3/Pages/Components/Message2.cshtml.cs ================================================ using Hydro; namespace Component3.Pages.Components; public class Message2 : HydroComponent { public string Text { get; set; } public string Text2 { get; set;} public override void Mount() { Text = "From Mount"; } public override void Render() { Text2 = "From Render"; } public void TriggerRender() { Text2 = "Render Triggered"; } } ================================================ FILE: projects/hydro/component-3/Pages/Index.cshtml ================================================ @page "/" @using Hydro @{ Layout = "/Pages/Shared/_Layout.cshtml"; }

    Component Lifecycle

    ================================================ FILE: projects/hydro/component-3/Pages/Shared/_Layout.cshtml ================================================ Component Data Flow
    @RenderBody()
    ================================================ FILE: projects/hydro/component-3/Pages/_ViewImports.cshtml ================================================ @addTagHelper *, Hydro @addTagHelper *, Component3 @using Component3.Pages.Components ================================================ FILE: projects/hydro/component-3/Program.cs ================================================ using Hydro.Configuration; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddHydro(); // Hydro var app = builder.Build(); app.UseStaticFiles(); app.UseRouting(); app.MapRazorPages(); app.UseHydro(); // Hydro app.Run(); ================================================ FILE: projects/hydro/component-3/README.md ================================================ # Component Lifecycle This sample introduces how you can hook into Hydro's component lifecyle via `Mount/MountAsync` and `Render/RenderAsync`. ================================================ FILE: projects/hydro/component-3/component-3.csproj ================================================ net10.0 true Component3 preview ================================================ FILE: projects/hydro/cookies/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#9a3acf", "activityBar.background": "#9a3acf", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#4d3813", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#9a3acf", "statusBar.background": "#7e2aac", "statusBar.debuggingBackground": "#58ac2a", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#9a3acf", "statusBarItem.remoteBackground": "#7e2aac", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#7e2aac", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#7e2aac99", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#7e2aac" } ================================================ FILE: projects/hydro/cookies/Pages/Components/CookieControl.cshtml ================================================ @model Cookies.Pages.Components.CookieControl @if(Model.ShowSetCookies){ }else{ } ================================================ FILE: projects/hydro/cookies/Pages/Components/CookieControl.cshtml.cs ================================================ using Hydro; using Microsoft.AspNetCore.Mvc; namespace Cookies.Pages.Components; public class CookieControl : HydroComponent { public bool ShowSetCookies { get; set; } /// /// Called when the component is instantiated on the page /// public override void Mount() { var msg = CookieStorage.Get("date"); ShowSetCookies = string.IsNullOrWhiteSpace(msg); } public void SetCookie() { CookieStorage.Set("date", DateTime.Now.ToString()); Dispatch(new MessageUpdatedEvent("A cookie is now set"), scope: Scope.Global); Redirect(Url.Page("/Index")); // Url.Page is a helper method to generate a URL to a Razor page. It starts from /Pages folder. } public void RemoveCookie() { CookieStorage.Delete("date"); Dispatch(new MessageUpdatedEvent("Cookie removed"), scope: Scope.Global); Redirect(Url.Page("/Index")); // Url.Page is a helper method to generate a URL to a Razor page. It starts from /Pages folder. } } ================================================ FILE: projects/hydro/cookies/Pages/Components/Message.cshtml ================================================ @model Cookies.Pages.Components.Message

    @Model.Text

    ================================================ FILE: projects/hydro/cookies/Pages/Components/Message.cshtml.cs ================================================ using Hydro; namespace Cookies.Pages.Components; public class Message : HydroComponent { public string Text { get; set; } public Message() { Subscribe(data => Text = data.Message); } public override void Mount() { var msg = CookieStorage.Get("date"); if (!string.IsNullOrWhiteSpace(msg)) Text = msg; else Text = "No cookies set"; } } ================================================ FILE: projects/hydro/cookies/Pages/Components/MessageUpdatedEvent.cs ================================================ namespace Cookies.Pages.Components; public record MessageUpdatedEvent(string Message); ================================================ FILE: projects/hydro/cookies/Pages/Index.cshtml ================================================ @page "/" @using Hydro @{ Layout = "/Pages/Shared/_Layout.cshtml"; }
    ================================================ FILE: projects/hydro/cookies/Pages/Shared/_Layout.cshtml ================================================ Cookies @RenderBody() ================================================ FILE: projects/hydro/cookies/Pages/_ViewImports.cshtml ================================================ @addTagHelper *, Hydro @addTagHelper *, Cookies @using Cookies.Pages.Components ================================================ FILE: projects/hydro/cookies/Program.cs ================================================ using Hydro.Configuration; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddHydro(); // Hydro var app = builder.Build(); app.UseStaticFiles(); app.UseRouting(); app.MapRazorPages(); app.UseHydro(); // Hydro app.Run(); ================================================ FILE: projects/hydro/cookies/README.md ================================================ # Cookies This sample shows how to set and delete a cookie from a Hydro component. We also use Hydro global dispatch event to show messages and perform redirect navigation with page reload. ================================================ FILE: projects/hydro/cookies/cookies.csproj ================================================ net10.0 true Cookies preview ================================================ FILE: projects/hydro/cookies/cookies.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cookies", "cookies.csproj", "{B88A9EB3-47AC-499E-3080-CB9F1AA33448}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {B88A9EB3-47AC-499E-3080-CB9F1AA33448}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B88A9EB3-47AC-499E-3080-CB9F1AA33448}.Debug|Any CPU.Build.0 = Debug|Any CPU {B88A9EB3-47AC-499E-3080-CB9F1AA33448}.Release|Any CPU.ActiveCfg = Release|Any CPU {B88A9EB3-47AC-499E-3080-CB9F1AA33448}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {0BA5FDA3-B995-41E8-96F5-44DAE79EB574} EndGlobalSection EndGlobal ================================================ FILE: projects/hydro/event-child-parent/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#9a3acf", "activityBar.background": "#9a3acf", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#4d3813", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#9a3acf", "statusBar.background": "#7e2aac", "statusBar.debuggingBackground": "#58ac2a", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#9a3acf", "statusBarItem.remoteBackground": "#7e2aac", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#7e2aac", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#7e2aac99", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#7e2aac" } ================================================ FILE: projects/hydro/event-child-parent/Pages/Components/Message.cshtml ================================================ @model Events.Pages.Components.Message

    @Model.Text

    ================================================ FILE: projects/hydro/event-child-parent/Pages/Components/Message.cshtml.cs ================================================ using Hydro; namespace Events.Pages.Components; public class Message : HydroComponent { public string Text { get; set; } public Message() { Subscribe(e => Text = e.Message); } } ================================================ FILE: projects/hydro/event-child-parent/Pages/Components/MessageButton.cshtml ================================================ @model Events.Pages.Components.MessageButton
    ================================================ FILE: projects/hydro/event-child-parent/Pages/Components/MessageButton.cshtml.cs ================================================ using Hydro; namespace Events.Pages.Components; public class MessageButton : HydroComponent { public void Show(string text) { Dispatch(new MessageChangedEvent(text)); } } ================================================ FILE: projects/hydro/event-child-parent/Pages/Components/MessageChangedEvent.cs ================================================ namespace Events.Pages.Components; public record MessageChangedEvent(string Message); ================================================ FILE: projects/hydro/event-child-parent/Pages/Index.cshtml ================================================ @page "/" @using Hydro @{ Layout = "/Pages/Shared/_Layout.cshtml"; } ================================================ FILE: projects/hydro/event-child-parent/Pages/Shared/_Layout.cshtml ================================================ @RenderBody() ================================================ FILE: projects/hydro/event-child-parent/Pages/_ViewImports.cshtml ================================================ @addTagHelper *, Hydro @addTagHelper *, Events @using Events.Pages.Components ================================================ FILE: projects/hydro/event-child-parent/Program.cs ================================================ using Hydro.Configuration; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddHydro(); // Hydro var app = builder.Build(); app.UseStaticFiles(); app.UseRouting(); app.MapRazorPages(); app.UseHydro(); // Hydro app.Run(); ================================================ FILE: projects/hydro/event-child-parent/README.md ================================================ # Event handling from a child component to parent This sample introduce the concept of hydro event communication from child component to parent. One point of caution, in `MessageButton.cshtml`, it's not enough to have the button tag as a root component because it will disappear once you click the button. You need to have a `div` or other container tag to keep the button rerendered. ```csharp
    ``` ================================================ FILE: projects/hydro/event-child-parent/event-child-parent.csproj ================================================ net10.0 true Events preview ================================================ FILE: projects/hydro/event-child-parent/event-child-parent.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "event-child-parent", "event-child-parent.csproj", "{E869BD85-7D0D-4975-9EBF-BFABD0ACF51E}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {E869BD85-7D0D-4975-9EBF-BFABD0ACF51E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E869BD85-7D0D-4975-9EBF-BFABD0ACF51E}.Debug|Any CPU.Build.0 = Debug|Any CPU {E869BD85-7D0D-4975-9EBF-BFABD0ACF51E}.Release|Any CPU.ActiveCfg = Release|Any CPU {E869BD85-7D0D-4975-9EBF-BFABD0ACF51E}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {B7874CF6-D0E5-40E1-8C83-28D03B3373EC} EndGlobalSection EndGlobal ================================================ FILE: projects/hydro/event-global/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#9a3acf", "activityBar.background": "#9a3acf", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#4d3813", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#9a3acf", "statusBar.background": "#7e2aac", "statusBar.debuggingBackground": "#58ac2a", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#9a3acf", "statusBarItem.remoteBackground": "#7e2aac", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#7e2aac", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#7e2aac99", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#7e2aac" } ================================================ FILE: projects/hydro/event-global/Pages/Components/Message.cshtml ================================================ @model Events.Pages.Components.Message

    @Model.Text

    ================================================ FILE: projects/hydro/event-global/Pages/Components/Message.cshtml.cs ================================================ using Hydro; namespace Events.Pages.Components; public class Message : HydroComponent { public string Text { get; set; } public Message() { Subscribe(e => Text = e.Message); } } ================================================ FILE: projects/hydro/event-global/Pages/Components/MessageButton.cshtml ================================================ @model Events.Pages.Components.MessageButton
    ================================================ FILE: projects/hydro/event-global/Pages/Components/MessageButton.cshtml.cs ================================================ using Hydro; namespace Events.Pages.Components; public class MessageButton : HydroComponent { public void Show(string text) { DispatchGlobal(new MessageChangedEvent(text)); } } ================================================ FILE: projects/hydro/event-global/Pages/Components/MessageChangedEvent.cs ================================================ namespace Events.Pages.Components; public record MessageChangedEvent(string Message); ================================================ FILE: projects/hydro/event-global/Pages/Index.cshtml ================================================ @page "/" @using Hydro @{ Layout = "/Pages/Shared/_Layout.cshtml"; }
    ================================================ FILE: projects/hydro/event-global/Pages/Shared/_Layout.cshtml ================================================ @RenderBody() ================================================ FILE: projects/hydro/event-global/Pages/_ViewImports.cshtml ================================================ @addTagHelper *, Hydro @addTagHelper *, Events @using Events.Pages.Components ================================================ FILE: projects/hydro/event-global/Program.cs ================================================ using Hydro.Configuration; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddHydro(); // Hydro var app = builder.Build(); app.UseStaticFiles(); app.UseRouting(); app.MapRazorPages(); app.UseHydro(); // Hydro app.Run(); ================================================ FILE: projects/hydro/event-global/README.md ================================================ # Global event handling This sample introduce the concept of hydro global event communication. It allows a component to publish an event and have any subscribing components to receive it. One point of caution, in `MessageButton.cshtml`, it's not enough to have the button tag as a root component because it will disappear once you click the button. You need to have a `div` or other container tag to keep the button rerendered. ```csharp
    ``` ================================================ FILE: projects/hydro/event-global/event-global.csproj ================================================ net10.0 true Events preview ================================================ FILE: projects/hydro/event-global/event-global.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "event-global", "event-global.csproj", "{EFF8AEEF-77A5-4912-AE06-68DCC1D109A9}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {EFF8AEEF-77A5-4912-AE06-68DCC1D109A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EFF8AEEF-77A5-4912-AE06-68DCC1D109A9}.Debug|Any CPU.Build.0 = Debug|Any CPU {EFF8AEEF-77A5-4912-AE06-68DCC1D109A9}.Release|Any CPU.ActiveCfg = Release|Any CPU {EFF8AEEF-77A5-4912-AE06-68DCC1D109A9}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {4556C3CB-E26B-4180-A0BC-946CD66803AE} EndGlobalSection EndGlobal ================================================ FILE: projects/hydro/event-global-subject/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#9a3acf", "activityBar.background": "#9a3acf", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#4d3813", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#9a3acf", "statusBar.background": "#7e2aac", "statusBar.debuggingBackground": "#58ac2a", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#9a3acf", "statusBarItem.remoteBackground": "#7e2aac", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#7e2aac", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#7e2aac99", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#7e2aac" } ================================================ FILE: projects/hydro/event-global-subject/Pages/Components/Message.cshtml ================================================ @model Events.Pages.Components.Message

    @Model.Text

    ================================================ FILE: projects/hydro/event-global-subject/Pages/Components/Message.cshtml.cs ================================================ using Hydro; namespace Events.Pages.Components; public class Message : HydroComponent { public string Text { get; set; } public string Filter { get; set; } public Message() { Subscribe(subject: () => Filter , e => Text = e.Message); } } ================================================ FILE: projects/hydro/event-global-subject/Pages/Components/MessageButton.cshtml ================================================ @model Events.Pages.Components.MessageButton
    ================================================ FILE: projects/hydro/event-global-subject/Pages/Components/MessageButton.cshtml.cs ================================================ using System.Security.Cryptography; using Hydro; namespace Events.Pages.Components; public class MessageButton : HydroComponent { public void Show(string text) { var r = Random.Shared.GetItems(["left", "right"], 1); DispatchGlobal(new MessageChangedEvent(text), subject:r[0]); } } ================================================ FILE: projects/hydro/event-global-subject/Pages/Components/MessageChangedEvent.cs ================================================ namespace Events.Pages.Components; public record MessageChangedEvent(string Message); ================================================ FILE: projects/hydro/event-global-subject/Pages/Index.cshtml ================================================ @page "/" @using Hydro @{ Layout = "/Pages/Shared/_Layout.cshtml"; }

    When you click this message, the action will randomise the message subject between "left" and "right". You will see that the components receive different messages based on the event subject.

    ================================================ FILE: projects/hydro/event-global-subject/Pages/Shared/_Layout.cshtml ================================================ @RenderBody() ================================================ FILE: projects/hydro/event-global-subject/Pages/_ViewImports.cshtml ================================================ @addTagHelper *, Hydro @addTagHelper *, Events @using Events.Pages.Components ================================================ FILE: projects/hydro/event-global-subject/Program.cs ================================================ using Hydro.Configuration; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddHydro(); // Hydro var app = builder.Build(); app.UseStaticFiles(); app.UseRouting(); app.MapRazorPages(); app.UseHydro(); // Hydro app.Run(); ================================================ FILE: projects/hydro/event-global-subject/README.md ================================================ # Global event handling subject This sample demonstrates the functionality of event subject. It allows components that subscribe to a specific message to filter which matching message they will receive. In this case, the `Message` component subscribes to `MessageChangedEvent`. The two instances of the component uses "left" and "right" event subject respectively. You will see how each instance react to the event they are subscribed to. ================================================ FILE: projects/hydro/event-global-subject/event-global-subject.csproj ================================================ net10.0 true Events preview ================================================ FILE: projects/hydro/event-global-subject/event-global-subject.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "event-global-subject", "event-global-subject.csproj", "{0B333304-CDC6-4AFB-8D95-C5D7DE49A8CA}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {0B333304-CDC6-4AFB-8D95-C5D7DE49A8CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0B333304-CDC6-4AFB-8D95-C5D7DE49A8CA}.Debug|Any CPU.Build.0 = Debug|Any CPU {0B333304-CDC6-4AFB-8D95-C5D7DE49A8CA}.Release|Any CPU.ActiveCfg = Release|Any CPU {0B333304-CDC6-4AFB-8D95-C5D7DE49A8CA}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {860E12BD-D170-4DC9-ABA1-8AEBB891477B} EndGlobalSection EndGlobal ================================================ FILE: projects/hydro/hello-world/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#9a3acf", "activityBar.background": "#9a3acf", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#4d3813", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#9a3acf", "statusBar.background": "#7e2aac", "statusBar.debuggingBackground": "#58ac2a", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#9a3acf", "statusBarItem.remoteBackground": "#7e2aac", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#7e2aac", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#7e2aac99", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#7e2aac" } ================================================ FILE: projects/hydro/hello-world/Pages/Components/Message.cshtml ================================================ @model HelloWorld.Pages.Components.Message

    @Model.Text

    ================================================ FILE: projects/hydro/hello-world/Pages/Components/Message.cshtml.cs ================================================ using Hydro; namespace HelloWorld.Pages.Components; public class Message : HydroComponent { public string Text { get; set; } public void Show(string text) { Text = text; } } ================================================ FILE: projects/hydro/hello-world/Pages/Index.cshtml ================================================ @page "/" @using Hydro @{ Layout = "/Pages/Shared/_Layout.cshtml"; } ================================================ FILE: projects/hydro/hello-world/Pages/Shared/_Layout.cshtml ================================================ @RenderBody() ================================================ FILE: projects/hydro/hello-world/Pages/_ViewImports.cshtml ================================================ @addTagHelper *, Hydro @addTagHelper *, HelloWorld @using HelloWorld.Pages.Components ================================================ FILE: projects/hydro/hello-world/Program.cs ================================================ using Hydro.Configuration; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddHydro(); // Hydro var app = builder.Build(); app.UseStaticFiles(); app.UseRouting(); app.MapRazorPages(); app.UseHydro(); // Hydro app.Run(); ================================================ FILE: projects/hydro/hello-world/README.md ================================================ # Hello World This sample introduce the concept of a Hydro component and how it handles interactivity. ================================================ FILE: projects/hydro/hello-world/hello-world.csproj ================================================ net10.0 true HelloWorld preview ================================================ FILE: projects/hydro/hello-world/hello-world.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "hello-world", "hello-world.csproj", "{10EB755E-653E-4713-B184-4622A6497FEA}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {10EB755E-653E-4713-B184-4622A6497FEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {10EB755E-653E-4713-B184-4622A6497FEA}.Debug|Any CPU.Build.0 = Debug|Any CPU {10EB755E-653E-4713-B184-4622A6497FEA}.Release|Any CPU.ActiveCfg = Release|Any CPU {10EB755E-653E-4713-B184-4622A6497FEA}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {73DB1AF6-BCA1-40A5-BE8F-9105006088E6} EndGlobalSection EndGlobal ================================================ FILE: projects/i-application-lifetime/Program.cs ================================================ var app = WebApplication.Create(); var lifetime = app.Services.GetService(); lifetime.ApplicationStarted.Register(() => System.Console.WriteLine("===== Server is starting")); lifetime.ApplicationStopping.Register(() => System.Console.WriteLine("===== Server is stopping")); lifetime.ApplicationStopped.Register(() => System.Console.WriteLine("===== Server has stopped")); app.Run(async context => { await context.Response.WriteAsync("Hello world"); }); app.Run(); ================================================ FILE: projects/i-application-lifetime/i-application-lifetime.csproj ================================================ net10.0 true preview ================================================ FILE: projects/ihosted-service/README.md ================================================ # IHostedService (2) * [Background Task](/projects/ihosted-service/ihosted-service-1) Implement background tasks using `BackgroundService` base class (simplified pattern in .NET 10). * [Background Task - 2](/projects/ihosted-service/ihosted-service-2) Implement background tasks using the new `IHostedService` interface and a timer. This example comes from the technique outlined in this [ASP.NET Core documentation](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services). dotnet8 ================================================ FILE: projects/ihosted-service/build.bat ================================================ dotnet build ihosted-service-1 dotnet build ihosted-service-2 ================================================ FILE: projects/ihosted-service/build.sh ================================================ #!/bin/bash dotnet build ihosted-service-1 dotnet build ihosted-service-2 ================================================ FILE: projects/ihosted-service/ihosted-service-1/Program.cs ================================================ using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting; var builder = WebApplication.CreateBuilder(); builder.Services.AddSingleton(); builder.Services.AddHostedService(); var app = builder.Build(); app.Run(context => { var greet = context.RequestServices.GetService(); return context.Response.WriteAsync($"Please reload page (greeting updated every 1 second in the background) {greet}"); }); app.Run(); public class Greeter { public int Counter { get; set; } public override string ToString() => $"Hello world {Counter}"; } } /// /// Background service that updates a Greeter counter /// public class GreeterUpdaterService : BackgroundService { private readonly Greeter _greeter; public GreeterUpdaterService(Greeter greeter) { _greeter = greeter; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { _greeter.Counter++; await Task.Delay(TimeSpan.FromSeconds(1), stoppingToken); } } } public async Task StopAsync(CancellationToken cancellationToken) { if (_executingTask == null) { return; } try { // Signal cancellation to the executing method _stoppingCts.Cancel(); } finally { // Wait until the task completes or the stop token triggers await Task.WhenAny(_executingTask, Task.Delay(Timeout.Infinite, cancellationToken)); } } protected abstract Task ExecuteAsync(CancellationToken cancellationToken); public virtual void Dispose() => _stoppingCts.Cancel(); } public class GreeterUpdaterService : HostedService { Greeter _greeter; public GreeterUpdaterService(Greeter greeter) { _greeter = greeter; } protected override async Task ExecuteAsync(CancellationToken cancellationToken) { while (!cancellationToken.IsCancellationRequested) { _greeter.Counter++; await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken); } } } public class Greeter { public int Counter { get; set; } public override string ToString() => $"Hello world {Counter}"; } ================================================ FILE: projects/ihosted-service/ihosted-service-1/README.md ================================================ # BackgroundService Pattern This sample demonstrates using the `BackgroundService` base class for background tasks in ASP.NET Core. ## Running the Sample ```bash dotnet watch run ``` Navigate to `http://localhost:5000/` and see the counter incrementing every second in the background). A `GreeterUpdaterService` updates a `Greeter` singleton every second. the updates are visible on. `Greeter` class provides the greeting data to the background task. The sample uses dependency injection to the `GreeterUpdaterService` injects the `Greeter` singleton. The service also automatically updates the counter property. ## Key Features - Built-in `BackgroundService` base class for background tasks - Much less code than custom `IHostedService` implementation - Proper cancellation token handling - Cleaner, more maintainable code - Standard pattern recommended by Microsoft ## Running the Sample ```bash dotnet watch run ``` Navigate to `http://localhost:5000/` and see the counter incrementing every second in the background) a `Greeter` service updates a `Greeter` singleton. ## Registration ```csharp builder.Services.AddSingleton(); builder.Services.AddHostedService(); ``` ## Viewing the Documentation - **Scalar UI:** Navigate to `/scalar` - **OpenAPI JSON:** Navigate to `/openapi/v1.json` ## Migration Notes This sample was simplified from a custom `IHostedService` implementation to using the built-in `BackgroundService` base class. - Removed custom `HostedService` abstract base class (40+ lines of boilerplate) - Inherited from `Microsoft.Extensions.Hosting.BackgroundService` - Simplified cancellation token handling - Cleaner, more maintainable code - Standard pattern recommended by Microsoft See `OUT-OF-DATE.md` for migration details. ================================================ FILE: projects/ihosted-service/ihosted-service-1/ihosted-service-1.csproj ================================================ net10.0 true preview true $(NoWarn);1591 ================================================ FILE: projects/ihosted-service/ihosted-service-2/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); var app = builder.Build(); app.Run(context => { var greet = context.RequestServices.GetService(); return context.Response.WriteAsync($"Please reload page (greeting updated every 1 second in the background) {greet}"); }); app.Run(); public class GreeterUpdaterService : IHostedService, IDisposable { Greeter _greeter; readonly ILogger _logger; Timer _timer; public GreeterUpdaterService(ILogger logger, Greeter greeter) { _logger = logger; _greeter = greeter; } private void DoWork(object state) { _greeter.Counter++; } public Task StartAsync(CancellationToken cancellationToken) { _logger.LogInformation($"{nameof(GreeterUpdaterService)} running."); _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(1)); return Task.CompletedTask; } public Task StopAsync(CancellationToken cancellationToken) { _logger.LogInformation($"{nameof(GreeterUpdaterService)} is stopping."); _timer?.Change(Timeout.Infinite, 0); return Task.CompletedTask; } public void Dispose() { _timer?.Dispose(); } } public class Greeter { public int Counter { get; set; } public override string ToString() => $"Hello world {Counter}"; } ================================================ FILE: projects/ihosted-service/ihosted-service-2/README.md ================================================ # Background Service with Timer Implement background tasks using the new `IHostedService` interface and a timer. This example comes from the technique outlined in this [ASP.NET Core documentation](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services). ================================================ FILE: projects/ihosted-service/ihosted-service-2/ihosted-service-2.csproj ================================================ net10.0 true preview ================================================ FILE: projects/image-sharp/ImageSharp.csproj ================================================ net10.0 true preview ================================================ FILE: projects/image-sharp/Program.cs ================================================ using Microsoft.AspNetCore; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using SixLabors.ImageSharp.Web.DependencyInjection; using Microsoft.Extensions.Hosting; var builder = WebApplication.CreateBuilder(); builder.Services.AddImageSharp(); var app = builder.Build(); app.UseImageSharp(); app.UseStaticFiles(); app.Run(async context => { context.Response.Headers.Append("Content-Type", "text/html"); await context.Response.WriteAsync($@"

    Imager

    siwa.jpg?width=200

    siwa.jpg?height=200

    siwa.jpg

    "); }); app.Run(); ================================================ FILE: projects/json/README.md ================================================ # Json (23) All about the new `System.Text.Json` namespace. * [Json](/projects/json/json) Use `JsonSerializer.SerializeAsync` to serializer your object to JSON directly to stream. * [Json - Options](/projects/json/json-2) Use `JsonSerializerOptions` to control certain aspect of your object serialization. * [Json - Serializing Anonymous Type](/projects/json/json-3) Create adhoc JSON document using anonymous type and serialize it to stream directly using `JsonSerializer.SerializeAsync`. * [Json - Control serialization using attributes](/projects/json/json-4) Use `[JsonPropertyName]` and `[JsonIgnore]` to control JSON serialization output. * [Json - Serialize a Dictionary of object](/projects/json/json-5) A `Dictionary` can be used to generate pretty much any shape of JSON document that you want. * [Json - Write a JSON document to the stream directly](/projects/json/json-6) Use `Utf8JsonWriter` to write a JSON document directly to a stream. * [Json - Implement a custom naming policy](/projects/json/json-7) Create a custom naming policy that generate JSON property names in snake_case. * [Json - Benchmark](/projects/json/json-8) Benchmark on two different approaches of generating snake_case property names. * [Json - Custom Converter](/projects/json/json-9) Implement a custom type converter. In this example we convert `TimeSpan`. * [Json - Control JsonIgnore behaviour](/projects/json/json-10) Demonstrate the three different ways you can control the behaviour of `[JsonIgnore]` per property. * [Json - Custom Converter 2](/projects/json/json-11) Implement a custom type coverter for DateTime type for JsonSerializer in the format of JSON date ticks. ## Writable JSON DOM [Design document for the Writable JSON API](https://github.com/dotnet/designs/blob/main/accepted/2020/serializer/WriteableDomAndDynamic.md) * [Primitives](/projects/json/json-12) This sample shows how to parse and access number, string and an array values from JSON string. * [Object](/projects/json/json-13) This sample shows how to parse and access objects from JSON string. We will be using `JsonObject` as well. * [Finding a node using LINQ](/projects/json/json-14) This sample shows how to find a node based on of its value using LINQ. * [Finding a node using LINQ 2](/projects/json/json-15) This sample shows how to find a node based on two of its values (a string and an array) using LINQ. * [Finding a node using LINQ 3](/projects/json/json-16) This sample shows how to find a node based of an absence of a property using LINQ. * [Finding a node using LINQ 4](/projects/json/json-17) In this example we are trying to find a node in an array that has a specific value on its array property. * [Construct a JSON document](/projects/json/json-18) This sample shows how to construct a JSON document using `JsonObject`. * [Construct a JSON document](/projects/json/json-19) This sample shows how to construct a JSON document using `JsonArray`. * [Update a JSON document](/projects/json/json-20) This sample shows how to update properties of a JSON document. * [Delete elements in a JSON document](/projects/json/json-21) This example shows how to update remove an object property and an element in an array. * [Add items into a JSON array](/projects/json/json-22) This example shows how to add items at the first position of an array and at the last position. * [JSON - 23](json-23) Show how to customize serialization using `DefaultJsonTypeInfoResolver`. * [JSON - 24](json-24) Customize serialization by writing `number` as `string` in JSON for `Age` values. * [JSON - 25](json-25) In this case we add one extra `timestamp` property to the serialization process. * [JSON - 26](json-26) This sample shows how to detect the type of a JSON property. dotnet8 ================================================ FILE: projects/json/build.bat ================================================ dotnet build json dotnet build json-2 dotnet build json-3 dotnet build json-4 dotnet build json-5 dotnet build json-6 dotnet build json-7 dotnet build json-8 dotnet build json-9 dotnet build json-10 dotnet build json-11 dotnet build json-12 dotnet build json-13 dotnet build json-14 dotnet build json-15 dotnet build json-16 dotnet build json-17 dotnet build json-18 dotnet build json-19 dotnet build json-20 dotnet build json-21 dotnet build json-22 dotnet build json-23 dotnet build json-24 dotnet build json-25 ================================================ FILE: projects/json/build.sh ================================================ #!/bin/bash dotnet build json dotnet build json-2 dotnet build json-3 dotnet build json-4 dotnet build json-5 dotnet build json-6 dotnet build json-7 dotnet build json-8 dotnet build json-9 dotnet build json-10 dotnet build json-11 dotnet build json-12 dotnet build json-13 dotnet build json-14 dotnet build json-15 dotnet build json-16 dotnet build json-17 dotnet build json-18 dotnet build json-19 dotnet build json-20 dotnet build json-21 dotnet build json-22 dotnet build json-23 dotnet build json-24 dotnet build json-25 ================================================ FILE: projects/json/json/Program.cs ================================================ var app = WebApplication.Create(); app.MapGet("/", () => { var payload = new Person { Name = "Annie", Age = 33, IsMarried = false, CurrentTime = DateTimeOffset.UtcNow, Characters = new Dictionary { {"Funny" , true}, {"Feisty" , true}, {"Brilliant" , true}, {"FOMA", false} }, IsWorking = true }; return Results.Json(payload); }); app.Run(); public class Person { public string Name { get; set; } public int Age { get; set; } public bool IsMarried { get; set; } public DateTimeOffset CurrentTime { get; set; } public bool? IsWorking { get; set; } public Dictionary Characters { get; set; } } ================================================ FILE: projects/json/json/README.md ================================================ # New System.Text.Json library Use `JsonSerializer.SerializeAsync` to serialize your object to json directly to stream. ================================================ FILE: projects/json/json/json.csproj ================================================ net10.0 true preview ================================================ FILE: projects/json/json-10/Program.cs ================================================ using System.Text.Json; using System.Text.Json.Serialization; var app = WebApplication.Create(); app.MapGet("/", () => { var payload = new List { new Person { Name = "Annie", Age = 33, IsMarried = null, CurrentTime = DateTimeOffset.UtcNow, IsWorking = true }, new Person { Name = "Dody", Age = 42, IsMarried = false, IsHealthy = true }, }; var options = new JsonSerializerOptions { WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, //Pay attention here with interaction with the IsMarried and IsWorking properties PropertyNamingPolicy = JsonNamingPolicy.CamelCase, DictionaryKeyPolicy = JsonNamingPolicy.CamelCase }; return Results.Json(payload, options); }); app.Run(); public class Person { public string Name { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.Always)] public int? Age { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.Never)] public bool? IsMarried { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] public DateTimeOffset CurrentTime { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]// Do not serialize this property when null public bool? IsWorking { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] public bool IsHealthy { get; set; } } ================================================ FILE: projects/json/json-10/README.md ================================================ # Control JsonIgnore behavior. * `[JsonIgnore]`. This tells the serializer not to generate the property in the output JSON document. * `[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]`. This tells serializer to not generate the property when it has null value. * `[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]`. This tells serializer to not generate the property if it has default value. * `[JsonIgnore(Condition = JsonIngoreCondition.Never)]`. This tells serializer to always generate the property regardless of the options set at `JsonSerializerOptions`. * `[JsonIgnore(Condition = JsonIngoreCondition.Always)]`. This tells serializer to always **not** generate the property. This is the default behaviour. ================================================ FILE: projects/json/json-10/json-10.csproj ================================================ net10.0 true preview ================================================ FILE: projects/json/json-11/Program.cs ================================================ using System.Text.Json; using System.Text.Json.Serialization; using System.Text.RegularExpressions; var app = WebApplication.Create(); app.MapGet("/", async () => { var payload = new Person { Name = "Annie", DateOfBirth = new DateTime(1984, 11, 20) // 1000 days }; var options = new JsonSerializerOptions { WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, PropertyNamingPolicy = JsonNamingPolicy.CamelCase, DictionaryKeyPolicy = JsonNamingPolicy.CamelCase, Converters = { new DateTimeConverter() } }; var filePath = Path.Combine(app.Environment.ContentRootPath, "person.json"); using (FileStream write = File.Create(filePath)) { await JsonSerializer.SerializeAsync(write, payload, typeof(Person), options); } using FileStream fs = File.OpenRead(filePath); Person p = await JsonSerializer.DeserializeAsync(fs, typeof(Person), options) as Person; return Results.Text($@" Name : { p.Name}
    Date of Birth : { p.DateOfBirth }
    ", "text/html"); }); app.Run(); public class Person { public string Name { get; set; } public DateTime DateOfBirth { get; set; } } public class DateTimeConverter : JsonConverter { const long InitialJavaScriptDateTicks = 621355968000000000; Regex JsDate = new Regex(@"Date\((?[0-9]+)\)", RegexOptions.Compiled | RegexOptions.IgnoreCase); public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { string value = reader.GetString(); var match = JsDate.Match(value); var val = match.Groups["Date"].Value; return new DateTime((long.Parse(val) * 10000) + InitialJavaScriptDateTicks, DateTimeKind.Utc); } public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options) { DateTime utcDateTime = value.ToUniversalTime(); long javaScriptTicks = (utcDateTime.Ticks - InitialJavaScriptDateTicks) / 10000; writer.WriteStringValue("/Date(" + javaScriptTicks.ToString() + ")/"); } } ================================================ FILE: projects/json/json-11/README.md ================================================ # Custom Converter This is an custom converter implementation for DateTime type for JsonSerializer in the format of JSON date ticks. Much of the code comes from this [Tweet](https://twitter.com/James_M_South/status/1268102226490384385). More code also comes from https://github.com/JamesNK/Newtonsoft.Json/blob/master/Src/Newtonsoft.Json/Converters/JavaScriptDateTimeConverter.cs. ================================================ FILE: projects/json/json-11/json-11.csproj ================================================ net10.0 true preview ================================================ FILE: projects/json/json-11/person.json ================================================ { "name": "Annie", "dateOfBirth": "/Date(469749600000)/" } ================================================ FILE: projects/json/json-12/Program.cs ================================================ using System.Text.Json.Nodes; WebApplication app = WebApplication.Create(); app.Run(async context => { var numberNode = JsonNode.Parse(@"{""age"" : 34 }"); int age = (int) numberNode["age"]; await context.Response.WriteAsync($"{numberNode} \n"); await context.Response.WriteAsync($"Value of age is {age}\n\n\n"); var stringNode = JsonNode.Parse(@"{""name"" : ""anne""}"); string name = (string) stringNode["name"]; await context.Response.WriteAsync($"{stringNode} \n"); await context.Response.WriteAsync($"Value of name is {name}\n\n\n"); var numberArrayNode = JsonNode.Parse("[2, 4, 6]"); await context.Response.WriteAsync($"{numberArrayNode}\n"); int item0 = (int) numberArrayNode[0]; int item1 = (int) numberArrayNode[1]; int item2 = (int) numberArrayNode[2]; await context.Response.WriteAsync($"Values of array: {item0}, {item1}, {item2}\n\n"); //alternatively JsonArray childrenAge = numberArrayNode.AsArray(); await context.Response.WriteAsync($"Size of array: {childrenAge.Count}\nValues of array: "); foreach(JsonNode r in childrenAge) { await context.Response.WriteAsync($"{r}, "); } }); app.Run(); ================================================ FILE: projects/json/json-12/README.md ================================================ # Writable DOM = Primitives This sample shows how to parse and access number, string and an array values from JSON string. ================================================ FILE: projects/json/json-12/json-12.csproj ================================================ net10.0 true preview ================================================ FILE: projects/json/json-13/Program.cs ================================================ using System.Text.Json.Nodes; var app = WebApplication.Create(); app.Run(async context => { var objectNode = JsonNode.Parse(@" { ""person"" : { ""name"" : ""anne"", ""age"" : 34 , ""favoriteNumbers"" : [2, 4, 6] } }"); await context.Response.WriteAsync($"{objectNode} \n"); var person = objectNode["person"]; int age = (int) person["age"]; string name = (string) person["name"]; int[] favoriteNumbers = person["favoriteNumbers"].AsArray().Select(x => (int) x).ToArray(); await context.Response.WriteAsync($"name : {name}\n"); await context.Response.WriteAsync($"age : {age}\n"); await context.Response.WriteAsync($"favorite numbers : {string.Join(",", favoriteNumbers)}\n\n"); await context.Response.WriteAsync("Now we are using JsonObject\n"); JsonObject personObject = person.AsObject(); await context.Response.WriteAsync($"Number of elements in the object: {personObject.Count}\n\n"); foreach(var el in personObject) { await context.Response.WriteAsync($"{el.Key} => {el.Value}\n"); } }); app.Run(); ================================================ FILE: projects/json/json-13/README.md ================================================ # Writable DOM - Objects This sample shows how to parse and access objects from JSON string. We will be using `JsonObject` as well. ================================================ FILE: projects/json/json-13/json-13.csproj ================================================ net10.0 true preview ================================================ FILE: projects/json/json-14/Program.cs ================================================ using System.Text.Json.Nodes; var app = WebApplication.Create(); app.Run(async context => { var objectNode = JsonNode.Parse(@" [ { ""name"" : ""anne"", ""age"" : 34 }, { ""name"" : ""hadi"", ""age"" : 29 }, { ""name"" : ""abdelfattah"", ""age"" : 30 } ]"); await context.Response.WriteAsync(objectNode.ToString()); await context.Response.WriteAsync("\n"); await context.Response.WriteAsync($"Path: {objectNode.GetPath()}"); await context.Response.WriteAsync("\n\n\nNow let's find an object with age value of 29\n"); var hadi = objectNode.AsArray().Where(x => x["age"].GetValue() == 29).FirstOrDefault(); if (hadi is object) { await context.Response.WriteAsync("\n"); await context.Response.WriteAsync(hadi.ToString()); await context.Response.WriteAsync($"\nPath : {hadi.GetPath()}"); } }); app.Run(); ================================================ FILE: projects/json/json-14/README.md ================================================ # Writable DOM - Finding a node using LINQ In this example we are trying to find a node in an array based on one of its property value using LINQ. ================================================ FILE: projects/json/json-14/json-14.csproj ================================================ net10.0 true preview ================================================ FILE: projects/json/json-15/Program.cs ================================================ using System.Text.Json.Nodes; var app = WebApplication.Create(); app.Run(async context => { var objectNode = JsonNode.Parse(@" [ { ""name"" : ""anne"", ""age"" : 34, ""gender"" : ""female"" }, { ""name"" : ""hadi"", ""age"" : 29, ""gender"" : ""non-binary"", ""favoriteNumbers"" : [1, 5, 6] }, { ""name"" : ""abdelfattah"", ""age"" : 30, ""gender"" : ""non-binary"", ""favoriteNumbers"" : [3, 9, 10, 11] } ]"); await context.Response.WriteAsync(objectNode.ToString()); await context.Response.WriteAsync("\n"); await context.Response.WriteAsync($"Path: {objectNode.GetPath()}"); await context.Response.WriteAsync("\n\nNow lets find the non-binary person who has three `favoriteNumbers`\n"); var hadi = objectNode.AsArray().Where(x => x["gender"].GetValue() == "non-binary" && x["favoriteNumbers"].AsArray().Count == 3).FirstOrDefault(); if (hadi is object) { await context.Response.WriteAsync("\n"); await context.Response.WriteAsync(hadi.ToString()); await context.Response.WriteAsync($"\nPath : {hadi.GetPath()}"); } }); app.Run(); ================================================ FILE: projects/json/json-15/README.md ================================================ # Writable DOM - Finding a node using LINQ 2 In this example we are trying to find a node in an array based on two property, one is a simple string property and the other is an array. ================================================ FILE: projects/json/json-15/json-15.csproj ================================================ net10.0 true preview ================================================ FILE: projects/json/json-16/Program.cs ================================================ using System.Text.Json.Nodes; var app = WebApplication.Create(); app.Run(async context => { var objectNode = JsonNode.Parse(@" [ { ""name"" : ""anne"", ""age"" : 34, ""gender"" : ""female"" }, { ""name"" : ""hadi"", ""age"" : 29, ""gender"" : ""non-binary"", ""favoriteNumbers"" : [1, 5, 6] }, { ""name"" : ""abdelfattah"", ""age"" : 30, ""gender"" : ""non-binary"", ""favoriteNumbers"" : [3, 9, 10, 11] } ]"); await context.Response.WriteAsync(objectNode.ToString()); await context.Response.WriteAsync("\n"); await context.Response.WriteAsync($"Path: {objectNode.GetPath()}"); await context.Response.WriteAsync("\n\nNow lets find the person who has no `favoriteNumbers`\n"); var anne = objectNode.AsArray().Where(x => x["favoriteNumbers"] is null).FirstOrDefault(); if (anne is object) { await context.Response.WriteAsync("\n"); await context.Response.WriteAsync(anne.ToString()); await context.Response.WriteAsync($"\nPath : {anne.GetPath()}"); } }); app.Run(); ================================================ FILE: projects/json/json-16/README.md ================================================ # Writable DOM - Finding a node using LINQ 3 In this example we are trying to find a node in an array based on an absence of a property. ================================================ FILE: projects/json/json-16/json-16.csproj ================================================ net10.0 true preview ================================================ FILE: projects/json/json-17/Program.cs ================================================ using System.Text.Json.Nodes; var app = WebApplication.Create(); app.Run(async context => { var objectNode = JsonNode.Parse(@" [ { ""name"" : ""anne"", ""age"" : 34, ""gender"" : ""female"" }, { ""name"" : ""hadi"", ""age"" : 29, ""gender"" : ""non-binary"", ""favoriteNumbers"" : [1, 5, 6] }, { ""name"" : ""abdelfattah"", ""age"" : 30, ""gender"" : ""non-binary"", ""favoriteNumbers"" : [3, 9, 10, 11] } ]"); await context.Response.WriteAsync(objectNode.ToString()); await context.Response.WriteAsync("\n"); await context.Response.WriteAsync($"Path: {objectNode.GetPath()}"); await context.Response.WriteAsync("\n\nNow lets find the person whose 3rd `favoriteNumbers` is 10\n"); var abdelfattah = objectNode.AsArray().Where(x => x["favoriteNumbers"]?[2]?.GetValue() == 10).FirstOrDefault(); if (abdelfattah is object) { await context.Response.WriteAsync("\n"); await context.Response.WriteAsync(abdelfattah.ToString()); await context.Response.WriteAsync($"\nPath : {abdelfattah.GetPath()}"); } }); app.Run(); ================================================ FILE: projects/json/json-17/README.md ================================================ # Writable DOM - Finding a node using LINQ 4 In this example we are trying to find a node in an array that has a specific value on its array property. ================================================ FILE: projects/json/json-17/json-17.csproj ================================================ net10.0 true preview ================================================ FILE: projects/json/json-18/Program.cs ================================================ using System.Text.Json.Nodes; var app = WebApplication.Create(); app.Run(async context => { var objectNode = JsonNode.Parse(@" { ""name"" : ""anne"", ""age"" : 34, ""gender"" : ""female"", ""favouriteNumbers"" : [ 1, 2, 3] }"); await context.Response.WriteAsync("From JsonNode.Parse\n"); await context.Response.WriteAsync(objectNode.ToString()); await context.Response.WriteAsync("\n\n"); var verbose = new JsonObject() { ["name"] = JsonValue.Create("anne"), ["age"] = JsonValue.Create(34), ["gender"] = JsonValue.Create("female"), ["favoriteNumbers"] = new JsonArray() { JsonValue.Create(1), JsonValue.Create(2), JsonValue.Create(3) } }; await context.Response.WriteAsync("From new JsonObject verbose\n"); await context.Response.WriteAsync(verbose.ToString()); var terse = new JsonObject() { ["name"] = "anne", ["age"] = 34, ["gender"] = "female", ["favoriteNumbers"] = new JsonArray() { 1, 2, 3 } }; await context.Response.WriteAsync("\n\nFrom new JsonObject terse\n"); await context.Response.WriteAsync(terse.ToString()); }); app.Run(); ================================================ FILE: projects/json/json-18/README.md ================================================ # Writable DOM - Create a JSON document using JsonObject In this example we are demonstrating on how to construct a JSON document Verbose version ``` csharp var verbose = new JsonObject() { ["name"] = JsonValue.Create("anne"), ["age"] = JsonValue.Create(34), ["gender"] = JsonValue.Create("female"), ["favoriteNumbers"] = new JsonArray() { JsonValue.Create(1), JsonValue.Create(2), JsonValue.Create(3) } }; ``` Terse version through implicit operator ``` csharp var terse = new JsonObject() { ["name"] = "anne", ["age"] = 34, ["gender"] = "female", ["favoriteNumbers"] = new JsonArray() { 1, 2, 3 } }; ``` ================================================ FILE: projects/json/json-18/json-18.csproj ================================================ net10.0 true preview ================================================ FILE: projects/json/json-19/Program.cs ================================================ using System.Text.Json.Nodes; var app = WebApplication.Create(); app.Run(async context => { var objectNode = JsonNode.Parse(@" [ { ""name"" : ""anne"", ""age"" : 34, ""gender"" : ""female"" }, { ""name"" : ""hadi"", ""age"" : 29, ""gender"" : ""non-binary"", ""favoriteNumbers"" : [1, 5, 6] }, { ""name"" : ""abdelfattah"", ""age"" : 30, ""gender"" : ""non-binary"", ""favoriteNumbers"" : [3, 9, 10, 11] } ]"); await context.Response.WriteAsync("From JsonNode.Parse\n"); await context.Response.WriteAsync(objectNode.ToString()); await context.Response.WriteAsync("\n\n"); var verbose = new JsonArray() { new JsonObject() { ["name"] = JsonValue.Create("anne"), ["age"] = JsonValue.Create(34), ["gender"] = JsonValue.Create("female"), ["favoriteNumbers"] = new JsonArray() { JsonValue.Create(1), JsonValue.Create(2), JsonValue.Create(3) } }, new JsonObject() { ["name"] = JsonValue.Create("hadi"), ["age"] = JsonValue.Create(29), ["gender"] = JsonValue.Create("non-binary"), ["favoriteNumbers"] = new JsonArray() { JsonValue.Create(1), JsonValue.Create(5), JsonValue.Create(6) } }, new JsonObject() { ["name"] = JsonValue.Create("abdelfattah"), ["age"] = JsonValue.Create(30), ["gender"] = JsonValue.Create("non-binary"), ["favoriteNumbers"] = new JsonArray() { JsonValue.Create(3), JsonValue.Create(9), JsonValue.Create(10), JsonValue.Create(11) } } }; await context.Response.WriteAsync("From new JsonObject verbose\n"); await context.Response.WriteAsync(verbose.ToString()); var terse = new JsonArray() { new JsonObject() { ["name"] = "anne", ["age"] = 34, ["gender"] = "female", ["favoriteNumbers"] = new JsonArray(1, 2, 3) }, new JsonObject() { ["name"] = "hadi", ["age"] = 29, ["gender"] = "non-binary", ["favoriteNumbers"] = new JsonArray(1, 5, 6) }, new JsonObject() { ["name"] = "abdelfattah", ["age"] = 30, ["gender"] = "non-binary", ["favoriteNumbers"] = new JsonArray(3, 9, 10, 11) } }; await context.Response.WriteAsync("\n\nFrom new JsonObject terse\n"); await context.Response.WriteAsync(terse.ToString()); }); app.Run(); ================================================ FILE: projects/json/json-19/README.md ================================================ # Writable DOM - Create a JSON document using JsonArray In this example we are demonstrating on how to construct a JSON document using `JsonArray`. Verbose version ``` csharp var verbose = new JsonArray() { new JsonObject() { ["name"] = JsonValue.Create("anne"), ["age"] = JsonValue.Create(34), ["gender"] = JsonValue.Create("female"), ["favoriteNumbers"] = new JsonArray() { JsonValue.Create(1), JsonValue.Create(2), JsonValue.Create(3) } }, new JsonObject() { ["name"] = JsonValue.Create("hadi"), ["age"] = JsonValue.Create(29), ["gender"] = JsonValue.Create("non-binary"), ["favoriteNumbers"] = new JsonArray() { JsonValue.Create(1), JsonValue.Create(5), JsonValue.Create(6) } }, new JsonObject() { ["name"] = JsonValue.Create("abdelfattah"), ["age"] = JsonValue.Create(30), ["gender"] = JsonValue.Create("non-binary"), ["favoriteNumbers"] = new JsonArray() { JsonValue.Create(3), JsonValue.Create(9), JsonValue.Create(10), JsonValue.Create(11) } } }; ``` Terse version through implicit operator ``` csharp var terse = new JsonArray() { new JsonObject() { ["name"] = "anne", ["age"] = 34, ["gender"] = "female", ["favoriteNumbers"] = new JsonArray(1, 2, 3) }, new JsonObject() { ["name"] = "hadi", ["age"] = 29, ["gender"] = "non-binary", ["favoriteNumbers"] = new JsonArray(1, 5, 6) }, new JsonObject() { ["name"] = "abdelfattah", ["age"] = 30, ["gender"] = "non-binary", ["favoriteNumbers"] = new JsonArray(3, 9, 10, 11) } }; ``` ================================================ FILE: projects/json/json-19/json-19.csproj ================================================ net10.0 true preview ================================================ FILE: projects/json/json-2/Program.cs ================================================ using System.Text.Json; using System.Text.Json.Serialization; var app = WebApplication.Create(); app.MapGet("/", () => { var payload = new Person // We won't assign any value to the property IsWorking. { Name = "Annie", Age = 33, IsMarried = false, CurrentTime = DateTimeOffset.UtcNow, Characters = new Dictionary { {"Funny" , true}, {"Feisty" , true}, {"Brilliant" , true}, {"FOMA", false} } }; var options = new JsonSerializerOptions { WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, PropertyNamingPolicy = JsonNamingPolicy.CamelCase, DictionaryKeyPolicy = JsonNamingPolicy.CamelCase }; return Results.Json(payload, options); }); app.Run(); public class Person { public string Name { get; set; } public int Age { get; set; } public bool IsMarried { get; set; } public DateTimeOffset CurrentTime { get; set; } public bool? IsWorking { get; set; } public Dictionary Characters { get; set; } } ================================================ FILE: projects/json/json-2/README.md ================================================ # Setting the options for JsonSerializer.SerializeAsync These are the following options (`JsonSerializerOptions`) you can set that affect the serialization of your object * `IgnoreNullValues`. If your property is null, do not serialize it to JSON. * `PropertyNamingPolicy`. If you don't set this, your property will be serialized as PascalCase, which is the property naming convention for C#. To serialize it to camelCase, use `JsonNamingPolicy.CamelCase`. * `DictionaryKeyPolicy`. Ditto above but for your dictionary keys. * `WriteIndented`. Set it to true so it is formatted for human readibility. For production though, set it to false. ================================================ FILE: projects/json/json-2/json-2.csproj ================================================ net10.0 true preview ================================================ FILE: projects/json/json-20/Program.cs ================================================ using System.Text.Json.Nodes; var app = WebApplication.Create(); app.Run(async context => { var objectNode = JsonNode.Parse(@" [ { ""name"" : ""anne"", ""age"" : 34, ""gender"" : ""female"" }, { ""name"" : ""hadi"", ""age"" : 29, ""gender"" : ""non-binary"", ""favoriteNumbers"" : [1, 5, 6] }, { ""name"" : ""abdelfattah"", ""age"" : 30, ""gender"" : ""non-binary"", ""favoriteNumbers"" : [3, 9, 10, 11] } ]"); await context.Response.WriteAsync("From JsonNode.Parse\n"); await context.Response.WriteAsync(objectNode.ToString()); await context.Response.WriteAsync("\n\n"); objectNode[0]["name"] = "Susan"; objectNode[1]["name"] = "Prince"; objectNode[2]["name"] = "Cyrus"; await context.Response.WriteAsync("Updated document\n"); await context.Response.WriteAsync(objectNode.ToString()); await context.Response.WriteAsync("\n\n"); }); app.Run(); ================================================ FILE: projects/json/json-20/README.md ================================================ # Writable DOM - Update document This example shows how to update properties of a JSON document. ================================================ FILE: projects/json/json-20/json-20.csproj ================================================ net10.0 true preview ================================================ FILE: projects/json/json-21/Program.cs ================================================ using System.Text.Json.Nodes; var app = WebApplication.Create(); app.Run(async context => { var objectNode = JsonNode.Parse(@" [ { ""name"" : ""anne"", ""age"" : 34, ""gender"" : ""female"" }, { ""name"" : ""hadi"", ""age"" : 29, ""gender"" : ""non-binary"", ""favoriteNumbers"" : [1, 5, 6] }, { ""name"" : ""abdelfattah"", ""age"" : 30, ""gender"" : ""non-binary"", ""favoriteNumbers"" : [3, 9, 10, 11] } ]"); await context.Response.WriteAsync("From JsonNode.Parse\n"); await context.Response.WriteAsync(objectNode.ToString()); await context.Response.WriteAsync("\n\n"); objectNode[0].AsObject().Remove("name"); objectNode.AsArray().RemoveAt(1); await context.Response.WriteAsync("Updated document\n"); await context.Response.WriteAsync(objectNode.ToString()); await context.Response.WriteAsync("\n\n"); }); app.Run(); ================================================ FILE: projects/json/json-21/README.md ================================================ # Writable DOM - Remove elements This example shows how to update remove an object property and an element in an array. ```csharp objectNode[0].AsObject().Remove("name"); objectNode.AsArray().RemoveAt(1); ``` ================================================ FILE: projects/json/json-21/json-21.csproj ================================================ net10.0 true preview ================================================ FILE: projects/json/json-22/Program.cs ================================================ using System.Text.Json.Nodes; var app = WebApplication.Create(); app.Run(async context => { var objectNode = JsonNode.Parse(@" [ { ""name"" : ""anne"", ""age"" : 34, ""gender"" : ""female"" }, { ""name"" : ""hadi"", ""age"" : 29, ""gender"" : ""non-binary"", ""favoriteNumbers"" : [1, 5, 6] }, { ""name"" : ""abdelfattah"", ""age"" : 30, ""gender"" : ""non-binary"", ""favoriteNumbers"" : [3, 9, 10, 11] } ]"); await context.Response.WriteAsync("From JsonNode.Parse\n"); await context.Response.WriteAsync(objectNode.ToString()); await context.Response.WriteAsync("\n\n"); var additionalNode = JsonNode.Parse(@" { ""name"" : ""prince"", ""age"" : 30, ""gender"" : ""male"" } "); var objectArray = objectNode.AsArray(); objectArray.Insert(objectArray.Count, additionalNode); var firstNode = JsonNode.Parse(@" { ""name"" : ""arathi"", ""age"" : 33, ""gender"" : ""female"" } "); objectArray.Insert(0, firstNode); await context.Response.WriteAsync("Updated document\n"); await context.Response.WriteAsync(objectNode.ToString()); await context.Response.WriteAsync("\n\n"); }); app.Run(); ================================================ FILE: projects/json/json-22/README.md ================================================ # Writable DOM - add item into array This example shows how to add items at the first position of an array and at the last position. ================================================ FILE: projects/json/json-22/json-22.csproj ================================================ net10.0 true preview ================================================ FILE: projects/json/json-23/Program.cs ================================================ using System.Text.Json.Serialization.Metadata; using System.Text.Json; var options = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase, TypeInfoResolver = new DefaultJsonTypeInfoResolver { Modifiers = { IgnoreNegativeValues } } }; static void IgnoreNegativeValues (JsonTypeInfo typeInfo) { if (typeInfo.Type != typeof(People)) return; foreach(JsonPropertyInfo propInfo in typeInfo.Properties) { if (propInfo.PropertyType == typeof(int)) propInfo.ShouldSerialize = static (obj, val) => (int)val > 0; } } var app = WebApplication.Create(); app.MapGet("/", () => { var people = new List { new People("Anne", 37), new People("John", 23), new People("Megan", -12) }; var list = JsonSerializer.Serialize(people, options); return Results.Text(list, "application/json"); }); app.Run(); public record People(string Name, int Age); ================================================ FILE: projects/json/json-23/README.md ================================================ # Contract Customization This example shows how to customize serialization using `DefaultJsonTypeInfoResolver`. `IgnoreNegativeValue` code comes from https://devblogs.microsoft.com/dotnet/system-text-json-in-dotnet-7/. ================================================ FILE: projects/json/json-23/json-23.csproj ================================================ net10.0 true preview ================================================ FILE: projects/json/json-24/Program.cs ================================================ using System.Text.Json.Serialization.Metadata; using System.Text.Json; var options = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase, TypeInfoResolver = new DefaultJsonTypeInfoResolver { Modifiers = { NumberAsString } } }; static void NumberAsString (JsonTypeInfo typeInfo) { if (typeInfo.Type != typeof(People)) return; foreach(JsonPropertyInfo propInfo in typeInfo.Properties) { if (propInfo.PropertyType == typeof(int) && propInfo.Name == "age") propInfo.NumberHandling = System.Text.Json.Serialization.JsonNumberHandling.WriteAsString; } } var app = WebApplication.Create(); app.MapGet("/", () => { var people = new List { new People("Anne", 37, 165), new People("John", 23, 180), new People("Megan", 34, 150) }; var list = JsonSerializer.Serialize(people, options); return Results.Text(list, "application/json"); }); app.Run(); public record People(string Name, int Age, int Height); ================================================ FILE: projects/json/json-24/README.md ================================================ # Contract Customization - write number as string This example shows how to customize serialization using `DefaultJsonTypeInfoResolver`. In this case we want to write `number` as `string` in JSON for `Age` values. ================================================ FILE: projects/json/json-24/json-24.csproj ================================================ net10.0 true preview ================================================ FILE: projects/json/json-25/Program.cs ================================================ using System.Text.Json.Serialization.Metadata; using System.Text.Json; var options = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase, TypeInfoResolver = new DefaultJsonTypeInfoResolver { Modifiers = { AddTimeStamp } } }; static void AddTimeStamp (JsonTypeInfo typeInfo) { if (typeInfo.Kind != JsonTypeInfoKind.Object && typeInfo.Properties.All(prop => prop.Name == "timestamp")) return; var timestamp = typeInfo.CreateJsonPropertyInfo(typeof(DateTime), "timestamp"); timestamp.Get = x => DateTime.UtcNow; typeInfo.Properties.Add(timestamp); } var app = WebApplication.Create(); app.MapGet("/", () => { var people = new List { new People("Anne", 37, 165), new People("John", 23, 180), new People("Megan", 34, 150) }; var list = JsonSerializer.Serialize(people, options); return Results.Text(list, "application/json"); }); app.Run(); public record People(string Name, int Age, int Height); ================================================ FILE: projects/json/json-25/README.md ================================================ # Contract Customization - add additional property on serialization This example shows how to customize serialization using `DefaultJsonTypeInfoResolver`. In this case we add one extra "timestamp" property to the serialization process. ================================================ FILE: projects/json/json-25/json-25.csproj ================================================ net10.0 true preview ================================================ FILE: projects/json/json-26/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#eef7de", "activityBar.background": "#eef7de", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#65b0da", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#eef7de", "statusBar.background": "#d8eeb4", "statusBar.debuggingBackground": "#cab4ee", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#c2e58a", "statusBarItem.remoteBackground": "#d8eeb4", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#d8eeb4", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#d8eeb499", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#d8eeb4" } ================================================ FILE: projects/json/json-26/Program.cs ================================================ using System.Text.Json.Nodes; using System.Text.Json; var app = WebApplication.Create(); app.Run(async context => { var objectNode = JsonNode.Parse(""" { "name" : "abdelfattah", "age" : 33, "isMarried" : true, "gender" : "non-binary", "address" : { "city" : "Cairo", "country" : "Egypt" }, "favoriteNumbers" : [3, 9, 10, 11] } """); await context.Response.WriteAsync("From JsonNode.Parse\n"); await context.Response.WriteAsync(objectNode.ToString()); await context.Response.WriteAsync("\n\n"); var json = objectNode.AsObject(); foreach(var i in json) { var val = i.Value; switch(val.GetValueKind()) { case JsonValueKind.String : await context.Response.WriteAsync($"|{i.Key} |{val} | string |\n"); break; case JsonValueKind.False: case JsonValueKind.True: await context.Response.WriteAsync($"|{i.Key} |{val} | boolean |\n"); break; case JsonValueKind.Number: var v = val.AsValue(); if (v.TryGetValue(out int intVal)) { await context.Response.WriteAsync($"|{i.Key} |{intVal} | int |\n"); } else if (v.TryGetValue(out int doubleVal)) { await context.Response.WriteAsync($"|{i.Key} |{doubleVal} | double |\n"); } break; case JsonValueKind.Array: var arr = val.AsArray(); await context.Response.WriteAsync($"|{i.Key} |{arr} | array |\n"); break; case JsonValueKind.Object: var obj = val.AsObject(); await context.Response.WriteAsync($"|{i.Key} |{obj} | object |\n"); break; default : break; } } }); app.Run(); ================================================ FILE: projects/json/json-26/README.md ================================================ # Writable DOM - Find the type of a JSON property In this example we are demonstrating on how to detect the type of a JSON property. ================================================ FILE: projects/json/json-26/json-26.csproj ================================================ net10.0 true preview ================================================ FILE: projects/json/json-3/Program.cs ================================================ using System.Text.Json; using System.Text.Json.Serialization; var app = WebApplication.Create(); app.MapGet("/", () => { var payload = new { Name = "Annie", Age = 33, IsMarried = false, CurrentTime = DateTimeOffset.UtcNow, Characters = new Dictionary { {"Funny" , true}, {"Feisty" , true}, {"Brilliant" , true}, {"FOMA", false} } }; var options = new JsonSerializerOptions { WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, PropertyNamingPolicy = JsonNamingPolicy.CamelCase, DictionaryKeyPolicy = JsonNamingPolicy.CamelCase }; return Results.Json(payload, options); }); app.Run(); ================================================ FILE: projects/json/json-3/README.md ================================================ # Serialize anonymous type using JsonSerializer.SerializeAsync You can also just create adhoc JSON document using anonymous type. ================================================ FILE: projects/json/json-3/json-3.csproj ================================================ net10.0 true preview ================================================ FILE: projects/json/json-4/Program.cs ================================================ using System.Text.Json; using System.Text.Json.Serialization; var app = WebApplication.Create(); app.MapGet("/", () => { var payload = new Person { Name = "Annie", Age = 33, IsMarried = false, CurrentTime = DateTimeOffset.UtcNow, Characters = new Dictionary { {"Funny" , true}, {"Feisty" , true}, {"Brilliant" , true}, {"FOMA", false} }, IsWorking = true }; var options = new JsonSerializerOptions { WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, PropertyNamingPolicy = JsonNamingPolicy.CamelCase, DictionaryKeyPolicy = JsonNamingPolicy.CamelCase }; return Results.Json(payload, options); }); app.Run(); public class Person { //Setting this property name explicitly means that the JsonSerializerOptions.PropertyNamingPolicy won't apply [JsonPropertyName("FullName")] public string Name { get; set; } public int Age { get; set; } public bool IsMarried { get; set; } public DateTimeOffset CurrentTime { get; set; } [JsonIgnore] // Do not serialize this property public bool? IsWorking { get; set; } public Dictionary Characters { get; set; } } ================================================ FILE: projects/json/json-4/README.md ================================================ # Control JSON serialization using attributes Right now there are two attributes available for serializations * `[JsonPropertyName]`. This controls the property name generated by the serialization. The name specified here will not be affected by `JsonSerializerOptions.PropertyNamingPolicy`. * `[JsonIgnore]`. This tells the serializer not to generate the property in the output JSON document. ================================================ FILE: projects/json/json-4/json-4.csproj ================================================ net10.0 true preview ================================================ FILE: projects/json/json-5/Program.cs ================================================ using System.Text.Json; using System.Text.Json.Serialization; var app = WebApplication.Create(); app.MapGet("/", () => { var payload = new Person { Name = "Annie", Age = 33, IsMarried = false, CurrentTime = DateTimeOffset.UtcNow, Characters = new Dictionary { {"Funny" , true}, {"Feisty" , true}, {"Brilliant" , true}, {"FOMA", false} }, IsWorking = true, Extensions = new Dictionary { { "SuperPowers", new { Flight = false, Humor = true, Invisibility = true }}, // ad hoc object { "FavouriteWords", new string[] { "Hello", "Oh Dear", "Bye"} }, // an array of primitives { "Stats", new object[] { new { Flight = 0 }, new { Humor = 99 }, new { Invisibility = 30, Charged = true }}}, // an array of mixed objects } }; var options = new JsonSerializerOptions { WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, PropertyNamingPolicy = JsonNamingPolicy.CamelCase, DictionaryKeyPolicy = JsonNamingPolicy.CamelCase }; return Results.Json(payload, options); }); app.Run(); public class Person { public string Name { get; set; } public int Age { get; set; } public bool IsMarried { get; set; } public DateTimeOffset CurrentTime { get; set; } public bool? IsWorking { get; set; } public Dictionary Characters { get; set; } public Dictionary Extensions { get; set; } } ================================================ FILE: projects/json/json-5/README.md ================================================ # Serialization a Dictionary of object A `Dictionary` can be used to generate pretty much any shape of JSON document that you want. ================================================ FILE: projects/json/json-5/json-5.csproj ================================================ net10.0 true preview ================================================ FILE: projects/json/json-6/Program.cs ================================================ using System.Text.Json; using Microsoft.Net.Http.Headers; var app = WebApplication.Create(); app.MapGet("/", async context => { var payload = new Person { Name = "Annie", Age = 33, IsMarried = false, CurrentTime = DateTimeOffset.UtcNow, Characters = new Dictionary { {"Funny" , true}, {"Feisty" , true}, {"Brilliant" , true}, {"FOMA", false} }, Superpowers = new List { new Superpower("Humor", 8), new Superpower("Intelligence", 10), new Superpower("Focus", 7) } }; var options = new JsonWriterOptions { Indented = true }; context.Response.Headers.Append(HeaderNames.ContentType, "application/json"); await using (var writer = new Utf8JsonWriter(context.Response.Body, options)) { writer.WriteStartObject(); writer.WriteString("name", payload.Name); writer.WriteNumber("age", payload.Age); writer.WriteBoolean("isMarried", payload.IsMarried); writer.WriteString("currentTime", payload.CurrentTime); writer.WriteStartObject("characters"); foreach (var kv in payload.Characters) writer.WriteBoolean(kv.Key, kv.Value); writer.WriteEndObject(); writer.WriteEndObject(); } }); app.Run(); public class Superpower { public string Name { get; set; } public short Rating { get; set; } public Superpower(string name, short rating) { Name = name; Rating = rating; } } public class Person { public string Name { get; set; } public int Age { get; set; } public bool IsMarried { get; set; } public DateTimeOffset CurrentTime { get; set; } public Dictionary Characters { get; set; } public List Superpowers { get; set; } } ================================================ FILE: projects/json/json-6/README.md ================================================ # Build a JSON document manually In this sample we write a JSON document to stream directly using `Utf8JsonWriter`. The JSON document has the following properties: * String * Number * Date * An object * An array of objects ================================================ FILE: projects/json/json-6/json-6.csproj ================================================ net10.0 true preview ================================================ FILE: projects/json/json-7/Program.cs ================================================ using System.Text.Json; using System.Text; using System.Text.Json.Serialization; var app = WebApplication.Create(); app.MapGet("/", () => { var payload = new { Name = "Annie", Age = 33, IsMarried = false, CurrentTime = DateTimeOffset.UtcNow, Characters = new { Funny = true, Feisty = true, Brilliant = true, FOMA = false, HighEmpathy = true } }; var options = new JsonSerializerOptions { WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, PropertyNamingPolicy = new SnakeCaseNamingPolicy(), DictionaryKeyPolicy = new SnakeCaseNamingPolicy() }; return Results.Json(payload, options); }); app.Run(); // Implementation from https://github.com/JamesNK/Newtonsoft.Json/blob/cdf10151d507d497a3f9a71d36d544b199f73435/Src/Newtonsoft.Json/Utilities/StringUtils.cs // Modified to use span internal static class StringUtils { internal enum SnakeCaseState { Start, Lower, Upper, NewWord } public static string ToSnakeCase(string s) { if (string.IsNullOrEmpty(s)) { return s; } StringBuilder sb = new StringBuilder(); SnakeCaseState state = SnakeCaseState.Start; for (int i = 0; i < s.Length; i++) { if (s[i] == ' ') { if (state != SnakeCaseState.Start) { state = SnakeCaseState.NewWord; } } else if (char.IsUpper(s[i])) { switch (state) { case SnakeCaseState.Upper: bool hasNext = (i + 1 < s.Length); if (i > 0 && hasNext) { char nextChar = s[i + 1]; if (!char.IsUpper(nextChar) && nextChar != '_') { sb.Append('_'); } } break; case SnakeCaseState.Lower: case SnakeCaseState.NewWord: sb.Append('_'); break; } char c; #if HAVE_CHAR_TO_LOWER_WITH_CULTURE c = char.ToLower(s[i], CultureInfo.InvariantCulture); #else c = char.ToLowerInvariant(s[i]); #endif sb.Append(c); state = SnakeCaseState.Upper; } else if (s[i] == '_') { sb.Append('_'); state = SnakeCaseState.Start; } else { if (state == SnakeCaseState.NewWord) { sb.Append('_'); } sb.Append(s[i]); state = SnakeCaseState.Lower; } } return sb.ToString(); } } public class SnakeCaseNamingPolicy : JsonNamingPolicy { public override string ConvertName(string name) { return StringUtils.ToSnakeCase(name); } } ================================================ FILE: projects/json/json-7/README.md ================================================ # Snake Case Json Naming Policy Create a custom naming policy that generate JSON property names in snake_case. Code for converting CamelCase property to snake_case is obtained from [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json/blob/cdf10151d507d497a3f9a71d36d544b199f73435/Src/Newtonsoft.Json/Utilities/StringUtils.cs). ================================================ FILE: projects/json/json-7/json-7.csproj ================================================ net10.0 true preview ================================================ FILE: projects/json/json-8/Program.cs ================================================ using System.Text; using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Columns; using BenchmarkDotNet.Configs; using BenchmarkDotNet.Loggers; using BenchmarkDotNet.Running; using BenchmarkDotNet.Validators; var config = new ManualConfig() .WithOptions(ConfigOptions.DisableOptimizationsValidator) .AddValidator(JitOptimizationsValidator.DontFailOnError) .AddLogger(ConsoleLogger.Default) .AddColumnProvider(DefaultColumnProviders.Instance); BenchmarkRunner.Run(config); // Implementation from https://github.com/JamesNK/Newtonsoft.Json/blob/cdf10151d507d497a3f9a71d36d544b199f73435/Src/Newtonsoft.Json/Utilities/StringUtils.cs // Modified to use span internal static class StringUtils { internal enum SnakeCaseState { Start, Lower, Upper, NewWord } public static string ToSnakeCaseNewtonsoft(string s) { if (string.IsNullOrEmpty(s)) { return s; } StringBuilder sb = new StringBuilder(); SnakeCaseState state = SnakeCaseState.Start; for (int i = 0; i < s.Length; i++) { if (s[i] == ' ') { if (state != SnakeCaseState.Start) { state = SnakeCaseState.NewWord; } } else if (char.IsUpper(s[i])) { switch (state) { case SnakeCaseState.Upper: bool hasNext = (i + 1 < s.Length); if (i > 0 && hasNext) { char nextChar = s[i + 1]; if (!char.IsUpper(nextChar) && nextChar != '_') { sb.Append('_'); } } break; case SnakeCaseState.Lower: case SnakeCaseState.NewWord: sb.Append('_'); break; } char c; #if HAVE_CHAR_TO_LOWER_WITH_CULTURE c = char.ToLower(s[i], CultureInfo.InvariantCulture); #else c = char.ToLowerInvariant(s[i]); #endif sb.Append(c); state = SnakeCaseState.Upper; } else if (s[i] == '_') { sb.Append('_'); state = SnakeCaseState.Start; } else { if (state == SnakeCaseState.NewWord) { sb.Append('_'); } sb.Append(s[i]); state = SnakeCaseState.Lower; } } return sb.ToString(); } public static string ToSnakeCaseLinq(string s) { return string.Concat(s.Select((x, i) => i > 0 && char.IsUpper(x) ? "_" + x.ToString() : x.ToString())).ToLower(); } } [MemoryDiagnoser] public class SnakeCaseConverter { [Benchmark] public string ConvertToSnakeCaseNewtonsoft() { return StringUtils.ToSnakeCaseNewtonsoft("SocialSecurityNumber"); } [Benchmark] public string ConvertToSnakeCaseLinq() { return StringUtils.ToSnakeCaseLinq("SocialSecurityNumber"); } } ================================================ FILE: projects/json/json-8/README.md ================================================ # A benchmark between two approaches in converting CamelCase to snake_case The first implementation is obtained from [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json/blob/cdf10151d507d497a3f9a71d36d544b199f73435/Src/Newtonsoft.Json/Utilities/StringUtils.cs). The second implementation is obtained from this [Gist](https://gist.github.com/vkobel/d7302c0076c64c95ef4b). ## instructions - `dotnet build -configuration Release` to build the benchmark - `dotnet run` ================================================ FILE: projects/json/json-8/json-8.csproj ================================================ net10.0 true Exe preview ================================================ FILE: projects/json/json-9/Program.cs ================================================ using System.Text.Json; using System.Text.Json.Serialization; var app = WebApplication.Create(); app.MapGet("/", () => { var payload = new Person { Name = "Annie", TimeWaiting = new TimeSpan(1000, 0, 0, 0) // 1000 days }; var options = new JsonSerializerOptions { WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, PropertyNamingPolicy = JsonNamingPolicy.CamelCase, DictionaryKeyPolicy = JsonNamingPolicy.CamelCase, Converters = { new TimeSpanConverter() } }; return Results.Json(payload, options); }); app.Run(); public class Person { public string Name { get; set; } public TimeSpan TimeWaiting { get; set; } } public class TimeSpanConverter : JsonConverter { public override TimeSpan Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { return TimeSpan.Parse(reader.GetString()); } public override void Write(Utf8JsonWriter writer, TimeSpan value, JsonSerializerOptions options) { writer.WriteStringValue(value.ToString()); } } ================================================ FILE: projects/json/json-9/README.md ================================================ # Custom Converter This is an custom converter implementation for TimeSpan type for JsonSerializer. ================================================ FILE: projects/json/json-9/json-9.csproj ================================================ net10.0 true preview ================================================ FILE: projects/localization/README.md ================================================ # Localization and Globalization (6) This section is all about languages, culture, etc. * [Localization](/projects/localization/localization-1) Shows the most basic use of localization using a resource file. This sample only supports French language (because we are fancy). It needs the following dependency `"Microsoft.AspNetCore.Localization": "2.1.0"` and `"Microsoft.Extensions.Localization": "2.1.0"`. * [Localization - 2](/projects/localization/localization-2) We build upon the previous sample and demonstrate how to switch request culture via query string using the built in `QueryStringRequestCultureProvider`. This sample supports English and French. * [Localization - 3](/projects/localization/localization-3) Demonstrate the difference between `Culture` and `UI Culture`. * [Localization - 4](/projects/localization/localization-4) Demonstrate how to switch request culture via cookie using the built in `CookieRequestCultureProvider`. This sample supports English and French. * [Localization - 5](/projects/localization/localization-5) Demonstrate using Portable Object (PO) files to support localization instead of the cumbersome resx file. This sample requires ```OrchardCore.Localization.Core``` package. This sample requires ```ASPNET Core 2```. * [Localization - 6](/projects/localization/localization-6) This is a continuation of previous sample but with context, which allows the same translation key to return different strings. dotnet8 ================================================ FILE: projects/localization/build.bat ================================================ dotnet build localization-1 dotnet build localization-2 dotnet build localization-3 dotnet build localization-4 dotnet build localization-5 dotnet build localization-6 ================================================ FILE: projects/localization/build.sh ================================================ #!/bin/bash dotnet build localization-1 dotnet build localization-2 dotnet build localization-3 dotnet build localization-4 dotnet build localization-5 dotnet build localization-6 ================================================ FILE: projects/localization/localization-1/Program.cs ================================================ using Microsoft.AspNetCore.Localization; using Microsoft.Extensions.Localization; using System.Globalization; var builder = WebApplication.CreateBuilder(); builder.Services.AddLocalization(options => options.ResourcesPath = "resources"); var app = builder.Build(); var stringLocalizerFactory = app.Services.GetService(); var local = stringLocalizerFactory.Create("Common", typeof(Program).Assembly.FullName); //This section is important otherwise aspnet won't be able to pick up the resource var supportedCultures = new List { new CultureInfo("fr-FR") }; var options = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("fr-FR"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; app.UseRequestLocalization(options); app.Run(async context => { var requestCulture = context.Features.Get(); await context.Response.WriteAsync($"{requestCulture.RequestCulture.Culture} - {local["Hello"]} {local["Goodbye"]} {local["Yes"]} {local["No"]}"); }); app.Run(); ================================================ FILE: projects/localization/localization-1/localization.csproj ================================================ net10.0 true preview ================================================ FILE: projects/localization/localization-1/resources/Common.fr-FR.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Au Revoir Bonjour Oui Non ================================================ FILE: projects/localization/localization-2/Program.cs ================================================ using Microsoft.AspNetCore.Localization; using Microsoft.Extensions.Localization; using System.Globalization; var builder = WebApplication.CreateBuilder(); builder.Services.AddLocalization(options => options.ResourcesPath = "resources"); var app = builder.Build(); var stringLocalizerFactory = app.Services.GetService(); var local = stringLocalizerFactory.Create("Common", typeof(Program).Assembly.FullName); //This section is important otherwise aspnet won't be able to pick up the resource var supportedCultures = new List { new CultureInfo("fr-FR"), new CultureInfo("en-US") }; var options = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("fr-FR"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; app.UseRequestLocalization(options); //These are the three default services available at Configure app.Run(async context => { await context.Response.WriteAsync("

    QueryStringRequestCultureProvider

    We are using query string to switch the request culture.

    "); var requestCulture = context.Features.Get().RequestCulture; if (requestCulture.Culture.TwoLetterISOLanguageName != "fr") await context.Response.WriteAsync($"Switch to French
    "); else if (requestCulture.Culture.TwoLetterISOLanguageName != "en") await context.Response.WriteAsync($"Switch to English
    "); await context.Response.WriteAsync($@" Request Culture: {requestCulture.Culture}
    Localized strings: {local["Hello"]} {local["Goodbye"]} {local["Yes"]} {local["No"]} "); }); app.Run(); ================================================ FILE: projects/localization/localization-2/localization-2.csproj ================================================ net10.0 true preview ================================================ FILE: projects/localization/localization-2/resources/Common.en-US.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 So long Howdy Yah Nope ================================================ FILE: projects/localization/localization-2/resources/Common.fr-FR.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Au Revoir Bonjour Oui Non ================================================ FILE: projects/localization/localization-3/Program.cs ================================================ using Microsoft.AspNetCore.Localization; using Microsoft.Extensions.Localization; using System.Globalization; var builder = WebApplication.CreateBuilder(); builder.Services.AddLocalization(options => options.ResourcesPath = "resources"); var app = builder.Build(); var stringLocalizerFactory = app.Services.GetService(); var local = stringLocalizerFactory.Create("Common", typeof(Program).Assembly.FullName); //This section is important otherwise aspnet won't be able to pick up the resource var supportedCultures = new List { new CultureInfo("en-US"), new CultureInfo("en-GB") }; var options = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("en-GB"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; app.UseRequestLocalization(options); //These are the three default services available at Configure app.Run(async context => { await context.Response.WriteAsync("

    Culture vs UI Culture

    UI Culture affects the resource string. Culture affects number formatting, dates, etc.

    "); var requestCulture = context.Features.Get().RequestCulture; await context.Response.WriteAsync($@" Culture US - UI Culture GB
    Culture GB - UI Culture US

    Request Culture: {requestCulture.Culture}
    Today's Date (Culture): {DateTime.Now.ToString()}

    Request UI Culture: {requestCulture.UICulture}
    Localized strings (UI Culture): {local["Hello"]} {local["Goodbye"]} {local["Yes"]} {local["No"]} "); }); app.Run(); ================================================ FILE: projects/localization/localization-3/localization-3.csproj ================================================ net10.0 true preview ================================================ FILE: projects/localization/localization-3/resources/Common.en-US.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 So long Howdy Yah Nope ================================================ FILE: projects/localization/localization-4/Program.cs ================================================ using Microsoft.AspNetCore.Localization; using Microsoft.Extensions.Localization; using System.Globalization; var builder = WebApplication.CreateBuilder(); builder.Services.AddLocalization(options => options.ResourcesPath = "resources"); var app = builder.Build(); var stringLocalizerFactory = app.Services.GetService(); var local = stringLocalizerFactory.Create("Common", typeof(Program).Assembly.FullName); //This section is important otherwise aspnet won't be able to pick up the resource var supportedCultures = new List { new CultureInfo("fr-FR"), new CultureInfo("en-US") }; var options = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("fr-FR"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; app.UseRequestLocalization(options); app.Run(async context => { var languageSwitch = context.Request.Query["lang"]; try { if (languageSwitch == "fr") { var val = CookieRequestCultureProvider.MakeCookieValue(new RequestCulture("fr-FR")); context.Response.Cookies.Append(CookieRequestCultureProvider.DefaultCookieName, val); context.Response.Redirect("/"); return; } else if (languageSwitch == "en") { var val = CookieRequestCultureProvider.MakeCookieValue(new RequestCulture("en-US")); context.Response.Cookies.Append(CookieRequestCultureProvider.DefaultCookieName, val); context.Response.Redirect("/"); return; } } catch (Exception ex) { await context.Response.WriteAsync($"error {ex.Message}"); } await context.Response.WriteAsync($"

    CookieRequestCultureProvider

    We are using a cookie named \"{CookieRequestCultureProvider.DefaultCookieName}\" to switch the request culture.

    "); var requestCulture = context.Features.Get().RequestCulture; await context.Response.WriteAsync($@" Click here for French cookie and here for English cookie.

    Request Culture: {requestCulture.Culture}
    Localized strings: {local["Hello"]} {local["Goodbye"]} {local["Yes"]} {local["No"]} "); }); app.Run(); ================================================ FILE: projects/localization/localization-4/localization-4.csproj ================================================ net10.0 true preview ================================================ FILE: projects/localization/localization-4/resources/Common.en-US.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 So long Howdy Yah Nope ================================================ FILE: projects/localization/localization-4/resources/Common.fr-FR.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Au Revoir Bonjour Oui Non ================================================ FILE: projects/localization/localization-5/Program.cs ================================================ using System.Globalization; using Microsoft.AspNetCore.Localization; using Microsoft.Extensions.Localization; var builder = WebApplication.CreateBuilder(); builder.Services.AddMemoryCache(); builder.Services.AddPortableObjectLocalization(); var app = builder.Build(); //We are limiting the supported culture here so this sample works in any browser from different culture setting. //To make it pick up French or other language, simply change it-IT with something else or add more supported cultures //I have added PO file for French and English var supportedCultures = new List { new CultureInfo("it-IT") }; var option = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("it-IT"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; app.UseRequestLocalization(option); app.Run(context => { var fac = context.RequestServices.GetService(); var local = fac.Create(string.Empty, string.Empty); var requestCulture = context.Features.Get().RequestCulture; return context.Response.WriteAsync($"Request Culture `{requestCulture.UICulture}` = {local["Hello"]}"); }); app.Run(); ================================================ FILE: projects/localization/localization-5/en.po ================================================ msgid "Hello" msgstr "Howdy" ================================================ FILE: projects/localization/localization-5/fr.po ================================================ msgid "Hello" msgstr "Bonjour" ================================================ FILE: projects/localization/localization-5/it.po ================================================ msgid "Hello" msgstr "Ciao" ================================================ FILE: projects/localization/localization-5/localization-5.csproj ================================================ net10.0 true preview ================================================ FILE: projects/localization/localization-6/Program.cs ================================================ using System.Globalization; using Microsoft.AspNetCore.Localization; using Microsoft.Extensions.Localization; var builder = WebApplication.CreateBuilder(); builder.Services.AddMemoryCache(); builder.Services.AddPortableObjectLocalization(); var app = builder.Build(); //We are limiting the supported culture here so this sample works in any browser from different culture setting. //To make it pick up French or other language, simply change it-IT with something else or add more supported cultures //I have added PO file for French and English var supportedCultures = new List { new CultureInfo("it-IT") }; var option = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("it-IT"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; app.UseRequestLocalization(option); app.UseRouting(); app.MapGet("greet-friend", async context => { var fac = context.RequestServices.GetService(); var local = fac.Create("Greet Friend", string.Empty); var requestCulture = context.Features.Get().RequestCulture; await context.Response.WriteAsync($"Request Culture `{requestCulture.UICulture}` = {local["Hello"]}"); }); app.MapGet("greet-lover", async context => { var fac = context.RequestServices.GetService(); var local = fac.Create("Greet Lover", string.Empty); var requestCulture = context.Features.Get().RequestCulture; await context.Response.WriteAsync($"Request Culture `{requestCulture.UICulture}` = {local["Hello"]}"); }); app.Run(async context => { var fac = context.RequestServices.GetService(); var local = fac.Create(string.Empty, string.Empty); var requestCulture = context.Features.Get().RequestCulture; context.Response.Headers.Append("Content-Type", "text/html"); await context.Response.WriteAsync(""); await context.Response.WriteAsync($"Request Culture `{requestCulture.UICulture}` = {local["Hello"]}

    "); await context.Response.WriteAsync($@"Greet Friend
    "); await context.Response.WriteAsync($@"Greet Lover
    "); await context.Response.WriteAsync(""); }); app.Run(); ================================================ FILE: projects/localization/localization-6/en.po ================================================ msgid "Hello" msgstr "Howdy" msgctxt "Greet Friend" msgid "Hello" msgstr "Howdy friend" msgctxt "Greet Lover" msgid "Hello" msgstr "Hello my darling" ================================================ FILE: projects/localization/localization-6/fr.po ================================================ msgid "Hello" msgstr "Bonjour" msgctxt "Greet Friend" msgid "Hello" msgstr "Bonjour Mon Ami" msgctxt "Greet Lover" msgid "Hello" msgstr "Bonjour Mon Amour" ================================================ FILE: projects/localization/localization-6/it.po ================================================ msgid "Hello" msgstr "Ciao" msgctxt "Greet Friend" msgid "Hello" msgstr "Ciao Tesoro" msgctxt "Greet Lover" msgid "Hello" msgstr "Ciao Amore" ================================================ FILE: projects/localization/localization-6/localization-6.csproj ================================================ net10.0 true preview ================================================ FILE: projects/logging/README.md ================================================ # Logging (5) * [Basic Logging](/projects/logging/logging-1) Shows how to do basic logging including all its various levels. * [Logging filtering](/projects/logging/logging-2) Now you can adjust what kind of logging information from various part of ASP.NET Core and your app you want show/stored. * [JSON Console Logger](/projects/logging/logging-3) This example shows how to display log to console in structured JSON logs. * [Create logging API](/projects/logging/logging-4) This example shows how to use `LoggerMessageAttribute` to source generate high performance logging API. * [Created static logger](/projects/logging/logging-5) This examples show how to create cached static loggers. * [Logging to Grafana Loki](/projects/logging/logging-Loki) This example shows how to log to [Grafana Loki](https://grafana.com/oss/loki/). dotnet6 ================================================ FILE: projects/logging/build.bat ================================================ dotnet build logging-1 dotnet build logging-2 dotnet build logging-3 dotnet build logging-Loki ================================================ FILE: projects/logging/build.sh ================================================ #!/bin/bash dotnet build logging-1 dotnet build logging-2 dotnet build logging-3 dotnet build logging-Loki ================================================ FILE: projects/logging/logging-1/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); // Adjust the minimum level here and see the impact // on the displayed logs. // The rule is it will show >= minimum level // The levels are: // - Trace = 0 // - Debug = 1 // - Information = 2 // - Warning = 3 // - Error = 4 // - Critical = 5 // - None = 6 builder.Logging.SetMinimumLevel(LogLevel.Warning); builder.Logging.AddConsole(); var app = builder.Build(); app.Run(context => { var log = app.Logger; log.LogTrace("Trace message"); log.LogDebug("Debug message"); log.LogInformation("Information message"); log.LogWarning("Warning message"); log.LogError("Error message"); log.LogCritical("Critical message"); return context.Response.WriteAsync("Hello world. Take a look at your terminal to see the logging messages."); }); app.Run(); ================================================ FILE: projects/logging/logging-1/logging-1.csproj ================================================ net10.0 true preview ================================================ FILE: projects/logging/logging-2/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Logging.AddFilter("Microsoft", LogLevel.Warning); //Only show Warning log and above from anything that contains Microsoft. builder.Logging.AddFilter("AppLogger", LogLevel.Trace);//Pretty much show everything from AppLogger builder.Logging.AddConsole(); var app = builder.Build(); app.Run(context => { app.Logger.LogInformation("This is a information message"); app.Logger.LogDebug("This is debug message"); return context.Response.WriteAsync(app.Configuration["greeting"]); }); app.Run(); ================================================ FILE: projects/logging/logging-2/appSettings.json ================================================ { "greeting": "hello world. Please check your terminal for the logging messages." } ================================================ FILE: projects/logging/logging-2/logging-2.csproj ================================================ net10.0 logging-with-filter logging-with-filter true preview ================================================ FILE: projects/logging/logging-3/Program.cs ================================================ using System.Text.Json; var builder = WebApplication.CreateBuilder(); // Trace, Debug, Information, Warning, Error, Critical, None builder.Logging.AddFilter("Microsoft", LogLevel.Warning); //Only show Warning log and above from anything that contains Microsoft. builder.Logging.AddFilter("AppLogger", LogLevel.Trace);//Pretty much show everything from AppLogger builder.Logging.AddJsonConsole(options => { options.JsonWriterOptions = new JsonWriterOptions { Indented = true }; }); var app = builder.Build(); app.Run(context => { app.Logger.LogInformation("This is a information message"); app.Logger.LogDebug("This is debug message"); return context.Response.WriteAsync(app.Configuration["greeting"]); }); app.Run(); ================================================ FILE: projects/logging/logging-3/README.md ================================================ # Emit structured JSON logs in console This example shows how to display log to console in structured JSON logs. ================================================ FILE: projects/logging/logging-3/logging-3.csproj ================================================ net10.0 true preview ================================================ FILE: projects/logging/logging-4/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#bb8dec", "activityBar.background": "#bb8dec", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#faefe4", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#bb8dec", "statusBar.background": "#a161e5", "statusBar.debuggingBackground": "#a5e561", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#8735de", "statusBarItem.remoteBackground": "#a161e5", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#a161e5", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#a161e599", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#a161e5" } ================================================ FILE: projects/logging/logging-4/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Logging.AddFilter("Microsoft", LogLevel.Error); builder.Logging.AddFilter("AppLogger", LogLevel.Error); builder.Logging.AddConsole(); var app = builder.Build(); app.MapGet("/", () => { Random rng = new Random(); List numbers = []; foreach(var x in Enumerable.Range(0, 10)) { numbers.Add(rng.Next(100)); } var html = $$"""

    LoggerMessage attribute

      {{ string.Join("", numbers.Select(x => $"
    • {x}
    • "))}}
    """; return Results.Content(html, "text/html"); }); app.MapGet("/log-it", ([FromQuery] int number) => { var log = app.Logger; if (number % 2 == 0) log.LogInformationWhenInputNumberIsEven(number); else log.LogInformationWhenInputNumberIsOdd(number); return Results.Content("Take a look at your terminal to see the logging messages."); }); app.Run(); public static partial class EvenOddLogs { [LoggerMessage(EventId = 1, Level = LogLevel.Information, Message = "input number is even !: {number}")] public static partial void LogInformationWhenInputNumberIsEven(this ILogger logger, long number); [LoggerMessage(EventId = 2, Level = LogLevel.Information, Message = "input number is odd !: {number}")] public static partial void LogInformationWhenInputNumberIsOdd(this ILogger logger, long number); } ================================================ FILE: projects/logging/logging-4/README.md ================================================ # LoggerMessageAttribute > .NET 6 introduces the LoggerMessageAttribute type. This attribute is part of the Microsoft.Extensions.Logging namespace, and when used, it source-generates performant logging APIs. The source-generation logging support is designed to deliver a highly usable and highly performant logging solution for modern .NET applications. The auto-generated source code relies on the ILogger interface in conjunction with LoggerMessage.Define functionality. > > [learn.microsoft.com](https://learn.microsoft.com/en-us/dotnet/core/extensions/logger-message-generator) ================================================ FILE: projects/logging/logging-4/logging-4.csproj ================================================ net10.0 true preview ================================================ FILE: projects/logging/logging-4/logging-4.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "logging-4", "logging-4.csproj", "{3369A14A-F7C0-4D09-9B03-B7522B17367C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {3369A14A-F7C0-4D09-9B03-B7522B17367C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3369A14A-F7C0-4D09-9B03-B7522B17367C}.Debug|Any CPU.Build.0 = Debug|Any CPU {3369A14A-F7C0-4D09-9B03-B7522B17367C}.Release|Any CPU.ActiveCfg = Release|Any CPU {3369A14A-F7C0-4D09-9B03-B7522B17367C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {D0F0F227-63E8-401D-B497-ED22BCED2F62} EndGlobalSection EndGlobal ================================================ FILE: projects/logging/logging-5/Program.cs ================================================ using System.Collections.Concurrent; var builder = WebApplication.CreateBuilder(); // Adjust the minimum level here and see the impact // on the displayed logs. // The rule is it will show >= minimum level // The levels are: // - Trace = 0 // - Debug = 1 // - Information = 2 // - Warning = 3 // - Error = 4 // - Critical = 5 // - None = 6 builder.Logging.SetMinimumLevel(LogLevel.Warning); builder.Logging.AddConsole(); var app = builder.Build(); Log.Configure(app.Services.GetRequiredService()); app.Run(context => { var log = Log.CreateLogger("main"); log.LogTrace("Trace message"); log.LogDebug("Debug message"); log.LogInformation("Information message"); log.LogWarning("Warning message"); log.LogError("Error message"); log.LogCritical("Critical message"); return context.Response.WriteAsync("Hello world. Take a look at your terminal to see the logging messages."); }); app.Run(); public static class Log { static ILoggerFactory _loggerFactory; static readonly ConcurrentDictionary _loggers = new(); public static void Configure(ILoggerFactory loggerFactory) { _loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory)); } public static ILogger CreateLogger() => _loggers.GetOrAdd(typeof(T).FullName, _ => _loggerFactory.CreateLogger()); public static ILogger CreateLogger(string categoryName) => _loggers.GetOrAdd(categoryName, _ => _loggerFactory.CreateLogger(categoryName)); } ================================================ FILE: projects/logging/logging-5/README.md ================================================ # Static Logger This sample demonstrates on how to create cached static loggers. ================================================ FILE: projects/logging/logging-5/logging-5.csproj ================================================ net10.0 true preview ================================================ FILE: projects/logging/logging-5/logging-5.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "logging-5", "logging-5.csproj", "{7E2F4271-AF61-CD47-D1E0-89E66ECCC4AB}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {7E2F4271-AF61-CD47-D1E0-89E66ECCC4AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7E2F4271-AF61-CD47-D1E0-89E66ECCC4AB}.Debug|Any CPU.Build.0 = Debug|Any CPU {7E2F4271-AF61-CD47-D1E0-89E66ECCC4AB}.Release|Any CPU.ActiveCfg = Release|Any CPU {7E2F4271-AF61-CD47-D1E0-89E66ECCC4AB}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {7B859DFE-4713-4799-9445-9EB25E2A6709} EndGlobalSection EndGlobal ================================================ FILE: projects/logging/logging-Loki/Program.cs ================================================ using LokiLoggingProvider.Options; var builder = WebApplication.CreateBuilder(args); builder.Logging.AddLoki(configure => { configure.Client = PushClient.Grpc; configure.StaticLabels.JobName = "LokiWebApplication"; }); var app = builder.Build(); app.MapGet("/test", (ILoggerFactory loggerFactory) => { var logger = loggerFactory.CreateLogger("Start"); logger.LogTrace("Trace message"); logger.LogDebug("Debug message"); logger.LogInformation("Information message"); logger.LogWarning("Warning message"); logger.LogError("Error message"); logger.LogCritical("Critical message"); return "OK"; }); app.Run(); ================================================ FILE: projects/logging/logging-Loki/README.md ================================================ # Log into Grafana Loki This example shows how to log to [Grafana Loki](https://grafana.com/oss/loki/). The Docker is used for the software hosting. - open a command-line window in the folder and execute: ```sh docker compose up ``` - make sure that [Grafana Loki](https://grafana.com/oss/loki/) and [Grafana Dashboard](https://grafana.com/grafana/) containers are succesfully installed - Compile and run the application ```sh dotnet build dotnet run ``` - Navigate to /test endpoint. The response should be 'OK'. The console window should contain **info**, **warn**, **fail** and **crit** log messages. - Navigate in a browser to the Grafana Dashboard website: - Add a loki data source - Go to the 'Explore data' page and add Label filter: ``job="LokiWebApplication"``. Press the 'Run query' button - Log messages should be shown ================================================ FILE: projects/logging/logging-Loki/docker-compose.yml ================================================ version: '3.7' volumes: grafana: ~ loki: ~ services: loki: image: "grafana/loki:latest" hostname: logs command: -config.file=/etc/loki/local-config.yaml volumes: - loki:/loki ports: - "3100:3100" # http and Grafana data source - "9095:9095" # grpc grafana: image: grafana/grafana-oss:latest-ubuntu hostname: grafana ports: - "3000:3000" #UI volumes: - grafana:/var/lib/grafana environment: - GF_AUTH_ANONYMOUS_ENABLED=true - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin - GF_AUTH_DISABLE_LOGIN_FORM=true depends_on: - loki ================================================ FILE: projects/logging/logging-Loki/logging-Loki.csproj ================================================ net10.0 enable enable preview ================================================ FILE: projects/mailkit/README.md ================================================ # Mailkit (2) This section shows samples of using [MailKit](https://github.com/jstedfast/MailKit), which is essentially **the** library to use for sending and receiving email in ASP.NET Core. * [Send message](/projects/mailkit/mailkit-1) This shows an example on how to send an email. * [Connect to POP3 Account](/projects/mailkit/mailkit-2) This shows how to connect to a POP3 account. dotnet8 ================================================ FILE: projects/mailkit/build.bat ================================================ dotnet build mailkit-1 dotnet build mailkit-2 ================================================ FILE: projects/mailkit/build.sh ================================================ #!/bin/bash dotnet build mailkit-1 dotnet build mailkit-2 ================================================ FILE: projects/mailkit/mailkit-1/Email.csproj ================================================ net10.0 true preview ================================================ FILE: projects/mailkit/mailkit-1/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; using MimeKit; using MimeKit.Text; using MailKit.Net.Smtp; using MailKit.Security; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); builder.Services.AddTransient(); var app = builder.Build(); app.UseStaticFiles(); app.MapDefaultControllerRoute(); app.Run(); [Route("")] public class HomeController : Controller { private readonly EmailService _emailService; public HomeController(EmailService EmailService) { _emailService = EmailService; } [HttpGet("")] public IActionResult Index(string message) { ViewBag.Message = message; return View(); } [HttpPost("Send")] public IActionResult Send() { _emailService.Send(new EmailMessage() { SenderName = "Change This", SenderEmail = "Change This", RecipientName = "Change This", RecipientEmail = "Change This", Subject = "Subject", Content = "Good day" }); return RedirectToAction("Index", new { Message = "Email is successfully sent" }); } } public class EmailService { public void Send(EmailMessage email) { var message = new MimeMessage(); message.From.Add(new MailboxAddress(email.SenderName, email.SenderEmail)); message.To.Add(new MailboxAddress(email.RecipientName, email.RecipientEmail)); message.Subject = email.Subject; message.Body = new TextPart(TextFormat.Html) { Text = email.Content }; using (var emailClient = new SmtpClient()) { // 587 is for smtp server port, this might change from one server to another. // SecureSocketOptions.Auto for SSL. emailClient.Connect("Change This", 587, SecureSocketOptions.Auto); //Remove any OAuth functionality as we won't be using it. emailClient.AuthenticationMechanisms.Remove("XOAUTH2"); emailClient.Authenticate("Change This", "Change This"); emailClient.Send(message); emailClient.Disconnect(true); } } } public class EmailMessage { public string SenderName { get; set; } public string SenderEmail { get; set; } public string RecipientName { get; set; } public string RecipientEmail { get; set; } public string Subject { get; set; } public string Content { get; set; } } ================================================ FILE: projects/mailkit/mailkit-1/Views/Home/Index.cshtml ================================================ Mail Kit @if(ViewBag.Message != null) {
    @ViewBag.Message
    }

    Send Email

    Make sure you change the appropriate values (replace all "Change This") inside the source code otherwise this sample won't work.

    ================================================ FILE: projects/mailkit/mailkit-2/Email.csproj ================================================ net10.0 true preview ================================================ FILE: projects/mailkit/mailkit-2/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; using MailKit.Net.Pop3; using MailKit.Security; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); builder.Services.AddTransient(); var app = builder.Build(); app.UseStaticFiles(); app.MapControllerRoute( name: "default", pattern: "{controller=Mailkit}/{action=Index}"); app.Run(); public interface IEmailService { List ReceiveEmail(int maxCount = 10); } public class EmailService : IEmailService { public List ReceiveEmail(int maxCount = 10) { using (var emailClient = new Pop3Client()) { // 995 is for POP3 server port, this might change from one server to another. // SecureSocketOptions.Auto for SSL. emailClient.Connect("POP3 server name", 995, SecureSocketOptions.Auto); //Remove any OAuth functionality as we won't be using it. emailClient.AuthenticationMechanisms.Remove("XOAUTH2"); emailClient.Authenticate("POP3 server username", "POP3 server password"); List emails = new List(); for (int i = 0; i < emailClient.Count && i < maxCount; i++) { // i variable is for maximum number of messages to retrieve var message = emailClient.GetMessage(i); var emailMessage = new EmailMessage { Content = !string.IsNullOrEmpty(message.HtmlBody) ? message.HtmlBody : message.TextBody, Subject = message.Subject, SenderName = message.Sender.Name, SenderEmail = message.Sender.Address }; } return emails; } } } public class EmailMessage { public string SenderName { get; set; } public string SenderEmail { get; set; } public string RecipientName { get; set; } public string RecipientEmail { get; set; } public string Subject { get; set; } public string Content { get; set; } } namespace PracticalAspNetCore.Controllers { public class MailkitController : Controller { private readonly IEmailService _emailService; public MailkitController(IEmailService EmailService) { _emailService = EmailService; } public IActionResult Index() { return View("/Views/Mailkit/Index.cshtml"); } [Route("Mailkit/Retrieve")] public IActionResult Retrieve() { List emails = _emailService.ReceiveEmail(50); return RedirectToAction("Index"); } } } ================================================ FILE: projects/mailkit/mailkit-2/Views/Mailkit/Index.cshtml ================================================ ================================================ FILE: projects/map-short-circuit/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.MapShortCircuit(404, "robots.txt", "favicon.ico"); app.MapGet("/", () => { return Results.Content(""" hello world """, "text/html"); }).ShortCircuit(200); app.Run(); ================================================ FILE: projects/map-short-circuit/README.md ================================================ # Use ShortCircuit Use `MapShortCircuit` or `.ShortCircuit()` to efficiently respond to a request without going through a middleware pipeline run. It skips processes such as authentication, CORS, etc. ================================================ FILE: projects/map-short-circuit/map-short-circuit.csproj ================================================ net10.0 true preview ================================================ FILE: projects/markdown-server/Program.cs ================================================ var builder = WebApplication.CreateBuilder(new WebApplicationOptions { WebRootPath = "markdown" }); var app = builder.Build(); app.Run(context => { var requestPath = context.Request.Path; //Get default page if (requestPath == "/") { var defaultMd = Path.Combine(app.Environment.WebRootPath, "index.md"); if (!File.Exists(defaultMd)) { context.Response.StatusCode = 404; return context.Response.WriteAsync("File Not Found"); } context.Response.ContentType = "text/html"; return context.Response.WriteAsync(ProduceMarkdown(defaultMd)); } //Replace the path and remove the beginning \ of the path //every request path segment represent a folder within markdown folder, e.g. // /about/us is mapped to markdown\about\us.md File // /hello is mapped to markdown\hello.md var localPath = requestPath.ToString().Replace('/', '\\').TrimStart(new char[]{'\\'}) + ".md"; var md = Path.Combine(app.Environment.WebRootPath, localPath); if (!File.Exists(md)) { context.Response.StatusCode = 404; return context.Response.WriteAsync("File Not Found"); } context.Response.ContentType = "text/html"; return context.Response.WriteAsync(ProduceMarkdown(md)); }); string ProduceMarkdown(string path) { var md = File.ReadAllText(path); var res = Markdig.Markdown.ToHtml(md); return res; } app.Run(); ================================================ FILE: projects/markdown-server/markdown/about/us.md ================================================ # About Us ================================================ FILE: projects/markdown-server/markdown/hello.md ================================================ hello world ================================================ FILE: projects/markdown-server/markdown/index.md ================================================ # Index * [Hello](/hello) * [About Us](/about/us) ================================================ FILE: projects/markdown-server/markdown-server.csproj ================================================ net10.0 true preview ================================================ FILE: projects/markdown-server-middleware/Program.cs ================================================ var builder = WebApplication.CreateBuilder(new WebApplicationOptions { WebRootPath = "markdown" }); var app = builder.Build(); app.Use((HttpContext context, RequestDelegate next) => { var markdown = new MarkdownMiddleware(next, app.Environment); return markdown.Invoke(context); }); app.Run(context => { return context.Response.WriteAsync("\nIf you read this, the file does not exist."); }); app.Run(); public class MarkdownMiddleware { readonly RequestDelegate _next; readonly IWebHostEnvironment _env; public MarkdownMiddleware(RequestDelegate next, IWebHostEnvironment env) { _next = next; _env = env; } public async Task Invoke(HttpContext context) { _env.ContentRootPath = Directory.GetCurrentDirectory(); _env.WebRootPath = Path.Combine(_env.ContentRootPath, "markdown"); var requestPath = context.Request.Path; //Get default page if (requestPath == "/") { var defaultMd = Path.Combine(_env.WebRootPath, "index.md"); if (!File.Exists(defaultMd)) { context.Response.StatusCode = 404; await context.Response.WriteAsync("File Not Found"); await _next.Invoke(context); //write here for post logic return; } //no more processing. This code is shortcircuited. context.Response.ContentType = "text/html"; await context.Response.WriteAsync(ProduceMarkdown(defaultMd)); return; } //Replace the path and remove the beginning \ of the path //every request path segment represent a folder within markdown folder, e.g. // /about/us is mapped to markdown\about\us.md File // /hello is mapped to markdown\hello.md var localPath = requestPath.ToString().Replace('/', '\\').TrimStart(new char[] { '\\' }) + ".md"; var md = Path.Combine(_env.WebRootPath, localPath); if (!File.Exists(md)) { context.Response.StatusCode = 404; await context.Response.WriteAsync("File Not Found"); await _next.Invoke(context); //write here for post logic return; } //no more processing. This code is shortcircuited. context.Response.ContentType = "text/html"; await context.Response.WriteAsync(ProduceMarkdown(md)); } string ProduceMarkdown(string path) { var md = File.ReadAllText(path); var res = Markdig.Markdown.ToHtml(md); return res; } } ================================================ FILE: projects/markdown-server-middleware/markdown/about/us.md ================================================ # About Us ================================================ FILE: projects/markdown-server-middleware/markdown/hello.md ================================================ hello world ================================================ FILE: projects/markdown-server-middleware/markdown/index.md ================================================ # Index * [Hello](/hello) * [About Us](/about/us) ================================================ FILE: projects/markdown-server-middleware/markdown-server-middleware.csproj ================================================ net10.0 true preview ================================================ FILE: projects/middleware/README.md ================================================ # Middleware (14) We will explore all aspect of middleware building in this section. * [Middleware 0](/projects/middleware/middleware-0) ASP.NET Core is built on top of pipelines of functions called middleware. This sample shows the basic outline on how they work. We are using ```IApplicationBuilder Use```, an extension method for adding middleware and ```IApplicationBuilder Run```. * [Middleware 1](/projects/middleware/middleware-1) This example shows how to pass information from one middleware to another using `HttpContext.Items`. * [Middleware 2](/projects/middleware/middleware-2) As a general rule, only one of your Middleware should write to Response in an execution path. This sample shows how to work around this by buffering the Response. e.g. If path `/` involves the execution of Middleware 1, Middleware 2 and Middleware 3, only one of these should write to Response. * [Middleware 3](/projects/middleware/middleware-3) This is the simplest middleware class you can create. * [Middleware 4](/projects/middleware/middleware-4) Use `app.Map` (`MapMiddleware`) to configure your middleware pipeline to respond only on specific url path. * [Middleware 5](/projects/middleware/middleware-5) Nested `app.Map` (show `Request.Path` and `Request.PathBase`). * [Middleware 6](/projects/middleware/middleware-6) Use `app.MapWhen`(`MapWhenMiddleware`) and Nested `app.Map` (show `Request.Path` and `Request.PathBase`). * [Middleware 7](/projects/middleware/middleware-7) Use `MapMiddleware` and `MapWhenMiddleware` directly without using extensions (show `Request.Path` and `Request.PathBase`). * [Middleware 8](/projects/middleware/middleware-8) Demonstrate the various ways you can inject dependency to your middleware class *manually*. * [Middleware 9](/projects/middleware/middleware-9) Demonstrate how to ASP.NET Core built in DI (Dependency Injection) mechanism to provide dependency for your middleware. * [Middleware 10](/projects/middleware/middleware-10) Demonstrate that a middleware is a singleton. * [Middleware 11](/projects/middleware/middleware-11) This sample is similar to `Middleware 10` except that this one implement `IMiddleware` to create Factory-based middleware activation. This means that you can create a middleware that is not a singleton (either Transient or Scoped). * [Middleware 12](/projects/middleware/middleware-12) Contrast the usage of `MapWhen` (which branch execution) and `UseWhen` (which doesn't branch execution) in configuring your Middleware. * [Middleware 13](/projects/middleware/middleware-13) Demonstrate how to implement basic error handling mechanism and how to return error object (same for all api exceptions). dotnet8 ================================================ FILE: projects/middleware/build.bat ================================================ dotnet build middleware-0 dotnet build middleware-1 dotnet build middleware-2 dotnet build middleware-3 dotnet build middleware-4 dotnet build middleware-5 dotnet build middleware-6 dotnet build middleware-7 dotnet build middleware-8 dotnet build middleware-9 dotnet build middleware-10 dotnet build middleware-11 dotnet build middleware-12 dotnet build middleware-13 ================================================ FILE: projects/middleware/build.sh ================================================ #!/bin/bash dotnet build middleware-0 dotnet build middleware-1 dotnet build middleware-2 dotnet build middleware-3 dotnet build middleware-4 dotnet build middleware-5 dotnet build middleware-6 dotnet build middleware-7 dotnet build middleware-8 dotnet build middleware-9 dotnet build middleware-10 dotnet build middleware-11 dotnet build middleware-12 dotnet build middleware-13 ================================================ FILE: projects/middleware/middleware-0/Program.cs ================================================ var app = WebApplication.Create(); //The order of these things are important. app.Use(async (context, next) => { context.Items["Content"] += "[1] ----- \n";//1 await next(context); context.Items["Content"] += "[5] =====\n";//5 await context.Response.WriteAsync(context.Items["Content"] as string); }); app.Use(async (context, next) => { context.Items["Content"] += "[2] Hello world \n";//2 await next(context); context.Items["Content"] += "[4] \n";//4 }); app.Run(context => { context.Items["Content"] += "[3] ----- \n";//3 return Task.CompletedTask; }); app.Run(); ================================================ FILE: projects/middleware/middleware-0/middleware-0.csproj ================================================ net10.0 true preview ================================================ FILE: projects/middleware/middleware-1/Program.cs ================================================ var app = WebApplication.Create(); //The order of these things are important. //Only one Middleware should write to the Response. //Do not write to Response before next.Invoke() app.Use(async (context, next) => { context.Items["Greeting"] = "Hello World"; await next(context); await context.Response.WriteAsync($"{context.Items["Greeting"]}\n"); await context.Response.WriteAsync($"{context.Items["Goodbye"]}\n"); }); app.Use(async(context, next) => { context.Items["Goodbye"] = "Goodbye for now"; await next(context); }); app.Run(); ================================================ FILE: projects/middleware/middleware-1/middleware-1.csproj ================================================ net10.0 true preview ================================================ FILE: projects/middleware/middleware-10/Program.cs ================================================ var app = WebApplication.Create(); app.UseMiddleware(typeof(TerminalMiddleware)); app.Run(); public class TerminalMiddleware { DateTime _date = DateTime.Now; public TerminalMiddleware(RequestDelegate next) { } public async Task Invoke(HttpContext context, ILogger log) { log.LogDebug($"Request: {context.Request.Path}"); context.Response.Headers.Append("Content-Type", "text/plain"); await context.Response.WriteAsync($"Middleware is singleton. Keep refreshing the page. You will see that the date does not change {_date}."); } } ================================================ FILE: projects/middleware/middleware-10/middleware-10.csproj ================================================ net10.0 true preview ================================================ FILE: projects/middleware/middleware-11/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddTransient(); var app = builder.Build(); app.UseMiddleware(typeof(TerminalMiddleware)); app.Run(); public class TerminalMiddleware : IMiddleware { ILogger _log; DateTime _date = DateTime.Now; public TerminalMiddleware(ILogger log) { _log = log; } public async Task InvokeAsync(HttpContext context, RequestDelegate next) { _log.LogDebug($"Request: {context.Request.Path}"); context.Response.Headers.Append("Content-Type", "text/plain"); await context.Response.WriteAsync($"This Middleware is transient. Keep refreshing your page. The date will keep changing: {_date}."); } } ================================================ FILE: projects/middleware/middleware-11/middleware-11.csproj ================================================ net10.0 true preview ================================================ FILE: projects/middleware/middleware-12/Program.cs ================================================ var app = WebApplication.Create(); app.UseMiddleware(); app.UseMiddleware(); app.MapWhen(context => context.Request.Path.StartsWithSegments("/map-when-example"), appBuilder => appBuilder.UseMiddleware()); app.UseWhen(context => context.Request.Path.StartsWithSegments("/use-when-example"), appBuilder => appBuilder.UseMiddleware()); app.UseMiddleware(); app.UseMiddleware(); app.Run(); public class MiddlewareHtml { readonly RequestDelegate _next; public MiddlewareHtml(RequestDelegate next) => _next = next; public async Task Invoke(HttpContext context) { context.Items["Content"] += "\n"; await _next.Invoke(context); context.Items["Content"] += ""; context.Response.Headers.Append("content-type", "text/html"); await context.Response.WriteAsync(context.Items["Content"] as string); } } public class MiddlewareTitle { readonly RequestDelegate _next; public MiddlewareTitle(RequestDelegate next) => _next = next; public async Task Invoke(HttpContext context) { context.Items["Content"] += "

    Contrasting MapWhen with UseWhen

    \n"; await _next.Invoke(context); } } public class MiddlewareFooter { readonly RequestDelegate _next; public MiddlewareFooter(RequestDelegate next) => _next = next; public async Task Invoke(HttpContext context) { await _next.Invoke(context); context.Items["Content"] += "

    Middleware Footer
    \n"; } } public class MiddlewareUsedByMapWhen { readonly RequestDelegate _next; public MiddlewareUsedByMapWhen(RequestDelegate next) => _next = next; public async Task Invoke(HttpContext context) { context.Items["Content"] += @"This message generated by MiddlewareUsedByMapWhen\n

    MapWhen branches the middleware execution hence you will not see the footer here.

    "; await _next.Invoke(context); } } public class MiddlewareUsedByUseWhen { readonly RequestDelegate _next; public MiddlewareUsedByUseWhen(RequestDelegate next) => _next = next; public async Task Invoke(HttpContext context) { context.Items["Content"] += @"This message generated by MiddlewareUsedByUseWhen\n

    UseWhen makes the execution of a Middleware conditional based on certain condition. In contrast with MapWhen, it does not branch the execution. Hence you will see the footer here.

    "; await _next.Invoke(context); } } public class MiddlewareNavigation { readonly RequestDelegate _next; public MiddlewareNavigation(RequestDelegate next) => _next = next; public async Task Invoke(HttpContext context) { context.Items["Content"] += @""; await _next.Invoke(context); } } ================================================ FILE: projects/middleware/middleware-12/middleware-12.csproj ================================================ net10.0 true preview ================================================ FILE: projects/middleware/middleware-13/Program.cs ================================================ using System.Net; using System.Text.Json; var builder = WebApplication.CreateBuilder(); builder.Services.AddSingleton(); var app = builder.Build(); app.UseMiddleware(); app.Run(context => throw new ExampleApiException("oops")); app.Run(); public interface ICustomApiException { HttpStatusCode HttpStatus { get; } string HttpMessage { get; } } public class ExampleApiException : Exception, ICustomApiException { public HttpStatusCode HttpStatus => HttpStatusCode.Forbidden; public string HttpMessage => "Resource cannot be accessed."; public ExampleApiException(string message) : base(message) { } } public class ErrorDto { public int Status { get; set; } public string Message { get; set; } } public class ErrorHandlingMiddleware : IMiddleware { private readonly ILogger _logger; public ErrorHandlingMiddleware(ILogger logger) { _logger = logger; } public async Task InvokeAsync(HttpContext context, RequestDelegate next) { try { await next(context); } catch (Exception ex) { _logger.LogError(ex, ex.Message); var httpStatus = HttpStatusCode.InternalServerError; var httpMessage = "Internal Server Error"; if (ex is ICustomApiException customException) { httpStatus = customException.HttpStatus; httpMessage = customException.HttpMessage; } context.Response.StatusCode = (int)httpStatus; context.Response.ContentType = "application/json"; var error = new ErrorDto() { Status = (int)httpStatus, Message = httpMessage }; await context.Response.WriteAsync(JsonSerializer.Serialize(error)); } } } ================================================ FILE: projects/middleware/middleware-13/middleware-13.csproj ================================================ net10.0 true preview ================================================ FILE: projects/middleware/middleware-2/Program.cs ================================================ var app = WebApplication.Create(); //https://github.com/aspnet/Entropy/blob/master/samples/Builder.Filtering.Web/Startup.cs app.Use(BufferAsync); app.Run(async context => { context.Response.Headers.Append("Content-Type", "text/html"); await context.Response.WriteAsync("

    This sample uses buffering

    "); await context.Response.WriteAsync("

    This allows all your Middlewares to write to Response.

    "); }); async Task BufferAsync(HttpContext context, RequestDelegate next) { var body = context.Response.Body; var buffer = new MemoryStream(); context.Response.Body = buffer; try { await context.Response.WriteAsync(""); await next(context); await context.Response.WriteAsync(""); buffer.Position = 0; await buffer.CopyToAsync(body); } finally { context.Response.Body = body; } } app.Run(); ================================================ FILE: projects/middleware/middleware-2/middleware-2.csproj ================================================ net10.0 true preview ================================================ FILE: projects/middleware/middleware-3/Program.cs ================================================ var app = WebApplication.Create(); app.UseMiddleware(); app.Run(); //A middleware class in ASP.NET Core is simply a class that // - Take a constructor with RequestDelegate // - implements Invoke method taking HttpContext and returning Task //If you take a look at this code, it cannot be any simpler. //This is a terminal middleware. It does not invoke the subsequent middleware. It just returns its own response and that's it. public class TerminalMiddleware { public TerminalMiddleware(RequestDelegate next) { //We are not using the parameter next in this middleware since this middleware is terminal } public async Task Invoke(HttpContext context) { await context.Response.WriteAsync("Hello world"); } } ================================================ FILE: projects/middleware/middleware-3/middleware-3.csproj ================================================ net10.0 true preview ================================================ FILE: projects/middleware/middleware-4/Program.cs ================================================ var app = WebApplication.Create(); app.Map("/hello", (IApplicationBuilder pp) => pp.Run(context => context.Response.WriteAsync("/hello path"))); app.Map("/world", (IApplicationBuilder pp) => pp.Run(context => context.Response.WriteAsync("/world path"))); app.Run(context => { context.Response.Headers.Append("Content-Type", "text/html"); return context.Response.WriteAsync(@" hello world "); }); app.Run(); ================================================ FILE: projects/middleware/middleware-4/middleware-4.csproj ================================================ net10.0 true preview ================================================ FILE: projects/middleware/middleware-5/Program.cs ================================================ var app = WebApplication.Create(); app.Map("/hello", (IApplicationBuilder pp) => { //nested app.Map("/world", (IApplicationBuilder ppa) => ppa.Run(context => context.Response.WriteAsync($"Path: {context.Request.Path} - Path Base: {context.Request.PathBase}"))); pp.Run(context => context.Response.WriteAsync($"Path: {context.Request.Path} - Path Base: {context.Request.PathBase}")); }); app.Run(context => { context.Response.Headers.Append("Content-Type", "text/html"); return context.Response.WriteAsync(@"/hello /hello/world"); }); app.Run(); ================================================ FILE: projects/middleware/middleware-5/middleware-5.csproj ================================================ net10.0 middleware-5 middleware-5 true preview ================================================ FILE: projects/middleware/middleware-6/Program.cs ================================================ var app = WebApplication.Create(); app.MapWhen(context => context.Request.Path.Value.Contains("/hello"), (IApplicationBuilder pp) => { //nested app.Map("/world", (IApplicationBuilder ppa) => ppa.Run(context => context.Response.WriteAsync($"Path: {context.Request.Path} - Path Base: {context.Request.PathBase}"))); pp.Run(context => context.Response.WriteAsync($"Path: {context.Request.Path} - Path Base: {context.Request.PathBase}")); }); app.Run(context => { context.Response.Headers.Append("content-type", "text/html"); return context.Response.WriteAsync(@"/hello /hello/world"); }); app.Run(); ================================================ FILE: projects/middleware/middleware-6/middleware-6.csproj ================================================ net10.0 middleware-6 middleware-6 true preview ================================================ FILE: projects/middleware/middleware-7/Program.cs ================================================ using Microsoft.AspNetCore.Builder.Extensions; var app = WebApplication.Create(); //Use MapMiddleWare and MapWhenMiddlware directly var whenOption = new MapWhenOptions { Branch = context => context.Response.WriteAsync($"MapWhenMiddleware| Path: {context.Request.Path} - Path Base: {context.Request.PathBase}"), Predicate = context => context.Request.Path.Value.Contains("hello") }; app.UseMiddleware(whenOption); var mapOption = new MapOptions { Branch = context => context.Response.WriteAsync($"MapMiddleware| Path: {context.Request.Path} - Path Base: {context.Request.PathBase}"), PathMatch = "/greetings" }; app.UseMiddleware(mapOption); app.Run(context => { context.Response.Headers.Append("content-type", "text/html"); return context.Response.WriteAsync(@"/hello /greetings"); }); app.Run(); ================================================ FILE: projects/middleware/middleware-7/middleware-7.csproj ================================================ net10.0 true preview ================================================ FILE: projects/middleware/middleware-8/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddSingleton(); var app = builder.Build(); //Pay attention to the order of the parameter passed. //If your parameter is distinct, the order does not matter, As you can see here we put Greeting //at the end of the parameter passing although in the constructor Greeting was the second on the parameter list. //However if you pass multiple parameters of the same type, the order matters. app.UseMiddleware("Cairo", "Dody", new Greeting()); app.Run(); public class Content { public string SayHello() => "Hello world"; } public class Greeting { public string Greet() => "Good morning"; } public class TerminalMiddleware { readonly Content _content; readonly string _city; readonly Greeting _greet; readonly string _name; public TerminalMiddleware(RequestDelegate next, Greeting greet, string city, Content cnt, string name) { //We are not using the parameter next in this middleware since this middleware is terminal _content = cnt; _city = city; _greet = greet; _name = name; } public async Task Invoke(HttpContext context) { await context.Response.WriteAsync($"{_greet.Greet()} {_name}, {_content.SayHello()} from {_city}"); } } ================================================ FILE: projects/middleware/middleware-8/middleware-8.csproj ================================================ net10.0 true preview ================================================ FILE: projects/middleware/middleware-9/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); var app = builder.Build(); app.UseMiddleware(typeof(TerminalMiddleware)); app.Run(); public class Greeting { public string Greet() => "Good morning"; } public class Goodbye { public string Say() => "Goodbye"; } public class TerminalMiddleware { Greeting _greet; public TerminalMiddleware(RequestDelegate next, Greeting greet) { _greet = greet; } public async Task Invoke(HttpContext context, Goodbye goodbye) { await context.Response.WriteAsync($"{_greet.Greet()} {goodbye.Say()}"); } } ================================================ FILE: projects/middleware/middleware-9/middleware-9.csproj ================================================ net10.0 true preview ================================================ FILE: projects/mini/README.md ================================================ # Mini Apps (2) This is a collection of useful mini applications written in ASP.NET Core 5 designed to demonstrate one or more techniques related to ASP.NET Core and other web libraries. - [PDF Viewer](pdf-viewer) This sample shows you how to build a PDF viewer using PDF.js * [Pokedex API](minimal-api-pokedex) This example shows how to build Web API using Minimal API pattern using Pokedex as a data source. Uses .NET 10 built-in OpenAPI. dotnet10 ================================================ FILE: projects/mini/build.bat ================================================ dotnet build pdf-viewer ================================================ FILE: projects/mini/build.sh ================================================ #!/bin/bash dotnet build pdf-viewer ================================================ FILE: projects/mini/minimal-api-pokedex/Minimal.Api.Pokedex.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.0.31808.319 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Minimal.Api.Pokedex", "src\Minimal.Api.Pokedex\Minimal.Api.Pokedex.csproj", "{548D3B00-A9F4-4A97-85F3-0F3653D7D322}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {548D3B00-A9F4-4A97-85F3-0F3653D7D322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {548D3B00-A9F4-4A97-85F3-0F3653D7D322}.Debug|Any CPU.Build.0 = Debug|Any CPU {548D3B00-A9F4-4A97-85F3-0F3653D7D322}.Release|Any CPU.ActiveCfg = Release|Any CPU {548D3B00-A9F4-4A97-85F3-0F3653D7D322}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {E3678DBD-DEB8-4A0F-A43D-D640723EB1E4} EndGlobalSection EndGlobal ================================================ FILE: projects/mini/minimal-api-pokedex/Readme.md ================================================ # Minimal Api - Pokedex This projet showcases the new .NET 6 Minimal APIs feature for developing Web APIs. We build a Pokedex API in this sample. # Description The project uses a static pokedex JSON file as a data store to read. The JSON file is kept in `Data` folder and read at runtime. We setup Swagger as part of the project and we get a Swagger UI to look at the endpoints supported. Steps to set up a minimal api: - Changes to Program.cs - In program.cs, we add API explorer and Swagger. ```csharp builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(options => options.SwaggerDoc("v1", new OpenApiInfo() { Description = "Pokedex API implemetation using .NET 6 Minimal API", Title = "Pokedex API", Version = "v1", Contact = new OpenApiContact() { Name = "Lohith GN", Url = new Uri("https://github.com/lohithgn") } })); ``` - Next, we add our required services to service collection. ```csharp services.AddScoped(); services.AddScoped(); ``` - We then build the app ```csharp var app = builder.Build(); ``` - Once app is built, we configure services to use ```csharp app.UseStaticFiles(); app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "Pokedex Api v1"); c.RoutePrefix = string.Empty; }); ``` - We then add our Pokedex API routes ```csharp builder.MapGet("/pokedex", async (int? page, int? pageSize, IPokedexService service) => { //...call to service }) .Produces(StatusCodes.Status200OK); builder.MapGet("/pokedex/all", async (IPokedexService service) => { //...call to service }) .Produces(StatusCodes.Status200OK); builder.MapGet("/pokedex/{name}", async (string name, IPokedexService service) => { //...call to service }) .Produces(StatusCodes.Status200OK) .ProducesProblem(StatusCodes.Status404NotFound); builder.MapGet("/pokedex/search", async (string query, int? page, int? pageSize, IPokedexService service) => { //...call to service }) .Produces(StatusCodes.Status200OK) .Produces(StatusCodes.Status400BadRequest); ``` - We then run the app ```csharp app.Run(); ``` - Run the app. Navigate to root of the site. Swagger UI will be rendered at the root of the site (we set Swagger route prefix to empty). Note: To run this sample, you need to have .NET 6 installed on your machine. If you are using Visual Studio Code make sure to install the latest .NET 6 SDK. If you are using Visual Studio - make sure you use VS2022 as it comes with .NET 6. # Credits Contribution by [Lohith G. N.](https://github.com/lohithgn) ================================================ FILE: projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/.dockerignore ================================================ **/.classpath **/.dockerignore **/.env **/.git **/.gitignore **/.project **/.settings **/.toolstarget **/.vs **/.vscode **/*.*proj.user **/*.dbmdl **/*.jfm **/azds.yaml **/bin **/charts **/docker-compose* **/Dockerfile* **/node_modules **/npm-debug.log **/obj **/secrets.dev.yaml **/values.dev.yaml LICENSE README.md ================================================ FILE: projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Data/pokemon.json ================================================ [ { "num": 1, "name": "Bulbasaur", "variations": [ { "name": "Bulbasaur", "description": "Bulbasaur is a Grass/Poison type Pokémon introduced in Generation 1. It is known as the Seed Pokémon.", "image": "images/bulbasaur.jpg", "types": [ "Grass", "Poison" ], "specie": "Seed Pokémon", "height": 0.7, "weight": 6.9, "abilities": [ "Overgrow", "Chlorophyll" ], "stats": { "total": 318, "hp": 45, "attack": 49, "defense": 49, "speedAttack": 65, "speedDefense": 65, "speed": 45 }, "evolutions": [ "bulbasaur", "ivysaur", "venusaur" ] } ], "link": "https://pokemondb.net/pokedex/bulbasaur" }, { "num": 2, "name": "Ivysaur", "variations": [ { "name": "Ivysaur", "description": "Ivysaur is a Grass/Poison type Pokémon introduced in Generation 1. It is known as the Seed Pokémon.", "image": "images/ivysaur.jpg", "types": [ "Grass", "Poison" ], "specie": "Seed Pokémon", "height": 1, "weight": 13, "abilities": [ "Overgrow", "Chlorophyll" ], "stats": { "total": 405, "hp": 60, "attack": 62, "defense": 63, "speedAttack": 80, "speedDefense": 80, "speed": 60 }, "evolutions": [ "bulbasaur", "ivysaur", "venusaur" ] } ], "link": "https://pokemondb.net/pokedex/ivysaur" }, { "num": 3, "name": "Venusaur", "variations": [ { "name": "Venusaur", "description": "Venusaur is a Grass/Poison type Pokémon introduced in Generation 1. It is known as the Seed Pokémon.\nVenusaur has a Mega Evolution, available from X & Y onwards.", "image": "images/venusaur.jpg", "types": [ "Grass", "Poison" ], "specie": "Seed Pokémon", "height": 2, "weight": 100, "abilities": [ "Overgrow", "Chlorophyll" ], "stats": { "total": 525, "hp": 80, "attack": 82, "defense": 83, "speedAttack": 100, "speedDefense": 100, "speed": 80 }, "evolutions": [ "bulbasaur", "ivysaur", "venusaur" ] }, { "name": "Mega Venusaur", "description": "Venusaur is a Grass/Poison type Pokémon introduced in Generation 1. It is known as the Seed Pokémon.\nVenusaur has a Mega Evolution, available from X & Y onwards.", "image": "images/venusaur-mega.jpg", "types": [ "Grass", "Poison" ], "specie": "Seed Pokémon", "height": 2.4, "weight": 155.5, "abilities": [ "Thick Fat" ], "stats": { "total": 625, "hp": 80, "attack": 100, "defense": 123, "speedAttack": 122, "speedDefense": 120, "speed": 80 }, "evolutions": [ "bulbasaur", "ivysaur", "venusaur" ] } ], "link": "https://pokemondb.net/pokedex/venusaur" }, { "num": 4, "name": "Charmander", "variations": [ { "name": "Charmander", "description": "Charmander is a Fire type Pokémon introduced in Generation 1. It is known as the Lizard Pokémon.", "image": "images/charmander.jpg", "types": [ "Fire" ], "specie": "Lizard Pokémon", "height": 0.6, "weight": 8.5, "abilities": [ "Blaze", "Solar Power" ], "stats": { "total": 309, "hp": 39, "attack": 52, "defense": 43, "speedAttack": 60, "speedDefense": 50, "speed": 65 }, "evolutions": [ "charmander", "charmeleon", "charizard" ] } ], "link": "https://pokemondb.net/pokedex/charmander" }, { "num": 5, "name": "Charmeleon", "variations": [ { "name": "Charmeleon", "description": "Charmeleon is a Fire type Pokémon introduced in Generation 1. It is known as the Flame Pokémon.", "image": "images/charmeleon.jpg", "types": [ "Fire" ], "specie": "Flame Pokémon", "height": 1.1, "weight": 19, "abilities": [ "Blaze", "Solar Power" ], "stats": { "total": 405, "hp": 58, "attack": 64, "defense": 58, "speedAttack": 80, "speedDefense": 65, "speed": 80 }, "evolutions": [ "charmander", "charmeleon", "charizard" ] } ], "link": "https://pokemondb.net/pokedex/charmeleon" }, { "num": 6, "name": "Charizard", "variations": [ { "name": "Charizard", "description": "Charizard is a Fire/Flying type Pokémon introduced in Generation 1. It is known as the Flame Pokémon.\nCharizard has two Mega Evolutions, available from X & Y onwards.", "image": "images/charizard.jpg", "types": [ "Fire", "Flying" ], "specie": "Flame Pokémon", "height": 1.7, "weight": 90.5, "abilities": [ "Blaze", "Solar Power" ], "stats": { "total": 534, "hp": 78, "attack": 84, "defense": 78, "speedAttack": 109, "speedDefense": 85, "speed": 100 }, "evolutions": [ "charmander", "charmeleon", "charizard" ] }, { "name": "Mega Charizard X", "description": "Charizard is a Fire/Flying type Pokémon introduced in Generation 1. It is known as the Flame Pokémon.\nCharizard has two Mega Evolutions, available from X & Y onwards.", "image": "images/charizard-mega-x.jpg", "types": [ "Fire", "Dragon" ], "specie": "Flame Pokémon", "height": 1.7, "weight": 110.5, "abilities": [ "Tough Claws" ], "stats": { "total": 634, "hp": 78, "attack": 130, "defense": 111, "speedAttack": 130, "speedDefense": 85, "speed": 100 }, "evolutions": [ "charmander", "charmeleon", "charizard" ] }, { "name": "Mega Charizard Y", "description": "Charizard is a Fire/Flying type Pokémon introduced in Generation 1. It is known as the Flame Pokémon.\nCharizard has two Mega Evolutions, available from X & Y onwards.", "image": "images/charizard-mega-y.jpg", "types": [ "Fire", "Flying" ], "specie": "Flame Pokémon", "height": 1.7, "weight": 100.5, "abilities": [ "Drought" ], "stats": { "total": 634, "hp": 78, "attack": 104, "defense": 78, "speedAttack": 159, "speedDefense": 115, "speed": 100 }, "evolutions": [ "charmander", "charmeleon", "charizard" ] } ], "link": "https://pokemondb.net/pokedex/charizard" }, { "num": 7, "name": "Squirtle", "variations": [ { "name": "Squirtle", "description": "Squirtle is a Water type Pokémon introduced in Generation 1. It is known as the Tiny Turtle Pokémon.", "image": "images/squirtle.jpg", "types": [ "Water" ], "specie": "Tiny Turtle Pokémon", "height": 0.5, "weight": 9, "abilities": [ "Torrent", "Rain Dish" ], "stats": { "total": 314, "hp": 44, "attack": 48, "defense": 65, "speedAttack": 50, "speedDefense": 64, "speed": 43 }, "evolutions": [ "squirtle", "wartortle", "blastoise" ] } ], "link": "https://pokemondb.net/pokedex/squirtle" }, { "num": 8, "name": "Wartortle", "variations": [ { "name": "Wartortle", "description": "Wartortle is a Water type Pokémon introduced in Generation 1. It is known as the Turtle Pokémon.", "image": "images/wartortle.jpg", "types": [ "Water" ], "specie": "Turtle Pokémon", "height": 1, "weight": 22.5, "abilities": [ "Torrent", "Rain Dish" ], "stats": { "total": 405, "hp": 59, "attack": 63, "defense": 80, "speedAttack": 65, "speedDefense": 80, "speed": 58 }, "evolutions": [ "squirtle", "wartortle", "blastoise" ] } ], "link": "https://pokemondb.net/pokedex/wartortle" }, { "num": 9, "name": "Blastoise", "variations": [ { "name": "Blastoise", "description": "Blastoise is a Water type Pokémon introduced in Generation 1. It is known as the Shellfish Pokémon.\nBlastoise has a Mega Evolution, available from X & Y onwards.", "image": "images/blastoise.jpg", "types": [ "Water" ], "specie": "Shellfish Pokémon", "height": 1.6, "weight": 85.5, "abilities": [ "Torrent", "Rain Dish" ], "stats": { "total": 530, "hp": 79, "attack": 83, "defense": 100, "speedAttack": 85, "speedDefense": 105, "speed": 78 }, "evolutions": [ "squirtle", "wartortle", "blastoise" ] }, { "name": "Mega Blastoise", "description": "Blastoise is a Water type Pokémon introduced in Generation 1. It is known as the Shellfish Pokémon.\nBlastoise has a Mega Evolution, available from X & Y onwards.", "image": "images/blastoise-mega.jpg", "types": [ "Water" ], "specie": "Shellfish Pokémon", "height": 1.6, "weight": 101.1, "abilities": [ "Mega Launcher" ], "stats": { "total": 630, "hp": 79, "attack": 103, "defense": 120, "speedAttack": 135, "speedDefense": 115, "speed": 78 }, "evolutions": [ "squirtle", "wartortle", "blastoise" ] } ], "link": "https://pokemondb.net/pokedex/blastoise" }, { "num": 10, "name": "Caterpie", "variations": [ { "name": "Caterpie", "description": "Caterpie is a Bug type Pokémon introduced in Generation 1. It is known as the Worm Pokémon.", "image": "images/caterpie.jpg", "types": [ "Bug" ], "specie": "Worm Pokémon", "height": 0.3, "weight": 2.9, "abilities": [ "Shield Dust", "Run Away" ], "stats": { "total": 195, "hp": 45, "attack": 30, "defense": 35, "speedAttack": 20, "speedDefense": 20, "speed": 45 }, "evolutions": [ "caterpie", "metapod", "butterfree" ] } ], "link": "https://pokemondb.net/pokedex/caterpie" }, { "num": 11, "name": "Metapod", "variations": [ { "name": "Metapod", "description": "Metapod is a Bug type Pokémon introduced in Generation 1. It is known as the Cocoon Pokémon.", "image": "images/metapod.jpg", "types": [ "Bug" ], "specie": "Cocoon Pokémon", "height": 0.7, "weight": 9.9, "abilities": [ "Shed Skin" ], "stats": { "total": 205, "hp": 50, "attack": 20, "defense": 55, "speedAttack": 25, "speedDefense": 25, "speed": 30 }, "evolutions": [ "caterpie", "metapod", "butterfree" ] } ], "link": "https://pokemondb.net/pokedex/metapod" }, { "num": 12, "name": "Butterfree", "variations": [ { "name": "Butterfree", "description": "Butterfree is a Bug/Flying type Pokémon introduced in Generation 1. It is known as the Butterfly Pokémon.", "image": "images/butterfree.jpg", "types": [ "Bug", "Flying" ], "specie": "Butterfly Pokémon", "height": 1.1, "weight": 32, "abilities": [ "Compound Eyes", "Tinted Lens" ], "stats": { "total": 395, "hp": 60, "attack": 45, "defense": 50, "speedAttack": 90, "speedDefense": 80, "speed": 70 }, "evolutions": [ "caterpie", "metapod", "butterfree" ] } ], "link": "https://pokemondb.net/pokedex/butterfree" }, { "num": 13, "name": "Weedle", "variations": [ { "name": "Weedle", "description": "Weedle is a Bug/Poison type Pokémon introduced in Generation 1. It is known as the Hairy Bug Pokémon.", "image": "images/weedle.jpg", "types": [ "Bug", "Poison" ], "specie": "Hairy Bug Pokémon", "height": 0.3, "weight": 3.2, "abilities": [ "Shield Dust", "Run Away" ], "stats": { "total": 195, "hp": 40, "attack": 35, "defense": 30, "speedAttack": 20, "speedDefense": 20, "speed": 50 }, "evolutions": [ "weedle", "kakuna", "beedrill" ] } ], "link": "https://pokemondb.net/pokedex/weedle" }, { "num": 14, "name": "Kakuna", "variations": [ { "name": "Kakuna", "description": "Kakuna is a Bug/Poison type Pokémon introduced in Generation 1. It is known as the Cocoon Pokémon.", "image": "images/kakuna.jpg", "types": [ "Bug", "Poison" ], "specie": "Cocoon Pokémon", "height": 0.6, "weight": 10, "abilities": [ "Shed Skin" ], "stats": { "total": 205, "hp": 45, "attack": 25, "defense": 50, "speedAttack": 25, "speedDefense": 25, "speed": 35 }, "evolutions": [ "weedle", "kakuna", "beedrill" ] } ], "link": "https://pokemondb.net/pokedex/kakuna" }, { "num": 15, "name": "Beedrill", "variations": [ { "name": "Beedrill", "description": "Beedrill is a Bug/Poison type Pokémon introduced in Generation 1. It is known as the Poison Bee Pokémon.\nBeedrill has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/beedrill.jpg", "types": [ "Bug", "Poison" ], "specie": "Poison Bee Pokémon", "height": 1, "weight": 29.5, "abilities": [ "Swarm", "Sniper" ], "stats": { "total": 395, "hp": 65, "attack": 90, "defense": 40, "speedAttack": 45, "speedDefense": 80, "speed": 75 }, "evolutions": [ "weedle", "kakuna", "beedrill" ] }, { "name": "Mega Beedrill", "description": "Beedrill is a Bug/Poison type Pokémon introduced in Generation 1. It is known as the Poison Bee Pokémon.\nBeedrill has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/beedrill-mega.jpg", "types": [ "Bug", "Poison" ], "specie": "Poison Bee Pokémon", "height": 1.4, "weight": 40.5, "abilities": [ "Adaptability" ], "stats": { "total": 495, "hp": 65, "attack": 150, "defense": 40, "speedAttack": 15, "speedDefense": 80, "speed": 145 }, "evolutions": [ "weedle", "kakuna", "beedrill" ] } ], "link": "https://pokemondb.net/pokedex/beedrill" }, { "num": 16, "name": "Pidgey", "variations": [ { "name": "Pidgey", "description": "Pidgey is a Normal/Flying type Pokémon introduced in Generation 1. It is known as the Tiny Bird Pokémon.", "image": "images/pidgey.jpg", "types": [ "Normal", "Flying" ], "specie": "Tiny Bird Pokémon", "height": 0.3, "weight": 1.8, "abilities": [ "Keen Eye", "Tangled Feet", "Big Pecks" ], "stats": { "total": 251, "hp": 40, "attack": 45, "defense": 40, "speedAttack": 35, "speedDefense": 35, "speed": 56 }, "evolutions": [ "pidgey", "pidgeotto", "pidgeot" ] } ], "link": "https://pokemondb.net/pokedex/pidgey" }, { "num": 17, "name": "Pidgeotto", "variations": [ { "name": "Pidgeotto", "description": "Pidgeotto is a Normal/Flying type Pokémon introduced in Generation 1. It is known as the Bird Pokémon.", "image": "images/pidgeotto.jpg", "types": [ "Normal", "Flying" ], "specie": "Bird Pokémon", "height": 1.1, "weight": 30, "abilities": [ "Keen Eye", "Tangled Feet", "Big Pecks" ], "stats": { "total": 349, "hp": 63, "attack": 60, "defense": 55, "speedAttack": 50, "speedDefense": 50, "speed": 71 }, "evolutions": [ "pidgey", "pidgeotto", "pidgeot" ] } ], "link": "https://pokemondb.net/pokedex/pidgeotto" }, { "num": 18, "name": "Pidgeot", "variations": [ { "name": "Pidgeot", "description": "Pidgeot is a Normal/Flying type Pokémon introduced in Generation 1. It is known as the Bird Pokémon.\nPidgeot has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/pidgeot.jpg", "types": [ "Normal", "Flying" ], "specie": "Bird Pokémon", "height": 1.5, "weight": 39.5, "abilities": [ "Keen Eye", "Tangled Feet", "Big Pecks" ], "stats": { "total": 479, "hp": 83, "attack": 80, "defense": 75, "speedAttack": 70, "speedDefense": 70, "speed": 101 }, "evolutions": [ "pidgey", "pidgeotto", "pidgeot" ] }, { "name": "Mega Pidgeot", "description": "Pidgeot is a Normal/Flying type Pokémon introduced in Generation 1. It is known as the Bird Pokémon.\nPidgeot has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/pidgeot-mega.jpg", "types": [ "Normal", "Flying" ], "specie": "Bird Pokémon", "height": 2.2, "weight": 50.5, "abilities": [ "No Guard" ], "stats": { "total": 579, "hp": 83, "attack": 80, "defense": 80, "speedAttack": 135, "speedDefense": 80, "speed": 121 }, "evolutions": [ "pidgey", "pidgeotto", "pidgeot" ] } ], "link": "https://pokemondb.net/pokedex/pidgeot" }, { "num": 19, "name": "Rattata", "variations": [ { "name": "Rattata", "description": "Rattata is a Normal type Pokémon introduced in Generation 1. It is known as the Mouse Pokémon.\nRattata has a new Alolan form introduced in Pokémon Sun/Moon.", "image": "images/rattata.jpg", "types": [ "Normal" ], "specie": "Mouse Pokémon", "height": 0.3, "weight": 3.5, "abilities": [ "Run Away", "Guts", "Hustle" ], "stats": { "total": 253, "hp": 30, "attack": 56, "defense": 35, "speedAttack": 25, "speedDefense": 35, "speed": 72 }, "evolutions": [ "rattata", "raticate" ] }, { "name": "Alolan Rattata", "description": "Rattata is a Normal type Pokémon introduced in Generation 1. It is known as the Mouse Pokémon.\nRattata has a new Alolan form introduced in Pokémon Sun/Moon.", "image": "images/rattata-alolan.jpg", "types": [ "Dark", "Normal" ], "specie": "Mouse Pokémon", "height": 0.3, "weight": 3.8, "abilities": [ "Gluttony", "Hustle", "Thick Fat" ], "stats": { "total": 253, "hp": 30, "attack": 56, "defense": 35, "speedAttack": 25, "speedDefense": 35, "speed": 72 }, "evolutions": [ "rattata", "raticate" ] } ], "link": "https://pokemondb.net/pokedex/rattata" }, { "num": 20, "name": "Raticate", "variations": [ { "name": "Raticate", "description": "Raticate is a Normal type Pokémon introduced in Generation 1. It is known as the Mouse Pokémon.", "image": "images/raticate.jpg", "types": [ "Normal" ], "specie": "Mouse Pokémon", "height": 0.7, "weight": 18.5, "abilities": [ "Run Away", "Guts", "Hustle" ], "stats": { "total": 413, "hp": 55, "attack": 81, "defense": 60, "speedAttack": 50, "speedDefense": 70, "speed": 97 }, "evolutions": [ "rattata", "raticate" ] }, { "name": "Alolan Raticate", "description": "Raticate is a Normal type Pokémon introduced in Generation 1. It is known as the Mouse Pokémon.", "image": "images/raticate-alolan.jpg", "types": [ "Dark", "Normal" ], "specie": "Mouse Pokémon", "height": 0.7, "weight": 25.5, "abilities": [ "Gluttony", "Hustle", "Thick Fat" ], "stats": { "total": 413, "hp": 75, "attack": 71, "defense": 70, "speedAttack": 40, "speedDefense": 80, "speed": 77 }, "evolutions": [ "rattata", "raticate" ] } ], "link": "https://pokemondb.net/pokedex/raticate" }, { "num": 21, "name": "Spearow", "variations": [ { "name": "Spearow", "description": "Spearow is a Normal/Flying type Pokémon introduced in Generation 1. It is known as the Tiny Bird Pokémon.", "image": "images/spearow.jpg", "types": [ "Normal", "Flying" ], "specie": "Tiny Bird Pokémon", "height": 0.3, "weight": 2, "abilities": [ "Keen Eye", "Sniper" ], "stats": { "total": 262, "hp": 40, "attack": 60, "defense": 30, "speedAttack": 31, "speedDefense": 31, "speed": 70 }, "evolutions": [ "spearow", "fearow" ] } ], "link": "https://pokemondb.net/pokedex/spearow" }, { "num": 22, "name": "Fearow", "variations": [ { "name": "Fearow", "description": "Fearow is a Normal/Flying type Pokémon introduced in Generation 1. It is known as the Beak Pokémon.", "image": "images/fearow.jpg", "types": [ "Normal", "Flying" ], "specie": "Beak Pokémon", "height": 1.2, "weight": 38, "abilities": [ "Keen Eye", "Sniper" ], "stats": { "total": 442, "hp": 65, "attack": 90, "defense": 65, "speedAttack": 61, "speedDefense": 61, "speed": 100 }, "evolutions": [ "spearow", "fearow" ] } ], "link": "https://pokemondb.net/pokedex/fearow" }, { "num": 23, "name": "Ekans", "variations": [ { "name": "Ekans", "description": "Ekans is a Poison type Pokémon introduced in Generation 1. It is known as the Snake Pokémon.", "image": "images/ekans.jpg", "types": [ "Poison" ], "specie": "Snake Pokémon", "height": 2, "weight": 6.9, "abilities": [ "Intimidate", "Shed Skin", "Unnerve" ], "stats": { "total": 288, "hp": 35, "attack": 60, "defense": 44, "speedAttack": 40, "speedDefense": 54, "speed": 55 }, "evolutions": [ "ekans", "arbok" ] } ], "link": "https://pokemondb.net/pokedex/ekans" }, { "num": 24, "name": "Arbok", "variations": [ { "name": "Arbok", "description": "Arbok is a Poison type Pokémon introduced in Generation 1. It is known as the Cobra Pokémon.", "image": "images/arbok.jpg", "types": [ "Poison" ], "specie": "Cobra Pokémon", "height": 3.5, "weight": 65, "abilities": [ "Intimidate", "Shed Skin", "Unnerve" ], "stats": { "total": 448, "hp": 60, "attack": 95, "defense": 69, "speedAttack": 65, "speedDefense": 79, "speed": 80 }, "evolutions": [ "ekans", "arbok" ] } ], "link": "https://pokemondb.net/pokedex/arbok" }, { "num": 25, "name": "Pikachu", "variations": [ { "name": "Pikachu", "description": "Pikachu is an Electric type Pokémon introduced in Generation 1. It is known as the Mouse Pokémon.", "image": "images/pikachu.jpg", "types": [ "Electric" ], "specie": "Mouse Pokémon", "height": 0.4, "weight": 6, "abilities": [ "Static", "Lightning Rod" ], "stats": { "total": 320, "hp": 35, "attack": 55, "defense": 40, "speedAttack": 50, "speedDefense": 50, "speed": 90 }, "evolutions": [ "pichu", "pikachu", "raichu" ] }, { "name": "Partner Pikachu", "description": "Pikachu is an Electric type Pokémon introduced in Generation 1. It is known as the Mouse Pokémon.", "image": "images/pikachu-lets-go.jpg", "types": [ "Electric" ], "specie": "Mouse Pokémon", "height": 0.4, "weight": 6, "abilities": [], "stats": { "total": 430, "hp": 45, "attack": 80, "defense": 50, "speedAttack": 75, "speedDefense": 60, "speed": 120 }, "evolutions": [ "pichu", "pikachu", "raichu" ] } ], "link": "https://pokemondb.net/pokedex/pikachu" }, { "num": 26, "name": "Raichu", "variations": [ { "name": "Raichu", "description": "Raichu is an Electric type Pokémon introduced in Generation 1. It is known as the Mouse Pokémon.\nRaichu has a new Alolan form introduced in Pokémon Sun/Moon.", "image": "images/raichu.jpg", "types": [ "Electric" ], "specie": "Mouse Pokémon", "height": 0.8, "weight": 30, "abilities": [ "Static", "Lightning Rod" ], "stats": { "total": 485, "hp": 60, "attack": 90, "defense": 55, "speedAttack": 90, "speedDefense": 80, "speed": 110 }, "evolutions": [ "pichu", "pikachu", "raichu" ] }, { "name": "Alolan Raichu", "description": "Raichu is an Electric type Pokémon introduced in Generation 1. It is known as the Mouse Pokémon.\nRaichu has a new Alolan form introduced in Pokémon Sun/Moon.", "image": "images/raichu-alolan.jpg", "types": [ "Electric", "Psychic" ], "specie": "Mouse Pokémon", "height": 0.7, "weight": 21, "abilities": [ "Surge Surfer" ], "stats": { "total": 485, "hp": 60, "attack": 85, "defense": 50, "speedAttack": 95, "speedDefense": 85, "speed": 110 }, "evolutions": [ "pichu", "pikachu", "raichu" ] } ], "link": "https://pokemondb.net/pokedex/raichu" }, { "num": 27, "name": "Sandshrew", "variations": [ { "name": "Sandshrew", "description": "Sandshrew is a Ground type Pokémon introduced in Generation 1. It is known as the Mouse Pokémon.\nSandshrew has a new Alolan form introduced in Pokémon Sun/Moon.", "image": "images/sandshrew.jpg", "types": [ "Ground" ], "specie": "Mouse Pokémon", "height": 0.6, "weight": 12, "abilities": [ "Sand Veil", "Sand Rush" ], "stats": { "total": 300, "hp": 50, "attack": 75, "defense": 85, "speedAttack": 20, "speedDefense": 30, "speed": 40 }, "evolutions": [ "sandshrew", "sandslash" ] }, { "name": "Alolan Sandshrew", "description": "Sandshrew is a Ground type Pokémon introduced in Generation 1. It is known as the Mouse Pokémon.\nSandshrew has a new Alolan form introduced in Pokémon Sun/Moon.", "image": "images/sandshrew-alolan.jpg", "types": [ "Ice", "Steel" ], "specie": "Mouse Pokémon", "height": 0.7, "weight": 40, "abilities": [ "Snow Cloak", "Slush Rush" ], "stats": { "total": 300, "hp": 50, "attack": 75, "defense": 90, "speedAttack": 10, "speedDefense": 35, "speed": 40 }, "evolutions": [ "sandshrew", "sandslash" ] } ], "link": "https://pokemondb.net/pokedex/sandshrew" }, { "num": 28, "name": "Sandslash", "variations": [ { "name": "Sandslash", "description": "Sandslash is a Ground type Pokémon introduced in Generation 1. It is known as the Mouse Pokémon.\nSandslash has a new Alolan form introduced in Pokémon Sun/Moon.", "image": "images/sandslash.jpg", "types": [ "Ground" ], "specie": "Mouse Pokémon", "height": 1, "weight": 29.5, "abilities": [ "Sand Veil", "Sand Rush" ], "stats": { "total": 450, "hp": 75, "attack": 100, "defense": 110, "speedAttack": 45, "speedDefense": 55, "speed": 65 }, "evolutions": [ "sandshrew", "sandslash" ] }, { "name": "Alolan Sandslash", "description": "Sandslash is a Ground type Pokémon introduced in Generation 1. It is known as the Mouse Pokémon.\nSandslash has a new Alolan form introduced in Pokémon Sun/Moon.", "image": "images/sandslash-alolan.jpg", "types": [ "Ice", "Steel" ], "specie": "Mouse Pokémon", "height": 1.2, "weight": 55, "abilities": [ "Snow Cloak", "Slush Rush" ], "stats": { "total": 450, "hp": 75, "attack": 100, "defense": 120, "speedAttack": 25, "speedDefense": 65, "speed": 65 }, "evolutions": [ "sandshrew", "sandslash" ] } ], "link": "https://pokemondb.net/pokedex/sandslash" }, { "num": 29, "name": "Nidoran♀", "variations": [ { "name": "Nidoran♀", "description": "Nidoran♀ is a Poison type Pokémon introduced in Generation 1. It is known as the Poison Pin Pokémon.", "image": "images/nidoran-f.jpg", "types": [ "Poison" ], "specie": "Poison Pin Pokémon", "height": 0.4, "weight": 7, "abilities": [ "Poison Point", "Rivalry", "Hustle" ], "stats": { "total": 275, "hp": 55, "attack": 47, "defense": 52, "speedAttack": 40, "speedDefense": 40, "speed": 41 }, "evolutions": [ "nidoran♀", "nidorina", "nidoqueen" ] } ], "link": "https://pokemondb.net/pokedex/nidoran-f" }, { "num": 30, "name": "Nidorina", "variations": [ { "name": "Nidorina", "description": "Nidorina is a Poison type Pokémon introduced in Generation 1. It is known as the Poison Pin Pokémon.", "image": "images/nidorina.jpg", "types": [ "Poison" ], "specie": "Poison Pin Pokémon", "height": 0.8, "weight": 20, "abilities": [ "Poison Point", "Rivalry", "Hustle" ], "stats": { "total": 365, "hp": 70, "attack": 62, "defense": 67, "speedAttack": 55, "speedDefense": 55, "speed": 56 }, "evolutions": [ "nidoran♀", "nidorina", "nidoqueen" ] } ], "link": "https://pokemondb.net/pokedex/nidorina" }, { "num": 31, "name": "Nidoqueen", "variations": [ { "name": "Nidoqueen", "description": "Nidoqueen is a Poison/Ground type Pokémon introduced in Generation 1. It is known as the Drill Pokémon.", "image": "images/nidoqueen.jpg", "types": [ "Poison", "Ground" ], "specie": "Drill Pokémon", "height": 1.3, "weight": 60, "abilities": [ "Poison Point", "Rivalry", "Sheer Force" ], "stats": { "total": 505, "hp": 90, "attack": 92, "defense": 87, "speedAttack": 75, "speedDefense": 85, "speed": 76 }, "evolutions": [ "nidoran♀", "nidorina", "nidoqueen" ] } ], "link": "https://pokemondb.net/pokedex/nidoqueen" }, { "num": 32, "name": "Nidoran♂", "variations": [ { "name": "Nidoran♂", "description": "Nidoran♂ is a Poison type Pokémon introduced in Generation 1. It is known as the Poison Pin Pokémon.", "image": "images/nidoran-m.jpg", "types": [ "Poison" ], "specie": "Poison Pin Pokémon", "height": 0.5, "weight": 9, "abilities": [ "Poison Point", "Rivalry", "Hustle" ], "stats": { "total": 273, "hp": 46, "attack": 57, "defense": 40, "speedAttack": 40, "speedDefense": 40, "speed": 50 }, "evolutions": [ "nidoran♂", "nidorino", "nidoking" ] } ], "link": "https://pokemondb.net/pokedex/nidoran-m" }, { "num": 33, "name": "Nidorino", "variations": [ { "name": "Nidorino", "description": "Nidorino is a Poison type Pokémon introduced in Generation 1. It is known as the Poison Pin Pokémon.", "image": "images/nidorino.jpg", "types": [ "Poison" ], "specie": "Poison Pin Pokémon", "height": 0.9, "weight": 19.5, "abilities": [ "Poison Point", "Rivalry", "Hustle" ], "stats": { "total": 365, "hp": 61, "attack": 72, "defense": 57, "speedAttack": 55, "speedDefense": 55, "speed": 65 }, "evolutions": [ "nidoran♂", "nidorino", "nidoking" ] } ], "link": "https://pokemondb.net/pokedex/nidorino" }, { "num": 34, "name": "Nidoking", "variations": [ { "name": "Nidoking", "description": "Nidoking is a Poison/Ground type Pokémon introduced in Generation 1. It is known as the Drill Pokémon.", "image": "images/nidoking.jpg", "types": [ "Poison", "Ground" ], "specie": "Drill Pokémon", "height": 1.4, "weight": 62, "abilities": [ "Poison Point", "Rivalry", "Sheer Force" ], "stats": { "total": 505, "hp": 81, "attack": 102, "defense": 77, "speedAttack": 85, "speedDefense": 75, "speed": 85 }, "evolutions": [ "nidoran♂", "nidorino", "nidoking" ] } ], "link": "https://pokemondb.net/pokedex/nidoking" }, { "num": 35, "name": "Clefairy", "variations": [ { "name": "Clefairy", "description": "Clefairy is a Fairy type Pokémon introduced in Generation 1. It is known as the Fairy Pokémon.", "image": "images/clefairy.jpg", "types": [ "Fairy" ], "specie": "Fairy Pokémon", "height": 0.6, "weight": 7.5, "abilities": [ "Cute Charm", "Magic Guard", "Friend Guard" ], "stats": { "total": 323, "hp": 70, "attack": 45, "defense": 48, "speedAttack": 60, "speedDefense": 65, "speed": 35 }, "evolutions": [ "cleffa", "clefairy", "clefable" ] } ], "link": "https://pokemondb.net/pokedex/clefairy" }, { "num": 36, "name": "Clefable", "variations": [ { "name": "Clefable", "description": "Clefable is a Fairy type Pokémon introduced in Generation 1. It is known as the Fairy Pokémon.", "image": "images/clefable.jpg", "types": [ "Fairy" ], "specie": "Fairy Pokémon", "height": 1.3, "weight": 40, "abilities": [ "Cute Charm", "Magic Guard", "Unaware" ], "stats": { "total": 483, "hp": 95, "attack": 70, "defense": 73, "speedAttack": 95, "speedDefense": 90, "speed": 60 }, "evolutions": [ "cleffa", "clefairy", "clefable" ] } ], "link": "https://pokemondb.net/pokedex/clefable" }, { "num": 37, "name": "Vulpix", "variations": [ { "name": "Vulpix", "description": "Vulpix is a Fire type Pokémon introduced in Generation 1. It is known as the Fox Pokémon.\nVulpix has a new Alolan form introduced in Pokémon Sun/Moon.", "image": "images/vulpix.jpg", "types": [ "Fire" ], "specie": "Fox Pokémon", "height": 0.6, "weight": 9.9, "abilities": [ "Flash Fire", "Drought" ], "stats": { "total": 299, "hp": 38, "attack": 41, "defense": 40, "speedAttack": 50, "speedDefense": 65, "speed": 65 }, "evolutions": [ "vulpix", "ninetales" ] }, { "name": "Alolan Vulpix", "description": "Vulpix is a Fire type Pokémon introduced in Generation 1. It is known as the Fox Pokémon.\nVulpix has a new Alolan form introduced in Pokémon Sun/Moon.", "image": "images/vulpix-alolan.jpg", "types": [ "Ice" ], "specie": "Fox Pokémon", "height": 0.6, "weight": 9.9, "abilities": [ "Snow Cloak", "Snow Warning" ], "stats": { "total": 299, "hp": 38, "attack": 41, "defense": 40, "speedAttack": 50, "speedDefense": 65, "speed": 65 }, "evolutions": [ "vulpix", "ninetales" ] } ], "link": "https://pokemondb.net/pokedex/vulpix" }, { "num": 38, "name": "Ninetales", "variations": [ { "name": "Ninetales", "description": "Ninetales is a Fire type Pokémon introduced in Generation 1. It is known as the Fox Pokémon.", "image": "images/ninetales.jpg", "types": [ "Fire" ], "specie": "Fox Pokémon", "height": 1.1, "weight": 19.9, "abilities": [ "Flash Fire", "Drought" ], "stats": { "total": 505, "hp": 73, "attack": 76, "defense": 75, "speedAttack": 81, "speedDefense": 100, "speed": 100 }, "evolutions": [ "vulpix", "ninetales" ] }, { "name": "Alolan Ninetales", "description": "Ninetales is a Fire type Pokémon introduced in Generation 1. It is known as the Fox Pokémon.", "image": "images/ninetales-alolan.jpg", "types": [ "Ice", "Fairy" ], "specie": "Fox Pokémon", "height": 1.1, "weight": 19.9, "abilities": [ "Snow Cloak", "Snow Warning" ], "stats": { "total": 505, "hp": 73, "attack": 67, "defense": 75, "speedAttack": 81, "speedDefense": 100, "speed": 109 }, "evolutions": [ "vulpix", "ninetales" ] } ], "link": "https://pokemondb.net/pokedex/ninetales" }, { "num": 39, "name": "Jigglypuff", "variations": [ { "name": "Jigglypuff", "description": "Jigglypuff is a Normal/Fairy type Pokémon introduced in Generation 1. It is known as the Balloon Pokémon.", "image": "images/jigglypuff.jpg", "types": [ "Normal", "Fairy" ], "specie": "Balloon Pokémon", "height": 0.5, "weight": 5.5, "abilities": [ "Cute Charm", "Competitive", "Friend Guard" ], "stats": { "total": 270, "hp": 115, "attack": 45, "defense": 20, "speedAttack": 45, "speedDefense": 25, "speed": 20 }, "evolutions": [ "igglybuff", "jigglypuff", "wigglytuff" ] } ], "link": "https://pokemondb.net/pokedex/jigglypuff" }, { "num": 40, "name": "Wigglytuff", "variations": [ { "name": "Wigglytuff", "description": "Wigglytuff is a Normal/Fairy type Pokémon introduced in Generation 1. It is known as the Balloon Pokémon.", "image": "images/wigglytuff.jpg", "types": [ "Normal", "Fairy" ], "specie": "Balloon Pokémon", "height": 1, "weight": 12, "abilities": [ "Cute Charm", "Competitive", "Frisk" ], "stats": { "total": 435, "hp": 140, "attack": 70, "defense": 45, "speedAttack": 85, "speedDefense": 50, "speed": 45 }, "evolutions": [ "igglybuff", "jigglypuff", "wigglytuff" ] } ], "link": "https://pokemondb.net/pokedex/wigglytuff" }, { "num": 41, "name": "Zubat", "variations": [ { "name": "Zubat", "description": "Zubat is a Poison/Flying type Pokémon introduced in Generation 1. It is known as the Bat Pokémon.", "image": "images/zubat.jpg", "types": [ "Poison", "Flying" ], "specie": "Bat Pokémon", "height": 0.8, "weight": 7.5, "abilities": [ "Inner Focus", "Infiltrator" ], "stats": { "total": 245, "hp": 40, "attack": 45, "defense": 35, "speedAttack": 30, "speedDefense": 40, "speed": 55 }, "evolutions": [ "zubat", "golbat", "crobat" ] } ], "link": "https://pokemondb.net/pokedex/zubat" }, { "num": 42, "name": "Golbat", "variations": [ { "name": "Golbat", "description": "Golbat is a Poison/Flying type Pokémon introduced in Generation 1. It is known as the Bat Pokémon.", "image": "images/golbat.jpg", "types": [ "Poison", "Flying" ], "specie": "Bat Pokémon", "height": 1.6, "weight": 55, "abilities": [ "Inner Focus", "Infiltrator" ], "stats": { "total": 455, "hp": 75, "attack": 80, "defense": 70, "speedAttack": 65, "speedDefense": 75, "speed": 90 }, "evolutions": [ "zubat", "golbat", "crobat" ] } ], "link": "https://pokemondb.net/pokedex/golbat" }, { "num": 43, "name": "Oddish", "variations": [ { "name": "Oddish", "description": "Oddish is a Grass/Poison type Pokémon introduced in Generation 1. It is known as the Weed Pokémon.", "image": "images/oddish.jpg", "types": [ "Grass", "Poison" ], "specie": "Weed Pokémon", "height": 0.5, "weight": 5.4, "abilities": [ "Chlorophyll", "Run Away" ], "stats": { "total": 320, "hp": 45, "attack": 50, "defense": 55, "speedAttack": 75, "speedDefense": 65, "speed": 30 }, "evolutions": [ "oddish", "gloom", "vileplume", "bellossom" ] } ], "link": "https://pokemondb.net/pokedex/oddish" }, { "num": 44, "name": "Gloom", "variations": [ { "name": "Gloom", "description": "Gloom is a Grass/Poison type Pokémon introduced in Generation 1. It is known as the Weed Pokémon.", "image": "images/gloom.jpg", "types": [ "Grass", "Poison" ], "specie": "Weed Pokémon", "height": 0.8, "weight": 8.6, "abilities": [ "Chlorophyll", "Stench" ], "stats": { "total": 395, "hp": 60, "attack": 65, "defense": 70, "speedAttack": 85, "speedDefense": 75, "speed": 40 }, "evolutions": [ "oddish", "gloom", "vileplume", "bellossom" ] } ], "link": "https://pokemondb.net/pokedex/gloom" }, { "num": 45, "name": "Vileplume", "variations": [ { "name": "Vileplume", "description": "Vileplume is a Grass/Poison type Pokémon introduced in Generation 1. It is known as the Flower Pokémon.", "image": "images/vileplume.jpg", "types": [ "Grass", "Poison" ], "specie": "Flower Pokémon", "height": 1.2, "weight": 18.6, "abilities": [ "Chlorophyll", "Effect Spore" ], "stats": { "total": 490, "hp": 75, "attack": 80, "defense": 85, "speedAttack": 110, "speedDefense": 90, "speed": 50 }, "evolutions": [ "oddish", "gloom", "vileplume", "bellossom" ] } ], "link": "https://pokemondb.net/pokedex/vileplume" }, { "num": 46, "name": "Paras", "variations": [ { "name": "Paras", "description": "Paras is a Bug/Grass type Pokémon introduced in Generation 1. It is known as the Mushroom Pokémon.", "image": "images/paras.jpg", "types": [ "Bug", "Grass" ], "specie": "Mushroom Pokémon", "height": 0.3, "weight": 5.4, "abilities": [ "Effect Spore", "Dry Skin", "Damp" ], "stats": { "total": 285, "hp": 35, "attack": 70, "defense": 55, "speedAttack": 45, "speedDefense": 55, "speed": 25 }, "evolutions": [ "paras", "parasect" ] } ], "link": "https://pokemondb.net/pokedex/paras" }, { "num": 47, "name": "Parasect", "variations": [ { "name": "Parasect", "description": "Parasect is a Bug/Grass type Pokémon introduced in Generation 1. It is known as the Mushroom Pokémon.", "image": "images/parasect.jpg", "types": [ "Bug", "Grass" ], "specie": "Mushroom Pokémon", "height": 1, "weight": 29.5, "abilities": [ "Effect Spore", "Dry Skin", "Damp" ], "stats": { "total": 405, "hp": 60, "attack": 95, "defense": 80, "speedAttack": 60, "speedDefense": 80, "speed": 30 }, "evolutions": [ "paras", "parasect" ] } ], "link": "https://pokemondb.net/pokedex/parasect" }, { "num": 48, "name": "Venonat", "variations": [ { "name": "Venonat", "description": "Venonat is a Bug/Poison type Pokémon introduced in Generation 1. It is known as the Insect Pokémon.", "image": "images/venonat.jpg", "types": [ "Bug", "Poison" ], "specie": "Insect Pokémon", "height": 1, "weight": 30, "abilities": [ "Compound Eyes", "Tinted Lens", "Run Away" ], "stats": { "total": 305, "hp": 60, "attack": 55, "defense": 50, "speedAttack": 40, "speedDefense": 55, "speed": 45 }, "evolutions": [ "venonat", "venomoth" ] } ], "link": "https://pokemondb.net/pokedex/venonat" }, { "num": 49, "name": "Venomoth", "variations": [ { "name": "Venomoth", "description": "Venomoth is a Bug/Poison type Pokémon introduced in Generation 1. It is known as the Poison Moth Pokémon.", "image": "images/venomoth.jpg", "types": [ "Bug", "Poison" ], "specie": "Poison Moth Pokémon", "height": 1.5, "weight": 12.5, "abilities": [ "Shield Dust", "Tinted Lens", "Wonder Skin" ], "stats": { "total": 450, "hp": 70, "attack": 65, "defense": 60, "speedAttack": 90, "speedDefense": 75, "speed": 90 }, "evolutions": [ "venonat", "venomoth" ] } ], "link": "https://pokemondb.net/pokedex/venomoth" }, { "num": 50, "name": "Diglett", "variations": [ { "name": "Diglett", "description": "Diglett is a Ground type Pokémon introduced in Generation 1. It is known as the Mole Pokémon.", "image": "images/diglett.jpg", "types": [ "Ground" ], "specie": "Mole Pokémon", "height": 0.2, "weight": 0.8, "abilities": [ "Sand Veil", "Arena Trap", "Sand Force" ], "stats": { "total": 265, "hp": 10, "attack": 55, "defense": 25, "speedAttack": 35, "speedDefense": 45, "speed": 95 }, "evolutions": [ "diglett", "dugtrio" ] }, { "name": "Alolan Diglett", "description": "Diglett is a Ground type Pokémon introduced in Generation 1. It is known as the Mole Pokémon.", "image": "images/diglett-alolan.jpg", "types": [ "Ground", "Steel" ], "specie": "Mole Pokémon", "height": 0.2, "weight": 1, "abilities": [ "Sand Veil", "Tangling Hair", "Sand Force" ], "stats": { "total": 265, "hp": 10, "attack": 55, "defense": 30, "speedAttack": 35, "speedDefense": 45, "speed": 90 }, "evolutions": [ "diglett", "dugtrio" ] } ], "link": "https://pokemondb.net/pokedex/diglett" }, { "num": 51, "name": "Dugtrio", "variations": [ { "name": "Dugtrio", "description": "Dugtrio is a Ground type Pokémon introduced in Generation 1. It is known as the Mole Pokémon.", "image": "images/dugtrio.jpg", "types": [ "Ground" ], "specie": "Mole Pokémon", "height": 0.7, "weight": 33.3, "abilities": [ "Sand Veil", "Arena Trap", "Sand Force" ], "stats": { "total": 425, "hp": 35, "attack": 100, "defense": 50, "speedAttack": 50, "speedDefense": 70, "speed": 120 }, "evolutions": [ "diglett", "dugtrio" ] }, { "name": "Alolan Dugtrio", "description": "Dugtrio is a Ground type Pokémon introduced in Generation 1. It is known as the Mole Pokémon.", "image": "images/dugtrio-alolan.jpg", "types": [ "Ground", "Steel" ], "specie": "Mole Pokémon", "height": 0.7, "weight": 66.6, "abilities": [ "Sand Veil", "Tangling Hair", "Sand Force" ], "stats": { "total": 425, "hp": 35, "attack": 100, "defense": 60, "speedAttack": 50, "speedDefense": 70, "speed": 110 }, "evolutions": [ "diglett", "dugtrio" ] } ], "link": "https://pokemondb.net/pokedex/dugtrio" }, { "num": 52, "name": "Meowth", "variations": [ { "name": "Meowth", "description": "Meowth is a Normal type Pokémon introduced in Generation 1. It is known as the Scratch Cat Pokémon.\nMeowth has a new Alolan form introduced in Pokémon Sun/Moon.", "image": "images/meowth.jpg", "types": [ "Normal" ], "specie": "Scratch Cat Pokémon", "height": 0.4, "weight": 4.2, "abilities": [ "Pickup", "Technician", "Unnerve" ], "stats": { "total": 290, "hp": 40, "attack": 45, "defense": 35, "speedAttack": 40, "speedDefense": 40, "speed": 90 }, "evolutions": [ "meowth", "persian" ] }, { "name": "Alolan Meowth", "description": "Meowth is a Normal type Pokémon introduced in Generation 1. It is known as the Scratch Cat Pokémon.\nMeowth has a new Alolan form introduced in Pokémon Sun/Moon.", "image": "images/meowth-alolan.jpg", "types": [ "Dark" ], "specie": "Scratch Cat Pokémon", "height": 0.4, "weight": 4.2, "abilities": [ "Pickup", "Technician", "Rattled" ], "stats": { "total": 290, "hp": 40, "attack": 35, "defense": 35, "speedAttack": 50, "speedDefense": 40, "speed": 90 }, "evolutions": [ "meowth", "persian" ] } ], "link": "https://pokemondb.net/pokedex/meowth" }, { "num": 53, "name": "Persian", "variations": [ { "name": "Persian", "description": "Persian is a Normal type Pokémon introduced in Generation 1. It is known as the Classy Cat Pokémon.\nPersian has a new Alolan form introduced in Pokémon Sun/Moon.", "image": "images/persian.jpg", "types": [ "Normal" ], "specie": "Classy Cat Pokémon", "height": 1, "weight": 32, "abilities": [ "Limber", "Technician", "Unnerve" ], "stats": { "total": 440, "hp": 65, "attack": 70, "defense": 60, "speedAttack": 65, "speedDefense": 65, "speed": 115 }, "evolutions": [ "meowth", "persian" ] }, { "name": "Alolan Persian", "description": "Persian is a Normal type Pokémon introduced in Generation 1. It is known as the Classy Cat Pokémon.\nPersian has a new Alolan form introduced in Pokémon Sun/Moon.", "image": "images/persian-alolan.jpg", "types": [ "Dark" ], "specie": "Classy Cat Pokémon", "height": 1.1, "weight": 33, "abilities": [ "Fur Coat", "Technician", "Rattled" ], "stats": { "total": 440, "hp": 65, "attack": 60, "defense": 60, "speedAttack": 75, "speedDefense": 65, "speed": 115 }, "evolutions": [ "meowth", "persian" ] } ], "link": "https://pokemondb.net/pokedex/persian" }, { "num": 54, "name": "Psyduck", "variations": [ { "name": "Psyduck", "description": "Psyduck is a Water type Pokémon introduced in Generation 1. It is known as the Duck Pokémon.", "image": "images/psyduck.jpg", "types": [ "Water" ], "specie": "Duck Pokémon", "height": 0.8, "weight": 19.6, "abilities": [ "Damp", "Cloud Nine", "Swift Swim" ], "stats": { "total": 320, "hp": 50, "attack": 52, "defense": 48, "speedAttack": 65, "speedDefense": 50, "speed": 55 }, "evolutions": [ "psyduck", "golduck" ] } ], "link": "https://pokemondb.net/pokedex/psyduck" }, { "num": 55, "name": "Golduck", "variations": [ { "name": "Golduck", "description": "Golduck is a Water type Pokémon introduced in Generation 1. It is known as the Duck Pokémon.", "image": "images/golduck.jpg", "types": [ "Water" ], "specie": "Duck Pokémon", "height": 1.7, "weight": 76.6, "abilities": [ "Damp", "Cloud Nine", "Swift Swim" ], "stats": { "total": 500, "hp": 80, "attack": 82, "defense": 78, "speedAttack": 95, "speedDefense": 80, "speed": 85 }, "evolutions": [ "psyduck", "golduck" ] } ], "link": "https://pokemondb.net/pokedex/golduck" }, { "num": 56, "name": "Mankey", "variations": [ { "name": "Mankey", "description": "Mankey is a Fighting type Pokémon introduced in Generation 1. It is known as the Pig Monkey Pokémon.", "image": "images/mankey.jpg", "types": [ "Fighting" ], "specie": "Pig Monkey Pokémon", "height": 0.5, "weight": 28, "abilities": [ "Vital Spirit", "Anger Point", "Defiant" ], "stats": { "total": 305, "hp": 40, "attack": 80, "defense": 35, "speedAttack": 35, "speedDefense": 45, "speed": 70 }, "evolutions": [ "mankey", "primeape" ] } ], "link": "https://pokemondb.net/pokedex/mankey" }, { "num": 57, "name": "Primeape", "variations": [ { "name": "Primeape", "description": "Primeape is a Fighting type Pokémon introduced in Generation 1. It is known as the Pig Monkey Pokémon.", "image": "images/primeape.jpg", "types": [ "Fighting" ], "specie": "Pig Monkey Pokémon", "height": 1, "weight": 32, "abilities": [ "Vital Spirit", "Anger Point", "Defiant" ], "stats": { "total": 455, "hp": 65, "attack": 105, "defense": 60, "speedAttack": 60, "speedDefense": 70, "speed": 95 }, "evolutions": [ "mankey", "primeape" ] } ], "link": "https://pokemondb.net/pokedex/primeape" }, { "num": 58, "name": "Growlithe", "variations": [ { "name": "Growlithe", "description": "Growlithe is a Fire type Pokémon introduced in Generation 1. It is known as the Puppy Pokémon.", "image": "images/growlithe.jpg", "types": [ "Fire" ], "specie": "Puppy Pokémon", "height": 0.7, "weight": 19, "abilities": [ "Intimidate", "Flash Fire", "Justified" ], "stats": { "total": 350, "hp": 55, "attack": 70, "defense": 45, "speedAttack": 70, "speedDefense": 50, "speed": 60 }, "evolutions": [ "growlithe", "arcanine" ] } ], "link": "https://pokemondb.net/pokedex/growlithe" }, { "num": 59, "name": "Arcanine", "variations": [ { "name": "Arcanine", "description": "Arcanine is a Fire type Pokémon introduced in Generation 1. It is known as the Legendary Pokémon.", "image": "images/arcanine.jpg", "types": [ "Fire" ], "specie": "Legendary Pokémon", "height": 1.9, "weight": 155, "abilities": [ "Intimidate", "Flash Fire", "Justified" ], "stats": { "total": 555, "hp": 90, "attack": 110, "defense": 80, "speedAttack": 100, "speedDefense": 80, "speed": 95 }, "evolutions": [ "growlithe", "arcanine" ] } ], "link": "https://pokemondb.net/pokedex/arcanine" }, { "num": 60, "name": "Poliwag", "variations": [ { "name": "Poliwag", "description": "Poliwag is a Water type Pokémon introduced in Generation 1. It is known as the Tadpole Pokémon.", "image": "images/poliwag.jpg", "types": [ "Water" ], "specie": "Tadpole Pokémon", "height": 0.6, "weight": 12.4, "abilities": [ "Water Absorb", "Damp", "Swift Swim" ], "stats": { "total": 300, "hp": 40, "attack": 50, "defense": 40, "speedAttack": 40, "speedDefense": 40, "speed": 90 }, "evolutions": [ "poliwag", "poliwhirl", "poliwrath", "politoed" ] } ], "link": "https://pokemondb.net/pokedex/poliwag" }, { "num": 61, "name": "Poliwhirl", "variations": [ { "name": "Poliwhirl", "description": "Poliwhirl is a Water type Pokémon introduced in Generation 1. It is known as the Tadpole Pokémon.", "image": "images/poliwhirl.jpg", "types": [ "Water" ], "specie": "Tadpole Pokémon", "height": 1, "weight": 20, "abilities": [ "Water Absorb", "Damp", "Swift Swim" ], "stats": { "total": 385, "hp": 65, "attack": 65, "defense": 65, "speedAttack": 50, "speedDefense": 50, "speed": 90 }, "evolutions": [ "poliwag", "poliwhirl", "poliwrath", "politoed" ] } ], "link": "https://pokemondb.net/pokedex/poliwhirl" }, { "num": 62, "name": "Poliwrath", "variations": [ { "name": "Poliwrath", "description": "Poliwrath is a Water/Fighting type Pokémon introduced in Generation 1. It is known as the Tadpole Pokémon.", "image": "images/poliwrath.jpg", "types": [ "Water", "Fighting" ], "specie": "Tadpole Pokémon", "height": 1.3, "weight": 54, "abilities": [ "Water Absorb", "Damp", "Swift Swim" ], "stats": { "total": 510, "hp": 90, "attack": 95, "defense": 95, "speedAttack": 70, "speedDefense": 90, "speed": 70 }, "evolutions": [ "poliwag", "poliwhirl", "poliwrath", "politoed" ] } ], "link": "https://pokemondb.net/pokedex/poliwrath" }, { "num": 63, "name": "Abra", "variations": [ { "name": "Abra", "description": "Abra is a Psychic type Pokémon introduced in Generation 1. It is known as the Psi Pokémon.", "image": "images/abra.jpg", "types": [ "Psychic" ], "specie": "Psi Pokémon", "height": 0.9, "weight": 19.5, "abilities": [ "Synchronize", "Inner Focus", "Magic Guard" ], "stats": { "total": 310, "hp": 25, "attack": 20, "defense": 15, "speedAttack": 105, "speedDefense": 55, "speed": 90 }, "evolutions": [ "abra", "kadabra", "alakazam" ] } ], "link": "https://pokemondb.net/pokedex/abra" }, { "num": 64, "name": "Kadabra", "variations": [ { "name": "Kadabra", "description": "Kadabra is a Psychic type Pokémon introduced in Generation 1. It is known as the Psi Pokémon.", "image": "images/kadabra.jpg", "types": [ "Psychic" ], "specie": "Psi Pokémon", "height": 1.3, "weight": 56.5, "abilities": [ "Synchronize", "Inner Focus", "Magic Guard" ], "stats": { "total": 400, "hp": 40, "attack": 35, "defense": 30, "speedAttack": 120, "speedDefense": 70, "speed": 105 }, "evolutions": [ "abra", "kadabra", "alakazam" ] } ], "link": "https://pokemondb.net/pokedex/kadabra" }, { "num": 65, "name": "Alakazam", "variations": [ { "name": "Alakazam", "description": "Alakazam is a Psychic type Pokémon introduced in Generation 1. It is known as the Psi Pokémon.\nAlakazam has a Mega Evolution, available from X & Y onwards.", "image": "images/alakazam.jpg", "types": [ "Psychic" ], "specie": "Psi Pokémon", "height": 1.5, "weight": 48, "abilities": [ "Synchronize", "Inner Focus", "Magic Guard" ], "stats": { "total": 500, "hp": 55, "attack": 50, "defense": 45, "speedAttack": 135, "speedDefense": 95, "speed": 120 }, "evolutions": [ "abra", "kadabra", "alakazam" ] }, { "name": "Mega Alakazam", "description": "Alakazam is a Psychic type Pokémon introduced in Generation 1. It is known as the Psi Pokémon.\nAlakazam has a Mega Evolution, available from X & Y onwards.", "image": "images/alakazam-mega.jpg", "types": [ "Psychic" ], "specie": "Psi Pokémon", "height": 1.2, "weight": 48, "abilities": [ "Trace" ], "stats": { "total": 600, "hp": 55, "attack": 50, "defense": 65, "speedAttack": 175, "speedDefense": 105, "speed": 150 }, "evolutions": [ "abra", "kadabra", "alakazam" ] } ], "link": "https://pokemondb.net/pokedex/alakazam" }, { "num": 66, "name": "Machop", "variations": [ { "name": "Machop", "description": "Machop is a Fighting type Pokémon introduced in Generation 1. It is known as the Superpower Pokémon.", "image": "images/machop.jpg", "types": [ "Fighting" ], "specie": "Superpower Pokémon", "height": 0.8, "weight": 19.5, "abilities": [ "Guts", "No Guard", "Steadfast" ], "stats": { "total": 305, "hp": 70, "attack": 80, "defense": 50, "speedAttack": 35, "speedDefense": 35, "speed": 35 }, "evolutions": [ "machop", "machoke", "machamp" ] } ], "link": "https://pokemondb.net/pokedex/machop" }, { "num": 67, "name": "Machoke", "variations": [ { "name": "Machoke", "description": "Machoke is a Fighting type Pokémon introduced in Generation 1. It is known as the Superpower Pokémon.", "image": "images/machoke.jpg", "types": [ "Fighting" ], "specie": "Superpower Pokémon", "height": 1.5, "weight": 70.5, "abilities": [ "Guts", "No Guard", "Steadfast" ], "stats": { "total": 405, "hp": 80, "attack": 100, "defense": 70, "speedAttack": 50, "speedDefense": 60, "speed": 45 }, "evolutions": [ "machop", "machoke", "machamp" ] } ], "link": "https://pokemondb.net/pokedex/machoke" }, { "num": 68, "name": "Machamp", "variations": [ { "name": "Machamp", "description": "Machamp is a Fighting type Pokémon introduced in Generation 1. It is known as the Superpower Pokémon.", "image": "images/machamp.jpg", "types": [ "Fighting" ], "specie": "Superpower Pokémon", "height": 1.6, "weight": 130, "abilities": [ "Guts", "No Guard", "Steadfast" ], "stats": { "total": 505, "hp": 90, "attack": 130, "defense": 80, "speedAttack": 65, "speedDefense": 85, "speed": 55 }, "evolutions": [ "machop", "machoke", "machamp" ] } ], "link": "https://pokemondb.net/pokedex/machamp" }, { "num": 69, "name": "Bellsprout", "variations": [ { "name": "Bellsprout", "description": "Bellsprout is a Grass/Poison type Pokémon introduced in Generation 1. It is known as the Flower Pokémon.", "image": "images/bellsprout.jpg", "types": [ "Grass", "Poison" ], "specie": "Flower Pokémon", "height": 0.7, "weight": 4, "abilities": [ "Chlorophyll", "Gluttony" ], "stats": { "total": 300, "hp": 50, "attack": 75, "defense": 35, "speedAttack": 70, "speedDefense": 30, "speed": 40 }, "evolutions": [ "bellsprout", "weepinbell", "victreebel" ] } ], "link": "https://pokemondb.net/pokedex/bellsprout" }, { "num": 70, "name": "Weepinbell", "variations": [ { "name": "Weepinbell", "description": "Weepinbell is a Grass/Poison type Pokémon introduced in Generation 1. It is known as the Flycatcher Pokémon.", "image": "images/weepinbell.jpg", "types": [ "Grass", "Poison" ], "specie": "Flycatcher Pokémon", "height": 1, "weight": 6.4, "abilities": [ "Chlorophyll", "Gluttony" ], "stats": { "total": 390, "hp": 65, "attack": 90, "defense": 50, "speedAttack": 85, "speedDefense": 45, "speed": 55 }, "evolutions": [ "bellsprout", "weepinbell", "victreebel" ] } ], "link": "https://pokemondb.net/pokedex/weepinbell" }, { "num": 71, "name": "Victreebel", "variations": [ { "name": "Victreebel", "description": "Victreebel is a Grass/Poison type Pokémon introduced in Generation 1. It is known as the Flycatcher Pokémon.", "image": "images/victreebel.jpg", "types": [ "Grass", "Poison" ], "specie": "Flycatcher Pokémon", "height": 1.7, "weight": 15.5, "abilities": [ "Chlorophyll", "Gluttony" ], "stats": { "total": 490, "hp": 80, "attack": 105, "defense": 65, "speedAttack": 100, "speedDefense": 70, "speed": 70 }, "evolutions": [ "bellsprout", "weepinbell", "victreebel" ] } ], "link": "https://pokemondb.net/pokedex/victreebel" }, { "num": 72, "name": "Tentacool", "variations": [ { "name": "Tentacool", "description": "Tentacool is a Water/Poison type Pokémon introduced in Generation 1. It is known as the Jellyfish Pokémon.", "image": "images/tentacool.jpg", "types": [ "Water", "Poison" ], "specie": "Jellyfish Pokémon", "height": 0.9, "weight": 45.5, "abilities": [ "Clear Body", "Liquid Ooze", "Rain Dish" ], "stats": { "total": 335, "hp": 40, "attack": 40, "defense": 35, "speedAttack": 50, "speedDefense": 100, "speed": 70 }, "evolutions": [ "tentacool", "tentacruel" ] } ], "link": "https://pokemondb.net/pokedex/tentacool" }, { "num": 73, "name": "Tentacruel", "variations": [ { "name": "Tentacruel", "description": "Tentacruel is a Water/Poison type Pokémon introduced in Generation 1. It is known as the Jellyfish Pokémon.", "image": "images/tentacruel.jpg", "types": [ "Water", "Poison" ], "specie": "Jellyfish Pokémon", "height": 1.6, "weight": 55, "abilities": [ "Clear Body", "Liquid Ooze", "Rain Dish" ], "stats": { "total": 515, "hp": 80, "attack": 70, "defense": 65, "speedAttack": 80, "speedDefense": 120, "speed": 100 }, "evolutions": [ "tentacool", "tentacruel" ] } ], "link": "https://pokemondb.net/pokedex/tentacruel" }, { "num": 74, "name": "Geodude", "variations": [ { "name": "Geodude", "description": "Geodude is a Rock/Ground type Pokémon introduced in Generation 1. It is known as the Rock Pokémon.", "image": "images/geodude.jpg", "types": [ "Rock", "Ground" ], "specie": "Rock Pokémon", "height": 0.4, "weight": 20, "abilities": [ "Rock Head", "Sturdy", "Sand Veil" ], "stats": { "total": 300, "hp": 40, "attack": 80, "defense": 100, "speedAttack": 30, "speedDefense": 30, "speed": 20 }, "evolutions": [ "geodude", "graveler", "golem" ] }, { "name": "Alolan Geodude", "description": "Geodude is a Rock/Ground type Pokémon introduced in Generation 1. It is known as the Rock Pokémon.", "image": "images/geodude-alolan.jpg", "types": [ "Rock", "Electric" ], "specie": "Rock Pokémon", "height": 0.4, "weight": 20.3, "abilities": [ "Magnet Pull", "Sturdy", "Galvanize" ], "stats": { "total": 300, "hp": 40, "attack": 80, "defense": 100, "speedAttack": 30, "speedDefense": 30, "speed": 20 }, "evolutions": [ "geodude", "graveler", "golem" ] } ], "link": "https://pokemondb.net/pokedex/geodude" }, { "num": 75, "name": "Graveler", "variations": [ { "name": "Graveler", "description": "Graveler is a Rock/Ground type Pokémon introduced in Generation 1. It is known as the Rock Pokémon.", "image": "images/graveler.jpg", "types": [ "Rock", "Ground" ], "specie": "Rock Pokémon", "height": 1, "weight": 105, "abilities": [ "Rock Head", "Sturdy", "Sand Veil" ], "stats": { "total": 390, "hp": 55, "attack": 95, "defense": 115, "speedAttack": 45, "speedDefense": 45, "speed": 35 }, "evolutions": [ "geodude", "graveler", "golem" ] }, { "name": "Alolan Graveler", "description": "Graveler is a Rock/Ground type Pokémon introduced in Generation 1. It is known as the Rock Pokémon.", "image": "images/graveler-alolan.jpg", "types": [ "Rock", "Electric" ], "specie": "Rock Pokémon", "height": 1, "weight": 110, "abilities": [ "Magnet Pull", "Sturdy", "Galvanize" ], "stats": { "total": 390, "hp": 55, "attack": 95, "defense": 115, "speedAttack": 45, "speedDefense": 45, "speed": 35 }, "evolutions": [ "geodude", "graveler", "golem" ] } ], "link": "https://pokemondb.net/pokedex/graveler" }, { "num": 76, "name": "Golem", "variations": [ { "name": "Golem", "description": "Golem is a Rock/Ground type Pokémon introduced in Generation 1. It is known as the Megaton Pokémon.", "image": "images/golem.jpg", "types": [ "Rock", "Ground" ], "specie": "Megaton Pokémon", "height": 1.4, "weight": 300, "abilities": [ "Rock Head", "Sturdy", "Sand Veil" ], "stats": { "total": 495, "hp": 80, "attack": 120, "defense": 130, "speedAttack": 55, "speedDefense": 65, "speed": 45 }, "evolutions": [ "geodude", "graveler", "golem" ] }, { "name": "Alolan Golem", "description": "Golem is a Rock/Ground type Pokémon introduced in Generation 1. It is known as the Megaton Pokémon.", "image": "images/golem-alolan.jpg", "types": [ "Rock", "Electric" ], "specie": "Megaton Pokémon", "height": 1.7, "weight": 316, "abilities": [ "Magnet Pull", "Sturdy", "Galvanize" ], "stats": { "total": 495, "hp": 80, "attack": 120, "defense": 130, "speedAttack": 55, "speedDefense": 65, "speed": 45 }, "evolutions": [ "geodude", "graveler", "golem" ] } ], "link": "https://pokemondb.net/pokedex/golem" }, { "num": 77, "name": "Ponyta", "variations": [ { "name": "Ponyta", "description": "Ponyta is a Fire type Pokémon introduced in Generation 1. It is known as the Fire Horse Pokémon.", "image": "images/ponyta.jpg", "types": [ "Fire" ], "specie": "Fire Horse Pokémon", "height": 1, "weight": 30, "abilities": [ "Run Away", "Flash Fire", "Flame Body" ], "stats": { "total": 410, "hp": 50, "attack": 85, "defense": 55, "speedAttack": 65, "speedDefense": 65, "speed": 90 }, "evolutions": [ "ponyta", "rapidash" ] } ], "link": "https://pokemondb.net/pokedex/ponyta" }, { "num": 78, "name": "Rapidash", "variations": [ { "name": "Rapidash", "description": "Rapidash is a Fire type Pokémon introduced in Generation 1. It is known as the Fire Horse Pokémon.", "image": "images/rapidash.jpg", "types": [ "Fire" ], "specie": "Fire Horse Pokémon", "height": 1.7, "weight": 95, "abilities": [ "Run Away", "Flash Fire", "Flame Body" ], "stats": { "total": 500, "hp": 65, "attack": 100, "defense": 70, "speedAttack": 80, "speedDefense": 80, "speed": 105 }, "evolutions": [ "ponyta", "rapidash" ] } ], "link": "https://pokemondb.net/pokedex/rapidash" }, { "num": 79, "name": "Slowpoke", "variations": [ { "name": "Slowpoke", "description": "Slowpoke is a Water/Psychic type Pokémon introduced in Generation 1. It is known as the Dopey Pokémon.", "image": "images/slowpoke.jpg", "types": [ "Water", "Psychic" ], "specie": "Dopey Pokémon", "height": 1.2, "weight": 36, "abilities": [ "Oblivious", "Own Tempo", "Regenerator" ], "stats": { "total": 315, "hp": 90, "attack": 65, "defense": 65, "speedAttack": 40, "speedDefense": 40, "speed": 15 }, "evolutions": [ "slowpoke", "slowbro", "slowking" ] } ], "link": "https://pokemondb.net/pokedex/slowpoke" }, { "num": 80, "name": "Slowbro", "variations": [ { "name": "Slowbro", "description": "Slowbro is a Water/Psychic type Pokémon introduced in Generation 1. It is known as the Hermit Crab Pokémon.\nSlowbro has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/slowbro.jpg", "types": [ "Water", "Psychic" ], "specie": "Hermit Crab Pokémon", "height": 1.6, "weight": 78.5, "abilities": [ "Oblivious", "Own Tempo", "Regenerator" ], "stats": { "total": 490, "hp": 95, "attack": 75, "defense": 110, "speedAttack": 100, "speedDefense": 80, "speed": 30 }, "evolutions": [ "slowpoke", "slowbro", "slowking" ] }, { "name": "Mega Slowbro", "description": "Slowbro is a Water/Psychic type Pokémon introduced in Generation 1. It is known as the Hermit Crab Pokémon.\nSlowbro has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/slowbro-mega.jpg", "types": [ "Water", "Psychic" ], "specie": "Hermit Crab Pokémon", "height": 2, "weight": 120, "abilities": [ "Shell Armor" ], "stats": { "total": 590, "hp": 95, "attack": 75, "defense": 180, "speedAttack": 130, "speedDefense": 80, "speed": 30 }, "evolutions": [ "slowpoke", "slowbro", "slowking" ] } ], "link": "https://pokemondb.net/pokedex/slowbro" }, { "num": 81, "name": "Magnemite", "variations": [ { "name": "Magnemite", "description": "Magnemite is an Electric/Steel type Pokémon introduced in Generation 1. It is known as the Magnet Pokémon.", "image": "images/magnemite.jpg", "types": [ "Electric", "Steel" ], "specie": "Magnet Pokémon", "height": 0.3, "weight": 6, "abilities": [ "Magnet Pull", "Sturdy", "Analytic" ], "stats": { "total": 325, "hp": 25, "attack": 35, "defense": 70, "speedAttack": 95, "speedDefense": 55, "speed": 45 }, "evolutions": [ "magnemite", "magneton", "magnezone" ] } ], "link": "https://pokemondb.net/pokedex/magnemite" }, { "num": 82, "name": "Magneton", "variations": [ { "name": "Magneton", "description": "Magneton is an Electric/Steel type Pokémon introduced in Generation 1. It is known as the Magnet Pokémon.", "image": "images/magneton.jpg", "types": [ "Electric", "Steel" ], "specie": "Magnet Pokémon", "height": 1, "weight": 60, "abilities": [ "Magnet Pull", "Sturdy", "Analytic" ], "stats": { "total": 465, "hp": 50, "attack": 60, "defense": 95, "speedAttack": 120, "speedDefense": 70, "speed": 70 }, "evolutions": [ "magnemite", "magneton", "magnezone" ] } ], "link": "https://pokemondb.net/pokedex/magneton" }, { "num": 83, "name": "Farfetch'd", "variations": [ { "name": "Farfetch'd", "description": "Farfetch'd is a Normal/Flying type Pokémon introduced in Generation 1. It is known as the Wild Duck Pokémon.", "image": "images/farfetchd.jpg", "types": [ "Normal", "Flying" ], "specie": "Wild Duck Pokémon", "height": 0.8, "weight": 15, "abilities": [ "Keen Eye", "Inner Focus", "Defiant" ], "stats": { "total": 377, "hp": 52, "attack": 90, "defense": 55, "speedAttack": 58, "speedDefense": 62, "speed": 60 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/farfetchd" }, { "num": 84, "name": "Doduo", "variations": [ { "name": "Doduo", "description": "Doduo is a Normal/Flying type Pokémon introduced in Generation 1. It is known as the Twin Bird Pokémon.", "image": "images/doduo.jpg", "types": [ "Normal", "Flying" ], "specie": "Twin Bird Pokémon", "height": 1.4, "weight": 39.2, "abilities": [ "Run Away", "Early Bird", "Tangled Feet" ], "stats": { "total": 310, "hp": 35, "attack": 85, "defense": 45, "speedAttack": 35, "speedDefense": 35, "speed": 75 }, "evolutions": [ "doduo", "dodrio" ] } ], "link": "https://pokemondb.net/pokedex/doduo" }, { "num": 85, "name": "Dodrio", "variations": [ { "name": "Dodrio", "description": "Dodrio is a Normal/Flying type Pokémon introduced in Generation 1. It is known as the Triple Bird Pokémon.", "image": "images/dodrio.jpg", "types": [ "Normal", "Flying" ], "specie": "Triple Bird Pokémon", "height": 1.8, "weight": 85.2, "abilities": [ "Run Away", "Early Bird", "Tangled Feet" ], "stats": { "total": 470, "hp": 60, "attack": 110, "defense": 70, "speedAttack": 60, "speedDefense": 60, "speed": 110 }, "evolutions": [ "doduo", "dodrio" ] } ], "link": "https://pokemondb.net/pokedex/dodrio" }, { "num": 86, "name": "Seel", "variations": [ { "name": "Seel", "description": "Seel is a Water type Pokémon introduced in Generation 1. It is known as the Sea Lion Pokémon.", "image": "images/seel.jpg", "types": [ "Water" ], "specie": "Sea Lion Pokémon", "height": 1.1, "weight": 90, "abilities": [ "Thick Fat", "Hydration", "Ice Body" ], "stats": { "total": 325, "hp": 65, "attack": 45, "defense": 55, "speedAttack": 45, "speedDefense": 70, "speed": 45 }, "evolutions": [ "seel", "dewgong" ] } ], "link": "https://pokemondb.net/pokedex/seel" }, { "num": 87, "name": "Dewgong", "variations": [ { "name": "Dewgong", "description": "Dewgong is a Water/Ice type Pokémon introduced in Generation 1. It is known as the Sea Lion Pokémon.", "image": "images/dewgong.jpg", "types": [ "Water", "Ice" ], "specie": "Sea Lion Pokémon", "height": 1.7, "weight": 120, "abilities": [ "Thick Fat", "Hydration", "Ice Body" ], "stats": { "total": 475, "hp": 90, "attack": 70, "defense": 80, "speedAttack": 70, "speedDefense": 95, "speed": 70 }, "evolutions": [ "seel", "dewgong" ] } ], "link": "https://pokemondb.net/pokedex/dewgong" }, { "num": 88, "name": "Grimer", "variations": [ { "name": "Grimer", "description": "Grimer is a Poison type Pokémon introduced in Generation 1. It is known as the Sludge Pokémon.\nGrimer has a new Alolan form introduced in Pokémon Sun/Moon.", "image": "images/grimer.jpg", "types": [ "Poison" ], "specie": "Sludge Pokémon", "height": 0.9, "weight": 30, "abilities": [ "Stench", "Sticky Hold", "Poison Touch" ], "stats": { "total": 325, "hp": 80, "attack": 80, "defense": 50, "speedAttack": 40, "speedDefense": 50, "speed": 25 }, "evolutions": [ "grimer", "muk" ] }, { "name": "Alolan Grimer", "description": "Grimer is a Poison type Pokémon introduced in Generation 1. It is known as the Sludge Pokémon.\nGrimer has a new Alolan form introduced in Pokémon Sun/Moon.", "image": "images/grimer-alolan.jpg", "types": [ "Poison", "Dark" ], "specie": "Sludge Pokémon", "height": 0.7, "weight": 42, "abilities": [ "Poison Touch", "Gluttony", "Power of Alchemy" ], "stats": { "total": 325, "hp": 80, "attack": 80, "defense": 50, "speedAttack": 40, "speedDefense": 50, "speed": 25 }, "evolutions": [ "grimer", "muk" ] } ], "link": "https://pokemondb.net/pokedex/grimer" }, { "num": 89, "name": "Muk", "variations": [ { "name": "Muk", "description": "Muk is a Poison type Pokémon introduced in Generation 1. It is known as the Sludge Pokémon.\nMuk has a new Alolan form introduced in Pokémon Sun/Moon.", "image": "images/muk.jpg", "types": [ "Poison" ], "specie": "Sludge Pokémon", "height": 1.2, "weight": 30, "abilities": [ "Stench", "Sticky Hold", "Poison Touch" ], "stats": { "total": 500, "hp": 105, "attack": 105, "defense": 75, "speedAttack": 65, "speedDefense": 100, "speed": 50 }, "evolutions": [ "grimer", "muk" ] }, { "name": "Alolan Muk", "description": "Muk is a Poison type Pokémon introduced in Generation 1. It is known as the Sludge Pokémon.\nMuk has a new Alolan form introduced in Pokémon Sun/Moon.", "image": "images/muk-alolan.jpg", "types": [ "Poison", "Dark" ], "specie": "Sludge Pokémon", "height": 1, "weight": 52, "abilities": [ "Poison Touch", "Gluttony", "Power of Alchemy" ], "stats": { "total": 500, "hp": 105, "attack": 105, "defense": 75, "speedAttack": 65, "speedDefense": 100, "speed": 50 }, "evolutions": [ "grimer", "muk" ] } ], "link": "https://pokemondb.net/pokedex/muk" }, { "num": 90, "name": "Shellder", "variations": [ { "name": "Shellder", "description": "Shellder is a Water type Pokémon introduced in Generation 1. It is known as the Bivalve Pokémon.", "image": "images/shellder.jpg", "types": [ "Water" ], "specie": "Bivalve Pokémon", "height": 0.3, "weight": 4, "abilities": [ "Shell Armor", "Skill Link", "Overcoat" ], "stats": { "total": 305, "hp": 30, "attack": 65, "defense": 100, "speedAttack": 45, "speedDefense": 25, "speed": 40 }, "evolutions": [ "shellder", "cloyster" ] } ], "link": "https://pokemondb.net/pokedex/shellder" }, { "num": 91, "name": "Cloyster", "variations": [ { "name": "Cloyster", "description": "Cloyster is a Water/Ice type Pokémon introduced in Generation 1. It is known as the Bivalve Pokémon.", "image": "images/cloyster.jpg", "types": [ "Water", "Ice" ], "specie": "Bivalve Pokémon", "height": 1.5, "weight": 132.5, "abilities": [ "Shell Armor", "Skill Link", "Overcoat" ], "stats": { "total": 525, "hp": 50, "attack": 95, "defense": 180, "speedAttack": 85, "speedDefense": 45, "speed": 70 }, "evolutions": [ "shellder", "cloyster" ] } ], "link": "https://pokemondb.net/pokedex/cloyster" }, { "num": 92, "name": "Gastly", "variations": [ { "name": "Gastly", "description": "Gastly is a Ghost/Poison type Pokémon introduced in Generation 1. It is known as the Gas Pokémon.", "image": "images/gastly.jpg", "types": [ "Ghost", "Poison" ], "specie": "Gas Pokémon", "height": 1.3, "weight": 0.1, "abilities": [ "Levitate" ], "stats": { "total": 310, "hp": 30, "attack": 35, "defense": 30, "speedAttack": 100, "speedDefense": 35, "speed": 80 }, "evolutions": [ "gastly", "haunter", "gengar" ] } ], "link": "https://pokemondb.net/pokedex/gastly" }, { "num": 93, "name": "Haunter", "variations": [ { "name": "Haunter", "description": "Haunter is a Ghost/Poison type Pokémon introduced in Generation 1. It is known as the Gas Pokémon.", "image": "images/haunter.jpg", "types": [ "Ghost", "Poison" ], "specie": "Gas Pokémon", "height": 1.6, "weight": 0.1, "abilities": [ "Levitate" ], "stats": { "total": 405, "hp": 45, "attack": 50, "defense": 45, "speedAttack": 115, "speedDefense": 55, "speed": 95 }, "evolutions": [ "gastly", "haunter", "gengar" ] } ], "link": "https://pokemondb.net/pokedex/haunter" }, { "num": 94, "name": "Gengar", "variations": [ { "name": "Gengar", "description": "Gengar is a Ghost/Poison type Pokémon introduced in Generation 1. It is known as the Shadow Pokémon.\nGengar has a Mega Evolution, available from X & Y onwards.\nPrior to Generation 7, Gengar had the Levitate ability.", "image": "images/gengar.jpg", "types": [ "Ghost", "Poison" ], "specie": "Shadow Pokémon", "height": 1.5, "weight": 40.5, "abilities": [ "Cursed Body" ], "stats": { "total": 500, "hp": 60, "attack": 65, "defense": 60, "speedAttack": 130, "speedDefense": 75, "speed": 110 }, "evolutions": [ "gastly", "haunter", "gengar" ] }, { "name": "Mega Gengar", "description": "Gengar is a Ghost/Poison type Pokémon introduced in Generation 1. It is known as the Shadow Pokémon.\nGengar has a Mega Evolution, available from X & Y onwards.\nPrior to Generation 7, Gengar had the Levitate ability.", "image": "images/gengar-mega.jpg", "types": [ "Ghost", "Poison" ], "specie": "Shadow Pokémon", "height": 1.4, "weight": 40.5, "abilities": [ "Shadow Tag" ], "stats": { "total": 600, "hp": 60, "attack": 65, "defense": 80, "speedAttack": 170, "speedDefense": 95, "speed": 130 }, "evolutions": [ "gastly", "haunter", "gengar" ] } ], "link": "https://pokemondb.net/pokedex/gengar" }, { "num": 95, "name": "Onix", "variations": [ { "name": "Onix", "description": "Onix is a Rock/Ground type Pokémon introduced in Generation 1. It is known as the Rock Snake Pokémon.", "image": "images/onix.jpg", "types": [ "Rock", "Ground" ], "specie": "Rock Snake Pokémon", "height": 8.8, "weight": 210, "abilities": [ "Rock Head", "Sturdy", "Weak Armor" ], "stats": { "total": 385, "hp": 35, "attack": 45, "defense": 160, "speedAttack": 30, "speedDefense": 45, "speed": 70 }, "evolutions": [ "onix", "steelix" ] } ], "link": "https://pokemondb.net/pokedex/onix" }, { "num": 96, "name": "Drowzee", "variations": [ { "name": "Drowzee", "description": "Drowzee is a Psychic type Pokémon introduced in Generation 1. It is known as the Hypnosis Pokémon.", "image": "images/drowzee.jpg", "types": [ "Psychic" ], "specie": "Hypnosis Pokémon", "height": 1, "weight": 32.4, "abilities": [ "Insomnia", "Forewarn", "Inner Focus" ], "stats": { "total": 328, "hp": 60, "attack": 48, "defense": 45, "speedAttack": 43, "speedDefense": 90, "speed": 42 }, "evolutions": [ "drowzee", "hypno" ] } ], "link": "https://pokemondb.net/pokedex/drowzee" }, { "num": 97, "name": "Hypno", "variations": [ { "name": "Hypno", "description": "Hypno is a Psychic type Pokémon introduced in Generation 1. It is known as the Hypnosis Pokémon.", "image": "images/hypno.jpg", "types": [ "Psychic" ], "specie": "Hypnosis Pokémon", "height": 1.6, "weight": 75.6, "abilities": [ "Insomnia", "Forewarn", "Inner Focus" ], "stats": { "total": 483, "hp": 85, "attack": 73, "defense": 70, "speedAttack": 73, "speedDefense": 115, "speed": 67 }, "evolutions": [ "drowzee", "hypno" ] } ], "link": "https://pokemondb.net/pokedex/hypno" }, { "num": 98, "name": "Krabby", "variations": [ { "name": "Krabby", "description": "Krabby is a Water type Pokémon introduced in Generation 1. It is known as the River Crab Pokémon.", "image": "images/krabby.jpg", "types": [ "Water" ], "specie": "River Crab Pokémon", "height": 0.4, "weight": 6.5, "abilities": [ "Hyper Cutter", "Shell Armor", "Sheer Force" ], "stats": { "total": 325, "hp": 30, "attack": 105, "defense": 90, "speedAttack": 25, "speedDefense": 25, "speed": 50 }, "evolutions": [ "krabby", "kingler" ] } ], "link": "https://pokemondb.net/pokedex/krabby" }, { "num": 99, "name": "Kingler", "variations": [ { "name": "Kingler", "description": "Kingler is a Water type Pokémon introduced in Generation 1. It is known as the Pincer Pokémon.", "image": "images/kingler.jpg", "types": [ "Water" ], "specie": "Pincer Pokémon", "height": 1.3, "weight": 60, "abilities": [ "Hyper Cutter", "Shell Armor", "Sheer Force" ], "stats": { "total": 475, "hp": 55, "attack": 130, "defense": 115, "speedAttack": 50, "speedDefense": 50, "speed": 75 }, "evolutions": [ "krabby", "kingler" ] } ], "link": "https://pokemondb.net/pokedex/kingler" }, { "num": 100, "name": "Voltorb", "variations": [ { "name": "Voltorb", "description": "Voltorb is an Electric type Pokémon introduced in Generation 1. It is known as the Ball Pokémon.", "image": "images/voltorb.jpg", "types": [ "Electric" ], "specie": "Ball Pokémon", "height": 0.5, "weight": 10.4, "abilities": [ "Soundproof", "Static", "Aftermath" ], "stats": { "total": 330, "hp": 40, "attack": 30, "defense": 50, "speedAttack": 55, "speedDefense": 55, "speed": 100 }, "evolutions": [ "voltorb", "electrode" ] } ], "link": "https://pokemondb.net/pokedex/voltorb" }, { "num": 101, "name": "Electrode", "variations": [ { "name": "Electrode", "description": "Electrode is an Electric type Pokémon introduced in Generation 1. It is known as the Ball Pokémon.", "image": "images/electrode.jpg", "types": [ "Electric" ], "specie": "Ball Pokémon", "height": 1.2, "weight": 66.6, "abilities": [ "Soundproof", "Static", "Aftermath" ], "stats": { "total": 490, "hp": 60, "attack": 50, "defense": 70, "speedAttack": 80, "speedDefense": 80, "speed": 150 }, "evolutions": [ "voltorb", "electrode" ] } ], "link": "https://pokemondb.net/pokedex/electrode" }, { "num": 102, "name": "Exeggcute", "variations": [ { "name": "Exeggcute", "description": "Exeggcute is a Grass/Psychic type Pokémon introduced in Generation 1. It is known as the Egg Pokémon.", "image": "images/exeggcute.jpg", "types": [ "Grass", "Psychic" ], "specie": "Egg Pokémon", "height": 0.4, "weight": 2.5, "abilities": [ "Chlorophyll", "Harvest" ], "stats": { "total": 325, "hp": 60, "attack": 40, "defense": 80, "speedAttack": 60, "speedDefense": 45, "speed": 40 }, "evolutions": [ "exeggcute", "exeggutor" ] } ], "link": "https://pokemondb.net/pokedex/exeggcute" }, { "num": 103, "name": "Exeggutor", "variations": [ { "name": "Exeggutor", "description": "Exeggutor is a Grass/Psychic type Pokémon introduced in Generation 1. It is known as the Coconut Pokémon.\nExeggutor has a new Alolan form introduced in Pokémon Sun/Moon.", "image": "images/exeggutor.jpg", "types": [ "Grass", "Psychic" ], "specie": "Coconut Pokémon", "height": 2, "weight": 120, "abilities": [ "Chlorophyll", "Harvest" ], "stats": { "total": 530, "hp": 95, "attack": 95, "defense": 85, "speedAttack": 125, "speedDefense": 75, "speed": 55 }, "evolutions": [ "exeggcute", "exeggutor" ] }, { "name": "Alolan Exeggutor", "description": "Exeggutor is a Grass/Psychic type Pokémon introduced in Generation 1. It is known as the Coconut Pokémon.\nExeggutor has a new Alolan form introduced in Pokémon Sun/Moon.", "image": "images/exeggutor-alolan.jpg", "types": [ "Grass", "Dragon" ], "specie": "Coconut Pokémon", "height": 10.9, "weight": 415.6, "abilities": [ "Frisk", "Harvest" ], "stats": { "total": 530, "hp": 95, "attack": 105, "defense": 85, "speedAttack": 125, "speedDefense": 75, "speed": 45 }, "evolutions": [ "exeggcute", "exeggutor" ] } ], "link": "https://pokemondb.net/pokedex/exeggutor" }, { "num": 104, "name": "Cubone", "variations": [ { "name": "Cubone", "description": "Cubone is a Ground type Pokémon introduced in Generation 1. It is known as the Lonely Pokémon.", "image": "images/cubone.jpg", "types": [ "Ground" ], "specie": "Lonely Pokémon", "height": 0.4, "weight": 6.5, "abilities": [ "Rock Head", "Lightning Rod", "Battle Armor" ], "stats": { "total": 320, "hp": 50, "attack": 50, "defense": 95, "speedAttack": 40, "speedDefense": 50, "speed": 35 }, "evolutions": [ "cubone", "marowak" ] } ], "link": "https://pokemondb.net/pokedex/cubone" }, { "num": 105, "name": "Marowak", "variations": [ { "name": "Marowak", "description": "Marowak is a Ground type Pokémon introduced in Generation 1. It is known as the Bone Keeper Pokémon.\nMarowak has a new Alolan form introduced in Pokémon Sun/Moon.", "image": "images/marowak.jpg", "types": [ "Ground" ], "specie": "Bone Keeper Pokémon", "height": 1, "weight": 45, "abilities": [ "Rock Head", "Lightning Rod", "Battle Armor" ], "stats": { "total": 425, "hp": 60, "attack": 80, "defense": 110, "speedAttack": 50, "speedDefense": 80, "speed": 45 }, "evolutions": [ "cubone", "marowak" ] }, { "name": "Alolan Marowak", "description": "Marowak is a Ground type Pokémon introduced in Generation 1. It is known as the Bone Keeper Pokémon.\nMarowak has a new Alolan form introduced in Pokémon Sun/Moon.", "image": "images/marowak-alolan.jpg", "types": [ "Fire", "Ghost" ], "specie": "Bone Keeper Pokémon", "height": 1, "weight": 34, "abilities": [ "Cursed Body", "Lightning Rod", "Rock Head" ], "stats": { "total": 425, "hp": 60, "attack": 80, "defense": 110, "speedAttack": 50, "speedDefense": 80, "speed": 45 }, "evolutions": [ "cubone", "marowak" ] } ], "link": "https://pokemondb.net/pokedex/marowak" }, { "num": 106, "name": "Hitmonlee", "variations": [ { "name": "Hitmonlee", "description": "Hitmonlee is a Fighting type Pokémon introduced in Generation 1. It is known as the Kicking Pokémon.", "image": "images/hitmonlee.jpg", "types": [ "Fighting" ], "specie": "Kicking Pokémon", "height": 1.5, "weight": 49.8, "abilities": [ "Limber", "Reckless", "Unburden" ], "stats": { "total": 455, "hp": 50, "attack": 120, "defense": 53, "speedAttack": 35, "speedDefense": 110, "speed": 87 }, "evolutions": [ "tyrogue", "hitmonlee", "hitmonchan", "hitmontop" ] } ], "link": "https://pokemondb.net/pokedex/hitmonlee" }, { "num": 107, "name": "Hitmonchan", "variations": [ { "name": "Hitmonchan", "description": "Hitmonchan is a Fighting type Pokémon introduced in Generation 1. It is known as the Punching Pokémon.", "image": "images/hitmonchan.jpg", "types": [ "Fighting" ], "specie": "Punching Pokémon", "height": 1.4, "weight": 50.2, "abilities": [ "Keen Eye", "Iron Fist", "Inner Focus" ], "stats": { "total": 455, "hp": 50, "attack": 105, "defense": 79, "speedAttack": 35, "speedDefense": 110, "speed": 76 }, "evolutions": [ "tyrogue", "hitmonlee", "hitmonchan", "hitmontop" ] } ], "link": "https://pokemondb.net/pokedex/hitmonchan" }, { "num": 108, "name": "Lickitung", "variations": [ { "name": "Lickitung", "description": "Lickitung is a Normal type Pokémon introduced in Generation 1. It is known as the Licking Pokémon.", "image": "images/lickitung.jpg", "types": [ "Normal" ], "specie": "Licking Pokémon", "height": 1.2, "weight": 65.5, "abilities": [ "Own Tempo", "Oblivious", "Cloud Nine" ], "stats": { "total": 385, "hp": 90, "attack": 55, "defense": 75, "speedAttack": 60, "speedDefense": 75, "speed": 30 }, "evolutions": [ "lickitung", "lickilicky" ] } ], "link": "https://pokemondb.net/pokedex/lickitung" }, { "num": 109, "name": "Koffing", "variations": [ { "name": "Koffing", "description": "Koffing is a Poison type Pokémon introduced in Generation 1. It is known as the Poison Gas Pokémon.", "image": "images/koffing.jpg", "types": [ "Poison" ], "specie": "Poison Gas Pokémon", "height": 0.6, "weight": 1, "abilities": [ "Levitate" ], "stats": { "total": 340, "hp": 40, "attack": 65, "defense": 95, "speedAttack": 60, "speedDefense": 45, "speed": 35 }, "evolutions": [ "koffing", "weezing" ] } ], "link": "https://pokemondb.net/pokedex/koffing" }, { "num": 110, "name": "Weezing", "variations": [ { "name": "Weezing", "description": "Weezing is a Poison type Pokémon introduced in Generation 1. It is known as the Poison Gas Pokémon.", "image": "images/weezing.jpg", "types": [ "Poison" ], "specie": "Poison Gas Pokémon", "height": 1.2, "weight": 9.5, "abilities": [ "Levitate" ], "stats": { "total": 490, "hp": 65, "attack": 90, "defense": 120, "speedAttack": 85, "speedDefense": 70, "speed": 60 }, "evolutions": [ "koffing", "weezing" ] } ], "link": "https://pokemondb.net/pokedex/weezing" }, { "num": 111, "name": "Rhyhorn", "variations": [ { "name": "Rhyhorn", "description": "Rhyhorn is a Ground/Rock type Pokémon introduced in Generation 1. It is known as the Spikes Pokémon.", "image": "images/rhyhorn.jpg", "types": [ "Ground", "Rock" ], "specie": "Spikes Pokémon", "height": 1, "weight": 115, "abilities": [ "Lightning Rod", "Rock Head", "Reckless" ], "stats": { "total": 345, "hp": 80, "attack": 85, "defense": 95, "speedAttack": 30, "speedDefense": 30, "speed": 25 }, "evolutions": [ "rhyhorn", "rhydon", "rhyperior" ] } ], "link": "https://pokemondb.net/pokedex/rhyhorn" }, { "num": 112, "name": "Rhydon", "variations": [ { "name": "Rhydon", "description": "Rhydon is a Ground/Rock type Pokémon introduced in Generation 1. It is known as the Drill Pokémon.", "image": "images/rhydon.jpg", "types": [ "Ground", "Rock" ], "specie": "Drill Pokémon", "height": 1.9, "weight": 120, "abilities": [ "Lightning Rod", "Rock Head", "Reckless" ], "stats": { "total": 485, "hp": 105, "attack": 130, "defense": 120, "speedAttack": 45, "speedDefense": 45, "speed": 40 }, "evolutions": [ "rhyhorn", "rhydon", "rhyperior" ] } ], "link": "https://pokemondb.net/pokedex/rhydon" }, { "num": 113, "name": "Chansey", "variations": [ { "name": "Chansey", "description": "Chansey is a Normal type Pokémon introduced in Generation 1. It is known as the Egg Pokémon.", "image": "images/chansey.jpg", "types": [ "Normal" ], "specie": "Egg Pokémon", "height": 1.1, "weight": 34.6, "abilities": [ "Natural Cure", "Serene Grace", "Healer" ], "stats": { "total": 450, "hp": 250, "attack": 5, "defense": 5, "speedAttack": 35, "speedDefense": 105, "speed": 50 }, "evolutions": [ "happiny", "chansey", "blissey" ] } ], "link": "https://pokemondb.net/pokedex/chansey" }, { "num": 114, "name": "Tangela", "variations": [ { "name": "Tangela", "description": "Tangela is a Grass type Pokémon introduced in Generation 1. It is known as the Vine Pokémon.", "image": "images/tangela.jpg", "types": [ "Grass" ], "specie": "Vine Pokémon", "height": 1, "weight": 35, "abilities": [ "Chlorophyll", "Leaf Guard", "Regenerator" ], "stats": { "total": 435, "hp": 65, "attack": 55, "defense": 115, "speedAttack": 100, "speedDefense": 40, "speed": 60 }, "evolutions": [ "tangela", "tangrowth" ] } ], "link": "https://pokemondb.net/pokedex/tangela" }, { "num": 115, "name": "Kangaskhan", "variations": [ { "name": "Kangaskhan", "description": "Kangaskhan is a Normal type Pokémon introduced in Generation 1. It is known as the Parent Pokémon.\nKangaskhan has a Mega Evolution, available from X & Y onwards.", "image": "images/kangaskhan.jpg", "types": [ "Normal" ], "specie": "Parent Pokémon", "height": 2.2, "weight": 80, "abilities": [ "Early Bird", "Scrappy", "Inner Focus" ], "stats": { "total": 490, "hp": 105, "attack": 95, "defense": 80, "speedAttack": 40, "speedDefense": 80, "speed": 90 }, "evolutions": [] }, { "name": "Mega Kangaskhan", "description": "Kangaskhan is a Normal type Pokémon introduced in Generation 1. It is known as the Parent Pokémon.\nKangaskhan has a Mega Evolution, available from X & Y onwards.", "image": "images/kangaskhan-mega.jpg", "types": [ "Normal" ], "specie": "Parent Pokémon", "height": 2.2, "weight": 100, "abilities": [ "Parental Bond" ], "stats": { "total": 590, "hp": 105, "attack": 125, "defense": 100, "speedAttack": 60, "speedDefense": 100, "speed": 100 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/kangaskhan" }, { "num": 116, "name": "Horsea", "variations": [ { "name": "Horsea", "description": "Horsea is a Water type Pokémon introduced in Generation 1. It is known as the Dragon Pokémon.", "image": "images/horsea.jpg", "types": [ "Water" ], "specie": "Dragon Pokémon", "height": 0.4, "weight": 8, "abilities": [ "Swift Swim", "Sniper", "Damp" ], "stats": { "total": 295, "hp": 30, "attack": 40, "defense": 70, "speedAttack": 70, "speedDefense": 25, "speed": 60 }, "evolutions": [ "horsea", "seadra", "kingdra" ] } ], "link": "https://pokemondb.net/pokedex/horsea" }, { "num": 117, "name": "Seadra", "variations": [ { "name": "Seadra", "description": "Seadra is a Water type Pokémon introduced in Generation 1. It is known as the Dragon Pokémon.", "image": "images/seadra.jpg", "types": [ "Water" ], "specie": "Dragon Pokémon", "height": 1.2, "weight": 25, "abilities": [ "Poison Point", "Sniper", "Damp" ], "stats": { "total": 440, "hp": 55, "attack": 65, "defense": 95, "speedAttack": 95, "speedDefense": 45, "speed": 85 }, "evolutions": [ "horsea", "seadra", "kingdra" ] } ], "link": "https://pokemondb.net/pokedex/seadra" }, { "num": 118, "name": "Goldeen", "variations": [ { "name": "Goldeen", "description": "Goldeen is a Water type Pokémon introduced in Generation 1. It is known as the Goldfish Pokémon.", "image": "images/goldeen.jpg", "types": [ "Water" ], "specie": "Goldfish Pokémon", "height": 0.6, "weight": 15, "abilities": [ "Swift Swim", "Water Veil", "Lightning Rod" ], "stats": { "total": 320, "hp": 45, "attack": 67, "defense": 60, "speedAttack": 35, "speedDefense": 50, "speed": 63 }, "evolutions": [ "goldeen", "seaking" ] } ], "link": "https://pokemondb.net/pokedex/goldeen" }, { "num": 119, "name": "Seaking", "variations": [ { "name": "Seaking", "description": "Seaking is a Water type Pokémon introduced in Generation 1. It is known as the Goldfish Pokémon.", "image": "images/seaking.jpg", "types": [ "Water" ], "specie": "Goldfish Pokémon", "height": 1.3, "weight": 39, "abilities": [ "Swift Swim", "Water Veil", "Lightning Rod" ], "stats": { "total": 450, "hp": 80, "attack": 92, "defense": 65, "speedAttack": 65, "speedDefense": 80, "speed": 68 }, "evolutions": [ "goldeen", "seaking" ] } ], "link": "https://pokemondb.net/pokedex/seaking" }, { "num": 120, "name": "Staryu", "variations": [ { "name": "Staryu", "description": "Staryu is a Water type Pokémon introduced in Generation 1. It is known as the Star Shape Pokémon.", "image": "images/staryu.jpg", "types": [ "Water" ], "specie": "Star Shape Pokémon", "height": 0.8, "weight": 34.5, "abilities": [ "Illuminate", "Natural Cure", "Analytic" ], "stats": { "total": 340, "hp": 30, "attack": 45, "defense": 55, "speedAttack": 70, "speedDefense": 55, "speed": 85 }, "evolutions": [ "staryu", "starmie" ] } ], "link": "https://pokemondb.net/pokedex/staryu" }, { "num": 121, "name": "Starmie", "variations": [ { "name": "Starmie", "description": "Starmie is a Water/Psychic type Pokémon introduced in Generation 1. It is known as the Mysterious Pokémon.", "image": "images/starmie.jpg", "types": [ "Water", "Psychic" ], "specie": "Mysterious Pokémon", "height": 1.1, "weight": 80, "abilities": [ "Illuminate", "Natural Cure", "Analytic" ], "stats": { "total": 520, "hp": 60, "attack": 75, "defense": 85, "speedAttack": 100, "speedDefense": 85, "speed": 115 }, "evolutions": [ "staryu", "starmie" ] } ], "link": "https://pokemondb.net/pokedex/starmie" }, { "num": 122, "name": "Mr. Mime", "variations": [ { "name": "Mr. Mime", "description": "Mr. Mime is a Psychic/Fairy type Pokémon introduced in Generation 1. It is known as the Barrier Pokémon.", "image": "images/mr-mime.jpg", "types": [ "Psychic", "Fairy" ], "specie": "Barrier Pokémon", "height": 1.3, "weight": 54.5, "abilities": [ "Soundproof", "Filter", "Technician" ], "stats": { "total": 460, "hp": 40, "attack": 45, "defense": 65, "speedAttack": 100, "speedDefense": 120, "speed": 90 }, "evolutions": [ "mime jr.", "mr. mime" ] } ], "link": "https://pokemondb.net/pokedex/mr-mime" }, { "num": 123, "name": "Scyther", "variations": [ { "name": "Scyther", "description": "Scyther is a Bug/Flying type Pokémon introduced in Generation 1. It is known as the Mantis Pokémon.", "image": "images/scyther.jpg", "types": [ "Bug", "Flying" ], "specie": "Mantis Pokémon", "height": 1.5, "weight": 56, "abilities": [ "Swarm", "Technician", "Steadfast" ], "stats": { "total": 500, "hp": 70, "attack": 110, "defense": 80, "speedAttack": 55, "speedDefense": 80, "speed": 105 }, "evolutions": [ "scyther", "scizor" ] } ], "link": "https://pokemondb.net/pokedex/scyther" }, { "num": 124, "name": "Jynx", "variations": [ { "name": "Jynx", "description": "Jynx is an Ice/Psychic type Pokémon introduced in Generation 1. It is known as the Human Shape Pokémon.", "image": "images/jynx.jpg", "types": [ "Ice", "Psychic" ], "specie": "Human Shape Pokémon", "height": 1.4, "weight": 40.6, "abilities": [ "Oblivious", "Forewarn", "Dry Skin" ], "stats": { "total": 455, "hp": 65, "attack": 50, "defense": 35, "speedAttack": 115, "speedDefense": 95, "speed": 95 }, "evolutions": [ "smoochum", "jynx" ] } ], "link": "https://pokemondb.net/pokedex/jynx" }, { "num": 125, "name": "Electabuzz", "variations": [ { "name": "Electabuzz", "description": "Electabuzz is an Electric type Pokémon introduced in Generation 1. It is known as the Electric Pokémon.", "image": "images/electabuzz.jpg", "types": [ "Electric" ], "specie": "Electric Pokémon", "height": 1.1, "weight": 30, "abilities": [ "Static", "Vital Spirit" ], "stats": { "total": 490, "hp": 65, "attack": 83, "defense": 57, "speedAttack": 95, "speedDefense": 85, "speed": 105 }, "evolutions": [ "elekid", "electabuzz", "electivire" ] } ], "link": "https://pokemondb.net/pokedex/electabuzz" }, { "num": 126, "name": "Magmar", "variations": [ { "name": "Magmar", "description": "Magmar is a Fire type Pokémon introduced in Generation 1. It is known as the Spitfire Pokémon.", "image": "images/magmar.jpg", "types": [ "Fire" ], "specie": "Spitfire Pokémon", "height": 1.3, "weight": 44.5, "abilities": [ "Flame Body", "Vital Spirit" ], "stats": { "total": 495, "hp": 65, "attack": 95, "defense": 57, "speedAttack": 100, "speedDefense": 85, "speed": 93 }, "evolutions": [ "magby", "magmar", "magmortar" ] } ], "link": "https://pokemondb.net/pokedex/magmar" }, { "num": 127, "name": "Pinsir", "variations": [ { "name": "Pinsir", "description": "Pinsir is a Bug type Pokémon introduced in Generation 1. It is known as the Stag Beetle Pokémon.\nPinsir has a Mega Evolution, available from X & Y onwards.", "image": "images/pinsir.jpg", "types": [ "Bug" ], "specie": "Stag Beetle Pokémon", "height": 1.5, "weight": 55, "abilities": [ "Hyper Cutter", "Mold Breaker", "Moxie" ], "stats": { "total": 500, "hp": 65, "attack": 125, "defense": 100, "speedAttack": 55, "speedDefense": 70, "speed": 85 }, "evolutions": [] }, { "name": "Mega Pinsir", "description": "Pinsir is a Bug type Pokémon introduced in Generation 1. It is known as the Stag Beetle Pokémon.\nPinsir has a Mega Evolution, available from X & Y onwards.", "image": "images/pinsir-mega.jpg", "types": [ "Bug", "Flying" ], "specie": "Stag Beetle Pokémon", "height": 1.7, "weight": 59, "abilities": [ "Aerilate" ], "stats": { "total": 600, "hp": 65, "attack": 155, "defense": 120, "speedAttack": 65, "speedDefense": 90, "speed": 105 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/pinsir" }, { "num": 128, "name": "Tauros", "variations": [ { "name": "Tauros", "description": "Tauros is a Normal type Pokémon introduced in Generation 1. It is known as the Wild Bull Pokémon.", "image": "images/tauros.jpg", "types": [ "Normal" ], "specie": "Wild Bull Pokémon", "height": 1.4, "weight": 88.4, "abilities": [ "Intimidate", "Anger Point", "Sheer Force" ], "stats": { "total": 490, "hp": 75, "attack": 100, "defense": 95, "speedAttack": 40, "speedDefense": 70, "speed": 110 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/tauros" }, { "num": 129, "name": "Magikarp", "variations": [ { "name": "Magikarp", "description": "Magikarp is a Water type Pokémon introduced in Generation 1. It is known as the Fish Pokémon.", "image": "images/magikarp.jpg", "types": [ "Water" ], "specie": "Fish Pokémon", "height": 0.9, "weight": 10, "abilities": [ "Swift Swim", "Rattled" ], "stats": { "total": 200, "hp": 20, "attack": 10, "defense": 55, "speedAttack": 15, "speedDefense": 20, "speed": 80 }, "evolutions": [ "magikarp", "gyarados" ] } ], "link": "https://pokemondb.net/pokedex/magikarp" }, { "num": 130, "name": "Gyarados", "variations": [ { "name": "Gyarados", "description": "Gyarados is a Water/Flying type Pokémon introduced in Generation 1. It is known as the Atrocious Pokémon.\nGyarados has a Mega Evolution, available from X & Y onwards.", "image": "images/gyarados.jpg", "types": [ "Water", "Flying" ], "specie": "Atrocious Pokémon", "height": 6.5, "weight": 235, "abilities": [ "Intimidate", "Moxie" ], "stats": { "total": 540, "hp": 95, "attack": 125, "defense": 79, "speedAttack": 60, "speedDefense": 100, "speed": 81 }, "evolutions": [ "magikarp", "gyarados" ] }, { "name": "Mega Gyarados", "description": "Gyarados is a Water/Flying type Pokémon introduced in Generation 1. It is known as the Atrocious Pokémon.\nGyarados has a Mega Evolution, available from X & Y onwards.", "image": "images/gyarados-mega.jpg", "types": [ "Water", "Dark" ], "specie": "Atrocious Pokémon", "height": 6.5, "weight": 305, "abilities": [ "Mold Breaker" ], "stats": { "total": 640, "hp": 95, "attack": 155, "defense": 109, "speedAttack": 70, "speedDefense": 130, "speed": 81 }, "evolutions": [ "magikarp", "gyarados" ] } ], "link": "https://pokemondb.net/pokedex/gyarados" }, { "num": 131, "name": "Lapras", "variations": [ { "name": "Lapras", "description": "Lapras is a Water/Ice type Pokémon introduced in Generation 1. It is known as the Transport Pokémon.", "image": "images/lapras.jpg", "types": [ "Water", "Ice" ], "specie": "Transport Pokémon", "height": 2.5, "weight": 220, "abilities": [ "Water Absorb", "Shell Armor", "Hydration" ], "stats": { "total": 535, "hp": 130, "attack": 85, "defense": 80, "speedAttack": 85, "speedDefense": 95, "speed": 60 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/lapras" }, { "num": 132, "name": "Ditto", "variations": [ { "name": "Ditto", "description": "Ditto is a Normal type Pokémon introduced in Generation 1. It is known as the Transform Pokémon.", "image": "images/ditto.jpg", "types": [ "Normal" ], "specie": "Transform Pokémon", "height": 0.3, "weight": 4, "abilities": [ "Limber", "Imposter" ], "stats": { "total": 288, "hp": 48, "attack": 48, "defense": 48, "speedAttack": 48, "speedDefense": 48, "speed": 48 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/ditto" }, { "num": 133, "name": "Eevee", "variations": [ { "name": "Eevee", "description": "Eevee is a Normal type Pokémon introduced in Generation 1. It is known as the Evolution Pokémon.", "image": "images/eevee.jpg", "types": [ "Normal" ], "specie": "Evolution Pokémon", "height": 0.3, "weight": 6.5, "abilities": [ "Run Away", "Adaptability", "Anticipation" ], "stats": { "total": 325, "hp": 55, "attack": 55, "defense": 50, "speedAttack": 45, "speedDefense": 65, "speed": 55 }, "evolutions": [ "eevee", "vaporeon", "jolteon", "flareon", "eevee", "espeon", "umbreon", "eevee", "leafeon", "glaceon", "eevee", "sylveon" ] }, { "name": "Partner Eevee", "description": "Eevee is a Normal type Pokémon introduced in Generation 1. It is known as the Evolution Pokémon.", "image": "images/eevee-lets-go.jpg", "types": [ "Normal" ], "specie": "Evolution Pokémon", "height": 0.3, "weight": 6.5, "abilities": [], "stats": { "total": 435, "hp": 65, "attack": 75, "defense": 70, "speedAttack": 65, "speedDefense": 85, "speed": 75 }, "evolutions": [ "eevee", "vaporeon", "jolteon", "flareon", "eevee", "espeon", "umbreon", "eevee", "leafeon", "glaceon", "eevee", "sylveon" ] } ], "link": "https://pokemondb.net/pokedex/eevee" }, { "num": 134, "name": "Vaporeon", "variations": [ { "name": "Vaporeon", "description": "Vaporeon is a Water type Pokémon introduced in Generation 1. It is known as the Bubble Jet Pokémon.", "image": "images/vaporeon.jpg", "types": [ "Water" ], "specie": "Bubble Jet Pokémon", "height": 1, "weight": 29, "abilities": [ "Water Absorb", "Hydration" ], "stats": { "total": 525, "hp": 130, "attack": 65, "defense": 60, "speedAttack": 110, "speedDefense": 95, "speed": 65 }, "evolutions": [ "eevee", "vaporeon", "jolteon", "flareon", "eevee", "espeon", "umbreon", "eevee", "leafeon", "glaceon", "eevee", "sylveon" ] } ], "link": "https://pokemondb.net/pokedex/vaporeon" }, { "num": 135, "name": "Jolteon", "variations": [ { "name": "Jolteon", "description": "Jolteon is an Electric type Pokémon introduced in Generation 1. It is known as the Lightning Pokémon.", "image": "images/jolteon.jpg", "types": [ "Electric" ], "specie": "Lightning Pokémon", "height": 0.8, "weight": 24.5, "abilities": [ "Volt Absorb", "Quick Feet" ], "stats": { "total": 525, "hp": 65, "attack": 65, "defense": 60, "speedAttack": 110, "speedDefense": 95, "speed": 130 }, "evolutions": [ "eevee", "vaporeon", "jolteon", "flareon", "eevee", "espeon", "umbreon", "eevee", "leafeon", "glaceon", "eevee", "sylveon" ] } ], "link": "https://pokemondb.net/pokedex/jolteon" }, { "num": 136, "name": "Flareon", "variations": [ { "name": "Flareon", "description": "Flareon is a Fire type Pokémon introduced in Generation 1. It is known as the Flame Pokémon.", "image": "images/flareon.jpg", "types": [ "Fire" ], "specie": "Flame Pokémon", "height": 0.9, "weight": 25, "abilities": [ "Flash Fire", "Guts" ], "stats": { "total": 525, "hp": 65, "attack": 130, "defense": 60, "speedAttack": 95, "speedDefense": 110, "speed": 65 }, "evolutions": [ "eevee", "vaporeon", "jolteon", "flareon", "eevee", "espeon", "umbreon", "eevee", "leafeon", "glaceon", "eevee", "sylveon" ] } ], "link": "https://pokemondb.net/pokedex/flareon" }, { "num": 137, "name": "Porygon", "variations": [ { "name": "Porygon", "description": "Porygon is a Normal type Pokémon introduced in Generation 1. It is known as the Virtual Pokémon.", "image": "images/porygon.jpg", "types": [ "Normal" ], "specie": "Virtual Pokémon", "height": 0.8, "weight": 36.5, "abilities": [ "Trace", "Download", "Analytic" ], "stats": { "total": 395, "hp": 65, "attack": 60, "defense": 70, "speedAttack": 85, "speedDefense": 75, "speed": 40 }, "evolutions": [ "porygon", "porygon2", "porygon-z" ] } ], "link": "https://pokemondb.net/pokedex/porygon" }, { "num": 138, "name": "Omanyte", "variations": [ { "name": "Omanyte", "description": "Omanyte is a Rock/Water type Pokémon introduced in Generation 1. It is known as the Spiral Pokémon.", "image": "images/omanyte.jpg", "types": [ "Rock", "Water" ], "specie": "Spiral Pokémon", "height": 0.4, "weight": 7.5, "abilities": [ "Swift Swim", "Shell Armor", "Weak Armor" ], "stats": { "total": 355, "hp": 35, "attack": 40, "defense": 100, "speedAttack": 90, "speedDefense": 55, "speed": 35 }, "evolutions": [ "omanyte", "omastar" ] } ], "link": "https://pokemondb.net/pokedex/omanyte" }, { "num": 139, "name": "Omastar", "variations": [ { "name": "Omastar", "description": "Omastar is a Rock/Water type Pokémon introduced in Generation 1. It is known as the Spiral Pokémon.", "image": "images/omastar.jpg", "types": [ "Rock", "Water" ], "specie": "Spiral Pokémon", "height": 1, "weight": 35, "abilities": [ "Swift Swim", "Shell Armor", "Weak Armor" ], "stats": { "total": 495, "hp": 70, "attack": 60, "defense": 125, "speedAttack": 115, "speedDefense": 70, "speed": 55 }, "evolutions": [ "omanyte", "omastar" ] } ], "link": "https://pokemondb.net/pokedex/omastar" }, { "num": 140, "name": "Kabuto", "variations": [ { "name": "Kabuto", "description": "Kabuto is a Rock/Water type Pokémon introduced in Generation 1. It is known as the Shellfish Pokémon.", "image": "images/kabuto.jpg", "types": [ "Rock", "Water" ], "specie": "Shellfish Pokémon", "height": 0.5, "weight": 11.5, "abilities": [ "Swift Swim", "Battle Armor", "Weak Armor" ], "stats": { "total": 355, "hp": 30, "attack": 80, "defense": 90, "speedAttack": 55, "speedDefense": 45, "speed": 55 }, "evolutions": [ "kabuto", "kabutops" ] } ], "link": "https://pokemondb.net/pokedex/kabuto" }, { "num": 141, "name": "Kabutops", "variations": [ { "name": "Kabutops", "description": "Kabutops is a Rock/Water type Pokémon introduced in Generation 1. It is known as the Shellfish Pokémon.", "image": "images/kabutops.jpg", "types": [ "Rock", "Water" ], "specie": "Shellfish Pokémon", "height": 1.3, "weight": 40.5, "abilities": [ "Swift Swim", "Battle Armor", "Weak Armor" ], "stats": { "total": 495, "hp": 60, "attack": 115, "defense": 105, "speedAttack": 65, "speedDefense": 70, "speed": 80 }, "evolutions": [ "kabuto", "kabutops" ] } ], "link": "https://pokemondb.net/pokedex/kabutops" }, { "num": 142, "name": "Aerodactyl", "variations": [ { "name": "Aerodactyl", "description": "Aerodactyl is a Rock/Flying type Pokémon introduced in Generation 1. It is known as the Fossil Pokémon.\nAerodactyl has a Mega Evolution, available from X & Y onwards.", "image": "images/aerodactyl.jpg", "types": [ "Rock", "Flying" ], "specie": "Fossil Pokémon", "height": 1.8, "weight": 59, "abilities": [ "Rock Head", "Pressure", "Unnerve" ], "stats": { "total": 515, "hp": 80, "attack": 105, "defense": 65, "speedAttack": 60, "speedDefense": 75, "speed": 130 }, "evolutions": [] }, { "name": "Mega Aerodactyl", "description": "Aerodactyl is a Rock/Flying type Pokémon introduced in Generation 1. It is known as the Fossil Pokémon.\nAerodactyl has a Mega Evolution, available from X & Y onwards.", "image": "images/aerodactyl-mega.jpg", "types": [ "Rock", "Flying" ], "specie": "Fossil Pokémon", "height": 2.1, "weight": 79, "abilities": [ "Tough Claws" ], "stats": { "total": 615, "hp": 80, "attack": 135, "defense": 85, "speedAttack": 70, "speedDefense": 95, "speed": 150 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/aerodactyl" }, { "num": 143, "name": "Snorlax", "variations": [ { "name": "Snorlax", "description": "Snorlax is a Normal type Pokémon introduced in Generation 1. It is known as the Sleeping Pokémon.", "image": "images/snorlax.jpg", "types": [ "Normal" ], "specie": "Sleeping Pokémon", "height": 2.1, "weight": 460, "abilities": [ "Immunity", "Thick Fat", "Gluttony" ], "stats": { "total": 540, "hp": 160, "attack": 110, "defense": 65, "speedAttack": 65, "speedDefense": 110, "speed": 30 }, "evolutions": [ "munchlax", "snorlax" ] } ], "link": "https://pokemondb.net/pokedex/snorlax" }, { "num": 144, "name": "Articuno", "variations": [ { "name": "Articuno", "description": "Articuno is an Ice/Flying type Pokémon introduced in Generation 1. It is known as the Freeze Pokémon.", "image": "images/articuno.jpg", "types": [ "Ice", "Flying" ], "specie": "Freeze Pokémon", "height": 1.7, "weight": 55.4, "abilities": [ "Pressure", "Snow Cloak" ], "stats": { "total": 580, "hp": 90, "attack": 85, "defense": 100, "speedAttack": 95, "speedDefense": 125, "speed": 85 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/articuno" }, { "num": 145, "name": "Zapdos", "variations": [ { "name": "Zapdos", "description": "Zapdos is an Electric/Flying type Pokémon introduced in Generation 1. It is known as the Electric Pokémon.", "image": "images/zapdos.jpg", "types": [ "Electric", "Flying" ], "specie": "Electric Pokémon", "height": 1.6, "weight": 52.6, "abilities": [ "Pressure", "Static" ], "stats": { "total": 580, "hp": 90, "attack": 90, "defense": 85, "speedAttack": 125, "speedDefense": 90, "speed": 100 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/zapdos" }, { "num": 146, "name": "Moltres", "variations": [ { "name": "Moltres", "description": "Moltres is a Fire/Flying type Pokémon introduced in Generation 1. It is known as the Flame Pokémon.", "image": "images/moltres.jpg", "types": [ "Fire", "Flying" ], "specie": "Flame Pokémon", "height": 2, "weight": 60, "abilities": [ "Pressure", "Flame Body" ], "stats": { "total": 580, "hp": 90, "attack": 100, "defense": 90, "speedAttack": 125, "speedDefense": 85, "speed": 90 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/moltres" }, { "num": 147, "name": "Dratini", "variations": [ { "name": "Dratini", "description": "Dratini is a Dragon type Pokémon introduced in Generation 1. It is known as the Dragon Pokémon.", "image": "images/dratini.jpg", "types": [ "Dragon" ], "specie": "Dragon Pokémon", "height": 1.8, "weight": 3.3, "abilities": [ "Shed Skin", "Marvel Scale" ], "stats": { "total": 300, "hp": 41, "attack": 64, "defense": 45, "speedAttack": 50, "speedDefense": 50, "speed": 50 }, "evolutions": [ "dratini", "dragonair", "dragonite" ] } ], "link": "https://pokemondb.net/pokedex/dratini" }, { "num": 148, "name": "Dragonair", "variations": [ { "name": "Dragonair", "description": "Dragonair is a Dragon type Pokémon introduced in Generation 1. It is known as the Dragon Pokémon.", "image": "images/dragonair.jpg", "types": [ "Dragon" ], "specie": "Dragon Pokémon", "height": 4, "weight": 16.5, "abilities": [ "Shed Skin", "Marvel Scale" ], "stats": { "total": 420, "hp": 61, "attack": 84, "defense": 65, "speedAttack": 70, "speedDefense": 70, "speed": 70 }, "evolutions": [ "dratini", "dragonair", "dragonite" ] } ], "link": "https://pokemondb.net/pokedex/dragonair" }, { "num": 149, "name": "Dragonite", "variations": [ { "name": "Dragonite", "description": "Dragonite is a Dragon/Flying type Pokémon introduced in Generation 1. It is known as the Dragon Pokémon.", "image": "images/dragonite.jpg", "types": [ "Dragon", "Flying" ], "specie": "Dragon Pokémon", "height": 2.2, "weight": 210, "abilities": [ "Inner Focus", "Multiscale" ], "stats": { "total": 600, "hp": 91, "attack": 134, "defense": 95, "speedAttack": 100, "speedDefense": 100, "speed": 80 }, "evolutions": [ "dratini", "dragonair", "dragonite" ] } ], "link": "https://pokemondb.net/pokedex/dragonite" }, { "num": 150, "name": "Mewtwo", "variations": [ { "name": "Mewtwo", "description": "Mewtwo is a Psychic type Pokémon introduced in Generation 1. It is known as the Genetic Pokémon.\nMewtwo has two Mega Evolutions, available from X & Y onwards. They can be activated in battle when holding the Mega Stones, Mewtwonite X and Mewtwonite Y respectively.", "image": "images/mewtwo.jpg", "types": [ "Psychic" ], "specie": "Genetic Pokémon", "height": 2, "weight": 122, "abilities": [ "Pressure", "Unnerve" ], "stats": { "total": 680, "hp": 106, "attack": 110, "defense": 90, "speedAttack": 154, "speedDefense": 90, "speed": 130 }, "evolutions": [] }, { "name": "Mega Mewtwo X", "description": "Mewtwo is a Psychic type Pokémon introduced in Generation 1. It is known as the Genetic Pokémon.\nMewtwo has two Mega Evolutions, available from X & Y onwards. They can be activated in battle when holding the Mega Stones, Mewtwonite X and Mewtwonite Y respectively.", "image": "images/mewtwo-mega-x.jpg", "types": [ "Psychic", "Fighting" ], "specie": "Genetic Pokémon", "height": 2.3, "weight": 127, "abilities": [ "Steadfast" ], "stats": { "total": 780, "hp": 106, "attack": 190, "defense": 100, "speedAttack": 154, "speedDefense": 100, "speed": 130 }, "evolutions": [] }, { "name": "Mega Mewtwo Y", "description": "Mewtwo is a Psychic type Pokémon introduced in Generation 1. It is known as the Genetic Pokémon.\nMewtwo has two Mega Evolutions, available from X & Y onwards. They can be activated in battle when holding the Mega Stones, Mewtwonite X and Mewtwonite Y respectively.", "image": "images/mewtwo-mega-y.jpg", "types": [ "Psychic" ], "specie": "Genetic Pokémon", "height": 1.5, "weight": 33, "abilities": [ "Insomnia" ], "stats": { "total": 780, "hp": 106, "attack": 150, "defense": 70, "speedAttack": 194, "speedDefense": 120, "speed": 140 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/mewtwo" }, { "num": 151, "name": "Mew", "variations": [ { "name": "Mew", "description": "Mew is a Psychic type Pokémon introduced in Generation 1. It is known as the New Species Pokémon.", "image": "images/mew.jpg", "types": [ "Psychic" ], "specie": "New Species Pokémon", "height": 0.4, "weight": 4, "abilities": [ "Synchronize" ], "stats": { "total": 600, "hp": 100, "attack": 100, "defense": 100, "speedAttack": 100, "speedDefense": 100, "speed": 100 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/mew" }, { "num": 152, "name": "Chikorita", "variations": [ { "name": "Chikorita", "description": "Chikorita is a Grass type Pokémon introduced in Generation 2. It is known as the Leaf Pokémon.", "image": "images/chikorita.jpg", "types": [ "Grass" ], "specie": "Leaf Pokémon", "height": 0.9, "weight": 6.4, "abilities": [ "Overgrow", "Leaf Guard" ], "stats": { "total": 318, "hp": 45, "attack": 49, "defense": 65, "speedAttack": 49, "speedDefense": 65, "speed": 45 }, "evolutions": [ "chikorita", "bayleef", "meganium" ] } ], "link": "https://pokemondb.net/pokedex/chikorita" }, { "num": 153, "name": "Bayleef", "variations": [ { "name": "Bayleef", "description": "Bayleef is a Grass type Pokémon introduced in Generation 2. It is known as the Leaf Pokémon.", "image": "images/bayleef.jpg", "types": [ "Grass" ], "specie": "Leaf Pokémon", "height": 1.2, "weight": 15.8, "abilities": [ "Overgrow", "Leaf Guard" ], "stats": { "total": 405, "hp": 60, "attack": 62, "defense": 80, "speedAttack": 63, "speedDefense": 80, "speed": 60 }, "evolutions": [ "chikorita", "bayleef", "meganium" ] } ], "link": "https://pokemondb.net/pokedex/bayleef" }, { "num": 154, "name": "Meganium", "variations": [ { "name": "Meganium", "description": "Meganium is a Grass type Pokémon introduced in Generation 2. It is known as the Herb Pokémon.", "image": "images/meganium.jpg", "types": [ "Grass" ], "specie": "Herb Pokémon", "height": 1.8, "weight": 100.5, "abilities": [ "Overgrow", "Leaf Guard" ], "stats": { "total": 525, "hp": 80, "attack": 82, "defense": 100, "speedAttack": 83, "speedDefense": 100, "speed": 80 }, "evolutions": [ "chikorita", "bayleef", "meganium" ] } ], "link": "https://pokemondb.net/pokedex/meganium" }, { "num": 155, "name": "Cyndaquil", "variations": [ { "name": "Cyndaquil", "description": "Cyndaquil is a Fire type Pokémon introduced in Generation 2. It is known as the Fire Mouse Pokémon.", "image": "images/cyndaquil.jpg", "types": [ "Fire" ], "specie": "Fire Mouse Pokémon", "height": 0.5, "weight": 7.9, "abilities": [ "Blaze", "Flash Fire" ], "stats": { "total": 309, "hp": 39, "attack": 52, "defense": 43, "speedAttack": 60, "speedDefense": 50, "speed": 65 }, "evolutions": [ "cyndaquil", "quilava", "typhlosion" ] } ], "link": "https://pokemondb.net/pokedex/cyndaquil" }, { "num": 156, "name": "Quilava", "variations": [ { "name": "Quilava", "description": "Quilava is a Fire type Pokémon introduced in Generation 2. It is known as the Volcano Pokémon.", "image": "images/quilava.jpg", "types": [ "Fire" ], "specie": "Volcano Pokémon", "height": 0.9, "weight": 19, "abilities": [ "Blaze", "Flash Fire" ], "stats": { "total": 405, "hp": 58, "attack": 64, "defense": 58, "speedAttack": 80, "speedDefense": 65, "speed": 80 }, "evolutions": [ "cyndaquil", "quilava", "typhlosion" ] } ], "link": "https://pokemondb.net/pokedex/quilava" }, { "num": 157, "name": "Typhlosion", "variations": [ { "name": "Typhlosion", "description": "Typhlosion is a Fire type Pokémon introduced in Generation 2. It is known as the Volcano Pokémon.", "image": "images/typhlosion.jpg", "types": [ "Fire" ], "specie": "Volcano Pokémon", "height": 1.7, "weight": 79.5, "abilities": [ "Blaze", "Flash Fire" ], "stats": { "total": 534, "hp": 78, "attack": 84, "defense": 78, "speedAttack": 109, "speedDefense": 85, "speed": 100 }, "evolutions": [ "cyndaquil", "quilava", "typhlosion" ] } ], "link": "https://pokemondb.net/pokedex/typhlosion" }, { "num": 158, "name": "Totodile", "variations": [ { "name": "Totodile", "description": "Totodile is a Water type Pokémon introduced in Generation 2. It is known as the Big Jaw Pokémon.", "image": "images/totodile.jpg", "types": [ "Water" ], "specie": "Big Jaw Pokémon", "height": 0.6, "weight": 9.5, "abilities": [ "Torrent", "Sheer Force" ], "stats": { "total": 314, "hp": 50, "attack": 65, "defense": 64, "speedAttack": 44, "speedDefense": 48, "speed": 43 }, "evolutions": [ "totodile", "croconaw", "feraligatr" ] } ], "link": "https://pokemondb.net/pokedex/totodile" }, { "num": 159, "name": "Croconaw", "variations": [ { "name": "Croconaw", "description": "Croconaw is a Water type Pokémon introduced in Generation 2. It is known as the Big Jaw Pokémon.", "image": "images/croconaw.jpg", "types": [ "Water" ], "specie": "Big Jaw Pokémon", "height": 1.1, "weight": 25, "abilities": [ "Torrent", "Sheer Force" ], "stats": { "total": 405, "hp": 65, "attack": 80, "defense": 80, "speedAttack": 59, "speedDefense": 63, "speed": 58 }, "evolutions": [ "totodile", "croconaw", "feraligatr" ] } ], "link": "https://pokemondb.net/pokedex/croconaw" }, { "num": 160, "name": "Feraligatr", "variations": [ { "name": "Feraligatr", "description": "Feraligatr is a Water type Pokémon introduced in Generation 2. It is known as the Big Jaw Pokémon.", "image": "images/feraligatr.jpg", "types": [ "Water" ], "specie": "Big Jaw Pokémon", "height": 2.3, "weight": 88.8, "abilities": [ "Torrent", "Sheer Force" ], "stats": { "total": 530, "hp": 85, "attack": 105, "defense": 100, "speedAttack": 79, "speedDefense": 83, "speed": 78 }, "evolutions": [ "totodile", "croconaw", "feraligatr" ] } ], "link": "https://pokemondb.net/pokedex/feraligatr" }, { "num": 161, "name": "Sentret", "variations": [ { "name": "Sentret", "description": "Sentret is a Normal type Pokémon introduced in Generation 2. It is known as the Scout Pokémon.", "image": "images/sentret.jpg", "types": [ "Normal" ], "specie": "Scout Pokémon", "height": 0.8, "weight": 6, "abilities": [ "Run Away", "Keen Eye", "Frisk" ], "stats": { "total": 215, "hp": 35, "attack": 46, "defense": 34, "speedAttack": 35, "speedDefense": 45, "speed": 20 }, "evolutions": [ "sentret", "furret" ] } ], "link": "https://pokemondb.net/pokedex/sentret" }, { "num": 162, "name": "Furret", "variations": [ { "name": "Furret", "description": "Furret is a Normal type Pokémon introduced in Generation 2. It is known as the Long Body Pokémon.", "image": "images/furret.jpg", "types": [ "Normal" ], "specie": "Long Body Pokémon", "height": 1.8, "weight": 32.5, "abilities": [ "Run Away", "Keen Eye", "Frisk" ], "stats": { "total": 415, "hp": 85, "attack": 76, "defense": 64, "speedAttack": 45, "speedDefense": 55, "speed": 90 }, "evolutions": [ "sentret", "furret" ] } ], "link": "https://pokemondb.net/pokedex/furret" }, { "num": 163, "name": "Hoothoot", "variations": [ { "name": "Hoothoot", "description": "Hoothoot is a Normal/Flying type Pokémon introduced in Generation 2. It is known as the Owl Pokémon.", "image": "images/hoothoot.jpg", "types": [ "Normal", "Flying" ], "specie": "Owl Pokémon", "height": 0.7, "weight": 21.2, "abilities": [ "Insomnia", "Keen Eye", "Tinted Lens" ], "stats": { "total": 262, "hp": 60, "attack": 30, "defense": 30, "speedAttack": 36, "speedDefense": 56, "speed": 50 }, "evolutions": [ "hoothoot", "noctowl" ] } ], "link": "https://pokemondb.net/pokedex/hoothoot" }, { "num": 164, "name": "Noctowl", "variations": [ { "name": "Noctowl", "description": "Noctowl is a Normal/Flying type Pokémon introduced in Generation 2. It is known as the Owl Pokémon.", "image": "images/noctowl.jpg", "types": [ "Normal", "Flying" ], "specie": "Owl Pokémon", "height": 1.6, "weight": 40.8, "abilities": [ "Insomnia", "Keen Eye", "Tinted Lens" ], "stats": { "total": 452, "hp": 100, "attack": 50, "defense": 50, "speedAttack": 86, "speedDefense": 96, "speed": 70 }, "evolutions": [ "hoothoot", "noctowl" ] } ], "link": "https://pokemondb.net/pokedex/noctowl" }, { "num": 165, "name": "Ledyba", "variations": [ { "name": "Ledyba", "description": "Ledyba is a Bug/Flying type Pokémon introduced in Generation 2. It is known as the Five Star Pokémon.", "image": "images/ledyba.jpg", "types": [ "Bug", "Flying" ], "specie": "Five Star Pokémon", "height": 1, "weight": 10.8, "abilities": [ "Swarm", "Early Bird", "Rattled" ], "stats": { "total": 265, "hp": 40, "attack": 20, "defense": 30, "speedAttack": 40, "speedDefense": 80, "speed": 55 }, "evolutions": [ "ledyba", "ledian" ] } ], "link": "https://pokemondb.net/pokedex/ledyba" }, { "num": 166, "name": "Ledian", "variations": [ { "name": "Ledian", "description": "Ledian is a Bug/Flying type Pokémon introduced in Generation 2. It is known as the Five Star Pokémon.", "image": "images/ledian.jpg", "types": [ "Bug", "Flying" ], "specie": "Five Star Pokémon", "height": 1.4, "weight": 35.6, "abilities": [ "Swarm", "Early Bird", "Iron Fist" ], "stats": { "total": 390, "hp": 55, "attack": 35, "defense": 50, "speedAttack": 55, "speedDefense": 110, "speed": 85 }, "evolutions": [ "ledyba", "ledian" ] } ], "link": "https://pokemondb.net/pokedex/ledian" }, { "num": 167, "name": "Spinarak", "variations": [ { "name": "Spinarak", "description": "Spinarak is a Bug/Poison type Pokémon introduced in Generation 2. It is known as the String Spit Pokémon.", "image": "images/spinarak.jpg", "types": [ "Bug", "Poison" ], "specie": "String Spit Pokémon", "height": 0.5, "weight": 8.5, "abilities": [ "Swarm", "Insomnia", "Sniper" ], "stats": { "total": 250, "hp": 40, "attack": 60, "defense": 40, "speedAttack": 40, "speedDefense": 40, "speed": 30 }, "evolutions": [ "spinarak", "ariados" ] } ], "link": "https://pokemondb.net/pokedex/spinarak" }, { "num": 168, "name": "Ariados", "variations": [ { "name": "Ariados", "description": "Ariados is a Bug/Poison type Pokémon introduced in Generation 2. It is known as the Long Leg Pokémon.", "image": "images/ariados.jpg", "types": [ "Bug", "Poison" ], "specie": "Long Leg Pokémon", "height": 1.1, "weight": 33.5, "abilities": [ "Swarm", "Insomnia", "Sniper" ], "stats": { "total": 400, "hp": 70, "attack": 90, "defense": 70, "speedAttack": 60, "speedDefense": 70, "speed": 40 }, "evolutions": [ "spinarak", "ariados" ] } ], "link": "https://pokemondb.net/pokedex/ariados" }, { "num": 169, "name": "Crobat", "variations": [ { "name": "Crobat", "description": "Crobat is a Poison/Flying type Pokémon introduced in Generation 2. It is known as the Bat Pokémon.", "image": "images/crobat.jpg", "types": [ "Poison", "Flying" ], "specie": "Bat Pokémon", "height": 1.8, "weight": 75, "abilities": [ "Inner Focus", "Infiltrator" ], "stats": { "total": 535, "hp": 85, "attack": 90, "defense": 80, "speedAttack": 70, "speedDefense": 80, "speed": 130 }, "evolutions": [ "zubat", "golbat", "crobat" ] } ], "link": "https://pokemondb.net/pokedex/crobat" }, { "num": 170, "name": "Chinchou", "variations": [ { "name": "Chinchou", "description": "Chinchou is a Water/Electric type Pokémon introduced in Generation 2. It is known as the Angler Pokémon.", "image": "images/chinchou.jpg", "types": [ "Water", "Electric" ], "specie": "Angler Pokémon", "height": 0.5, "weight": 12, "abilities": [ "Volt Absorb", "Illuminate", "Water Absorb" ], "stats": { "total": 330, "hp": 75, "attack": 38, "defense": 38, "speedAttack": 56, "speedDefense": 56, "speed": 67 }, "evolutions": [ "chinchou", "lanturn" ] } ], "link": "https://pokemondb.net/pokedex/chinchou" }, { "num": 171, "name": "Lanturn", "variations": [ { "name": "Lanturn", "description": "Lanturn is a Water/Electric type Pokémon introduced in Generation 2. It is known as the Light Pokémon.", "image": "images/lanturn.jpg", "types": [ "Water", "Electric" ], "specie": "Light Pokémon", "height": 1.2, "weight": 22.5, "abilities": [ "Volt Absorb", "Illuminate", "Water Absorb" ], "stats": { "total": 460, "hp": 125, "attack": 58, "defense": 58, "speedAttack": 76, "speedDefense": 76, "speed": 67 }, "evolutions": [ "chinchou", "lanturn" ] } ], "link": "https://pokemondb.net/pokedex/lanturn" }, { "num": 172, "name": "Pichu", "variations": [ { "name": "Pichu", "description": "Pichu is an Electric type Pokémon introduced in Generation 2. It is known as the Tiny Mouse Pokémon.", "image": "images/pichu.jpg", "types": [ "Electric" ], "specie": "Tiny Mouse Pokémon", "height": 0.3, "weight": 2, "abilities": [ "Static", "Lightning Rod" ], "stats": { "total": 205, "hp": 20, "attack": 40, "defense": 15, "speedAttack": 35, "speedDefense": 35, "speed": 60 }, "evolutions": [ "pichu", "pikachu", "raichu" ] } ], "link": "https://pokemondb.net/pokedex/pichu" }, { "num": 173, "name": "Cleffa", "variations": [ { "name": "Cleffa", "description": "Cleffa is a Fairy type Pokémon introduced in Generation 2. It is known as the Star Shape Pokémon.", "image": "images/cleffa.jpg", "types": [ "Fairy" ], "specie": "Star Shape Pokémon", "height": 0.3, "weight": 3, "abilities": [ "Cute Charm", "Magic Guard", "Friend Guard" ], "stats": { "total": 218, "hp": 50, "attack": 25, "defense": 28, "speedAttack": 45, "speedDefense": 55, "speed": 15 }, "evolutions": [ "cleffa", "clefairy", "clefable" ] } ], "link": "https://pokemondb.net/pokedex/cleffa" }, { "num": 174, "name": "Igglybuff", "variations": [ { "name": "Igglybuff", "description": "Igglybuff is a Normal/Fairy type Pokémon introduced in Generation 2. It is known as the Balloon Pokémon.", "image": "images/igglybuff.jpg", "types": [ "Normal", "Fairy" ], "specie": "Balloon Pokémon", "height": 0.3, "weight": 1, "abilities": [ "Cute Charm", "Competitive", "Friend Guard" ], "stats": { "total": 210, "hp": 90, "attack": 30, "defense": 15, "speedAttack": 40, "speedDefense": 20, "speed": 15 }, "evolutions": [ "igglybuff", "jigglypuff", "wigglytuff" ] } ], "link": "https://pokemondb.net/pokedex/igglybuff" }, { "num": 175, "name": "Togepi", "variations": [ { "name": "Togepi", "description": "Togepi is a Fairy type Pokémon introduced in Generation 2. It is known as the Spike Ball Pokémon.", "image": "images/togepi.jpg", "types": [ "Fairy" ], "specie": "Spike Ball Pokémon", "height": 0.3, "weight": 1.5, "abilities": [ "Hustle", "Serene Grace", "Super Luck" ], "stats": { "total": 245, "hp": 35, "attack": 20, "defense": 65, "speedAttack": 40, "speedDefense": 65, "speed": 20 }, "evolutions": [ "togepi", "togetic", "togekiss" ] } ], "link": "https://pokemondb.net/pokedex/togepi" }, { "num": 176, "name": "Togetic", "variations": [ { "name": "Togetic", "description": "Togetic is a Fairy/Flying type Pokémon introduced in Generation 2. It is known as the Happiness Pokémon.", "image": "images/togetic.jpg", "types": [ "Fairy", "Flying" ], "specie": "Happiness Pokémon", "height": 0.6, "weight": 3.2, "abilities": [ "Hustle", "Serene Grace", "Super Luck" ], "stats": { "total": 405, "hp": 55, "attack": 40, "defense": 85, "speedAttack": 80, "speedDefense": 105, "speed": 40 }, "evolutions": [ "togepi", "togetic", "togekiss" ] } ], "link": "https://pokemondb.net/pokedex/togetic" }, { "num": 177, "name": "Natu", "variations": [ { "name": "Natu", "description": "Natu is a Psychic/Flying type Pokémon introduced in Generation 2. It is known as the Tiny Bird Pokémon.", "image": "images/natu.jpg", "types": [ "Psychic", "Flying" ], "specie": "Tiny Bird Pokémon", "height": 0.2, "weight": 2, "abilities": [ "Synchronize", "Early Bird", "Magic Bounce" ], "stats": { "total": 320, "hp": 40, "attack": 50, "defense": 45, "speedAttack": 70, "speedDefense": 45, "speed": 70 }, "evolutions": [ "natu", "xatu" ] } ], "link": "https://pokemondb.net/pokedex/natu" }, { "num": 178, "name": "Xatu", "variations": [ { "name": "Xatu", "description": "Xatu is a Psychic/Flying type Pokémon introduced in Generation 2. It is known as the Mystic Pokémon.", "image": "images/xatu.jpg", "types": [ "Psychic", "Flying" ], "specie": "Mystic Pokémon", "height": 1.5, "weight": 15, "abilities": [ "Synchronize", "Early Bird", "Magic Bounce" ], "stats": { "total": 470, "hp": 65, "attack": 75, "defense": 70, "speedAttack": 95, "speedDefense": 70, "speed": 95 }, "evolutions": [ "natu", "xatu" ] } ], "link": "https://pokemondb.net/pokedex/xatu" }, { "num": 179, "name": "Mareep", "variations": [ { "name": "Mareep", "description": "Mareep is an Electric type Pokémon introduced in Generation 2. It is known as the Wool Pokémon.", "image": "images/mareep.jpg", "types": [ "Electric" ], "specie": "Wool Pokémon", "height": 0.6, "weight": 7.8, "abilities": [ "Static", "Plus" ], "stats": { "total": 280, "hp": 55, "attack": 40, "defense": 40, "speedAttack": 65, "speedDefense": 45, "speed": 35 }, "evolutions": [ "mareep", "flaaffy", "ampharos" ] } ], "link": "https://pokemondb.net/pokedex/mareep" }, { "num": 180, "name": "Flaaffy", "variations": [ { "name": "Flaaffy", "description": "Flaaffy is an Electric type Pokémon introduced in Generation 2. It is known as the Wool Pokémon.", "image": "images/flaaffy.jpg", "types": [ "Electric" ], "specie": "Wool Pokémon", "height": 0.8, "weight": 13.3, "abilities": [ "Static", "Plus" ], "stats": { "total": 365, "hp": 70, "attack": 55, "defense": 55, "speedAttack": 80, "speedDefense": 60, "speed": 45 }, "evolutions": [ "mareep", "flaaffy", "ampharos" ] } ], "link": "https://pokemondb.net/pokedex/flaaffy" }, { "num": 181, "name": "Ampharos", "variations": [ { "name": "Ampharos", "description": "Ampharos is an Electric type Pokémon introduced in Generation 2. It is known as the Light Pokémon.", "image": "images/ampharos.jpg", "types": [ "Electric" ], "specie": "Light Pokémon", "height": 1.4, "weight": 61.5, "abilities": [ "Static", "Plus" ], "stats": { "total": 510, "hp": 90, "attack": 75, "defense": 85, "speedAttack": 115, "speedDefense": 90, "speed": 55 }, "evolutions": [ "mareep", "flaaffy", "ampharos" ] }, { "name": "Mega Ampharos", "description": "Ampharos is an Electric type Pokémon introduced in Generation 2. It is known as the Light Pokémon.", "image": "images/ampharos-mega.jpg", "types": [ "Electric", "Dragon" ], "specie": "Light Pokémon", "height": 1.4, "weight": 61.5, "abilities": [ "Mold Breaker" ], "stats": { "total": 610, "hp": 90, "attack": 95, "defense": 105, "speedAttack": 165, "speedDefense": 110, "speed": 45 }, "evolutions": [ "mareep", "flaaffy", "ampharos" ] } ], "link": "https://pokemondb.net/pokedex/ampharos" }, { "num": 182, "name": "Bellossom", "variations": [ { "name": "Bellossom", "description": "Bellossom is a Grass type Pokémon introduced in Generation 2. It is known as the Flower Pokémon.", "image": "images/bellossom.jpg", "types": [ "Grass" ], "specie": "Flower Pokémon", "height": 0.4, "weight": 5.8, "abilities": [ "Chlorophyll", "Healer" ], "stats": { "total": 490, "hp": 75, "attack": 80, "defense": 95, "speedAttack": 90, "speedDefense": 100, "speed": 50 }, "evolutions": [ "oddish", "gloom", "vileplume", "bellossom" ] } ], "link": "https://pokemondb.net/pokedex/bellossom" }, { "num": 183, "name": "Marill", "variations": [ { "name": "Marill", "description": "Marill is a Water/Fairy type Pokémon introduced in Generation 2. It is known as the Aqua Mouse Pokémon.", "image": "images/marill.jpg", "types": [ "Water", "Fairy" ], "specie": "Aqua Mouse Pokémon", "height": 0.4, "weight": 8.5, "abilities": [ "Thick Fat", "Huge Power", "Sap Sipper" ], "stats": { "total": 250, "hp": 70, "attack": 20, "defense": 50, "speedAttack": 20, "speedDefense": 50, "speed": 40 }, "evolutions": [ "azurill", "marill", "azumarill" ] } ], "link": "https://pokemondb.net/pokedex/marill" }, { "num": 184, "name": "Azumarill", "variations": [ { "name": "Azumarill", "description": "Azumarill is a Water/Fairy type Pokémon introduced in Generation 2. It is known as the Aqua Rabbit Pokémon.", "image": "images/azumarill.jpg", "types": [ "Water", "Fairy" ], "specie": "Aqua Rabbit Pokémon", "height": 0.8, "weight": 28.5, "abilities": [ "Thick Fat", "Huge Power", "Sap Sipper" ], "stats": { "total": 420, "hp": 100, "attack": 50, "defense": 80, "speedAttack": 60, "speedDefense": 80, "speed": 50 }, "evolutions": [ "azurill", "marill", "azumarill" ] } ], "link": "https://pokemondb.net/pokedex/azumarill" }, { "num": 185, "name": "Sudowoodo", "variations": [ { "name": "Sudowoodo", "description": "Sudowoodo is a Rock type Pokémon introduced in Generation 2. It is known as the Imitation Pokémon.", "image": "images/sudowoodo.jpg", "types": [ "Rock" ], "specie": "Imitation Pokémon", "height": 1.2, "weight": 38, "abilities": [ "Sturdy", "Rock Head", "Rattled" ], "stats": { "total": 410, "hp": 70, "attack": 100, "defense": 115, "speedAttack": 30, "speedDefense": 65, "speed": 30 }, "evolutions": [ "bonsly", "sudowoodo" ] } ], "link": "https://pokemondb.net/pokedex/sudowoodo" }, { "num": 186, "name": "Politoed", "variations": [ { "name": "Politoed", "description": "Politoed is a Water type Pokémon introduced in Generation 2. It is known as the Frog Pokémon.", "image": "images/politoed.jpg", "types": [ "Water" ], "specie": "Frog Pokémon", "height": 1.1, "weight": 33.9, "abilities": [ "Water Absorb", "Damp", "Drizzle" ], "stats": { "total": 500, "hp": 90, "attack": 75, "defense": 75, "speedAttack": 90, "speedDefense": 100, "speed": 70 }, "evolutions": [ "poliwag", "poliwhirl", "poliwrath", "politoed" ] } ], "link": "https://pokemondb.net/pokedex/politoed" }, { "num": 187, "name": "Hoppip", "variations": [ { "name": "Hoppip", "description": "Hoppip is a Grass/Flying type Pokémon introduced in Generation 2. It is known as the Cottonweed Pokémon.", "image": "images/hoppip.jpg", "types": [ "Grass", "Flying" ], "specie": "Cottonweed Pokémon", "height": 0.4, "weight": 0.5, "abilities": [ "Chlorophyll", "Leaf Guard", "Infiltrator" ], "stats": { "total": 250, "hp": 35, "attack": 35, "defense": 40, "speedAttack": 35, "speedDefense": 55, "speed": 50 }, "evolutions": [ "hoppip", "skiploom", "jumpluff" ] } ], "link": "https://pokemondb.net/pokedex/hoppip" }, { "num": 188, "name": "Skiploom", "variations": [ { "name": "Skiploom", "description": "Skiploom is a Grass/Flying type Pokémon introduced in Generation 2. It is known as the Cottonweed Pokémon.", "image": "images/skiploom.jpg", "types": [ "Grass", "Flying" ], "specie": "Cottonweed Pokémon", "height": 0.6, "weight": 1, "abilities": [ "Chlorophyll", "Leaf Guard", "Infiltrator" ], "stats": { "total": 340, "hp": 55, "attack": 45, "defense": 50, "speedAttack": 45, "speedDefense": 65, "speed": 80 }, "evolutions": [ "hoppip", "skiploom", "jumpluff" ] } ], "link": "https://pokemondb.net/pokedex/skiploom" }, { "num": 189, "name": "Jumpluff", "variations": [ { "name": "Jumpluff", "description": "Jumpluff is a Grass/Flying type Pokémon introduced in Generation 2. It is known as the Cottonweed Pokémon.", "image": "images/jumpluff.jpg", "types": [ "Grass", "Flying" ], "specie": "Cottonweed Pokémon", "height": 0.8, "weight": 3, "abilities": [ "Chlorophyll", "Leaf Guard", "Infiltrator" ], "stats": { "total": 460, "hp": 75, "attack": 55, "defense": 70, "speedAttack": 55, "speedDefense": 95, "speed": 110 }, "evolutions": [ "hoppip", "skiploom", "jumpluff" ] } ], "link": "https://pokemondb.net/pokedex/jumpluff" }, { "num": 190, "name": "Aipom", "variations": [ { "name": "Aipom", "description": "Aipom is a Normal type Pokémon introduced in Generation 2. It is known as the Long Tail Pokémon.", "image": "images/aipom.jpg", "types": [ "Normal" ], "specie": "Long Tail Pokémon", "height": 0.8, "weight": 11.5, "abilities": [ "Run Away", "Pickup", "Skill Link" ], "stats": { "total": 360, "hp": 55, "attack": 70, "defense": 55, "speedAttack": 40, "speedDefense": 55, "speed": 85 }, "evolutions": [ "aipom", "ambipom" ] } ], "link": "https://pokemondb.net/pokedex/aipom" }, { "num": 191, "name": "Sunkern", "variations": [ { "name": "Sunkern", "description": "Sunkern is a Grass type Pokémon introduced in Generation 2. It is known as the Seed Pokémon.", "image": "images/sunkern.jpg", "types": [ "Grass" ], "specie": "Seed Pokémon", "height": 0.3, "weight": 1.8, "abilities": [ "Chlorophyll", "Solar Power", "Early Bird" ], "stats": { "total": 180, "hp": 30, "attack": 30, "defense": 30, "speedAttack": 30, "speedDefense": 30, "speed": 30 }, "evolutions": [ "sunkern", "sunflora" ] } ], "link": "https://pokemondb.net/pokedex/sunkern" }, { "num": 192, "name": "Sunflora", "variations": [ { "name": "Sunflora", "description": "Sunflora is a Grass type Pokémon introduced in Generation 2. It is known as the Sun Pokémon.", "image": "images/sunflora.jpg", "types": [ "Grass" ], "specie": "Sun Pokémon", "height": 0.8, "weight": 8.5, "abilities": [ "Chlorophyll", "Solar Power", "Early Bird" ], "stats": { "total": 425, "hp": 75, "attack": 75, "defense": 55, "speedAttack": 105, "speedDefense": 85, "speed": 30 }, "evolutions": [ "sunkern", "sunflora" ] } ], "link": "https://pokemondb.net/pokedex/sunflora" }, { "num": 193, "name": "Yanma", "variations": [ { "name": "Yanma", "description": "Yanma is a Bug/Flying type Pokémon introduced in Generation 2. It is known as the Clear Wing Pokémon.", "image": "images/yanma.jpg", "types": [ "Bug", "Flying" ], "specie": "Clear Wing Pokémon", "height": 1.2, "weight": 38, "abilities": [ "Speed Boost", "Compound Eyes", "Frisk" ], "stats": { "total": 390, "hp": 65, "attack": 65, "defense": 45, "speedAttack": 75, "speedDefense": 45, "speed": 95 }, "evolutions": [ "yanma", "yanmega" ] } ], "link": "https://pokemondb.net/pokedex/yanma" }, { "num": 194, "name": "Wooper", "variations": [ { "name": "Wooper", "description": "Wooper is a Water/Ground type Pokémon introduced in Generation 2. It is known as the Water Fish Pokémon.", "image": "images/wooper.jpg", "types": [ "Water", "Ground" ], "specie": "Water Fish Pokémon", "height": 0.4, "weight": 8.5, "abilities": [ "Damp", "Water Absorb", "Unaware" ], "stats": { "total": 210, "hp": 55, "attack": 45, "defense": 45, "speedAttack": 25, "speedDefense": 25, "speed": 15 }, "evolutions": [ "wooper", "quagsire" ] } ], "link": "https://pokemondb.net/pokedex/wooper" }, { "num": 195, "name": "Quagsire", "variations": [ { "name": "Quagsire", "description": "Quagsire is a Water/Ground type Pokémon introduced in Generation 2. It is known as the Water Fish Pokémon.", "image": "images/quagsire.jpg", "types": [ "Water", "Ground" ], "specie": "Water Fish Pokémon", "height": 1.4, "weight": 75, "abilities": [ "Damp", "Water Absorb", "Unaware" ], "stats": { "total": 430, "hp": 95, "attack": 85, "defense": 85, "speedAttack": 65, "speedDefense": 65, "speed": 35 }, "evolutions": [ "wooper", "quagsire" ] } ], "link": "https://pokemondb.net/pokedex/quagsire" }, { "num": 196, "name": "Espeon", "variations": [ { "name": "Espeon", "description": "Espeon is a Psychic type Pokémon introduced in Generation 2. It is known as the Sun Pokémon.", "image": "images/espeon.jpg", "types": [ "Psychic" ], "specie": "Sun Pokémon", "height": 0.9, "weight": 26.5, "abilities": [ "Synchronize", "Magic Bounce" ], "stats": { "total": 525, "hp": 65, "attack": 65, "defense": 60, "speedAttack": 130, "speedDefense": 95, "speed": 110 }, "evolutions": [ "eevee", "vaporeon", "jolteon", "flareon", "eevee", "espeon", "umbreon", "eevee", "leafeon", "glaceon", "eevee", "sylveon" ] } ], "link": "https://pokemondb.net/pokedex/espeon" }, { "num": 197, "name": "Umbreon", "variations": [ { "name": "Umbreon", "description": "Umbreon is a Dark type Pokémon introduced in Generation 2. It is known as the Moonlight Pokémon.", "image": "images/umbreon.jpg", "types": [ "Dark" ], "specie": "Moonlight Pokémon", "height": 1, "weight": 27, "abilities": [ "Synchronize", "Inner Focus" ], "stats": { "total": 525, "hp": 95, "attack": 65, "defense": 110, "speedAttack": 60, "speedDefense": 130, "speed": 65 }, "evolutions": [ "eevee", "vaporeon", "jolteon", "flareon", "eevee", "espeon", "umbreon", "eevee", "leafeon", "glaceon", "eevee", "sylveon" ] } ], "link": "https://pokemondb.net/pokedex/umbreon" }, { "num": 198, "name": "Murkrow", "variations": [ { "name": "Murkrow", "description": "Murkrow is a Dark/Flying type Pokémon introduced in Generation 2. It is known as the Darkness Pokémon.", "image": "images/murkrow.jpg", "types": [ "Dark", "Flying" ], "specie": "Darkness Pokémon", "height": 0.5, "weight": 2.1, "abilities": [ "Insomnia", "Super Luck", "Prankster" ], "stats": { "total": 405, "hp": 60, "attack": 85, "defense": 42, "speedAttack": 85, "speedDefense": 42, "speed": 91 }, "evolutions": [ "murkrow", "honchkrow" ] } ], "link": "https://pokemondb.net/pokedex/murkrow" }, { "num": 199, "name": "Slowking", "variations": [ { "name": "Slowking", "description": "Slowking is a Water/Psychic type Pokémon introduced in Generation 2. It is known as the Royal Pokémon.", "image": "images/slowking.jpg", "types": [ "Water", "Psychic" ], "specie": "Royal Pokémon", "height": 2, "weight": 79.5, "abilities": [ "Oblivious", "Own Tempo", "Regenerator" ], "stats": { "total": 490, "hp": 95, "attack": 75, "defense": 80, "speedAttack": 100, "speedDefense": 110, "speed": 30 }, "evolutions": [ "slowpoke", "slowbro", "slowking" ] } ], "link": "https://pokemondb.net/pokedex/slowking" }, { "num": 200, "name": "Misdreavus", "variations": [ { "name": "Misdreavus", "description": "Misdreavus is a Ghost type Pokémon introduced in Generation 2. It is known as the Screech Pokémon.", "image": "images/misdreavus.jpg", "types": [ "Ghost" ], "specie": "Screech Pokémon", "height": 0.7, "weight": 1, "abilities": [ "Levitate" ], "stats": { "total": 435, "hp": 60, "attack": 60, "defense": 60, "speedAttack": 85, "speedDefense": 85, "speed": 85 }, "evolutions": [ "misdreavus", "mismagius" ] } ], "link": "https://pokemondb.net/pokedex/misdreavus" }, { "num": 201, "name": "Unown", "variations": [ { "name": "Unown", "description": "Unown is a Psychic type Pokémon introduced in Generation 2. It is known as the Symbol Pokémon.", "image": "images/unown.jpg", "types": [ "Psychic" ], "specie": "Symbol Pokémon", "height": 0.5, "weight": 5, "abilities": [ "Levitate" ], "stats": { "total": 336, "hp": 48, "attack": 72, "defense": 48, "speedAttack": 72, "speedDefense": 48, "speed": 48 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/unown" }, { "num": 202, "name": "Wobbuffet", "variations": [ { "name": "Wobbuffet", "description": "Wobbuffet is a Psychic type Pokémon introduced in Generation 2. It is known as the Patient Pokémon.", "image": "images/wobbuffet.jpg", "types": [ "Psychic" ], "specie": "Patient Pokémon", "height": 1.3, "weight": 28.5, "abilities": [ "Shadow Tag", "Telepathy" ], "stats": { "total": 405, "hp": 190, "attack": 33, "defense": 58, "speedAttack": 33, "speedDefense": 58, "speed": 33 }, "evolutions": [ "wynaut", "wobbuffet" ] } ], "link": "https://pokemondb.net/pokedex/wobbuffet" }, { "num": 203, "name": "Girafarig", "variations": [ { "name": "Girafarig", "description": "Girafarig is a Normal/Psychic type Pokémon introduced in Generation 2. It is known as the Long Neck Pokémon.", "image": "images/girafarig.jpg", "types": [ "Normal", "Psychic" ], "specie": "Long Neck Pokémon", "height": 1.5, "weight": 41.5, "abilities": [ "Inner Focus", "Early Bird", "Sap Sipper" ], "stats": { "total": 455, "hp": 70, "attack": 80, "defense": 65, "speedAttack": 90, "speedDefense": 65, "speed": 85 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/girafarig" }, { "num": 204, "name": "Pineco", "variations": [ { "name": "Pineco", "description": "Pineco is a Bug type Pokémon introduced in Generation 2. It is known as the Bagworm Pokémon.", "image": "images/pineco.jpg", "types": [ "Bug" ], "specie": "Bagworm Pokémon", "height": 0.6, "weight": 7.2, "abilities": [ "Sturdy", "Overcoat" ], "stats": { "total": 290, "hp": 50, "attack": 65, "defense": 90, "speedAttack": 35, "speedDefense": 35, "speed": 15 }, "evolutions": [ "pineco", "forretress" ] } ], "link": "https://pokemondb.net/pokedex/pineco" }, { "num": 205, "name": "Forretress", "variations": [ { "name": "Forretress", "description": "Forretress is a Bug/Steel type Pokémon introduced in Generation 2. It is known as the Bagworm Pokémon.", "image": "images/forretress.jpg", "types": [ "Bug", "Steel" ], "specie": "Bagworm Pokémon", "height": 1.2, "weight": 125.8, "abilities": [ "Sturdy", "Overcoat" ], "stats": { "total": 465, "hp": 75, "attack": 90, "defense": 140, "speedAttack": 60, "speedDefense": 60, "speed": 40 }, "evolutions": [ "pineco", "forretress" ] } ], "link": "https://pokemondb.net/pokedex/forretress" }, { "num": 206, "name": "Dunsparce", "variations": [ { "name": "Dunsparce", "description": "Dunsparce is a Normal type Pokémon introduced in Generation 2. It is known as the Land Snake Pokémon.", "image": "images/dunsparce.jpg", "types": [ "Normal" ], "specie": "Land Snake Pokémon", "height": 1.5, "weight": 14, "abilities": [ "Serene Grace", "Run Away", "Rattled" ], "stats": { "total": 415, "hp": 100, "attack": 70, "defense": 70, "speedAttack": 65, "speedDefense": 65, "speed": 45 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/dunsparce" }, { "num": 207, "name": "Gligar", "variations": [ { "name": "Gligar", "description": "Gligar is a Ground/Flying type Pokémon introduced in Generation 2. It is known as the FlyScorpion Pokémon.", "image": "images/gligar.jpg", "types": [ "Ground", "Flying" ], "specie": "FlyScorpion Pokémon", "height": 1.1, "weight": 64.8, "abilities": [ "Hyper Cutter", "Sand Veil", "Immunity" ], "stats": { "total": 430, "hp": 65, "attack": 75, "defense": 105, "speedAttack": 35, "speedDefense": 65, "speed": 85 }, "evolutions": [ "gligar", "gliscor" ] } ], "link": "https://pokemondb.net/pokedex/gligar" }, { "num": 208, "name": "Steelix", "variations": [ { "name": "Steelix", "description": "Steelix is a Steel/Ground type Pokémon introduced in Generation 2. It is known as the Iron Snake Pokémon.\nSteelix has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/steelix.jpg", "types": [ "Steel", "Ground" ], "specie": "Iron Snake Pokémon", "height": 9.2, "weight": 400, "abilities": [ "Rock Head", "Sturdy", "Sheer Force" ], "stats": { "total": 510, "hp": 75, "attack": 85, "defense": 200, "speedAttack": 55, "speedDefense": 65, "speed": 30 }, "evolutions": [ "onix", "steelix" ] }, { "name": "Mega Steelix", "description": "Steelix is a Steel/Ground type Pokémon introduced in Generation 2. It is known as the Iron Snake Pokémon.\nSteelix has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/steelix-mega.jpg", "types": [ "Steel", "Ground" ], "specie": "Iron Snake Pokémon", "height": 10.5, "weight": 740, "abilities": [ "Sand Force" ], "stats": { "total": 610, "hp": 75, "attack": 125, "defense": 230, "speedAttack": 55, "speedDefense": 95, "speed": 30 }, "evolutions": [ "onix", "steelix" ] } ], "link": "https://pokemondb.net/pokedex/steelix" }, { "num": 209, "name": "Snubbull", "variations": [ { "name": "Snubbull", "description": "Snubbull is a Fairy type Pokémon introduced in Generation 2. It is known as the Fairy Pokémon.", "image": "images/snubbull.jpg", "types": [ "Fairy" ], "specie": "Fairy Pokémon", "height": 0.6, "weight": 7.8, "abilities": [ "Intimidate", "Run Away", "Rattled" ], "stats": { "total": 300, "hp": 60, "attack": 80, "defense": 50, "speedAttack": 40, "speedDefense": 40, "speed": 30 }, "evolutions": [ "snubbull", "granbull" ] } ], "link": "https://pokemondb.net/pokedex/snubbull" }, { "num": 210, "name": "Granbull", "variations": [ { "name": "Granbull", "description": "Granbull is a Fairy type Pokémon introduced in Generation 2. It is known as the Fairy Pokémon.", "image": "images/granbull.jpg", "types": [ "Fairy" ], "specie": "Fairy Pokémon", "height": 1.4, "weight": 48.7, "abilities": [ "Intimidate", "Quick Feet", "Rattled" ], "stats": { "total": 450, "hp": 90, "attack": 120, "defense": 75, "speedAttack": 60, "speedDefense": 60, "speed": 45 }, "evolutions": [ "snubbull", "granbull" ] } ], "link": "https://pokemondb.net/pokedex/granbull" }, { "num": 211, "name": "Qwilfish", "variations": [ { "name": "Qwilfish", "description": "Qwilfish is a Water/Poison type Pokémon introduced in Generation 2. It is known as the Balloon Pokémon.", "image": "images/qwilfish.jpg", "types": [ "Water", "Poison" ], "specie": "Balloon Pokémon", "height": 0.5, "weight": 3.9, "abilities": [ "Poison Point", "Swift Swim", "Intimidate" ], "stats": { "total": 440, "hp": 65, "attack": 95, "defense": 85, "speedAttack": 55, "speedDefense": 55, "speed": 85 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/qwilfish" }, { "num": 212, "name": "Scizor", "variations": [ { "name": "Scizor", "description": "Scizor is a Bug/Steel type Pokémon introduced in Generation 2. It is known as the Pincer Pokémon.\nScizor is a red, metal, ant-like Pokémon with yellow and black patterns on its pincers which resemble an eye pattern. Its body consists of three main parts: the torso, the abdomen and the head. It stands on two legs and has a pair of small wings located on its back which are used to control its body temperature, rather than flying. Scizor's habitat is lush and vast where it can reside with the rest of the swarm.\nScizor evolves from the Bug/Flying type Scyther, thus losing its Flying type upon evolution - a rare occurrence for Pokémon.\nScizor has a Mega Evolution, available from X & Y onwards.", "image": "images/scizor.jpg", "types": [ "Bug", "Steel" ], "specie": "Pincer Pokémon", "height": 1.8, "weight": 118, "abilities": [ "Swarm", "Technician", "Light Metal" ], "stats": { "total": 500, "hp": 70, "attack": 130, "defense": 100, "speedAttack": 55, "speedDefense": 80, "speed": 65 }, "evolutions": [ "scyther", "scizor" ] }, { "name": "Mega Scizor", "description": "Scizor is a Bug/Steel type Pokémon introduced in Generation 2. It is known as the Pincer Pokémon.\nScizor is a red, metal, ant-like Pokémon with yellow and black patterns on its pincers which resemble an eye pattern. Its body consists of three main parts: the torso, the abdomen and the head. It stands on two legs and has a pair of small wings located on its back which are used to control its body temperature, rather than flying. Scizor's habitat is lush and vast where it can reside with the rest of the swarm.\nScizor evolves from the Bug/Flying type Scyther, thus losing its Flying type upon evolution - a rare occurrence for Pokémon.\nScizor has a Mega Evolution, available from X & Y onwards.", "image": "images/scizor-mega.jpg", "types": [ "Bug", "Steel" ], "specie": "Pincer Pokémon", "height": 2, "weight": 125, "abilities": [ "Technician" ], "stats": { "total": 600, "hp": 70, "attack": 150, "defense": 140, "speedAttack": 65, "speedDefense": 100, "speed": 75 }, "evolutions": [ "scyther", "scizor" ] } ], "link": "https://pokemondb.net/pokedex/scizor" }, { "num": 213, "name": "Shuckle", "variations": [ { "name": "Shuckle", "description": "Shuckle is a Bug/Rock type Pokémon introduced in Generation 2. It is known as the Mold Pokémon.", "image": "images/shuckle.jpg", "types": [ "Bug", "Rock" ], "specie": "Mold Pokémon", "height": 0.6, "weight": 20.5, "abilities": [ "Sturdy", "Gluttony", "Contrary" ], "stats": { "total": 505, "hp": 20, "attack": 10, "defense": 230, "speedAttack": 10, "speedDefense": 230, "speed": 5 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/shuckle" }, { "num": 214, "name": "Heracross", "variations": [ { "name": "Heracross", "description": "Heracross is a Bug/Fighting type Pokémon introduced in Generation 2. It is known as the Single Horn Pokémon.\nHeracross has a Mega Evolution, available from X & Y onwards.", "image": "images/heracross.jpg", "types": [ "Bug", "Fighting" ], "specie": "Single Horn Pokémon", "height": 1.5, "weight": 54, "abilities": [ "Swarm", "Guts", "Moxie" ], "stats": { "total": 500, "hp": 80, "attack": 125, "defense": 75, "speedAttack": 40, "speedDefense": 95, "speed": 85 }, "evolutions": [] }, { "name": "Mega Heracross", "description": "Heracross is a Bug/Fighting type Pokémon introduced in Generation 2. It is known as the Single Horn Pokémon.\nHeracross has a Mega Evolution, available from X & Y onwards.", "image": "images/heracross-mega.jpg", "types": [ "Bug", "Fighting" ], "specie": "Single Horn Pokémon", "height": 1.7, "weight": 62.5, "abilities": [ "Skill Link" ], "stats": { "total": 600, "hp": 80, "attack": 185, "defense": 115, "speedAttack": 40, "speedDefense": 105, "speed": 75 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/heracross" }, { "num": 215, "name": "Sneasel", "variations": [ { "name": "Sneasel", "description": "Sneasel is a Dark/Ice type Pokémon introduced in Generation 2. It is known as the Sharp Claw Pokémon.", "image": "images/sneasel.jpg", "types": [ "Dark", "Ice" ], "specie": "Sharp Claw Pokémon", "height": 0.9, "weight": 28, "abilities": [ "Inner Focus", "Keen Eye", "Pickpocket" ], "stats": { "total": 430, "hp": 55, "attack": 95, "defense": 55, "speedAttack": 35, "speedDefense": 75, "speed": 115 }, "evolutions": [ "sneasel", "weavile" ] } ], "link": "https://pokemondb.net/pokedex/sneasel" }, { "num": 216, "name": "Teddiursa", "variations": [ { "name": "Teddiursa", "description": "Teddiursa is a Normal type Pokémon introduced in Generation 2. It is known as the Little Bear Pokémon.", "image": "images/teddiursa.jpg", "types": [ "Normal" ], "specie": "Little Bear Pokémon", "height": 0.6, "weight": 8.8, "abilities": [ "Pickup", "Quick Feet", "Honey Gather" ], "stats": { "total": 330, "hp": 60, "attack": 80, "defense": 50, "speedAttack": 50, "speedDefense": 50, "speed": 40 }, "evolutions": [ "teddiursa", "ursaring" ] } ], "link": "https://pokemondb.net/pokedex/teddiursa" }, { "num": 217, "name": "Ursaring", "variations": [ { "name": "Ursaring", "description": "Ursaring is a Normal type Pokémon introduced in Generation 2. It is known as the Hibernator Pokémon.", "image": "images/ursaring.jpg", "types": [ "Normal" ], "specie": "Hibernator Pokémon", "height": 1.8, "weight": 125.8, "abilities": [ "Guts", "Quick Feet", "Unnerve" ], "stats": { "total": 500, "hp": 90, "attack": 130, "defense": 75, "speedAttack": 75, "speedDefense": 75, "speed": 55 }, "evolutions": [ "teddiursa", "ursaring" ] } ], "link": "https://pokemondb.net/pokedex/ursaring" }, { "num": 218, "name": "Slugma", "variations": [ { "name": "Slugma", "description": "Slugma is a Fire type Pokémon introduced in Generation 2. It is known as the Lava Pokémon.", "image": "images/slugma.jpg", "types": [ "Fire" ], "specie": "Lava Pokémon", "height": 0.7, "weight": 35, "abilities": [ "Magma Armor", "Flame Body", "Weak Armor" ], "stats": { "total": 250, "hp": 40, "attack": 40, "defense": 40, "speedAttack": 70, "speedDefense": 40, "speed": 20 }, "evolutions": [ "slugma", "magcargo" ] } ], "link": "https://pokemondb.net/pokedex/slugma" }, { "num": 219, "name": "Magcargo", "variations": [ { "name": "Magcargo", "description": "Magcargo is a Fire/Rock type Pokémon introduced in Generation 2. It is known as the Lava Pokémon.", "image": "images/magcargo.jpg", "types": [ "Fire", "Rock" ], "specie": "Lava Pokémon", "height": 0.8, "weight": 55, "abilities": [ "Magma Armor", "Flame Body", "Weak Armor" ], "stats": { "total": 430, "hp": 60, "attack": 50, "defense": 120, "speedAttack": 90, "speedDefense": 80, "speed": 30 }, "evolutions": [ "slugma", "magcargo" ] } ], "link": "https://pokemondb.net/pokedex/magcargo" }, { "num": 220, "name": "Swinub", "variations": [ { "name": "Swinub", "description": "Swinub is an Ice/Ground type Pokémon introduced in Generation 2. It is known as the Pig Pokémon.", "image": "images/swinub.jpg", "types": [ "Ice", "Ground" ], "specie": "Pig Pokémon", "height": 0.4, "weight": 6.5, "abilities": [ "Oblivious", "Snow Cloak", "Thick Fat" ], "stats": { "total": 250, "hp": 50, "attack": 50, "defense": 40, "speedAttack": 30, "speedDefense": 30, "speed": 50 }, "evolutions": [ "swinub", "piloswine", "mamoswine" ] } ], "link": "https://pokemondb.net/pokedex/swinub" }, { "num": 221, "name": "Piloswine", "variations": [ { "name": "Piloswine", "description": "Piloswine is an Ice/Ground type Pokémon introduced in Generation 2. It is known as the Swine Pokémon.", "image": "images/piloswine.jpg", "types": [ "Ice", "Ground" ], "specie": "Swine Pokémon", "height": 1.1, "weight": 55.8, "abilities": [ "Oblivious", "Snow Cloak", "Thick Fat" ], "stats": { "total": 450, "hp": 100, "attack": 100, "defense": 80, "speedAttack": 60, "speedDefense": 60, "speed": 50 }, "evolutions": [ "swinub", "piloswine", "mamoswine" ] } ], "link": "https://pokemondb.net/pokedex/piloswine" }, { "num": 222, "name": "Corsola", "variations": [ { "name": "Corsola", "description": "Corsola is a Water/Rock type Pokémon introduced in Generation 2. It is known as the Coral Pokémon.", "image": "images/corsola.jpg", "types": [ "Water", "Rock" ], "specie": "Coral Pokémon", "height": 0.6, "weight": 5, "abilities": [ "Hustle", "Natural Cure", "Regenerator" ], "stats": { "total": 410, "hp": 65, "attack": 55, "defense": 95, "speedAttack": 65, "speedDefense": 95, "speed": 35 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/corsola" }, { "num": 223, "name": "Remoraid", "variations": [ { "name": "Remoraid", "description": "Remoraid is a Water type Pokémon introduced in Generation 2. It is known as the Jet Pokémon.", "image": "images/remoraid.jpg", "types": [ "Water" ], "specie": "Jet Pokémon", "height": 0.6, "weight": 12, "abilities": [ "Hustle", "Sniper", "Moody" ], "stats": { "total": 300, "hp": 35, "attack": 65, "defense": 35, "speedAttack": 65, "speedDefense": 35, "speed": 65 }, "evolutions": [ "remoraid", "octillery" ] } ], "link": "https://pokemondb.net/pokedex/remoraid" }, { "num": 224, "name": "Octillery", "variations": [ { "name": "Octillery", "description": "Octillery is a Water type Pokémon introduced in Generation 2. It is known as the Jet Pokémon.", "image": "images/octillery.jpg", "types": [ "Water" ], "specie": "Jet Pokémon", "height": 0.9, "weight": 28.5, "abilities": [ "Suction Cups", "Sniper", "Moody" ], "stats": { "total": 480, "hp": 75, "attack": 105, "defense": 75, "speedAttack": 105, "speedDefense": 75, "speed": 45 }, "evolutions": [ "remoraid", "octillery" ] } ], "link": "https://pokemondb.net/pokedex/octillery" }, { "num": 225, "name": "Delibird", "variations": [ { "name": "Delibird", "description": "Delibird is an Ice/Flying type Pokémon introduced in Generation 2. It is known as the Delivery Pokémon.", "image": "images/delibird.jpg", "types": [ "Ice", "Flying" ], "specie": "Delivery Pokémon", "height": 0.9, "weight": 16, "abilities": [ "Vital Spirit", "Hustle", "Insomnia" ], "stats": { "total": 330, "hp": 45, "attack": 55, "defense": 45, "speedAttack": 65, "speedDefense": 45, "speed": 75 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/delibird" }, { "num": 226, "name": "Mantine", "variations": [ { "name": "Mantine", "description": "Mantine is a Water/Flying type Pokémon introduced in Generation 2. It is known as the Kite Pokémon.", "image": "images/mantine.jpg", "types": [ "Water", "Flying" ], "specie": "Kite Pokémon", "height": 2.1, "weight": 220, "abilities": [ "Swift Swim", "Water Absorb", "Water Veil" ], "stats": { "total": 485, "hp": 85, "attack": 40, "defense": 70, "speedAttack": 80, "speedDefense": 140, "speed": 70 }, "evolutions": [ "mantyke", "mantine" ] } ], "link": "https://pokemondb.net/pokedex/mantine" }, { "num": 227, "name": "Skarmory", "variations": [ { "name": "Skarmory", "description": "Skarmory is a Steel/Flying type Pokémon introduced in Generation 2. It is known as the Armor Bird Pokémon.", "image": "images/skarmory.jpg", "types": [ "Steel", "Flying" ], "specie": "Armor Bird Pokémon", "height": 1.7, "weight": 50.5, "abilities": [ "Keen Eye", "Sturdy", "Weak Armor" ], "stats": { "total": 465, "hp": 65, "attack": 80, "defense": 140, "speedAttack": 40, "speedDefense": 70, "speed": 70 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/skarmory" }, { "num": 228, "name": "Houndour", "variations": [ { "name": "Houndour", "description": "Houndour is a Dark/Fire type Pokémon introduced in Generation 2. It is known as the Dark Pokémon.", "image": "images/houndour.jpg", "types": [ "Dark", "Fire" ], "specie": "Dark Pokémon", "height": 0.6, "weight": 10.8, "abilities": [ "Early Bird", "Flash Fire", "Unnerve" ], "stats": { "total": 330, "hp": 45, "attack": 60, "defense": 30, "speedAttack": 80, "speedDefense": 50, "speed": 65 }, "evolutions": [ "houndour", "houndoom" ] } ], "link": "https://pokemondb.net/pokedex/houndour" }, { "num": 229, "name": "Houndoom", "variations": [ { "name": "Houndoom", "description": "Houndoom is a Dark/Fire type Pokémon introduced in Generation 2. It is known as the Dark Pokémon.\nHoundoom has a Mega Evolution, available from X & Y onwards.", "image": "images/houndoom.jpg", "types": [ "Dark", "Fire" ], "specie": "Dark Pokémon", "height": 1.4, "weight": 35, "abilities": [ "Early Bird", "Flash Fire", "Unnerve" ], "stats": { "total": 500, "hp": 75, "attack": 90, "defense": 50, "speedAttack": 110, "speedDefense": 80, "speed": 95 }, "evolutions": [ "houndour", "houndoom" ] }, { "name": "Mega Houndoom", "description": "Houndoom is a Dark/Fire type Pokémon introduced in Generation 2. It is known as the Dark Pokémon.\nHoundoom has a Mega Evolution, available from X & Y onwards.", "image": "images/houndoom-mega.jpg", "types": [ "Dark", "Fire" ], "specie": "Dark Pokémon", "height": 1.9, "weight": 49.5, "abilities": [ "Solar Power" ], "stats": { "total": 600, "hp": 75, "attack": 90, "defense": 90, "speedAttack": 140, "speedDefense": 90, "speed": 115 }, "evolutions": [ "houndour", "houndoom" ] } ], "link": "https://pokemondb.net/pokedex/houndoom" }, { "num": 230, "name": "Kingdra", "variations": [ { "name": "Kingdra", "description": "Kingdra is a Water/Dragon type Pokémon introduced in Generation 2. It is known as the Dragon Pokémon.", "image": "images/kingdra.jpg", "types": [ "Water", "Dragon" ], "specie": "Dragon Pokémon", "height": 1.8, "weight": 152, "abilities": [ "Swift Swim", "Sniper", "Damp" ], "stats": { "total": 540, "hp": 75, "attack": 95, "defense": 95, "speedAttack": 95, "speedDefense": 95, "speed": 85 }, "evolutions": [ "horsea", "seadra", "kingdra" ] } ], "link": "https://pokemondb.net/pokedex/kingdra" }, { "num": 231, "name": "Phanpy", "variations": [ { "name": "Phanpy", "description": "Phanpy is a Ground type Pokémon introduced in Generation 2. It is known as the Long Nose Pokémon.", "image": "images/phanpy.jpg", "types": [ "Ground" ], "specie": "Long Nose Pokémon", "height": 0.5, "weight": 33.5, "abilities": [ "Pickup", "Sand Veil" ], "stats": { "total": 330, "hp": 90, "attack": 60, "defense": 60, "speedAttack": 40, "speedDefense": 40, "speed": 40 }, "evolutions": [ "phanpy", "donphan" ] } ], "link": "https://pokemondb.net/pokedex/phanpy" }, { "num": 232, "name": "Donphan", "variations": [ { "name": "Donphan", "description": "Donphan is a Ground type Pokémon introduced in Generation 2. It is known as the Armor Pokémon.", "image": "images/donphan.jpg", "types": [ "Ground" ], "specie": "Armor Pokémon", "height": 1.1, "weight": 120, "abilities": [ "Sturdy", "Sand Veil" ], "stats": { "total": 500, "hp": 90, "attack": 120, "defense": 120, "speedAttack": 60, "speedDefense": 60, "speed": 50 }, "evolutions": [ "phanpy", "donphan" ] } ], "link": "https://pokemondb.net/pokedex/donphan" }, { "num": 233, "name": "Porygon2", "variations": [ { "name": "Porygon2", "description": "Porygon2 is a Normal type Pokémon introduced in Generation 2. It is known as the Virtual Pokémon.", "image": "images/porygon2.jpg", "types": [ "Normal" ], "specie": "Virtual Pokémon", "height": 0.6, "weight": 32.5, "abilities": [ "Trace", "Download", "Analytic" ], "stats": { "total": 515, "hp": 85, "attack": 80, "defense": 90, "speedAttack": 105, "speedDefense": 95, "speed": 60 }, "evolutions": [ "porygon", "porygon2", "porygon-z" ] } ], "link": "https://pokemondb.net/pokedex/porygon2" }, { "num": 234, "name": "Stantler", "variations": [ { "name": "Stantler", "description": "Stantler is a Normal type Pokémon introduced in Generation 2. It is known as the Big Horn Pokémon.", "image": "images/stantler.jpg", "types": [ "Normal" ], "specie": "Big Horn Pokémon", "height": 1.4, "weight": 71.2, "abilities": [ "Intimidate", "Frisk", "Sap Sipper" ], "stats": { "total": 465, "hp": 73, "attack": 95, "defense": 62, "speedAttack": 85, "speedDefense": 65, "speed": 85 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/stantler" }, { "num": 235, "name": "Smeargle", "variations": [ { "name": "Smeargle", "description": "Smeargle is a Normal type Pokémon introduced in Generation 2. It is known as the Painter Pokémon.", "image": "images/smeargle.jpg", "types": [ "Normal" ], "specie": "Painter Pokémon", "height": 1.2, "weight": 58, "abilities": [ "Own Tempo", "Technician", "Moody" ], "stats": { "total": 250, "hp": 55, "attack": 20, "defense": 35, "speedAttack": 20, "speedDefense": 45, "speed": 75 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/smeargle" }, { "num": 236, "name": "Tyrogue", "variations": [ { "name": "Tyrogue", "description": "Tyrogue is a Fighting type Pokémon introduced in Generation 2. It is known as the Scuffle Pokémon.", "image": "images/tyrogue.jpg", "types": [ "Fighting" ], "specie": "Scuffle Pokémon", "height": 0.7, "weight": 21, "abilities": [ "Guts", "Steadfast", "Vital Spirit" ], "stats": { "total": 210, "hp": 35, "attack": 35, "defense": 35, "speedAttack": 35, "speedDefense": 35, "speed": 35 }, "evolutions": [ "tyrogue", "hitmonlee", "hitmonchan", "hitmontop" ] } ], "link": "https://pokemondb.net/pokedex/tyrogue" }, { "num": 237, "name": "Hitmontop", "variations": [ { "name": "Hitmontop", "description": "Hitmontop is a Fighting type Pokémon introduced in Generation 2. It is known as the Handstand Pokémon.", "image": "images/hitmontop.jpg", "types": [ "Fighting" ], "specie": "Handstand Pokémon", "height": 1.4, "weight": 48, "abilities": [ "Intimidate", "Technician", "Steadfast" ], "stats": { "total": 455, "hp": 50, "attack": 95, "defense": 95, "speedAttack": 35, "speedDefense": 110, "speed": 70 }, "evolutions": [ "tyrogue", "hitmonlee", "hitmonchan", "hitmontop" ] } ], "link": "https://pokemondb.net/pokedex/hitmontop" }, { "num": 238, "name": "Smoochum", "variations": [ { "name": "Smoochum", "description": "Smoochum is an Ice/Psychic type Pokémon introduced in Generation 2. It is known as the Kiss Pokémon.", "image": "images/smoochum.jpg", "types": [ "Ice", "Psychic" ], "specie": "Kiss Pokémon", "height": 0.4, "weight": 6, "abilities": [ "Oblivious", "Forewarn", "Hydration" ], "stats": { "total": 305, "hp": 45, "attack": 30, "defense": 15, "speedAttack": 85, "speedDefense": 65, "speed": 65 }, "evolutions": [ "smoochum", "jynx" ] } ], "link": "https://pokemondb.net/pokedex/smoochum" }, { "num": 239, "name": "Elekid", "variations": [ { "name": "Elekid", "description": "Elekid is an Electric type Pokémon introduced in Generation 2. It is known as the Electric Pokémon.", "image": "images/elekid.jpg", "types": [ "Electric" ], "specie": "Electric Pokémon", "height": 0.6, "weight": 23.5, "abilities": [ "Static", "Vital Spirit" ], "stats": { "total": 360, "hp": 45, "attack": 63, "defense": 37, "speedAttack": 65, "speedDefense": 55, "speed": 95 }, "evolutions": [ "elekid", "electabuzz", "electivire" ] } ], "link": "https://pokemondb.net/pokedex/elekid" }, { "num": 240, "name": "Magby", "variations": [ { "name": "Magby", "description": "Magby is a Fire type Pokémon introduced in Generation 2. It is known as the Live Coal Pokémon.", "image": "images/magby.jpg", "types": [ "Fire" ], "specie": "Live Coal Pokémon", "height": 0.7, "weight": 21.4, "abilities": [ "Flame Body", "Vital Spirit" ], "stats": { "total": 365, "hp": 45, "attack": 75, "defense": 37, "speedAttack": 70, "speedDefense": 55, "speed": 83 }, "evolutions": [ "magby", "magmar", "magmortar" ] } ], "link": "https://pokemondb.net/pokedex/magby" }, { "num": 241, "name": "Miltank", "variations": [ { "name": "Miltank", "description": "Miltank is a Normal type Pokémon introduced in Generation 2. It is known as the Milk Cow Pokémon.", "image": "images/miltank.jpg", "types": [ "Normal" ], "specie": "Milk Cow Pokémon", "height": 1.2, "weight": 75.5, "abilities": [ "Thick Fat", "Scrappy", "Sap Sipper" ], "stats": { "total": 490, "hp": 95, "attack": 80, "defense": 105, "speedAttack": 40, "speedDefense": 70, "speed": 100 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/miltank" }, { "num": 242, "name": "Blissey", "variations": [ { "name": "Blissey", "description": "Blissey is a Normal type Pokémon introduced in Generation 2. It is known as the Happiness Pokémon.", "image": "images/blissey.jpg", "types": [ "Normal" ], "specie": "Happiness Pokémon", "height": 1.5, "weight": 46.8, "abilities": [ "Natural Cure", "Serene Grace", "Healer" ], "stats": { "total": 540, "hp": 255, "attack": 10, "defense": 10, "speedAttack": 75, "speedDefense": 135, "speed": 55 }, "evolutions": [ "happiny", "chansey", "blissey" ] } ], "link": "https://pokemondb.net/pokedex/blissey" }, { "num": 243, "name": "Raikou", "variations": [ { "name": "Raikou", "description": "Raikou is an Electric type Pokémon introduced in Generation 2. It is known as the Thunder Pokémon.\nPrior to Generation 7, Raikou had Volt Absorb as its hidden ability.", "image": "images/raikou.jpg", "types": [ "Electric" ], "specie": "Thunder Pokémon", "height": 1.9, "weight": 178, "abilities": [ "Pressure", "Inner Focus" ], "stats": { "total": 580, "hp": 90, "attack": 85, "defense": 75, "speedAttack": 115, "speedDefense": 100, "speed": 115 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/raikou" }, { "num": 244, "name": "Entei", "variations": [ { "name": "Entei", "description": "Entei is a Fire type Pokémon introduced in Generation 2. It is known as the Volcano Pokémon.\nPrior to Generation 7, Entei had Flash Fire as its hidden ability.", "image": "images/entei.jpg", "types": [ "Fire" ], "specie": "Volcano Pokémon", "height": 2.1, "weight": 198, "abilities": [ "Pressure", "Inner Focus" ], "stats": { "total": 580, "hp": 115, "attack": 115, "defense": 85, "speedAttack": 90, "speedDefense": 75, "speed": 100 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/entei" }, { "num": 245, "name": "Suicune", "variations": [ { "name": "Suicune", "description": "Suicune is a Water type Pokémon introduced in Generation 2. It is known as the Aurora Pokémon.\nPrior to Generation 7, Suicune has Water Absorb as its hidden ability.", "image": "images/suicune.jpg", "types": [ "Water" ], "specie": "Aurora Pokémon", "height": 2, "weight": 187, "abilities": [ "Pressure", "Inner Focus" ], "stats": { "total": 580, "hp": 100, "attack": 75, "defense": 115, "speedAttack": 90, "speedDefense": 115, "speed": 85 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/suicune" }, { "num": 246, "name": "Larvitar", "variations": [ { "name": "Larvitar", "description": "Larvitar is a Rock/Ground type Pokémon introduced in Generation 2. It is known as the Rock Skin Pokémon.", "image": "images/larvitar.jpg", "types": [ "Rock", "Ground" ], "specie": "Rock Skin Pokémon", "height": 0.6, "weight": 72, "abilities": [ "Guts", "Sand Veil" ], "stats": { "total": 300, "hp": 50, "attack": 64, "defense": 50, "speedAttack": 45, "speedDefense": 50, "speed": 41 }, "evolutions": [ "larvitar", "pupitar", "tyranitar" ] } ], "link": "https://pokemondb.net/pokedex/larvitar" }, { "num": 247, "name": "Pupitar", "variations": [ { "name": "Pupitar", "description": "Pupitar is a Rock/Ground type Pokémon introduced in Generation 2. It is known as the Hard Shell Pokémon.", "image": "images/pupitar.jpg", "types": [ "Rock", "Ground" ], "specie": "Hard Shell Pokémon", "height": 1.2, "weight": 152, "abilities": [ "Shed Skin" ], "stats": { "total": 410, "hp": 70, "attack": 84, "defense": 70, "speedAttack": 65, "speedDefense": 70, "speed": 51 }, "evolutions": [ "larvitar", "pupitar", "tyranitar" ] } ], "link": "https://pokemondb.net/pokedex/pupitar" }, { "num": 248, "name": "Tyranitar", "variations": [ { "name": "Tyranitar", "description": "Tyranitar is a Rock/Dark type Pokémon introduced in Generation 2. It is known as the Armor Pokémon.\nTyranitar has a Mega Evolution, available from X & Y onwards.", "image": "images/tyranitar.jpg", "types": [ "Rock", "Dark" ], "specie": "Armor Pokémon", "height": 2, "weight": 202, "abilities": [ "Sand Stream", "Unnerve" ], "stats": { "total": 600, "hp": 100, "attack": 134, "defense": 110, "speedAttack": 95, "speedDefense": 100, "speed": 61 }, "evolutions": [ "larvitar", "pupitar", "tyranitar" ] }, { "name": "Mega Tyranitar", "description": "Tyranitar is a Rock/Dark type Pokémon introduced in Generation 2. It is known as the Armor Pokémon.\nTyranitar has a Mega Evolution, available from X & Y onwards.", "image": "images/tyranitar-mega.jpg", "types": [ "Rock", "Dark" ], "specie": "Armor Pokémon", "height": 2.5, "weight": 255, "abilities": [ "Sand Stream" ], "stats": { "total": 700, "hp": 100, "attack": 164, "defense": 150, "speedAttack": 95, "speedDefense": 120, "speed": 71 }, "evolutions": [ "larvitar", "pupitar", "tyranitar" ] } ], "link": "https://pokemondb.net/pokedex/tyranitar" }, { "num": 249, "name": "Lugia", "variations": [ { "name": "Lugia", "description": "Lugia is a Psychic/Flying type Pokémon introduced in Generation 2. It is known as the Diving Pokémon.", "image": "images/lugia.jpg", "types": [ "Psychic", "Flying" ], "specie": "Diving Pokémon", "height": 5.2, "weight": 216, "abilities": [ "Pressure", "Multiscale" ], "stats": { "total": 680, "hp": 106, "attack": 90, "defense": 130, "speedAttack": 90, "speedDefense": 154, "speed": 110 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/lugia" }, { "num": 250, "name": "Ho-oh", "variations": [ { "name": "Ho-oh", "description": "Ho-oh is a Fire/Flying type Pokémon introduced in Generation 2. It is known as the Rainbow Pokémon.", "image": "images/ho-oh.jpg", "types": [ "Fire", "Flying" ], "specie": "Rainbow Pokémon", "height": 3.8, "weight": 199, "abilities": [ "Pressure", "Regenerator" ], "stats": { "total": 680, "hp": 106, "attack": 130, "defense": 90, "speedAttack": 110, "speedDefense": 154, "speed": 90 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/ho-oh" }, { "num": 251, "name": "Celebi", "variations": [ { "name": "Celebi", "description": "Celebi is a Psychic/Grass type Pokémon introduced in Generation 2. It is known as the Time Travel Pokémon.", "image": "images/celebi.jpg", "types": [ "Psychic", "Grass" ], "specie": "Time Travel Pokémon", "height": 0.6, "weight": 5, "abilities": [ "Natural Cure" ], "stats": { "total": 600, "hp": 100, "attack": 100, "defense": 100, "speedAttack": 100, "speedDefense": 100, "speed": 100 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/celebi" }, { "num": 252, "name": "Treecko", "variations": [ { "name": "Treecko", "description": "Treecko is a Grass type Pokémon introduced in Generation 3. It is known as the Wood Gecko Pokémon.", "image": "images/treecko.jpg", "types": [ "Grass" ], "specie": "Wood Gecko Pokémon", "height": 0.5, "weight": 5, "abilities": [ "Overgrow", "Unburden" ], "stats": { "total": 310, "hp": 40, "attack": 45, "defense": 35, "speedAttack": 65, "speedDefense": 55, "speed": 70 }, "evolutions": [ "treecko", "grovyle", "sceptile" ] } ], "link": "https://pokemondb.net/pokedex/treecko" }, { "num": 253, "name": "Grovyle", "variations": [ { "name": "Grovyle", "description": "Grovyle is a Grass type Pokémon introduced in Generation 3. It is known as the Wood Gecko Pokémon.", "image": "images/grovyle.jpg", "types": [ "Grass" ], "specie": "Wood Gecko Pokémon", "height": 0.9, "weight": 21.6, "abilities": [ "Overgrow", "Unburden" ], "stats": { "total": 405, "hp": 50, "attack": 65, "defense": 45, "speedAttack": 85, "speedDefense": 65, "speed": 95 }, "evolutions": [ "treecko", "grovyle", "sceptile" ] } ], "link": "https://pokemondb.net/pokedex/grovyle" }, { "num": 254, "name": "Sceptile", "variations": [ { "name": "Sceptile", "description": "Sceptile is a Grass type Pokémon introduced in Generation 3. It is known as the Forest Pokémon.\nSceptile has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/sceptile.jpg", "types": [ "Grass" ], "specie": "Forest Pokémon", "height": 1.7, "weight": 52.2, "abilities": [ "Overgrow", "Unburden" ], "stats": { "total": 530, "hp": 70, "attack": 85, "defense": 65, "speedAttack": 105, "speedDefense": 85, "speed": 120 }, "evolutions": [ "treecko", "grovyle", "sceptile" ] }, { "name": "Mega Sceptile", "description": "Sceptile is a Grass type Pokémon introduced in Generation 3. It is known as the Forest Pokémon.\nSceptile has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/sceptile-mega.jpg", "types": [ "Grass", "Dragon" ], "specie": "Forest Pokémon", "height": 1.9, "weight": 55.2, "abilities": [ "Lightning Rod" ], "stats": { "total": 630, "hp": 70, "attack": 110, "defense": 75, "speedAttack": 145, "speedDefense": 85, "speed": 145 }, "evolutions": [ "treecko", "grovyle", "sceptile" ] } ], "link": "https://pokemondb.net/pokedex/sceptile" }, { "num": 255, "name": "Torchic", "variations": [ { "name": "Torchic", "description": "Torchic is a Fire type Pokémon introduced in Generation 3. It is known as the Chick Pokémon.", "image": "images/torchic.jpg", "types": [ "Fire" ], "specie": "Chick Pokémon", "height": 0.4, "weight": 2.5, "abilities": [ "Blaze", "Speed Boost" ], "stats": { "total": 310, "hp": 45, "attack": 60, "defense": 40, "speedAttack": 70, "speedDefense": 50, "speed": 45 }, "evolutions": [ "torchic", "combusken", "blaziken" ] } ], "link": "https://pokemondb.net/pokedex/torchic" }, { "num": 256, "name": "Combusken", "variations": [ { "name": "Combusken", "description": "Combusken is a Fire/Fighting type Pokémon introduced in Generation 3. It is known as the Young Fowl Pokémon.", "image": "images/combusken.jpg", "types": [ "Fire", "Fighting" ], "specie": "Young Fowl Pokémon", "height": 0.9, "weight": 19.5, "abilities": [ "Blaze", "Speed Boost" ], "stats": { "total": 405, "hp": 60, "attack": 85, "defense": 60, "speedAttack": 85, "speedDefense": 60, "speed": 55 }, "evolutions": [ "torchic", "combusken", "blaziken" ] } ], "link": "https://pokemondb.net/pokedex/combusken" }, { "num": 257, "name": "Blaziken", "variations": [ { "name": "Blaziken", "description": "Blaziken is a Fire/Fighting type Pokémon introduced in Generation 3. It is known as the Blaze Pokémon.\nBlaziken has a Mega Evolution, available from X & Y onwards.", "image": "images/blaziken.jpg", "types": [ "Fire", "Fighting" ], "specie": "Blaze Pokémon", "height": 1.9, "weight": 52, "abilities": [ "Blaze", "Speed Boost" ], "stats": { "total": 530, "hp": 80, "attack": 120, "defense": 70, "speedAttack": 110, "speedDefense": 70, "speed": 80 }, "evolutions": [ "torchic", "combusken", "blaziken" ] }, { "name": "Mega Blaziken", "description": "Blaziken is a Fire/Fighting type Pokémon introduced in Generation 3. It is known as the Blaze Pokémon.\nBlaziken has a Mega Evolution, available from X & Y onwards.", "image": "images/blaziken-mega.jpg", "types": [ "Fire", "Fighting" ], "specie": "Blaze Pokémon", "height": 1.9, "weight": 52, "abilities": [ "Speed Boost" ], "stats": { "total": 630, "hp": 80, "attack": 160, "defense": 80, "speedAttack": 130, "speedDefense": 80, "speed": 100 }, "evolutions": [ "torchic", "combusken", "blaziken" ] } ], "link": "https://pokemondb.net/pokedex/blaziken" }, { "num": 258, "name": "Mudkip", "variations": [ { "name": "Mudkip", "description": "Mudkip is a Water type Pokémon introduced in Generation 3. It is known as the Mud Fish Pokémon.", "image": "images/mudkip.jpg", "types": [ "Water" ], "specie": "Mud Fish Pokémon", "height": 0.4, "weight": 7.6, "abilities": [ "Torrent", "Damp" ], "stats": { "total": 310, "hp": 50, "attack": 70, "defense": 50, "speedAttack": 50, "speedDefense": 50, "speed": 40 }, "evolutions": [ "mudkip", "marshtomp", "swampert" ] } ], "link": "https://pokemondb.net/pokedex/mudkip" }, { "num": 259, "name": "Marshtomp", "variations": [ { "name": "Marshtomp", "description": "Marshtomp is a Water/Ground type Pokémon introduced in Generation 3. It is known as the Mud Fish Pokémon.", "image": "images/marshtomp.jpg", "types": [ "Water", "Ground" ], "specie": "Mud Fish Pokémon", "height": 0.7, "weight": 28, "abilities": [ "Torrent", "Damp" ], "stats": { "total": 405, "hp": 70, "attack": 85, "defense": 70, "speedAttack": 60, "speedDefense": 70, "speed": 50 }, "evolutions": [ "mudkip", "marshtomp", "swampert" ] } ], "link": "https://pokemondb.net/pokedex/marshtomp" }, { "num": 260, "name": "Swampert", "variations": [ { "name": "Swampert", "description": "Swampert is a Water/Ground type Pokémon introduced in Generation 3. It is known as the Mud Fish Pokémon.\nSwampert has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/swampert.jpg", "types": [ "Water", "Ground" ], "specie": "Mud Fish Pokémon", "height": 1.5, "weight": 81.9, "abilities": [ "Torrent", "Damp" ], "stats": { "total": 535, "hp": 100, "attack": 110, "defense": 90, "speedAttack": 85, "speedDefense": 90, "speed": 60 }, "evolutions": [ "mudkip", "marshtomp", "swampert" ] }, { "name": "Mega Swampert", "description": "Swampert is a Water/Ground type Pokémon introduced in Generation 3. It is known as the Mud Fish Pokémon.\nSwampert has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/swampert-mega.jpg", "types": [ "Water", "Ground" ], "specie": "Mud Fish Pokémon", "height": 1.9, "weight": 102, "abilities": [ "Swift Swim" ], "stats": { "total": 635, "hp": 100, "attack": 150, "defense": 110, "speedAttack": 95, "speedDefense": 110, "speed": 70 }, "evolutions": [ "mudkip", "marshtomp", "swampert" ] } ], "link": "https://pokemondb.net/pokedex/swampert" }, { "num": 261, "name": "Poochyena", "variations": [ { "name": "Poochyena", "description": "Poochyena is a Dark type Pokémon introduced in Generation 3. It is known as the Bite Pokémon.", "image": "images/poochyena.jpg", "types": [ "Dark" ], "specie": "Bite Pokémon", "height": 0.5, "weight": 13.6, "abilities": [ "Run Away", "Quick Feet", "Rattled" ], "stats": { "total": 220, "hp": 35, "attack": 55, "defense": 35, "speedAttack": 30, "speedDefense": 30, "speed": 35 }, "evolutions": [ "poochyena", "mightyena" ] } ], "link": "https://pokemondb.net/pokedex/poochyena" }, { "num": 262, "name": "Mightyena", "variations": [ { "name": "Mightyena", "description": "Mightyena is a Dark type Pokémon introduced in Generation 3. It is known as the Bite Pokémon.", "image": "images/mightyena.jpg", "types": [ "Dark" ], "specie": "Bite Pokémon", "height": 1, "weight": 37, "abilities": [ "Intimidate", "Quick Feet", "Moxie" ], "stats": { "total": 420, "hp": 70, "attack": 90, "defense": 70, "speedAttack": 60, "speedDefense": 60, "speed": 70 }, "evolutions": [ "poochyena", "mightyena" ] } ], "link": "https://pokemondb.net/pokedex/mightyena" }, { "num": 263, "name": "Zigzagoon", "variations": [ { "name": "Zigzagoon", "description": "Zigzagoon is a Normal type Pokémon introduced in Generation 3. It is known as the TinyRaccoon Pokémon.", "image": "images/zigzagoon.jpg", "types": [ "Normal" ], "specie": "TinyRaccoon Pokémon", "height": 0.4, "weight": 17.5, "abilities": [ "Pickup", "Gluttony", "Quick Feet" ], "stats": { "total": 240, "hp": 38, "attack": 30, "defense": 41, "speedAttack": 30, "speedDefense": 41, "speed": 60 }, "evolutions": [ "zigzagoon", "linoone" ] } ], "link": "https://pokemondb.net/pokedex/zigzagoon" }, { "num": 264, "name": "Linoone", "variations": [ { "name": "Linoone", "description": "Linoone is a Normal type Pokémon introduced in Generation 3. It is known as the Rushing Pokémon.", "image": "images/linoone.jpg", "types": [ "Normal" ], "specie": "Rushing Pokémon", "height": 0.5, "weight": 32.5, "abilities": [ "Pickup", "Gluttony", "Quick Feet" ], "stats": { "total": 420, "hp": 78, "attack": 70, "defense": 61, "speedAttack": 50, "speedDefense": 61, "speed": 100 }, "evolutions": [ "zigzagoon", "linoone" ] } ], "link": "https://pokemondb.net/pokedex/linoone" }, { "num": 265, "name": "Wurmple", "variations": [ { "name": "Wurmple", "description": "Wurmple is a Bug type Pokémon introduced in Generation 3. It is known as the Worm Pokémon.", "image": "images/wurmple.jpg", "types": [ "Bug" ], "specie": "Worm Pokémon", "height": 0.3, "weight": 3.6, "abilities": [ "Shield Dust", "Run Away" ], "stats": { "total": 195, "hp": 45, "attack": 45, "defense": 35, "speedAttack": 20, "speedDefense": 30, "speed": 20 }, "evolutions": [ "wurmple", "silcoon", "beautifly", "cascoon", "dustox" ] } ], "link": "https://pokemondb.net/pokedex/wurmple" }, { "num": 266, "name": "Silcoon", "variations": [ { "name": "Silcoon", "description": "Silcoon is a Bug type Pokémon introduced in Generation 3. It is known as the Cocoon Pokémon.", "image": "images/silcoon.jpg", "types": [ "Bug" ], "specie": "Cocoon Pokémon", "height": 0.6, "weight": 10, "abilities": [ "Shed Skin" ], "stats": { "total": 205, "hp": 50, "attack": 35, "defense": 55, "speedAttack": 25, "speedDefense": 25, "speed": 15 }, "evolutions": [ "wurmple", "silcoon", "beautifly", "cascoon", "dustox" ] } ], "link": "https://pokemondb.net/pokedex/silcoon" }, { "num": 267, "name": "Beautifly", "variations": [ { "name": "Beautifly", "description": "Beautifly is a Bug/Flying type Pokémon introduced in Generation 3. It is known as the Butterfly Pokémon.", "image": "images/beautifly.jpg", "types": [ "Bug", "Flying" ], "specie": "Butterfly Pokémon", "height": 1, "weight": 28.4, "abilities": [ "Swarm", "Rivalry" ], "stats": { "total": 395, "hp": 60, "attack": 70, "defense": 50, "speedAttack": 100, "speedDefense": 50, "speed": 65 }, "evolutions": [ "wurmple", "silcoon", "beautifly", "cascoon", "dustox" ] } ], "link": "https://pokemondb.net/pokedex/beautifly" }, { "num": 268, "name": "Cascoon", "variations": [ { "name": "Cascoon", "description": "Cascoon is a Bug type Pokémon introduced in Generation 3. It is known as the Cocoon Pokémon.", "image": "images/cascoon.jpg", "types": [ "Bug" ], "specie": "Cocoon Pokémon", "height": 0.7, "weight": 11.5, "abilities": [ "Shed Skin" ], "stats": { "total": 205, "hp": 50, "attack": 35, "defense": 55, "speedAttack": 25, "speedDefense": 25, "speed": 15 }, "evolutions": [ "wurmple", "silcoon", "beautifly", "cascoon", "dustox" ] } ], "link": "https://pokemondb.net/pokedex/cascoon" }, { "num": 269, "name": "Dustox", "variations": [ { "name": "Dustox", "description": "Dustox is a Bug/Poison type Pokémon introduced in Generation 3. It is known as the Poison Moth Pokémon.", "image": "images/dustox.jpg", "types": [ "Bug", "Poison" ], "specie": "Poison Moth Pokémon", "height": 1.2, "weight": 31.6, "abilities": [ "Shield Dust", "Compound Eyes" ], "stats": { "total": 385, "hp": 60, "attack": 50, "defense": 70, "speedAttack": 50, "speedDefense": 90, "speed": 65 }, "evolutions": [ "wurmple", "silcoon", "beautifly", "cascoon", "dustox" ] } ], "link": "https://pokemondb.net/pokedex/dustox" }, { "num": 270, "name": "Lotad", "variations": [ { "name": "Lotad", "description": "Lotad is a Water/Grass type Pokémon introduced in Generation 3. It is known as the Water Weed Pokémon.", "image": "images/lotad.jpg", "types": [ "Water", "Grass" ], "specie": "Water Weed Pokémon", "height": 0.5, "weight": 2.6, "abilities": [ "Swift Swim", "Rain Dish", "Own Tempo" ], "stats": { "total": 220, "hp": 40, "attack": 30, "defense": 30, "speedAttack": 40, "speedDefense": 50, "speed": 30 }, "evolutions": [ "lotad", "lombre", "ludicolo" ] } ], "link": "https://pokemondb.net/pokedex/lotad" }, { "num": 271, "name": "Lombre", "variations": [ { "name": "Lombre", "description": "Lombre is a Water/Grass type Pokémon introduced in Generation 3. It is known as the Jolly Pokémon.", "image": "images/lombre.jpg", "types": [ "Water", "Grass" ], "specie": "Jolly Pokémon", "height": 1.2, "weight": 32.5, "abilities": [ "Swift Swim", "Rain Dish", "Own Tempo" ], "stats": { "total": 340, "hp": 60, "attack": 50, "defense": 50, "speedAttack": 60, "speedDefense": 70, "speed": 50 }, "evolutions": [ "lotad", "lombre", "ludicolo" ] } ], "link": "https://pokemondb.net/pokedex/lombre" }, { "num": 272, "name": "Ludicolo", "variations": [ { "name": "Ludicolo", "description": "Ludicolo is a Water/Grass type Pokémon introduced in Generation 3. It is known as the Carefree Pokémon.", "image": "images/ludicolo.jpg", "types": [ "Water", "Grass" ], "specie": "Carefree Pokémon", "height": 1.5, "weight": 55, "abilities": [ "Swift Swim", "Rain Dish", "Own Tempo" ], "stats": { "total": 480, "hp": 80, "attack": 70, "defense": 70, "speedAttack": 90, "speedDefense": 100, "speed": 70 }, "evolutions": [ "lotad", "lombre", "ludicolo" ] } ], "link": "https://pokemondb.net/pokedex/ludicolo" }, { "num": 273, "name": "Seedot", "variations": [ { "name": "Seedot", "description": "Seedot is a Grass type Pokémon introduced in Generation 3. It is known as the Acorn Pokémon.", "image": "images/seedot.jpg", "types": [ "Grass" ], "specie": "Acorn Pokémon", "height": 0.5, "weight": 4, "abilities": [ "Chlorophyll", "Early Bird", "Pickpocket" ], "stats": { "total": 220, "hp": 40, "attack": 40, "defense": 50, "speedAttack": 30, "speedDefense": 30, "speed": 30 }, "evolutions": [ "seedot", "nuzleaf", "shiftry" ] } ], "link": "https://pokemondb.net/pokedex/seedot" }, { "num": 274, "name": "Nuzleaf", "variations": [ { "name": "Nuzleaf", "description": "Nuzleaf is a Grass/Dark type Pokémon introduced in Generation 3. It is known as the Wily Pokémon.", "image": "images/nuzleaf.jpg", "types": [ "Grass", "Dark" ], "specie": "Wily Pokémon", "height": 1, "weight": 28, "abilities": [ "Chlorophyll", "Early Bird", "Pickpocket" ], "stats": { "total": 340, "hp": 70, "attack": 70, "defense": 40, "speedAttack": 60, "speedDefense": 40, "speed": 60 }, "evolutions": [ "seedot", "nuzleaf", "shiftry" ] } ], "link": "https://pokemondb.net/pokedex/nuzleaf" }, { "num": 275, "name": "Shiftry", "variations": [ { "name": "Shiftry", "description": "Shiftry is a Grass/Dark type Pokémon introduced in Generation 3. It is known as the Wicked Pokémon.", "image": "images/shiftry.jpg", "types": [ "Grass", "Dark" ], "specie": "Wicked Pokémon", "height": 1.3, "weight": 59.6, "abilities": [ "Chlorophyll", "Early Bird", "Pickpocket" ], "stats": { "total": 480, "hp": 90, "attack": 100, "defense": 60, "speedAttack": 90, "speedDefense": 60, "speed": 80 }, "evolutions": [ "seedot", "nuzleaf", "shiftry" ] } ], "link": "https://pokemondb.net/pokedex/shiftry" }, { "num": 276, "name": "Taillow", "variations": [ { "name": "Taillow", "description": "Taillow is a Normal/Flying type Pokémon introduced in Generation 3. It is known as the TinySwallow Pokémon.", "image": "images/taillow.jpg", "types": [ "Normal", "Flying" ], "specie": "TinySwallow Pokémon", "height": 0.3, "weight": 2.3, "abilities": [ "Guts", "Scrappy" ], "stats": { "total": 270, "hp": 40, "attack": 55, "defense": 30, "speedAttack": 30, "speedDefense": 30, "speed": 85 }, "evolutions": [ "taillow", "swellow" ] } ], "link": "https://pokemondb.net/pokedex/taillow" }, { "num": 277, "name": "Swellow", "variations": [ { "name": "Swellow", "description": "Swellow is a Normal/Flying type Pokémon introduced in Generation 3. It is known as the Swallow Pokémon.", "image": "images/swellow.jpg", "types": [ "Normal", "Flying" ], "specie": "Swallow Pokémon", "height": 0.7, "weight": 19.8, "abilities": [ "Guts", "Scrappy" ], "stats": { "total": 455, "hp": 60, "attack": 85, "defense": 60, "speedAttack": 75, "speedDefense": 50, "speed": 125 }, "evolutions": [ "taillow", "swellow" ] } ], "link": "https://pokemondb.net/pokedex/swellow" }, { "num": 278, "name": "Wingull", "variations": [ { "name": "Wingull", "description": "Wingull is a Water/Flying type Pokémon introduced in Generation 3. It is known as the Seagull Pokémon.", "image": "images/wingull.jpg", "types": [ "Water", "Flying" ], "specie": "Seagull Pokémon", "height": 0.6, "weight": 9.5, "abilities": [ "Keen Eye", "Hydration", "Rain Dish" ], "stats": { "total": 270, "hp": 40, "attack": 30, "defense": 30, "speedAttack": 55, "speedDefense": 30, "speed": 85 }, "evolutions": [ "wingull", "pelipper" ] } ], "link": "https://pokemondb.net/pokedex/wingull" }, { "num": 279, "name": "Pelipper", "variations": [ { "name": "Pelipper", "description": "Pelipper is a Water/Flying type Pokémon introduced in Generation 3. It is known as the Water Bird Pokémon.", "image": "images/pelipper.jpg", "types": [ "Water", "Flying" ], "specie": "Water Bird Pokémon", "height": 1.2, "weight": 28, "abilities": [ "Keen Eye", "Drizzle", "Rain Dish" ], "stats": { "total": 440, "hp": 60, "attack": 50, "defense": 100, "speedAttack": 95, "speedDefense": 70, "speed": 65 }, "evolutions": [ "wingull", "pelipper" ] } ], "link": "https://pokemondb.net/pokedex/pelipper" }, { "num": 280, "name": "Ralts", "variations": [ { "name": "Ralts", "description": "Ralts is a Psychic/Fairy type Pokémon introduced in Generation 3. It is known as the Feeling Pokémon.", "image": "images/ralts.jpg", "types": [ "Psychic", "Fairy" ], "specie": "Feeling Pokémon", "height": 0.4, "weight": 6.6, "abilities": [ "Synchronize", "Trace", "Telepathy" ], "stats": { "total": 198, "hp": 28, "attack": 25, "defense": 25, "speedAttack": 45, "speedDefense": 35, "speed": 40 }, "evolutions": [ "ralts", "kirlia", "gardevoir", "gallade" ] } ], "link": "https://pokemondb.net/pokedex/ralts" }, { "num": 281, "name": "Kirlia", "variations": [ { "name": "Kirlia", "description": "Kirlia is a Psychic/Fairy type Pokémon introduced in Generation 3. It is known as the Emotion Pokémon.", "image": "images/kirlia.jpg", "types": [ "Psychic", "Fairy" ], "specie": "Emotion Pokémon", "height": 0.8, "weight": 20.2, "abilities": [ "Synchronize", "Trace", "Telepathy" ], "stats": { "total": 278, "hp": 38, "attack": 35, "defense": 35, "speedAttack": 65, "speedDefense": 55, "speed": 50 }, "evolutions": [ "ralts", "kirlia", "gardevoir", "gallade" ] } ], "link": "https://pokemondb.net/pokedex/kirlia" }, { "num": 282, "name": "Gardevoir", "variations": [ { "name": "Gardevoir", "description": "Gardevoir is a Psychic/Fairy type Pokémon introduced in Generation 3. It is known as the Embrace Pokémon.\nGardevoir has a Mega Evolution, available from X & Y onwards.", "image": "images/gardevoir.jpg", "types": [ "Psychic", "Fairy" ], "specie": "Embrace Pokémon", "height": 1.6, "weight": 48.4, "abilities": [ "Synchronize", "Trace", "Telepathy" ], "stats": { "total": 518, "hp": 68, "attack": 65, "defense": 65, "speedAttack": 125, "speedDefense": 115, "speed": 80 }, "evolutions": [ "ralts", "kirlia", "gardevoir", "gallade" ] }, { "name": "Mega Gardevoir", "description": "Gardevoir is a Psychic/Fairy type Pokémon introduced in Generation 3. It is known as the Embrace Pokémon.\nGardevoir has a Mega Evolution, available from X & Y onwards.", "image": "images/gardevoir-mega.jpg", "types": [ "Psychic", "Fairy" ], "specie": "Embrace Pokémon", "height": 1.6, "weight": 48.4, "abilities": [ "Pixilate" ], "stats": { "total": 618, "hp": 68, "attack": 85, "defense": 65, "speedAttack": 165, "speedDefense": 135, "speed": 100 }, "evolutions": [ "ralts", "kirlia", "gardevoir", "gallade" ] } ], "link": "https://pokemondb.net/pokedex/gardevoir" }, { "num": 283, "name": "Surskit", "variations": [ { "name": "Surskit", "description": "Surskit is a Bug/Water type Pokémon introduced in Generation 3. It is known as the Pond Skater Pokémon.", "image": "images/surskit.jpg", "types": [ "Bug", "Water" ], "specie": "Pond Skater Pokémon", "height": 0.5, "weight": 1.7, "abilities": [ "Swift Swim", "Rain Dish" ], "stats": { "total": 269, "hp": 40, "attack": 30, "defense": 32, "speedAttack": 50, "speedDefense": 52, "speed": 65 }, "evolutions": [ "surskit", "masquerain" ] } ], "link": "https://pokemondb.net/pokedex/surskit" }, { "num": 284, "name": "Masquerain", "variations": [ { "name": "Masquerain", "description": "Masquerain is a Bug/Flying type Pokémon introduced in Generation 3. It is known as the Eyeball Pokémon.", "image": "images/masquerain.jpg", "types": [ "Bug", "Flying" ], "specie": "Eyeball Pokémon", "height": 0.8, "weight": 3.6, "abilities": [ "Intimidate", "Unnerve" ], "stats": { "total": 454, "hp": 70, "attack": 60, "defense": 62, "speedAttack": 100, "speedDefense": 82, "speed": 80 }, "evolutions": [ "surskit", "masquerain" ] } ], "link": "https://pokemondb.net/pokedex/masquerain" }, { "num": 285, "name": "Shroomish", "variations": [ { "name": "Shroomish", "description": "Shroomish is a Grass type Pokémon introduced in Generation 3. It is known as the Mushroom Pokémon.", "image": "images/shroomish.jpg", "types": [ "Grass" ], "specie": "Mushroom Pokémon", "height": 0.4, "weight": 4.5, "abilities": [ "Effect Spore", "Poison Heal", "Quick Feet" ], "stats": { "total": 295, "hp": 60, "attack": 40, "defense": 60, "speedAttack": 40, "speedDefense": 60, "speed": 35 }, "evolutions": [ "shroomish", "breloom" ] } ], "link": "https://pokemondb.net/pokedex/shroomish" }, { "num": 286, "name": "Breloom", "variations": [ { "name": "Breloom", "description": "Breloom is a Grass/Fighting type Pokémon introduced in Generation 3. It is known as the Mushroom Pokémon.", "image": "images/breloom.jpg", "types": [ "Grass", "Fighting" ], "specie": "Mushroom Pokémon", "height": 1.2, "weight": 39.2, "abilities": [ "Effect Spore", "Poison Heal", "Technician" ], "stats": { "total": 460, "hp": 60, "attack": 130, "defense": 80, "speedAttack": 60, "speedDefense": 60, "speed": 70 }, "evolutions": [ "shroomish", "breloom" ] } ], "link": "https://pokemondb.net/pokedex/breloom" }, { "num": 287, "name": "Slakoth", "variations": [ { "name": "Slakoth", "description": "Slakoth is a Normal type Pokémon introduced in Generation 3. It is known as the Slacker Pokémon.", "image": "images/slakoth.jpg", "types": [ "Normal" ], "specie": "Slacker Pokémon", "height": 0.8, "weight": 24, "abilities": [ "Truant" ], "stats": { "total": 280, "hp": 60, "attack": 60, "defense": 60, "speedAttack": 35, "speedDefense": 35, "speed": 30 }, "evolutions": [ "slakoth", "vigoroth", "slaking" ] } ], "link": "https://pokemondb.net/pokedex/slakoth" }, { "num": 288, "name": "Vigoroth", "variations": [ { "name": "Vigoroth", "description": "Vigoroth is a Normal type Pokémon introduced in Generation 3. It is known as the Wild Monkey Pokémon.", "image": "images/vigoroth.jpg", "types": [ "Normal" ], "specie": "Wild Monkey Pokémon", "height": 1.4, "weight": 46.5, "abilities": [ "Vital Spirit" ], "stats": { "total": 440, "hp": 80, "attack": 80, "defense": 80, "speedAttack": 55, "speedDefense": 55, "speed": 90 }, "evolutions": [ "slakoth", "vigoroth", "slaking" ] } ], "link": "https://pokemondb.net/pokedex/vigoroth" }, { "num": 289, "name": "Slaking", "variations": [ { "name": "Slaking", "description": "Slaking is a Normal type Pokémon introduced in Generation 3. It is known as the Lazy Pokémon.", "image": "images/slaking.jpg", "types": [ "Normal" ], "specie": "Lazy Pokémon", "height": 2, "weight": 130.5, "abilities": [ "Truant" ], "stats": { "total": 670, "hp": 150, "attack": 160, "defense": 100, "speedAttack": 95, "speedDefense": 65, "speed": 100 }, "evolutions": [ "slakoth", "vigoroth", "slaking" ] } ], "link": "https://pokemondb.net/pokedex/slaking" }, { "num": 290, "name": "Nincada", "variations": [ { "name": "Nincada", "description": "Nincada is a Bug/Ground type Pokémon introduced in Generation 3. It is known as the Trainee Pokémon.", "image": "images/nincada.jpg", "types": [ "Bug", "Ground" ], "specie": "Trainee Pokémon", "height": 0.5, "weight": 5.5, "abilities": [ "Compound Eyes", "Run Away" ], "stats": { "total": 266, "hp": 31, "attack": 45, "defense": 90, "speedAttack": 30, "speedDefense": 30, "speed": 40 }, "evolutions": [ "nincada", "ninjask", "ninjask", "shedinja" ] } ], "link": "https://pokemondb.net/pokedex/nincada" }, { "num": 291, "name": "Ninjask", "variations": [ { "name": "Ninjask", "description": "Ninjask is a Bug/Flying type Pokémon introduced in Generation 3. It is known as the Ninja Pokémon.", "image": "images/ninjask.jpg", "types": [ "Bug", "Flying" ], "specie": "Ninja Pokémon", "height": 0.8, "weight": 12, "abilities": [ "Speed Boost", "Infiltrator" ], "stats": { "total": 456, "hp": 61, "attack": 90, "defense": 45, "speedAttack": 50, "speedDefense": 50, "speed": 160 }, "evolutions": [ "nincada", "ninjask", "ninjask", "shedinja" ] } ], "link": "https://pokemondb.net/pokedex/ninjask" }, { "num": 292, "name": "Shedinja", "variations": [ { "name": "Shedinja", "description": "Shedinja is a Bug/Ghost type Pokémon introduced in Generation 3. It is known as the Shed Pokémon.", "image": "images/shedinja.jpg", "types": [ "Bug", "Ghost" ], "specie": "Shed Pokémon", "height": 0.8, "weight": 1.2, "abilities": [ "Wonder Guard" ], "stats": { "total": 236, "hp": 1, "attack": 90, "defense": 45, "speedAttack": 30, "speedDefense": 30, "speed": 40 }, "evolutions": [ "nincada", "ninjask", "ninjask", "shedinja" ] } ], "link": "https://pokemondb.net/pokedex/shedinja" }, { "num": 293, "name": "Whismur", "variations": [ { "name": "Whismur", "description": "Whismur is a Normal type Pokémon introduced in Generation 3. It is known as the Whisper Pokémon.", "image": "images/whismur.jpg", "types": [ "Normal" ], "specie": "Whisper Pokémon", "height": 0.6, "weight": 16.3, "abilities": [ "Soundproof", "Rattled" ], "stats": { "total": 240, "hp": 64, "attack": 51, "defense": 23, "speedAttack": 51, "speedDefense": 23, "speed": 28 }, "evolutions": [ "whismur", "loudred", "exploud" ] } ], "link": "https://pokemondb.net/pokedex/whismur" }, { "num": 294, "name": "Loudred", "variations": [ { "name": "Loudred", "description": "Loudred is a Normal type Pokémon introduced in Generation 3. It is known as the Big Voice Pokémon.", "image": "images/loudred.jpg", "types": [ "Normal" ], "specie": "Big Voice Pokémon", "height": 1, "weight": 40.5, "abilities": [ "Soundproof", "Scrappy" ], "stats": { "total": 360, "hp": 84, "attack": 71, "defense": 43, "speedAttack": 71, "speedDefense": 43, "speed": 48 }, "evolutions": [ "whismur", "loudred", "exploud" ] } ], "link": "https://pokemondb.net/pokedex/loudred" }, { "num": 295, "name": "Exploud", "variations": [ { "name": "Exploud", "description": "Exploud is a Normal type Pokémon introduced in Generation 3. It is known as the Loud Noise Pokémon.", "image": "images/exploud.jpg", "types": [ "Normal" ], "specie": "Loud Noise Pokémon", "height": 1.5, "weight": 84, "abilities": [ "Soundproof", "Scrappy" ], "stats": { "total": 490, "hp": 104, "attack": 91, "defense": 63, "speedAttack": 91, "speedDefense": 73, "speed": 68 }, "evolutions": [ "whismur", "loudred", "exploud" ] } ], "link": "https://pokemondb.net/pokedex/exploud" }, { "num": 296, "name": "Makuhita", "variations": [ { "name": "Makuhita", "description": "Makuhita is a Fighting type Pokémon introduced in Generation 3. It is known as the Guts Pokémon.", "image": "images/makuhita.jpg", "types": [ "Fighting" ], "specie": "Guts Pokémon", "height": 1, "weight": 86.4, "abilities": [ "Thick Fat", "Guts", "Sheer Force" ], "stats": { "total": 237, "hp": 72, "attack": 60, "defense": 30, "speedAttack": 20, "speedDefense": 30, "speed": 25 }, "evolutions": [ "makuhita", "hariyama" ] } ], "link": "https://pokemondb.net/pokedex/makuhita" }, { "num": 297, "name": "Hariyama", "variations": [ { "name": "Hariyama", "description": "Hariyama is a Fighting type Pokémon introduced in Generation 3. It is known as the Arm Thrust Pokémon.", "image": "images/hariyama.jpg", "types": [ "Fighting" ], "specie": "Arm Thrust Pokémon", "height": 2.3, "weight": 253.8, "abilities": [ "Thick Fat", "Guts", "Sheer Force" ], "stats": { "total": 474, "hp": 144, "attack": 120, "defense": 60, "speedAttack": 40, "speedDefense": 60, "speed": 50 }, "evolutions": [ "makuhita", "hariyama" ] } ], "link": "https://pokemondb.net/pokedex/hariyama" }, { "num": 298, "name": "Azurill", "variations": [ { "name": "Azurill", "description": "Azurill is a Normal/Fairy type Pokémon introduced in Generation 3. It is known as the Polka Dot Pokémon.", "image": "images/azurill.jpg", "types": [ "Normal", "Fairy" ], "specie": "Polka Dot Pokémon", "height": 0.2, "weight": 2, "abilities": [ "Thick Fat", "Huge Power", "Sap Sipper" ], "stats": { "total": 190, "hp": 50, "attack": 20, "defense": 40, "speedAttack": 20, "speedDefense": 40, "speed": 20 }, "evolutions": [ "azurill", "marill", "azumarill" ] } ], "link": "https://pokemondb.net/pokedex/azurill" }, { "num": 299, "name": "Nosepass", "variations": [ { "name": "Nosepass", "description": "Nosepass is a Rock type Pokémon introduced in Generation 3. It is known as the Compass Pokémon.", "image": "images/nosepass.jpg", "types": [ "Rock" ], "specie": "Compass Pokémon", "height": 1, "weight": 97, "abilities": [ "Sturdy", "Magnet Pull", "Sand Force" ], "stats": { "total": 375, "hp": 30, "attack": 45, "defense": 135, "speedAttack": 45, "speedDefense": 90, "speed": 30 }, "evolutions": [ "nosepass", "probopass" ] } ], "link": "https://pokemondb.net/pokedex/nosepass" }, { "num": 300, "name": "Skitty", "variations": [ { "name": "Skitty", "description": "Skitty is a Normal type Pokémon introduced in Generation 3. It is known as the Kitten Pokémon.", "image": "images/skitty.jpg", "types": [ "Normal" ], "specie": "Kitten Pokémon", "height": 0.6, "weight": 11, "abilities": [ "Cute Charm", "Normalize", "Wonder Skin" ], "stats": { "total": 260, "hp": 50, "attack": 45, "defense": 45, "speedAttack": 35, "speedDefense": 35, "speed": 50 }, "evolutions": [ "skitty", "delcatty" ] } ], "link": "https://pokemondb.net/pokedex/skitty" }, { "num": 301, "name": "Delcatty", "variations": [ { "name": "Delcatty", "description": "Delcatty is a Normal type Pokémon introduced in Generation 3. It is known as the Prim Pokémon.", "image": "images/delcatty.jpg", "types": [ "Normal" ], "specie": "Prim Pokémon", "height": 1.1, "weight": 32.6, "abilities": [ "Cute Charm", "Normalize", "Wonder Skin" ], "stats": { "total": 400, "hp": 70, "attack": 65, "defense": 65, "speedAttack": 55, "speedDefense": 55, "speed": 90 }, "evolutions": [ "skitty", "delcatty" ] } ], "link": "https://pokemondb.net/pokedex/delcatty" }, { "num": 302, "name": "Sableye", "variations": [ { "name": "Sableye", "description": "Sableye is a Dark/Ghost type Pokémon introduced in Generation 3. It is known as the Darkness Pokémon.\nSableye has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/sableye.jpg", "types": [ "Dark", "Ghost" ], "specie": "Darkness Pokémon", "height": 0.5, "weight": 11, "abilities": [ "Keen Eye", "Stall", "Prankster" ], "stats": { "total": 380, "hp": 50, "attack": 75, "defense": 75, "speedAttack": 65, "speedDefense": 65, "speed": 50 }, "evolutions": [] }, { "name": "Mega Sableye", "description": "Sableye is a Dark/Ghost type Pokémon introduced in Generation 3. It is known as the Darkness Pokémon.\nSableye has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/sableye-mega.jpg", "types": [ "Dark", "Ghost" ], "specie": "Darkness Pokémon", "height": 0.5, "weight": 161, "abilities": [ "Magic Bounce" ], "stats": { "total": 480, "hp": 50, "attack": 85, "defense": 125, "speedAttack": 85, "speedDefense": 115, "speed": 20 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/sableye" }, { "num": 303, "name": "Mawile", "variations": [ { "name": "Mawile", "description": "Mawile is a Steel/Fairy type Pokémon introduced in Generation 3. It is known as the Deceiver Pokémon.\nMawile has a Mega Evolution, available from X & Y onwards.", "image": "images/mawile.jpg", "types": [ "Steel", "Fairy" ], "specie": "Deceiver Pokémon", "height": 0.6, "weight": 11.5, "abilities": [ "Hyper Cutter", "Intimidate", "Sheer Force" ], "stats": { "total": 380, "hp": 50, "attack": 85, "defense": 85, "speedAttack": 55, "speedDefense": 55, "speed": 50 }, "evolutions": [] }, { "name": "Mega Mawile", "description": "Mawile is a Steel/Fairy type Pokémon introduced in Generation 3. It is known as the Deceiver Pokémon.\nMawile has a Mega Evolution, available from X & Y onwards.", "image": "images/mawile-mega.jpg", "types": [ "Steel", "Fairy" ], "specie": "Deceiver Pokémon", "height": 1, "weight": 23.5, "abilities": [ "Huge Power" ], "stats": { "total": 480, "hp": 50, "attack": 105, "defense": 125, "speedAttack": 55, "speedDefense": 95, "speed": 50 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/mawile" }, { "num": 304, "name": "Aron", "variations": [ { "name": "Aron", "description": "Aron is a Steel/Rock type Pokémon introduced in Generation 3. It is known as the Iron Armor Pokémon.", "image": "images/aron.jpg", "types": [ "Steel", "Rock" ], "specie": "Iron Armor Pokémon", "height": 0.4, "weight": 60, "abilities": [ "Sturdy", "Rock Head", "Heavy Metal" ], "stats": { "total": 330, "hp": 50, "attack": 70, "defense": 100, "speedAttack": 40, "speedDefense": 40, "speed": 30 }, "evolutions": [ "aron", "lairon", "aggron" ] } ], "link": "https://pokemondb.net/pokedex/aron" }, { "num": 305, "name": "Lairon", "variations": [ { "name": "Lairon", "description": "Lairon is a Steel/Rock type Pokémon introduced in Generation 3. It is known as the Iron Armor Pokémon.", "image": "images/lairon.jpg", "types": [ "Steel", "Rock" ], "specie": "Iron Armor Pokémon", "height": 0.9, "weight": 120, "abilities": [ "Sturdy", "Rock Head", "Heavy Metal" ], "stats": { "total": 430, "hp": 60, "attack": 90, "defense": 140, "speedAttack": 50, "speedDefense": 50, "speed": 40 }, "evolutions": [ "aron", "lairon", "aggron" ] } ], "link": "https://pokemondb.net/pokedex/lairon" }, { "num": 306, "name": "Aggron", "variations": [ { "name": "Aggron", "description": "Aggron is a Steel/Rock type Pokémon introduced in Generation 3. It is known as the Iron Armor Pokémon.\nAggron has a Mega Evolution, available from X & Y onwards.", "image": "images/aggron.jpg", "types": [ "Steel", "Rock" ], "specie": "Iron Armor Pokémon", "height": 2.1, "weight": 360, "abilities": [ "Sturdy", "Rock Head", "Heavy Metal" ], "stats": { "total": 530, "hp": 70, "attack": 110, "defense": 180, "speedAttack": 60, "speedDefense": 60, "speed": 50 }, "evolutions": [ "aron", "lairon", "aggron" ] }, { "name": "Mega Aggron", "description": "Aggron is a Steel/Rock type Pokémon introduced in Generation 3. It is known as the Iron Armor Pokémon.\nAggron has a Mega Evolution, available from X & Y onwards.", "image": "images/aggron-mega.jpg", "types": [ "Steel" ], "specie": "Iron Armor Pokémon", "height": 2.2, "weight": 395, "abilities": [ "Filter" ], "stats": { "total": 630, "hp": 70, "attack": 140, "defense": 230, "speedAttack": 60, "speedDefense": 80, "speed": 50 }, "evolutions": [ "aron", "lairon", "aggron" ] } ], "link": "https://pokemondb.net/pokedex/aggron" }, { "num": 307, "name": "Meditite", "variations": [ { "name": "Meditite", "description": "Meditite is a Fighting/Psychic type Pokémon introduced in Generation 3. It is known as the Meditate Pokémon.", "image": "images/meditite.jpg", "types": [ "Fighting", "Psychic" ], "specie": "Meditate Pokémon", "height": 0.6, "weight": 11.2, "abilities": [ "Pure Power", "Telepathy" ], "stats": { "total": 280, "hp": 30, "attack": 40, "defense": 55, "speedAttack": 40, "speedDefense": 55, "speed": 60 }, "evolutions": [ "meditite", "medicham" ] } ], "link": "https://pokemondb.net/pokedex/meditite" }, { "num": 308, "name": "Medicham", "variations": [ { "name": "Medicham", "description": "Medicham is a Fighting/Psychic type Pokémon introduced in Generation 3. It is known as the Meditate Pokémon.\nMedicham has a Mega Evolution, available from X & Y onwards.", "image": "images/medicham.jpg", "types": [ "Fighting", "Psychic" ], "specie": "Meditate Pokémon", "height": 1.3, "weight": 31.5, "abilities": [ "Pure Power", "Telepathy" ], "stats": { "total": 410, "hp": 60, "attack": 60, "defense": 75, "speedAttack": 60, "speedDefense": 75, "speed": 80 }, "evolutions": [ "meditite", "medicham" ] }, { "name": "Mega Medicham", "description": "Medicham is a Fighting/Psychic type Pokémon introduced in Generation 3. It is known as the Meditate Pokémon.\nMedicham has a Mega Evolution, available from X & Y onwards.", "image": "images/medicham-mega.jpg", "types": [ "Fighting", "Psychic" ], "specie": "Meditate Pokémon", "height": 1.3, "weight": 31.5, "abilities": [ "Pure Power" ], "stats": { "total": 510, "hp": 60, "attack": 100, "defense": 85, "speedAttack": 80, "speedDefense": 85, "speed": 100 }, "evolutions": [ "meditite", "medicham" ] } ], "link": "https://pokemondb.net/pokedex/medicham" }, { "num": 309, "name": "Electrike", "variations": [ { "name": "Electrike", "description": "Electrike is an Electric type Pokémon introduced in Generation 3. It is known as the Lightning Pokémon.", "image": "images/electrike.jpg", "types": [ "Electric" ], "specie": "Lightning Pokémon", "height": 0.6, "weight": 15.2, "abilities": [ "Static", "Lightning Rod", "Minus" ], "stats": { "total": 295, "hp": 40, "attack": 45, "defense": 40, "speedAttack": 65, "speedDefense": 40, "speed": 65 }, "evolutions": [ "electrike", "manectric" ] } ], "link": "https://pokemondb.net/pokedex/electrike" }, { "num": 310, "name": "Manectric", "variations": [ { "name": "Manectric", "description": "Manectric is an Electric type Pokémon introduced in Generation 3. It is known as the Discharge Pokémon.\nManectric has a Mega Evolution, available from X & Y onwards.", "image": "images/manectric.jpg", "types": [ "Electric" ], "specie": "Discharge Pokémon", "height": 1.5, "weight": 40.2, "abilities": [ "Static", "Lightning Rod", "Minus" ], "stats": { "total": 475, "hp": 70, "attack": 75, "defense": 60, "speedAttack": 105, "speedDefense": 60, "speed": 105 }, "evolutions": [ "electrike", "manectric" ] }, { "name": "Mega Manectric", "description": "Manectric is an Electric type Pokémon introduced in Generation 3. It is known as the Discharge Pokémon.\nManectric has a Mega Evolution, available from X & Y onwards.", "image": "images/manectric-mega.jpg", "types": [ "Electric" ], "specie": "Discharge Pokémon", "height": 1.8, "weight": 44, "abilities": [ "Intimidate" ], "stats": { "total": 575, "hp": 70, "attack": 75, "defense": 80, "speedAttack": 135, "speedDefense": 80, "speed": 135 }, "evolutions": [ "electrike", "manectric" ] } ], "link": "https://pokemondb.net/pokedex/manectric" }, { "num": 311, "name": "Plusle", "variations": [ { "name": "Plusle", "description": "Plusle is an Electric type Pokémon introduced in Generation 3. It is known as the Cheering Pokémon.", "image": "images/plusle.jpg", "types": [ "Electric" ], "specie": "Cheering Pokémon", "height": 0.4, "weight": 4.2, "abilities": [ "Plus", "Lightning Rod" ], "stats": { "total": 405, "hp": 60, "attack": 50, "defense": 40, "speedAttack": 85, "speedDefense": 75, "speed": 95 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/plusle" }, { "num": 312, "name": "Minun", "variations": [ { "name": "Minun", "description": "Minun is an Electric type Pokémon introduced in Generation 3. It is known as the Cheering Pokémon.", "image": "images/minun.jpg", "types": [ "Electric" ], "specie": "Cheering Pokémon", "height": 0.4, "weight": 4.2, "abilities": [ "Minus", "Volt Absorb" ], "stats": { "total": 405, "hp": 60, "attack": 40, "defense": 50, "speedAttack": 75, "speedDefense": 85, "speed": 95 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/minun" }, { "num": 313, "name": "Volbeat", "variations": [ { "name": "Volbeat", "description": "Volbeat is a Bug type Pokémon introduced in Generation 3. It is known as the Firefly Pokémon.", "image": "images/volbeat.jpg", "types": [ "Bug" ], "specie": "Firefly Pokémon", "height": 0.7, "weight": 17.7, "abilities": [ "Illuminate", "Swarm", "Prankster" ], "stats": { "total": 430, "hp": 65, "attack": 73, "defense": 75, "speedAttack": 47, "speedDefense": 85, "speed": 85 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/volbeat" }, { "num": 314, "name": "Illumise", "variations": [ { "name": "Illumise", "description": "Illumise is a Bug type Pokémon introduced in Generation 3. It is known as the Firefly Pokémon.", "image": "images/illumise.jpg", "types": [ "Bug" ], "specie": "Firefly Pokémon", "height": 0.6, "weight": 17.7, "abilities": [ "Oblivious", "Tinted Lens", "Prankster" ], "stats": { "total": 430, "hp": 65, "attack": 47, "defense": 75, "speedAttack": 73, "speedDefense": 85, "speed": 85 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/illumise" }, { "num": 315, "name": "Roselia", "variations": [ { "name": "Roselia", "description": "Roselia is a Grass/Poison type Pokémon introduced in Generation 3. It is known as the Thorn Pokémon.", "image": "images/roselia.jpg", "types": [ "Grass", "Poison" ], "specie": "Thorn Pokémon", "height": 0.3, "weight": 2, "abilities": [ "Natural Cure", "Poison Point", "Leaf Guard" ], "stats": { "total": 400, "hp": 50, "attack": 60, "defense": 45, "speedAttack": 100, "speedDefense": 80, "speed": 65 }, "evolutions": [ "budew", "roselia", "roserade" ] } ], "link": "https://pokemondb.net/pokedex/roselia" }, { "num": 316, "name": "Gulpin", "variations": [ { "name": "Gulpin", "description": "Gulpin is a Poison type Pokémon introduced in Generation 3. It is known as the Stomach Pokémon.", "image": "images/gulpin.jpg", "types": [ "Poison" ], "specie": "Stomach Pokémon", "height": 0.4, "weight": 10.3, "abilities": [ "Liquid Ooze", "Sticky Hold", "Gluttony" ], "stats": { "total": 302, "hp": 70, "attack": 43, "defense": 53, "speedAttack": 43, "speedDefense": 53, "speed": 40 }, "evolutions": [ "gulpin", "swalot" ] } ], "link": "https://pokemondb.net/pokedex/gulpin" }, { "num": 317, "name": "Swalot", "variations": [ { "name": "Swalot", "description": "Swalot is a Poison type Pokémon introduced in Generation 3. It is known as the Poison Bag Pokémon.", "image": "images/swalot.jpg", "types": [ "Poison" ], "specie": "Poison Bag Pokémon", "height": 1.7, "weight": 80, "abilities": [ "Liquid Ooze", "Sticky Hold", "Gluttony" ], "stats": { "total": 467, "hp": 100, "attack": 73, "defense": 83, "speedAttack": 73, "speedDefense": 83, "speed": 55 }, "evolutions": [ "gulpin", "swalot" ] } ], "link": "https://pokemondb.net/pokedex/swalot" }, { "num": 318, "name": "Carvanha", "variations": [ { "name": "Carvanha", "description": "Carvanha is a Water/Dark type Pokémon introduced in Generation 3. It is known as the Savage Pokémon.", "image": "images/carvanha.jpg", "types": [ "Water", "Dark" ], "specie": "Savage Pokémon", "height": 0.8, "weight": 20.8, "abilities": [ "Rough Skin", "Speed Boost" ], "stats": { "total": 305, "hp": 45, "attack": 90, "defense": 20, "speedAttack": 65, "speedDefense": 20, "speed": 65 }, "evolutions": [ "carvanha", "sharpedo" ] } ], "link": "https://pokemondb.net/pokedex/carvanha" }, { "num": 319, "name": "Sharpedo", "variations": [ { "name": "Sharpedo", "description": "Sharpedo is a Water/Dark type Pokémon introduced in Generation 3. It is known as the Brutal Pokémon.\nSharpedo has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/sharpedo.jpg", "types": [ "Water", "Dark" ], "specie": "Brutal Pokémon", "height": 1.8, "weight": 88.8, "abilities": [ "Rough Skin", "Speed Boost" ], "stats": { "total": 460, "hp": 70, "attack": 120, "defense": 40, "speedAttack": 95, "speedDefense": 40, "speed": 95 }, "evolutions": [ "carvanha", "sharpedo" ] }, { "name": "Mega Sharpedo", "description": "Sharpedo is a Water/Dark type Pokémon introduced in Generation 3. It is known as the Brutal Pokémon.\nSharpedo has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/sharpedo-mega.jpg", "types": [ "Water", "Dark" ], "specie": "Brutal Pokémon", "height": 2.5, "weight": 130.3, "abilities": [ "Strong Jaw" ], "stats": { "total": 560, "hp": 70, "attack": 140, "defense": 70, "speedAttack": 110, "speedDefense": 65, "speed": 105 }, "evolutions": [ "carvanha", "sharpedo" ] } ], "link": "https://pokemondb.net/pokedex/sharpedo" }, { "num": 320, "name": "Wailmer", "variations": [ { "name": "Wailmer", "description": "Wailmer is a Water type Pokémon introduced in Generation 3. It is known as the Ball Whale Pokémon.", "image": "images/wailmer.jpg", "types": [ "Water" ], "specie": "Ball Whale Pokémon", "height": 2, "weight": 130, "abilities": [ "Water Veil", "Oblivious", "Pressure" ], "stats": { "total": 400, "hp": 130, "attack": 70, "defense": 35, "speedAttack": 70, "speedDefense": 35, "speed": 60 }, "evolutions": [ "wailmer", "wailord" ] } ], "link": "https://pokemondb.net/pokedex/wailmer" }, { "num": 321, "name": "Wailord", "variations": [ { "name": "Wailord", "description": "Wailord is a Water type Pokémon introduced in Generation 3. It is known as the Float Whale Pokémon.", "image": "images/wailord.jpg", "types": [ "Water" ], "specie": "Float Whale Pokémon", "height": 14.5, "weight": 398, "abilities": [ "Water Veil", "Oblivious", "Pressure" ], "stats": { "total": 500, "hp": 170, "attack": 90, "defense": 45, "speedAttack": 90, "speedDefense": 45, "speed": 60 }, "evolutions": [ "wailmer", "wailord" ] } ], "link": "https://pokemondb.net/pokedex/wailord" }, { "num": 322, "name": "Numel", "variations": [ { "name": "Numel", "description": "Numel is a Fire/Ground type Pokémon introduced in Generation 3. It is known as the Numb Pokémon.", "image": "images/numel.jpg", "types": [ "Fire", "Ground" ], "specie": "Numb Pokémon", "height": 0.7, "weight": 24, "abilities": [ "Oblivious", "Simple", "Own Tempo" ], "stats": { "total": 305, "hp": 60, "attack": 60, "defense": 40, "speedAttack": 65, "speedDefense": 45, "speed": 35 }, "evolutions": [ "numel", "camerupt" ] } ], "link": "https://pokemondb.net/pokedex/numel" }, { "num": 323, "name": "Camerupt", "variations": [ { "name": "Camerupt", "description": "Camerupt is a Fire/Ground type Pokémon introduced in Generation 3. It is known as the Eruption Pokémon.\nCamerupt has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/camerupt.jpg", "types": [ "Fire", "Ground" ], "specie": "Eruption Pokémon", "height": 1.9, "weight": 220, "abilities": [ "Magma Armor", "Solid Rock", "Anger Point" ], "stats": { "total": 460, "hp": 70, "attack": 100, "defense": 70, "speedAttack": 105, "speedDefense": 75, "speed": 40 }, "evolutions": [ "numel", "camerupt" ] }, { "name": "Mega Camerupt", "description": "Camerupt is a Fire/Ground type Pokémon introduced in Generation 3. It is known as the Eruption Pokémon.\nCamerupt has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/camerupt-mega.jpg", "types": [ "Fire", "Ground" ], "specie": "Eruption Pokémon", "height": 2.5, "weight": 320.5, "abilities": [ "Sheer Force" ], "stats": { "total": 560, "hp": 70, "attack": 120, "defense": 100, "speedAttack": 145, "speedDefense": 105, "speed": 20 }, "evolutions": [ "numel", "camerupt" ] } ], "link": "https://pokemondb.net/pokedex/camerupt" }, { "num": 324, "name": "Torkoal", "variations": [ { "name": "Torkoal", "description": "Torkoal is a Fire type Pokémon introduced in Generation 3. It is known as the Coal Pokémon.", "image": "images/torkoal.jpg", "types": [ "Fire" ], "specie": "Coal Pokémon", "height": 0.5, "weight": 80.4, "abilities": [ "White Smoke", "Drought", "Shell Armor" ], "stats": { "total": 470, "hp": 70, "attack": 85, "defense": 140, "speedAttack": 85, "speedDefense": 70, "speed": 20 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/torkoal" }, { "num": 325, "name": "Spoink", "variations": [ { "name": "Spoink", "description": "Spoink is a Psychic type Pokémon introduced in Generation 3. It is known as the Bounce Pokémon.", "image": "images/spoink.jpg", "types": [ "Psychic" ], "specie": "Bounce Pokémon", "height": 0.7, "weight": 30.6, "abilities": [ "Thick Fat", "Own Tempo", "Gluttony" ], "stats": { "total": 330, "hp": 60, "attack": 25, "defense": 35, "speedAttack": 70, "speedDefense": 80, "speed": 60 }, "evolutions": [ "spoink", "grumpig" ] } ], "link": "https://pokemondb.net/pokedex/spoink" }, { "num": 326, "name": "Grumpig", "variations": [ { "name": "Grumpig", "description": "Grumpig is a Psychic type Pokémon introduced in Generation 3. It is known as the Manipulate Pokémon.", "image": "images/grumpig.jpg", "types": [ "Psychic" ], "specie": "Manipulate Pokémon", "height": 0.9, "weight": 71.5, "abilities": [ "Thick Fat", "Own Tempo", "Gluttony" ], "stats": { "total": 470, "hp": 80, "attack": 45, "defense": 65, "speedAttack": 90, "speedDefense": 110, "speed": 80 }, "evolutions": [ "spoink", "grumpig" ] } ], "link": "https://pokemondb.net/pokedex/grumpig" }, { "num": 327, "name": "Spinda", "variations": [ { "name": "Spinda", "description": "Spinda is a Normal type Pokémon introduced in Generation 3. It is known as the Spot Panda Pokémon.", "image": "images/spinda.jpg", "types": [ "Normal" ], "specie": "Spot Panda Pokémon", "height": 1.1, "weight": 5, "abilities": [ "Own Tempo", "Tangled Feet", "Contrary" ], "stats": { "total": 360, "hp": 60, "attack": 60, "defense": 60, "speedAttack": 60, "speedDefense": 60, "speed": 60 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/spinda" }, { "num": 328, "name": "Trapinch", "variations": [ { "name": "Trapinch", "description": "Trapinch is a Ground type Pokémon introduced in Generation 3. It is known as the Ant Pit Pokémon.", "image": "images/trapinch.jpg", "types": [ "Ground" ], "specie": "Ant Pit Pokémon", "height": 0.7, "weight": 15, "abilities": [ "Hyper Cutter", "Arena Trap", "Sheer Force" ], "stats": { "total": 290, "hp": 45, "attack": 100, "defense": 45, "speedAttack": 45, "speedDefense": 45, "speed": 10 }, "evolutions": [ "trapinch", "vibrava", "flygon" ] } ], "link": "https://pokemondb.net/pokedex/trapinch" }, { "num": 329, "name": "Vibrava", "variations": [ { "name": "Vibrava", "description": "Vibrava is a Ground/Dragon type Pokémon introduced in Generation 3. It is known as the Vibration Pokémon.", "image": "images/vibrava.jpg", "types": [ "Ground", "Dragon" ], "specie": "Vibration Pokémon", "height": 1.1, "weight": 15.3, "abilities": [ "Levitate" ], "stats": { "total": 340, "hp": 50, "attack": 70, "defense": 50, "speedAttack": 50, "speedDefense": 50, "speed": 70 }, "evolutions": [ "trapinch", "vibrava", "flygon" ] } ], "link": "https://pokemondb.net/pokedex/vibrava" }, { "num": 330, "name": "Flygon", "variations": [ { "name": "Flygon", "description": "Flygon is a Ground/Dragon type Pokémon introduced in Generation 3. It is known as the Mystic Pokémon.", "image": "images/flygon.jpg", "types": [ "Ground", "Dragon" ], "specie": "Mystic Pokémon", "height": 2, "weight": 82, "abilities": [ "Levitate" ], "stats": { "total": 520, "hp": 80, "attack": 100, "defense": 80, "speedAttack": 80, "speedDefense": 80, "speed": 100 }, "evolutions": [ "trapinch", "vibrava", "flygon" ] } ], "link": "https://pokemondb.net/pokedex/flygon" }, { "num": 331, "name": "Cacnea", "variations": [ { "name": "Cacnea", "description": "Cacnea is a Grass type Pokémon introduced in Generation 3. It is known as the Cactus Pokémon.", "image": "images/cacnea.jpg", "types": [ "Grass" ], "specie": "Cactus Pokémon", "height": 0.4, "weight": 51.3, "abilities": [ "Sand Veil", "Water Absorb" ], "stats": { "total": 335, "hp": 50, "attack": 85, "defense": 40, "speedAttack": 85, "speedDefense": 40, "speed": 35 }, "evolutions": [ "cacnea", "cacturne" ] } ], "link": "https://pokemondb.net/pokedex/cacnea" }, { "num": 332, "name": "Cacturne", "variations": [ { "name": "Cacturne", "description": "Cacturne is a Grass/Dark type Pokémon introduced in Generation 3. It is known as the Scarecrow Pokémon.", "image": "images/cacturne.jpg", "types": [ "Grass", "Dark" ], "specie": "Scarecrow Pokémon", "height": 1.3, "weight": 77.4, "abilities": [ "Sand Veil", "Water Absorb" ], "stats": { "total": 475, "hp": 70, "attack": 115, "defense": 60, "speedAttack": 115, "speedDefense": 60, "speed": 55 }, "evolutions": [ "cacnea", "cacturne" ] } ], "link": "https://pokemondb.net/pokedex/cacturne" }, { "num": 333, "name": "Swablu", "variations": [ { "name": "Swablu", "description": "Swablu is a Normal/Flying type Pokémon introduced in Generation 3. It is known as the Cotton Bird Pokémon.", "image": "images/swablu.jpg", "types": [ "Normal", "Flying" ], "specie": "Cotton Bird Pokémon", "height": 0.4, "weight": 1.2, "abilities": [ "Natural Cure", "Cloud Nine" ], "stats": { "total": 310, "hp": 45, "attack": 40, "defense": 60, "speedAttack": 40, "speedDefense": 75, "speed": 50 }, "evolutions": [ "swablu", "altaria" ] } ], "link": "https://pokemondb.net/pokedex/swablu" }, { "num": 334, "name": "Altaria", "variations": [ { "name": "Altaria", "description": "Altaria is a Dragon/Flying type Pokémon introduced in Generation 3. It is known as the Humming Pokémon.\nAltaria has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/altaria.jpg", "types": [ "Dragon", "Flying" ], "specie": "Humming Pokémon", "height": 1.1, "weight": 20.6, "abilities": [ "Natural Cure", "Cloud Nine" ], "stats": { "total": 490, "hp": 75, "attack": 70, "defense": 90, "speedAttack": 70, "speedDefense": 105, "speed": 80 }, "evolutions": [ "swablu", "altaria" ] }, { "name": "Mega Altaria", "description": "Altaria is a Dragon/Flying type Pokémon introduced in Generation 3. It is known as the Humming Pokémon.\nAltaria has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/altaria-mega.jpg", "types": [ "Dragon", "Fairy" ], "specie": "Humming Pokémon", "height": 1.5, "weight": 20.6, "abilities": [ "Pixilate" ], "stats": { "total": 590, "hp": 75, "attack": 110, "defense": 110, "speedAttack": 110, "speedDefense": 105, "speed": 80 }, "evolutions": [ "swablu", "altaria" ] } ], "link": "https://pokemondb.net/pokedex/altaria" }, { "num": 335, "name": "Zangoose", "variations": [ { "name": "Zangoose", "description": "Zangoose is a Normal type Pokémon introduced in Generation 3. It is known as the Cat Ferret Pokémon.", "image": "images/zangoose.jpg", "types": [ "Normal" ], "specie": "Cat Ferret Pokémon", "height": 1.3, "weight": 40.3, "abilities": [ "Immunity", "Toxic Boost" ], "stats": { "total": 458, "hp": 73, "attack": 115, "defense": 60, "speedAttack": 60, "speedDefense": 60, "speed": 90 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/zangoose" }, { "num": 336, "name": "Seviper", "variations": [ { "name": "Seviper", "description": "Seviper is a Poison type Pokémon introduced in Generation 3. It is known as the Fang Snake Pokémon.", "image": "images/seviper.jpg", "types": [ "Poison" ], "specie": "Fang Snake Pokémon", "height": 2.7, "weight": 52.5, "abilities": [ "Shed Skin", "Infiltrator" ], "stats": { "total": 458, "hp": 73, "attack": 100, "defense": 60, "speedAttack": 100, "speedDefense": 60, "speed": 65 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/seviper" }, { "num": 337, "name": "Lunatone", "variations": [ { "name": "Lunatone", "description": "Lunatone is a Rock/Psychic type Pokémon introduced in Generation 3. It is known as the Meteorite Pokémon.", "image": "images/lunatone.jpg", "types": [ "Rock", "Psychic" ], "specie": "Meteorite Pokémon", "height": 1, "weight": 168, "abilities": [ "Levitate" ], "stats": { "total": 460, "hp": 90, "attack": 55, "defense": 65, "speedAttack": 95, "speedDefense": 85, "speed": 70 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/lunatone" }, { "num": 338, "name": "Solrock", "variations": [ { "name": "Solrock", "description": "Solrock is a Rock/Psychic type Pokémon introduced in Generation 3. It is known as the Meteorite Pokémon.", "image": "images/solrock.jpg", "types": [ "Rock", "Psychic" ], "specie": "Meteorite Pokémon", "height": 1.2, "weight": 154, "abilities": [ "Levitate" ], "stats": { "total": 460, "hp": 90, "attack": 95, "defense": 85, "speedAttack": 55, "speedDefense": 65, "speed": 70 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/solrock" }, { "num": 339, "name": "Barboach", "variations": [ { "name": "Barboach", "description": "Barboach is a Water/Ground type Pokémon introduced in Generation 3. It is known as the Whiskers Pokémon.", "image": "images/barboach.jpg", "types": [ "Water", "Ground" ], "specie": "Whiskers Pokémon", "height": 0.4, "weight": 1.9, "abilities": [ "Oblivious", "Anticipation", "Hydration" ], "stats": { "total": 288, "hp": 50, "attack": 48, "defense": 43, "speedAttack": 46, "speedDefense": 41, "speed": 60 }, "evolutions": [ "barboach", "whiscash" ] } ], "link": "https://pokemondb.net/pokedex/barboach" }, { "num": 340, "name": "Whiscash", "variations": [ { "name": "Whiscash", "description": "Whiscash is a Water/Ground type Pokémon introduced in Generation 3. It is known as the Whiskers Pokémon.", "image": "images/whiscash.jpg", "types": [ "Water", "Ground" ], "specie": "Whiskers Pokémon", "height": 0.9, "weight": 23.6, "abilities": [ "Oblivious", "Anticipation", "Hydration" ], "stats": { "total": 468, "hp": 110, "attack": 78, "defense": 73, "speedAttack": 76, "speedDefense": 71, "speed": 60 }, "evolutions": [ "barboach", "whiscash" ] } ], "link": "https://pokemondb.net/pokedex/whiscash" }, { "num": 341, "name": "Corphish", "variations": [ { "name": "Corphish", "description": "Corphish is a Water type Pokémon introduced in Generation 3. It is known as the Ruffian Pokémon.", "image": "images/corphish.jpg", "types": [ "Water" ], "specie": "Ruffian Pokémon", "height": 0.6, "weight": 11.5, "abilities": [ "Hyper Cutter", "Shell Armor", "Adaptability" ], "stats": { "total": 308, "hp": 43, "attack": 80, "defense": 65, "speedAttack": 50, "speedDefense": 35, "speed": 35 }, "evolutions": [ "corphish", "crawdaunt" ] } ], "link": "https://pokemondb.net/pokedex/corphish" }, { "num": 342, "name": "Crawdaunt", "variations": [ { "name": "Crawdaunt", "description": "Crawdaunt is a Water/Dark type Pokémon introduced in Generation 3. It is known as the Rogue Pokémon.", "image": "images/crawdaunt.jpg", "types": [ "Water", "Dark" ], "specie": "Rogue Pokémon", "height": 1.1, "weight": 32.8, "abilities": [ "Hyper Cutter", "Shell Armor", "Adaptability" ], "stats": { "total": 468, "hp": 63, "attack": 120, "defense": 85, "speedAttack": 90, "speedDefense": 55, "speed": 55 }, "evolutions": [ "corphish", "crawdaunt" ] } ], "link": "https://pokemondb.net/pokedex/crawdaunt" }, { "num": 343, "name": "Baltoy", "variations": [ { "name": "Baltoy", "description": "Baltoy is a Ground/Psychic type Pokémon introduced in Generation 3. It is known as the Clay Doll Pokémon.", "image": "images/baltoy.jpg", "types": [ "Ground", "Psychic" ], "specie": "Clay Doll Pokémon", "height": 0.5, "weight": 21.5, "abilities": [ "Levitate" ], "stats": { "total": 300, "hp": 40, "attack": 40, "defense": 55, "speedAttack": 40, "speedDefense": 70, "speed": 55 }, "evolutions": [ "baltoy", "claydol" ] } ], "link": "https://pokemondb.net/pokedex/baltoy" }, { "num": 344, "name": "Claydol", "variations": [ { "name": "Claydol", "description": "Claydol is a Ground/Psychic type Pokémon introduced in Generation 3. It is known as the Clay Doll Pokémon.", "image": "images/claydol.jpg", "types": [ "Ground", "Psychic" ], "specie": "Clay Doll Pokémon", "height": 1.5, "weight": 108, "abilities": [ "Levitate" ], "stats": { "total": 500, "hp": 60, "attack": 70, "defense": 105, "speedAttack": 70, "speedDefense": 120, "speed": 75 }, "evolutions": [ "baltoy", "claydol" ] } ], "link": "https://pokemondb.net/pokedex/claydol" }, { "num": 345, "name": "Lileep", "variations": [ { "name": "Lileep", "description": "Lileep is a Rock/Grass type Pokémon introduced in Generation 3. It is known as the Sea Lily Pokémon.", "image": "images/lileep.jpg", "types": [ "Rock", "Grass" ], "specie": "Sea Lily Pokémon", "height": 1, "weight": 23.8, "abilities": [ "Suction Cups", "Storm Drain" ], "stats": { "total": 355, "hp": 66, "attack": 41, "defense": 77, "speedAttack": 61, "speedDefense": 87, "speed": 23 }, "evolutions": [ "lileep", "cradily" ] } ], "link": "https://pokemondb.net/pokedex/lileep" }, { "num": 346, "name": "Cradily", "variations": [ { "name": "Cradily", "description": "Cradily is a Rock/Grass type Pokémon introduced in Generation 3. It is known as the Barnacle Pokémon.", "image": "images/cradily.jpg", "types": [ "Rock", "Grass" ], "specie": "Barnacle Pokémon", "height": 1.5, "weight": 60.4, "abilities": [ "Suction Cups", "Storm Drain" ], "stats": { "total": 495, "hp": 86, "attack": 81, "defense": 97, "speedAttack": 81, "speedDefense": 107, "speed": 43 }, "evolutions": [ "lileep", "cradily" ] } ], "link": "https://pokemondb.net/pokedex/cradily" }, { "num": 347, "name": "Anorith", "variations": [ { "name": "Anorith", "description": "Anorith is a Rock/Bug type Pokémon introduced in Generation 3. It is known as the Old Shrimp Pokémon.", "image": "images/anorith.jpg", "types": [ "Rock", "Bug" ], "specie": "Old Shrimp Pokémon", "height": 0.7, "weight": 12.5, "abilities": [ "Battle Armor", "Swift Swim" ], "stats": { "total": 355, "hp": 45, "attack": 95, "defense": 50, "speedAttack": 40, "speedDefense": 50, "speed": 75 }, "evolutions": [ "anorith", "armaldo" ] } ], "link": "https://pokemondb.net/pokedex/anorith" }, { "num": 348, "name": "Armaldo", "variations": [ { "name": "Armaldo", "description": "Armaldo is a Rock/Bug type Pokémon introduced in Generation 3. It is known as the Plate Pokémon.", "image": "images/armaldo.jpg", "types": [ "Rock", "Bug" ], "specie": "Plate Pokémon", "height": 1.5, "weight": 68.2, "abilities": [ "Battle Armor", "Swift Swim" ], "stats": { "total": 495, "hp": 75, "attack": 125, "defense": 100, "speedAttack": 70, "speedDefense": 80, "speed": 45 }, "evolutions": [ "anorith", "armaldo" ] } ], "link": "https://pokemondb.net/pokedex/armaldo" }, { "num": 349, "name": "Feebas", "variations": [ { "name": "Feebas", "description": "Feebas is a Water type Pokémon introduced in Generation 3. It is known as the Fish Pokémon.\nFeebas is very rare in Ruby/Sapphire/Emerald, being available by fishing in one of only six random squares on Route 119. Similarly in Diamond/Pearl/Platinum it can only be found in one of four random squares in Mt. Coronet.\nFeebas also has a unique evolution. In RSE, DPPt and Omega Ruby/Alpha Sapphire it will evolve into Milotic by maximizing its Beauty stat with Poffins. From Black/White onwards Feebas will evolve when traded holding a Prism Scale, however it can also evolve if migrated from an earlier game already having maximum Beauty.", "image": "images/feebas.jpg", "types": [ "Water" ], "specie": "Fish Pokémon", "height": 0.6, "weight": 7.4, "abilities": [ "Swift Swim", "Oblivious", "Adaptability" ], "stats": { "total": 200, "hp": 20, "attack": 15, "defense": 20, "speedAttack": 10, "speedDefense": 55, "speed": 80 }, "evolutions": [ "feebas", "milotic" ] } ], "link": "https://pokemondb.net/pokedex/feebas" }, { "num": 350, "name": "Milotic", "variations": [ { "name": "Milotic", "description": "Milotic is a Water type Pokémon introduced in Generation 3. It is known as the Tender Pokémon.\nMilotic evolves from Feebas when traded holding a Prism Scale or, prior to Black/White, by maximizing its Beauty stat with Poffins.", "image": "images/milotic.jpg", "types": [ "Water" ], "specie": "Tender Pokémon", "height": 6.2, "weight": 162, "abilities": [ "Marvel Scale", "Competitive", "Cute Charm" ], "stats": { "total": 540, "hp": 95, "attack": 60, "defense": 79, "speedAttack": 100, "speedDefense": 125, "speed": 81 }, "evolutions": [ "feebas", "milotic" ] } ], "link": "https://pokemondb.net/pokedex/milotic" }, { "num": 351, "name": "Castform", "variations": [ { "name": "Castform", "description": "Castform is a Normal type Pokémon introduced in Generation 3. It is known as the Weather Pokémon.", "image": "images/castform.jpg", "types": [ "Normal" ], "specie": "Weather Pokémon", "height": 0.3, "weight": 0.8, "abilities": [ "Forecast" ], "stats": { "total": 420, "hp": 70, "attack": 70, "defense": 70, "speedAttack": 70, "speedDefense": 70, "speed": 70 }, "evolutions": [] }, { "name": "Sunny Form", "description": "Castform is a Normal type Pokémon introduced in Generation 3. It is known as the Weather Pokémon.", "image": "images/castform-sunny.png", "types": [ "Fire" ], "specie": "Weather Pokémon", "height": 0.3, "weight": 0.8, "abilities": [ "Forecast" ], "stats": { "total": 420, "hp": 70, "attack": 70, "defense": 70, "speedAttack": 70, "speedDefense": 70, "speed": 70 }, "evolutions": [] }, { "name": "Rainy Form", "description": "Castform is a Normal type Pokémon introduced in Generation 3. It is known as the Weather Pokémon.", "image": "images/castform-rainy.png", "types": [ "Water" ], "specie": "Weather Pokémon", "height": 0.3, "weight": 0.8, "abilities": [ "Forecast" ], "stats": { "total": 420, "hp": 70, "attack": 70, "defense": 70, "speedAttack": 70, "speedDefense": 70, "speed": 70 }, "evolutions": [] }, { "name": "Snowy Form", "description": "Castform is a Normal type Pokémon introduced in Generation 3. It is known as the Weather Pokémon.", "image": "images/castform-snowy.png", "types": [ "Ice" ], "specie": "Weather Pokémon", "height": 0.3, "weight": 0.8, "abilities": [ "Forecast" ], "stats": { "total": 420, "hp": 70, "attack": 70, "defense": 70, "speedAttack": 70, "speedDefense": 70, "speed": 70 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/castform" }, { "num": 352, "name": "Kecleon", "variations": [ { "name": "Kecleon", "description": "Kecleon is a Normal type Pokémon introduced in Generation 3. It is known as the Color Swap Pokémon.", "image": "images/kecleon.jpg", "types": [ "Normal" ], "specie": "Color Swap Pokémon", "height": 1, "weight": 22, "abilities": [ "Color Change", "Protean" ], "stats": { "total": 440, "hp": 60, "attack": 90, "defense": 70, "speedAttack": 60, "speedDefense": 120, "speed": 40 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/kecleon" }, { "num": 353, "name": "Shuppet", "variations": [ { "name": "Shuppet", "description": "Shuppet is a Ghost type Pokémon introduced in Generation 3. It is known as the Puppet Pokémon.", "image": "images/shuppet.jpg", "types": [ "Ghost" ], "specie": "Puppet Pokémon", "height": 0.6, "weight": 2.3, "abilities": [ "Insomnia", "Frisk", "Cursed Body" ], "stats": { "total": 295, "hp": 44, "attack": 75, "defense": 35, "speedAttack": 63, "speedDefense": 33, "speed": 45 }, "evolutions": [ "shuppet", "banette" ] } ], "link": "https://pokemondb.net/pokedex/shuppet" }, { "num": 354, "name": "Banette", "variations": [ { "name": "Banette", "description": "Banette is a Ghost type Pokémon introduced in Generation 3. It is known as the Marionette Pokémon.\nBanette has a Mega Evolution, available from X & Y onwards.", "image": "images/banette.jpg", "types": [ "Ghost" ], "specie": "Marionette Pokémon", "height": 1.1, "weight": 12.5, "abilities": [ "Insomnia", "Frisk", "Cursed Body" ], "stats": { "total": 455, "hp": 64, "attack": 115, "defense": 65, "speedAttack": 83, "speedDefense": 63, "speed": 65 }, "evolutions": [ "shuppet", "banette" ] }, { "name": "Mega Banette", "description": "Banette is a Ghost type Pokémon introduced in Generation 3. It is known as the Marionette Pokémon.\nBanette has a Mega Evolution, available from X & Y onwards.", "image": "images/banette-mega.jpg", "types": [ "Ghost" ], "specie": "Marionette Pokémon", "height": 1.2, "weight": 13, "abilities": [ "Prankster" ], "stats": { "total": 555, "hp": 64, "attack": 165, "defense": 75, "speedAttack": 93, "speedDefense": 83, "speed": 75 }, "evolutions": [ "shuppet", "banette" ] } ], "link": "https://pokemondb.net/pokedex/banette" }, { "num": 355, "name": "Duskull", "variations": [ { "name": "Duskull", "description": "Duskull is a Ghost type Pokémon introduced in Generation 3. It is known as the Requiem Pokémon.", "image": "images/duskull.jpg", "types": [ "Ghost" ], "specie": "Requiem Pokémon", "height": 0.8, "weight": 15, "abilities": [ "Levitate", "Frisk" ], "stats": { "total": 295, "hp": 20, "attack": 40, "defense": 90, "speedAttack": 30, "speedDefense": 90, "speed": 25 }, "evolutions": [ "duskull", "dusclops", "dusknoir" ] } ], "link": "https://pokemondb.net/pokedex/duskull" }, { "num": 356, "name": "Dusclops", "variations": [ { "name": "Dusclops", "description": "Dusclops is a Ghost type Pokémon introduced in Generation 3. It is known as the Beckon Pokémon.", "image": "images/dusclops.jpg", "types": [ "Ghost" ], "specie": "Beckon Pokémon", "height": 1.6, "weight": 30.6, "abilities": [ "Pressure", "Frisk" ], "stats": { "total": 455, "hp": 40, "attack": 70, "defense": 130, "speedAttack": 60, "speedDefense": 130, "speed": 25 }, "evolutions": [ "duskull", "dusclops", "dusknoir" ] } ], "link": "https://pokemondb.net/pokedex/dusclops" }, { "num": 357, "name": "Tropius", "variations": [ { "name": "Tropius", "description": "Tropius is a Grass/Flying type Pokémon introduced in Generation 3. It is known as the Fruit Pokémon.", "image": "images/tropius.jpg", "types": [ "Grass", "Flying" ], "specie": "Fruit Pokémon", "height": 2, "weight": 100, "abilities": [ "Chlorophyll", "Solar Power", "Harvest" ], "stats": { "total": 460, "hp": 99, "attack": 68, "defense": 83, "speedAttack": 72, "speedDefense": 87, "speed": 51 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/tropius" }, { "num": 358, "name": "Chimecho", "variations": [ { "name": "Chimecho", "description": "Chimecho is a Psychic type Pokémon introduced in Generation 3. It is known as the Wind Chime Pokémon.", "image": "images/chimecho.jpg", "types": [ "Psychic" ], "specie": "Wind Chime Pokémon", "height": 0.6, "weight": 1, "abilities": [ "Levitate" ], "stats": { "total": 455, "hp": 75, "attack": 50, "defense": 80, "speedAttack": 95, "speedDefense": 90, "speed": 65 }, "evolutions": [ "chingling", "chimecho" ] } ], "link": "https://pokemondb.net/pokedex/chimecho" }, { "num": 359, "name": "Absol", "variations": [ { "name": "Absol", "description": "Absol is a Dark type Pokémon introduced in Generation 3. It is known as the Disaster Pokémon.\nAbsol has a Mega Evolution, available from X & Y onwards.", "image": "images/absol.jpg", "types": [ "Dark" ], "specie": "Disaster Pokémon", "height": 1.2, "weight": 47, "abilities": [ "Pressure", "Super Luck", "Justified" ], "stats": { "total": 465, "hp": 65, "attack": 130, "defense": 60, "speedAttack": 75, "speedDefense": 60, "speed": 75 }, "evolutions": [] }, { "name": "Mega Absol", "description": "Absol is a Dark type Pokémon introduced in Generation 3. It is known as the Disaster Pokémon.\nAbsol has a Mega Evolution, available from X & Y onwards.", "image": "images/absol-mega.jpg", "types": [ "Dark" ], "specie": "Disaster Pokémon", "height": 1.2, "weight": 49, "abilities": [ "Magic Bounce" ], "stats": { "total": 565, "hp": 65, "attack": 150, "defense": 60, "speedAttack": 115, "speedDefense": 60, "speed": 115 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/absol" }, { "num": 360, "name": "Wynaut", "variations": [ { "name": "Wynaut", "description": "Wynaut is a Psychic type Pokémon introduced in Generation 3. It is known as the Bright Pokémon.", "image": "images/wynaut.jpg", "types": [ "Psychic" ], "specie": "Bright Pokémon", "height": 0.6, "weight": 14, "abilities": [ "Shadow Tag", "Telepathy" ], "stats": { "total": 260, "hp": 95, "attack": 23, "defense": 48, "speedAttack": 23, "speedDefense": 48, "speed": 23 }, "evolutions": [ "wynaut", "wobbuffet" ] } ], "link": "https://pokemondb.net/pokedex/wynaut" }, { "num": 361, "name": "Snorunt", "variations": [ { "name": "Snorunt", "description": "Snorunt is an Ice type Pokémon introduced in Generation 3. It is known as the Snow Hat Pokémon.", "image": "images/snorunt.jpg", "types": [ "Ice" ], "specie": "Snow Hat Pokémon", "height": 0.7, "weight": 16.8, "abilities": [ "Inner Focus", "Ice Body", "Moody" ], "stats": { "total": 300, "hp": 50, "attack": 50, "defense": 50, "speedAttack": 50, "speedDefense": 50, "speed": 50 }, "evolutions": [ "snorunt", "glalie", "froslass" ] } ], "link": "https://pokemondb.net/pokedex/snorunt" }, { "num": 362, "name": "Glalie", "variations": [ { "name": "Glalie", "description": "Glalie is an Ice type Pokémon introduced in Generation 3. It is known as the Face Pokémon.\nGlalie has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/glalie.jpg", "types": [ "Ice" ], "specie": "Face Pokémon", "height": 1.5, "weight": 256.5, "abilities": [ "Inner Focus", "Ice Body", "Moody" ], "stats": { "total": 480, "hp": 80, "attack": 80, "defense": 80, "speedAttack": 80, "speedDefense": 80, "speed": 80 }, "evolutions": [ "snorunt", "glalie", "froslass" ] }, { "name": "Mega Glalie", "description": "Glalie is an Ice type Pokémon introduced in Generation 3. It is known as the Face Pokémon.\nGlalie has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/glalie-mega.jpg", "types": [ "Ice" ], "specie": "Face Pokémon", "height": 2.1, "weight": 350.2, "abilities": [ "Refrigerate" ], "stats": { "total": 580, "hp": 80, "attack": 120, "defense": 80, "speedAttack": 120, "speedDefense": 80, "speed": 100 }, "evolutions": [ "snorunt", "glalie", "froslass" ] } ], "link": "https://pokemondb.net/pokedex/glalie" }, { "num": 363, "name": "Spheal", "variations": [ { "name": "Spheal", "description": "Spheal is an Ice/Water type Pokémon introduced in Generation 3. It is known as the Clap Pokémon.", "image": "images/spheal.jpg", "types": [ "Ice", "Water" ], "specie": "Clap Pokémon", "height": 0.8, "weight": 39.5, "abilities": [ "Thick Fat", "Ice Body", "Oblivious" ], "stats": { "total": 290, "hp": 70, "attack": 40, "defense": 50, "speedAttack": 55, "speedDefense": 50, "speed": 25 }, "evolutions": [ "spheal", "sealeo", "walrein" ] } ], "link": "https://pokemondb.net/pokedex/spheal" }, { "num": 364, "name": "Sealeo", "variations": [ { "name": "Sealeo", "description": "Sealeo is an Ice/Water type Pokémon introduced in Generation 3. It is known as the Ball Roll Pokémon.", "image": "images/sealeo.jpg", "types": [ "Ice", "Water" ], "specie": "Ball Roll Pokémon", "height": 1.1, "weight": 87.6, "abilities": [ "Thick Fat", "Ice Body", "Oblivious" ], "stats": { "total": 410, "hp": 90, "attack": 60, "defense": 70, "speedAttack": 75, "speedDefense": 70, "speed": 45 }, "evolutions": [ "spheal", "sealeo", "walrein" ] } ], "link": "https://pokemondb.net/pokedex/sealeo" }, { "num": 365, "name": "Walrein", "variations": [ { "name": "Walrein", "description": "Walrein is an Ice/Water type Pokémon introduced in Generation 3. It is known as the Ice Break Pokémon.", "image": "images/walrein.jpg", "types": [ "Ice", "Water" ], "specie": "Ice Break Pokémon", "height": 1.4, "weight": 150.6, "abilities": [ "Thick Fat", "Ice Body", "Oblivious" ], "stats": { "total": 530, "hp": 110, "attack": 80, "defense": 90, "speedAttack": 95, "speedDefense": 90, "speed": 65 }, "evolutions": [ "spheal", "sealeo", "walrein" ] } ], "link": "https://pokemondb.net/pokedex/walrein" }, { "num": 366, "name": "Clamperl", "variations": [ { "name": "Clamperl", "description": "Clamperl is a Water type Pokémon introduced in Generation 3. It is known as the Bivalve Pokémon.", "image": "images/clamperl.jpg", "types": [ "Water" ], "specie": "Bivalve Pokémon", "height": 0.4, "weight": 52.5, "abilities": [ "Shell Armor", "Rattled" ], "stats": { "total": 345, "hp": 35, "attack": 64, "defense": 85, "speedAttack": 74, "speedDefense": 55, "speed": 32 }, "evolutions": [ "clamperl", "huntail", "gorebyss" ] } ], "link": "https://pokemondb.net/pokedex/clamperl" }, { "num": 367, "name": "Huntail", "variations": [ { "name": "Huntail", "description": "Huntail is a Water type Pokémon introduced in Generation 3. It is known as the Deep Sea Pokémon.", "image": "images/huntail.jpg", "types": [ "Water" ], "specie": "Deep Sea Pokémon", "height": 1.7, "weight": 27, "abilities": [ "Swift Swim", "Water Veil" ], "stats": { "total": 485, "hp": 55, "attack": 104, "defense": 105, "speedAttack": 94, "speedDefense": 75, "speed": 52 }, "evolutions": [ "clamperl", "huntail", "gorebyss" ] } ], "link": "https://pokemondb.net/pokedex/huntail" }, { "num": 368, "name": "Gorebyss", "variations": [ { "name": "Gorebyss", "description": "Gorebyss is a Water type Pokémon introduced in Generation 3. It is known as the South Sea Pokémon.", "image": "images/gorebyss.jpg", "types": [ "Water" ], "specie": "South Sea Pokémon", "height": 1.8, "weight": 22.6, "abilities": [ "Swift Swim", "Hydration" ], "stats": { "total": 485, "hp": 55, "attack": 84, "defense": 105, "speedAttack": 114, "speedDefense": 75, "speed": 52 }, "evolutions": [ "clamperl", "huntail", "gorebyss" ] } ], "link": "https://pokemondb.net/pokedex/gorebyss" }, { "num": 369, "name": "Relicanth", "variations": [ { "name": "Relicanth", "description": "Relicanth is a Water/Rock type Pokémon introduced in Generation 3. It is known as the Longevity Pokémon.", "image": "images/relicanth.jpg", "types": [ "Water", "Rock" ], "specie": "Longevity Pokémon", "height": 1, "weight": 23.4, "abilities": [ "Swift Swim", "Rock Head", "Sturdy" ], "stats": { "total": 485, "hp": 100, "attack": 90, "defense": 130, "speedAttack": 45, "speedDefense": 65, "speed": 55 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/relicanth" }, { "num": 370, "name": "Luvdisc", "variations": [ { "name": "Luvdisc", "description": "Luvdisc is a Water type Pokémon introduced in Generation 3. It is known as the Rendezvous Pokémon.", "image": "images/luvdisc.jpg", "types": [ "Water" ], "specie": "Rendezvous Pokémon", "height": 0.6, "weight": 8.7, "abilities": [ "Swift Swim", "Hydration" ], "stats": { "total": 330, "hp": 43, "attack": 30, "defense": 55, "speedAttack": 40, "speedDefense": 65, "speed": 97 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/luvdisc" }, { "num": 371, "name": "Bagon", "variations": [ { "name": "Bagon", "description": "Bagon is a Dragon type Pokémon introduced in Generation 3. It is known as the Rock Head Pokémon.", "image": "images/bagon.jpg", "types": [ "Dragon" ], "specie": "Rock Head Pokémon", "height": 0.6, "weight": 42.1, "abilities": [ "Rock Head", "Sheer Force" ], "stats": { "total": 300, "hp": 45, "attack": 75, "defense": 60, "speedAttack": 40, "speedDefense": 30, "speed": 50 }, "evolutions": [ "bagon", "shelgon", "salamence" ] } ], "link": "https://pokemondb.net/pokedex/bagon" }, { "num": 372, "name": "Shelgon", "variations": [ { "name": "Shelgon", "description": "Shelgon is a Dragon type Pokémon introduced in Generation 3. It is known as the Endurance Pokémon.", "image": "images/shelgon.jpg", "types": [ "Dragon" ], "specie": "Endurance Pokémon", "height": 1.1, "weight": 110.5, "abilities": [ "Rock Head", "Overcoat" ], "stats": { "total": 420, "hp": 65, "attack": 95, "defense": 100, "speedAttack": 60, "speedDefense": 50, "speed": 50 }, "evolutions": [ "bagon", "shelgon", "salamence" ] } ], "link": "https://pokemondb.net/pokedex/shelgon" }, { "num": 373, "name": "Salamence", "variations": [ { "name": "Salamence", "description": "Salamence is a Dragon/Flying type Pokémon introduced in Generation 3. It is known as the Dragon Pokémon.\nSalamence has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/salamence.jpg", "types": [ "Dragon", "Flying" ], "specie": "Dragon Pokémon", "height": 1.5, "weight": 102.6, "abilities": [ "Intimidate", "Moxie" ], "stats": { "total": 600, "hp": 95, "attack": 135, "defense": 80, "speedAttack": 110, "speedDefense": 80, "speed": 100 }, "evolutions": [ "bagon", "shelgon", "salamence" ] }, { "name": "Mega Salamence", "description": "Salamence is a Dragon/Flying type Pokémon introduced in Generation 3. It is known as the Dragon Pokémon.\nSalamence has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/salamence-mega.jpg", "types": [ "Dragon", "Flying" ], "specie": "Dragon Pokémon", "height": 1.8, "weight": 112.6, "abilities": [ "Aerilate" ], "stats": { "total": 700, "hp": 95, "attack": 145, "defense": 130, "speedAttack": 120, "speedDefense": 90, "speed": 120 }, "evolutions": [ "bagon", "shelgon", "salamence" ] } ], "link": "https://pokemondb.net/pokedex/salamence" }, { "num": 374, "name": "Beldum", "variations": [ { "name": "Beldum", "description": "Beldum is a Steel/Psychic type Pokémon introduced in Generation 3. It is known as the Iron Ball Pokémon.", "image": "images/beldum.jpg", "types": [ "Steel", "Psychic" ], "specie": "Iron Ball Pokémon", "height": 0.6, "weight": 95.2, "abilities": [ "Clear Body", "Light Metal" ], "stats": { "total": 300, "hp": 40, "attack": 55, "defense": 80, "speedAttack": 35, "speedDefense": 60, "speed": 30 }, "evolutions": [ "beldum", "metang", "metagross" ] } ], "link": "https://pokemondb.net/pokedex/beldum" }, { "num": 375, "name": "Metang", "variations": [ { "name": "Metang", "description": "Metang is a Steel/Psychic type Pokémon introduced in Generation 3. It is known as the Iron Claw Pokémon.", "image": "images/metang.jpg", "types": [ "Steel", "Psychic" ], "specie": "Iron Claw Pokémon", "height": 1.2, "weight": 202.5, "abilities": [ "Clear Body", "Light Metal" ], "stats": { "total": 420, "hp": 60, "attack": 75, "defense": 100, "speedAttack": 55, "speedDefense": 80, "speed": 50 }, "evolutions": [ "beldum", "metang", "metagross" ] } ], "link": "https://pokemondb.net/pokedex/metang" }, { "num": 376, "name": "Metagross", "variations": [ { "name": "Metagross", "description": "Metagross is a Steel/Psychic type Pokémon introduced in Generation 3. It is known as the Iron Leg Pokémon.\nMetagross has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/metagross.jpg", "types": [ "Steel", "Psychic" ], "specie": "Iron Leg Pokémon", "height": 1.6, "weight": 550, "abilities": [ "Clear Body", "Light Metal" ], "stats": { "total": 600, "hp": 80, "attack": 135, "defense": 130, "speedAttack": 95, "speedDefense": 90, "speed": 70 }, "evolutions": [ "beldum", "metang", "metagross" ] }, { "name": "Mega Metagross", "description": "Metagross is a Steel/Psychic type Pokémon introduced in Generation 3. It is known as the Iron Leg Pokémon.\nMetagross has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/metagross-mega.jpg", "types": [ "Steel", "Psychic" ], "specie": "Iron Leg Pokémon", "height": 2.5, "weight": 942.9, "abilities": [ "Tough Claws" ], "stats": { "total": 700, "hp": 80, "attack": 145, "defense": 150, "speedAttack": 105, "speedDefense": 110, "speed": 110 }, "evolutions": [ "beldum", "metang", "metagross" ] } ], "link": "https://pokemondb.net/pokedex/metagross" }, { "num": 377, "name": "Regirock", "variations": [ { "name": "Regirock", "description": "Regirock is a Rock type Pokémon introduced in Generation 3. It is known as the Rock Peak Pokémon.", "image": "images/regirock.jpg", "types": [ "Rock" ], "specie": "Rock Peak Pokémon", "height": 1.7, "weight": 230, "abilities": [ "Clear Body", "Sturdy" ], "stats": { "total": 580, "hp": 80, "attack": 100, "defense": 200, "speedAttack": 50, "speedDefense": 100, "speed": 50 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/regirock" }, { "num": 378, "name": "Regice", "variations": [ { "name": "Regice", "description": "Regice is an Ice type Pokémon introduced in Generation 3. It is known as the Iceberg Pokémon.", "image": "images/regice.jpg", "types": [ "Ice" ], "specie": "Iceberg Pokémon", "height": 1.8, "weight": 175, "abilities": [ "Clear Body", "Ice Body" ], "stats": { "total": 580, "hp": 80, "attack": 50, "defense": 100, "speedAttack": 100, "speedDefense": 200, "speed": 50 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/regice" }, { "num": 379, "name": "Registeel", "variations": [ { "name": "Registeel", "description": "Registeel is a Steel type Pokémon introduced in Generation 3. It is known as the Iron Pokémon.", "image": "images/registeel.jpg", "types": [ "Steel" ], "specie": "Iron Pokémon", "height": 1.9, "weight": 205, "abilities": [ "Clear Body", "Light Metal" ], "stats": { "total": 580, "hp": 80, "attack": 75, "defense": 150, "speedAttack": 75, "speedDefense": 150, "speed": 50 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/registeel" }, { "num": 380, "name": "Latias", "variations": [ { "name": "Latias", "description": "Latias is a Dragon/Psychic type Pokémon introduced in Generation 3. It is known as the Eon Pokémon.\nLatias has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/latias.jpg", "types": [ "Dragon", "Psychic" ], "specie": "Eon Pokémon", "height": 1.4, "weight": 40, "abilities": [ "Levitate" ], "stats": { "total": 600, "hp": 80, "attack": 80, "defense": 90, "speedAttack": 110, "speedDefense": 130, "speed": 110 }, "evolutions": [] }, { "name": "Mega Latias", "description": "Latias is a Dragon/Psychic type Pokémon introduced in Generation 3. It is known as the Eon Pokémon.\nLatias has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/latias-mega.jpg", "types": [ "Dragon", "Psychic" ], "specie": "Eon Pokémon", "height": 1.8, "weight": 52, "abilities": [ "Levitate" ], "stats": { "total": 700, "hp": 80, "attack": 100, "defense": 120, "speedAttack": 140, "speedDefense": 150, "speed": 110 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/latias" }, { "num": 381, "name": "Latios", "variations": [ { "name": "Latios", "description": "Latios is a Dragon/Psychic type Pokémon introduced in Generation 3. It is known as the Eon Pokémon.\nLatios has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/latios.jpg", "types": [ "Dragon", "Psychic" ], "specie": "Eon Pokémon", "height": 2, "weight": 60, "abilities": [ "Levitate" ], "stats": { "total": 600, "hp": 80, "attack": 90, "defense": 80, "speedAttack": 130, "speedDefense": 110, "speed": 110 }, "evolutions": [] }, { "name": "Mega Latios", "description": "Latios is a Dragon/Psychic type Pokémon introduced in Generation 3. It is known as the Eon Pokémon.\nLatios has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/latios-mega.jpg", "types": [ "Dragon", "Psychic" ], "specie": "Eon Pokémon", "height": 2.3, "weight": 70, "abilities": [ "Levitate" ], "stats": { "total": 700, "hp": 80, "attack": 130, "defense": 100, "speedAttack": 160, "speedDefense": 120, "speed": 110 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/latios" }, { "num": 382, "name": "Kyogre", "variations": [ { "name": "Kyogre", "description": "Kyogre is a Water type Pokémon introduced in Generation 3. It is known as the Sea Basin Pokémon.", "image": "images/kyogre.jpg", "types": [ "Water" ], "specie": "Sea Basin Pokémon", "height": 4.5, "weight": 352, "abilities": [ "Drizzle" ], "stats": { "total": 670, "hp": 100, "attack": 100, "defense": 90, "speedAttack": 150, "speedDefense": 140, "speed": 90 }, "evolutions": [] }, { "name": "Primal Kyogre", "description": "Kyogre is a Water type Pokémon introduced in Generation 3. It is known as the Sea Basin Pokémon.", "image": "images/kyogre-primal.jpg", "types": [ "Water" ], "specie": "Sea Basin Pokémon", "height": 9.8, "weight": 430, "abilities": [ "Primordial Sea" ], "stats": { "total": 770, "hp": 100, "attack": 150, "defense": 90, "speedAttack": 180, "speedDefense": 160, "speed": 90 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/kyogre" }, { "num": 383, "name": "Groudon", "variations": [ { "name": "Groudon", "description": "Groudon is a Ground type Pokémon introduced in Generation 3. It is known as the Continent Pokémon.", "image": "images/groudon.jpg", "types": [ "Ground" ], "specie": "Continent Pokémon", "height": 3.5, "weight": 950, "abilities": [ "Drought" ], "stats": { "total": 670, "hp": 100, "attack": 150, "defense": 140, "speedAttack": 100, "speedDefense": 90, "speed": 90 }, "evolutions": [] }, { "name": "Primal Groudon", "description": "Groudon is a Ground type Pokémon introduced in Generation 3. It is known as the Continent Pokémon.", "image": "images/groudon-primal.jpg", "types": [ "Ground", "Fire" ], "specie": "Continent Pokémon", "height": 5, "weight": 999.7, "abilities": [ "Desolate Land" ], "stats": { "total": 770, "hp": 100, "attack": 180, "defense": 160, "speedAttack": 150, "speedDefense": 90, "speed": 90 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/groudon" }, { "num": 384, "name": "Rayquaza", "variations": [ { "name": "Rayquaza", "description": "Rayquaza is a Dragon/Flying type Pokémon introduced in Generation 3. It is known as the Sky High Pokémon.\nRayquaza has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/rayquaza.jpg", "types": [ "Dragon", "Flying" ], "specie": "Sky High Pokémon", "height": 7, "weight": 206.5, "abilities": [ "Air Lock" ], "stats": { "total": 680, "hp": 105, "attack": 150, "defense": 90, "speedAttack": 150, "speedDefense": 90, "speed": 95 }, "evolutions": [] }, { "name": "Mega Rayquaza", "description": "Rayquaza is a Dragon/Flying type Pokémon introduced in Generation 3. It is known as the Sky High Pokémon.\nRayquaza has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/rayquaza-mega.jpg", "types": [ "Dragon", "Flying" ], "specie": "Sky High Pokémon", "height": 10.8, "weight": 392, "abilities": [ "Delta Stream" ], "stats": { "total": 780, "hp": 105, "attack": 180, "defense": 100, "speedAttack": 180, "speedDefense": 100, "speed": 115 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/rayquaza" }, { "num": 385, "name": "Jirachi", "variations": [ { "name": "Jirachi", "description": "Jirachi is a Steel/Psychic type Pokémon introduced in Generation 3. It is known as the Wish Pokémon.", "image": "images/jirachi.jpg", "types": [ "Steel", "Psychic" ], "specie": "Wish Pokémon", "height": 0.3, "weight": 1.1, "abilities": [ "Serene Grace" ], "stats": { "total": 600, "hp": 100, "attack": 100, "defense": 100, "speedAttack": 100, "speedDefense": 100, "speed": 100 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/jirachi" }, { "num": 386, "name": "Deoxys", "variations": [ { "name": "Normal Forme", "description": "Deoxys is a Psychic type Pokémon introduced in Generation 3. It is known as the DNA Pokémon.", "image": "images/deoxys-normal.jpg", "types": [ "Psychic" ], "specie": "DNA Pokémon", "height": 1.7, "weight": 60.8, "abilities": [ "Pressure" ], "stats": { "total": 600, "hp": 50, "attack": 150, "defense": 50, "speedAttack": 150, "speedDefense": 50, "speed": 150 }, "evolutions": [] }, { "name": "Attack Forme", "description": "Deoxys is a Psychic type Pokémon introduced in Generation 3. It is known as the DNA Pokémon.", "image": "images/deoxys-attack.jpg", "types": [ "Psychic" ], "specie": "DNA Pokémon", "height": 1.7, "weight": 60.8, "abilities": [ "Pressure" ], "stats": { "total": 600, "hp": 50, "attack": 180, "defense": 20, "speedAttack": 180, "speedDefense": 20, "speed": 150 }, "evolutions": [] }, { "name": "Defense Forme", "description": "Deoxys is a Psychic type Pokémon introduced in Generation 3. It is known as the DNA Pokémon.", "image": "images/deoxys-defense.jpg", "types": [ "Psychic" ], "specie": "DNA Pokémon", "height": 1.7, "weight": 60.8, "abilities": [ "Pressure" ], "stats": { "total": 600, "hp": 50, "attack": 70, "defense": 160, "speedAttack": 70, "speedDefense": 160, "speed": 90 }, "evolutions": [] }, { "name": "Speed Forme", "description": "Deoxys is a Psychic type Pokémon introduced in Generation 3. It is known as the DNA Pokémon.", "image": "images/deoxys-speed.jpg", "types": [ "Psychic" ], "specie": "DNA Pokémon", "height": 1.7, "weight": 60.8, "abilities": [ "Pressure" ], "stats": { "total": 600, "hp": 50, "attack": 95, "defense": 90, "speedAttack": 95, "speedDefense": 90, "speed": 180 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/deoxys" }, { "num": 387, "name": "Turtwig", "variations": [ { "name": "Turtwig", "description": "Turtwig is a Grass type Pokémon introduced in Generation 4. It is known as the Tiny Leaf Pokémon.", "image": "images/turtwig.jpg", "types": [ "Grass" ], "specie": "Tiny Leaf Pokémon", "height": 0.4, "weight": 10.2, "abilities": [ "Overgrow", "Shell Armor" ], "stats": { "total": 318, "hp": 55, "attack": 68, "defense": 64, "speedAttack": 45, "speedDefense": 55, "speed": 31 }, "evolutions": [ "turtwig", "grotle", "torterra" ] } ], "link": "https://pokemondb.net/pokedex/turtwig" }, { "num": 388, "name": "Grotle", "variations": [ { "name": "Grotle", "description": "Grotle is a Grass type Pokémon introduced in Generation 4. It is known as the Grove Pokémon.", "image": "images/grotle.jpg", "types": [ "Grass" ], "specie": "Grove Pokémon", "height": 1.1, "weight": 97, "abilities": [ "Overgrow", "Shell Armor" ], "stats": { "total": 405, "hp": 75, "attack": 89, "defense": 85, "speedAttack": 55, "speedDefense": 65, "speed": 36 }, "evolutions": [ "turtwig", "grotle", "torterra" ] } ], "link": "https://pokemondb.net/pokedex/grotle" }, { "num": 389, "name": "Torterra", "variations": [ { "name": "Torterra", "description": "Torterra is a Grass/Ground type Pokémon introduced in Generation 4. It is known as the Continent Pokémon.", "image": "images/torterra.jpg", "types": [ "Grass", "Ground" ], "specie": "Continent Pokémon", "height": 2.2, "weight": 310, "abilities": [ "Overgrow", "Shell Armor" ], "stats": { "total": 525, "hp": 95, "attack": 109, "defense": 105, "speedAttack": 75, "speedDefense": 85, "speed": 56 }, "evolutions": [ "turtwig", "grotle", "torterra" ] } ], "link": "https://pokemondb.net/pokedex/torterra" }, { "num": 390, "name": "Chimchar", "variations": [ { "name": "Chimchar", "description": "Chimchar is a Fire type Pokémon introduced in Generation 4. It is known as the Chimp Pokémon.", "image": "images/chimchar.jpg", "types": [ "Fire" ], "specie": "Chimp Pokémon", "height": 0.5, "weight": 6.2, "abilities": [ "Blaze", "Iron Fist" ], "stats": { "total": 309, "hp": 44, "attack": 58, "defense": 44, "speedAttack": 58, "speedDefense": 44, "speed": 61 }, "evolutions": [ "chimchar", "monferno", "infernape" ] } ], "link": "https://pokemondb.net/pokedex/chimchar" }, { "num": 391, "name": "Monferno", "variations": [ { "name": "Monferno", "description": "Monferno is a Fire/Fighting type Pokémon introduced in Generation 4. It is known as the Playful Pokémon.", "image": "images/monferno.jpg", "types": [ "Fire", "Fighting" ], "specie": "Playful Pokémon", "height": 0.9, "weight": 22, "abilities": [ "Blaze", "Iron Fist" ], "stats": { "total": 405, "hp": 64, "attack": 78, "defense": 52, "speedAttack": 78, "speedDefense": 52, "speed": 81 }, "evolutions": [ "chimchar", "monferno", "infernape" ] } ], "link": "https://pokemondb.net/pokedex/monferno" }, { "num": 392, "name": "Infernape", "variations": [ { "name": "Infernape", "description": "Infernape is a Fire/Fighting type Pokémon introduced in Generation 4. It is known as the Flame Pokémon.", "image": "images/infernape.jpg", "types": [ "Fire", "Fighting" ], "specie": "Flame Pokémon", "height": 1.2, "weight": 55, "abilities": [ "Blaze", "Iron Fist" ], "stats": { "total": 534, "hp": 76, "attack": 104, "defense": 71, "speedAttack": 104, "speedDefense": 71, "speed": 108 }, "evolutions": [ "chimchar", "monferno", "infernape" ] } ], "link": "https://pokemondb.net/pokedex/infernape" }, { "num": 393, "name": "Piplup", "variations": [ { "name": "Piplup", "description": "Piplup is a Water type Pokémon introduced in Generation 4. It is known as the Penguin Pokémon.", "image": "images/piplup.jpg", "types": [ "Water" ], "specie": "Penguin Pokémon", "height": 0.4, "weight": 5.2, "abilities": [ "Torrent", "Defiant" ], "stats": { "total": 314, "hp": 53, "attack": 51, "defense": 53, "speedAttack": 61, "speedDefense": 56, "speed": 40 }, "evolutions": [ "piplup", "prinplup", "empoleon" ] } ], "link": "https://pokemondb.net/pokedex/piplup" }, { "num": 394, "name": "Prinplup", "variations": [ { "name": "Prinplup", "description": "Prinplup is a Water type Pokémon introduced in Generation 4. It is known as the Penguin Pokémon.", "image": "images/prinplup.jpg", "types": [ "Water" ], "specie": "Penguin Pokémon", "height": 0.8, "weight": 23, "abilities": [ "Torrent", "Defiant" ], "stats": { "total": 405, "hp": 64, "attack": 66, "defense": 68, "speedAttack": 81, "speedDefense": 76, "speed": 50 }, "evolutions": [ "piplup", "prinplup", "empoleon" ] } ], "link": "https://pokemondb.net/pokedex/prinplup" }, { "num": 395, "name": "Empoleon", "variations": [ { "name": "Empoleon", "description": "Empoleon is a Water/Steel type Pokémon introduced in Generation 4. It is known as the Emperor Pokémon.", "image": "images/empoleon.jpg", "types": [ "Water", "Steel" ], "specie": "Emperor Pokémon", "height": 1.7, "weight": 84.5, "abilities": [ "Torrent", "Defiant" ], "stats": { "total": 530, "hp": 84, "attack": 86, "defense": 88, "speedAttack": 111, "speedDefense": 101, "speed": 60 }, "evolutions": [ "piplup", "prinplup", "empoleon" ] } ], "link": "https://pokemondb.net/pokedex/empoleon" }, { "num": 396, "name": "Starly", "variations": [ { "name": "Starly", "description": "Starly is a Normal/Flying type Pokémon introduced in Generation 4. It is known as the Starling Pokémon.", "image": "images/starly.jpg", "types": [ "Normal", "Flying" ], "specie": "Starling Pokémon", "height": 0.3, "weight": 2, "abilities": [ "Keen Eye", "Reckless" ], "stats": { "total": 245, "hp": 40, "attack": 55, "defense": 30, "speedAttack": 30, "speedDefense": 30, "speed": 60 }, "evolutions": [ "starly", "staravia", "staraptor" ] } ], "link": "https://pokemondb.net/pokedex/starly" }, { "num": 397, "name": "Staravia", "variations": [ { "name": "Staravia", "description": "Staravia is a Normal/Flying type Pokémon introduced in Generation 4. It is known as the Starling Pokémon.", "image": "images/staravia.jpg", "types": [ "Normal", "Flying" ], "specie": "Starling Pokémon", "height": 0.6, "weight": 15.5, "abilities": [ "Intimidate", "Reckless" ], "stats": { "total": 340, "hp": 55, "attack": 75, "defense": 50, "speedAttack": 40, "speedDefense": 40, "speed": 80 }, "evolutions": [ "starly", "staravia", "staraptor" ] } ], "link": "https://pokemondb.net/pokedex/staravia" }, { "num": 398, "name": "Staraptor", "variations": [ { "name": "Staraptor", "description": "Staraptor is a Normal/Flying type Pokémon introduced in Generation 4. It is known as the Predator Pokémon.", "image": "images/staraptor.jpg", "types": [ "Normal", "Flying" ], "specie": "Predator Pokémon", "height": 1.2, "weight": 24.9, "abilities": [ "Intimidate", "Reckless" ], "stats": { "total": 485, "hp": 85, "attack": 120, "defense": 70, "speedAttack": 50, "speedDefense": 60, "speed": 100 }, "evolutions": [ "starly", "staravia", "staraptor" ] } ], "link": "https://pokemondb.net/pokedex/staraptor" }, { "num": 399, "name": "Bidoof", "variations": [ { "name": "Bidoof", "description": "Bidoof is a Normal type Pokémon introduced in Generation 4. It is known as the Plump Mouse Pokémon.", "image": "images/bidoof.jpg", "types": [ "Normal" ], "specie": "Plump Mouse Pokémon", "height": 0.5, "weight": 20, "abilities": [ "Simple", "Unaware", "Moody" ], "stats": { "total": 250, "hp": 59, "attack": 45, "defense": 40, "speedAttack": 35, "speedDefense": 40, "speed": 31 }, "evolutions": [ "bidoof", "bibarel" ] } ], "link": "https://pokemondb.net/pokedex/bidoof" }, { "num": 400, "name": "Bibarel", "variations": [ { "name": "Bibarel", "description": "Bibarel is a Normal/Water type Pokémon introduced in Generation 4. It is known as the Beaver Pokémon.", "image": "images/bibarel.jpg", "types": [ "Normal", "Water" ], "specie": "Beaver Pokémon", "height": 1, "weight": 31.5, "abilities": [ "Simple", "Unaware", "Moody" ], "stats": { "total": 410, "hp": 79, "attack": 85, "defense": 60, "speedAttack": 55, "speedDefense": 60, "speed": 71 }, "evolutions": [ "bidoof", "bibarel" ] } ], "link": "https://pokemondb.net/pokedex/bibarel" }, { "num": 401, "name": "Kricketot", "variations": [ { "name": "Kricketot", "description": "Kricketot is a Bug type Pokémon introduced in Generation 4. It is known as the Cricket Pokémon.", "image": "images/kricketot.jpg", "types": [ "Bug" ], "specie": "Cricket Pokémon", "height": 0.3, "weight": 2.2, "abilities": [ "Shed Skin", "Run Away" ], "stats": { "total": 194, "hp": 37, "attack": 25, "defense": 41, "speedAttack": 25, "speedDefense": 41, "speed": 25 }, "evolutions": [ "kricketot", "kricketune" ] } ], "link": "https://pokemondb.net/pokedex/kricketot" }, { "num": 402, "name": "Kricketune", "variations": [ { "name": "Kricketune", "description": "Kricketune is a Bug type Pokémon introduced in Generation 4. It is known as the Cricket Pokémon.", "image": "images/kricketune.jpg", "types": [ "Bug" ], "specie": "Cricket Pokémon", "height": 1, "weight": 25.5, "abilities": [ "Swarm", "Technician" ], "stats": { "total": 384, "hp": 77, "attack": 85, "defense": 51, "speedAttack": 55, "speedDefense": 51, "speed": 65 }, "evolutions": [ "kricketot", "kricketune" ] } ], "link": "https://pokemondb.net/pokedex/kricketune" }, { "num": 403, "name": "Shinx", "variations": [ { "name": "Shinx", "description": "Shinx is an Electric type Pokémon introduced in Generation 4. It is known as the Flash Pokémon.", "image": "images/shinx.jpg", "types": [ "Electric" ], "specie": "Flash Pokémon", "height": 0.5, "weight": 9.5, "abilities": [ "Rivalry", "Intimidate", "Guts" ], "stats": { "total": 263, "hp": 45, "attack": 65, "defense": 34, "speedAttack": 40, "speedDefense": 34, "speed": 45 }, "evolutions": [ "shinx", "luxio", "luxray" ] } ], "link": "https://pokemondb.net/pokedex/shinx" }, { "num": 404, "name": "Luxio", "variations": [ { "name": "Luxio", "description": "Luxio is an Electric type Pokémon introduced in Generation 4. It is known as the Spark Pokémon.", "image": "images/luxio.jpg", "types": [ "Electric" ], "specie": "Spark Pokémon", "height": 0.9, "weight": 30.5, "abilities": [ "Rivalry", "Intimidate", "Guts" ], "stats": { "total": 363, "hp": 60, "attack": 85, "defense": 49, "speedAttack": 60, "speedDefense": 49, "speed": 60 }, "evolutions": [ "shinx", "luxio", "luxray" ] } ], "link": "https://pokemondb.net/pokedex/luxio" }, { "num": 405, "name": "Luxray", "variations": [ { "name": "Luxray", "description": "Luxray is an Electric type Pokémon introduced in Generation 4. It is known as the Gleam Eyes Pokémon.", "image": "images/luxray.jpg", "types": [ "Electric" ], "specie": "Gleam Eyes Pokémon", "height": 1.4, "weight": 42, "abilities": [ "Rivalry", "Intimidate", "Guts" ], "stats": { "total": 523, "hp": 80, "attack": 120, "defense": 79, "speedAttack": 95, "speedDefense": 79, "speed": 70 }, "evolutions": [ "shinx", "luxio", "luxray" ] } ], "link": "https://pokemondb.net/pokedex/luxray" }, { "num": 406, "name": "Budew", "variations": [ { "name": "Budew", "description": "Budew is a Grass/Poison type Pokémon introduced in Generation 4. It is known as the Bud Pokémon.", "image": "images/budew.jpg", "types": [ "Grass", "Poison" ], "specie": "Bud Pokémon", "height": 0.2, "weight": 1.2, "abilities": [ "Natural Cure", "Poison Point", "Leaf Guard" ], "stats": { "total": 280, "hp": 40, "attack": 30, "defense": 35, "speedAttack": 50, "speedDefense": 70, "speed": 55 }, "evolutions": [ "budew", "roselia", "roserade" ] } ], "link": "https://pokemondb.net/pokedex/budew" }, { "num": 407, "name": "Roserade", "variations": [ { "name": "Roserade", "description": "Roserade is a Grass/Poison type Pokémon introduced in Generation 4. It is known as the Bouquet Pokémon.", "image": "images/roserade.jpg", "types": [ "Grass", "Poison" ], "specie": "Bouquet Pokémon", "height": 0.9, "weight": 14.5, "abilities": [ "Natural Cure", "Poison Point", "Technician" ], "stats": { "total": 515, "hp": 60, "attack": 70, "defense": 65, "speedAttack": 125, "speedDefense": 105, "speed": 90 }, "evolutions": [ "budew", "roselia", "roserade" ] } ], "link": "https://pokemondb.net/pokedex/roserade" }, { "num": 408, "name": "Cranidos", "variations": [ { "name": "Cranidos", "description": "Cranidos is a Rock type Pokémon introduced in Generation 4. It is known as the Head Butt Pokémon.", "image": "images/cranidos.jpg", "types": [ "Rock" ], "specie": "Head Butt Pokémon", "height": 0.9, "weight": 31.5, "abilities": [ "Mold Breaker", "Sheer Force" ], "stats": { "total": 350, "hp": 67, "attack": 125, "defense": 40, "speedAttack": 30, "speedDefense": 30, "speed": 58 }, "evolutions": [ "cranidos", "rampardos" ] } ], "link": "https://pokemondb.net/pokedex/cranidos" }, { "num": 409, "name": "Rampardos", "variations": [ { "name": "Rampardos", "description": "Rampardos is a Rock type Pokémon introduced in Generation 4. It is known as the Head Butt Pokémon.", "image": "images/rampardos.jpg", "types": [ "Rock" ], "specie": "Head Butt Pokémon", "height": 1.6, "weight": 102.5, "abilities": [ "Mold Breaker", "Sheer Force" ], "stats": { "total": 495, "hp": 97, "attack": 165, "defense": 60, "speedAttack": 65, "speedDefense": 50, "speed": 58 }, "evolutions": [ "cranidos", "rampardos" ] } ], "link": "https://pokemondb.net/pokedex/rampardos" }, { "num": 410, "name": "Shieldon", "variations": [ { "name": "Shieldon", "description": "Shieldon is a Rock/Steel type Pokémon introduced in Generation 4. It is known as the Shield Pokémon.", "image": "images/shieldon.jpg", "types": [ "Rock", "Steel" ], "specie": "Shield Pokémon", "height": 0.5, "weight": 57, "abilities": [ "Sturdy", "Soundproof" ], "stats": { "total": 350, "hp": 30, "attack": 42, "defense": 118, "speedAttack": 42, "speedDefense": 88, "speed": 30 }, "evolutions": [ "shieldon", "bastiodon" ] } ], "link": "https://pokemondb.net/pokedex/shieldon" }, { "num": 411, "name": "Bastiodon", "variations": [ { "name": "Bastiodon", "description": "Bastiodon is a Rock/Steel type Pokémon introduced in Generation 4. It is known as the Shield Pokémon.", "image": "images/bastiodon.jpg", "types": [ "Rock", "Steel" ], "specie": "Shield Pokémon", "height": 1.3, "weight": 149.5, "abilities": [ "Sturdy", "Soundproof" ], "stats": { "total": 495, "hp": 60, "attack": 52, "defense": 168, "speedAttack": 47, "speedDefense": 138, "speed": 30 }, "evolutions": [ "shieldon", "bastiodon" ] } ], "link": "https://pokemondb.net/pokedex/bastiodon" }, { "num": 412, "name": "Burmy", "variations": [ { "name": "Burmy", "description": "Burmy is a Bug type Pokémon introduced in Generation 4. It is known as the Bagworm Pokémon.", "image": "images/burmy.jpg", "types": [ "Bug" ], "specie": "Bagworm Pokémon", "height": 0.2, "weight": 3.4, "abilities": [ "Shed Skin", "Overcoat" ], "stats": { "total": 224, "hp": 40, "attack": 29, "defense": 45, "speedAttack": 29, "speedDefense": 45, "speed": 36 }, "evolutions": [ "burmy", "mothim", "burmy" ] } ], "link": "https://pokemondb.net/pokedex/burmy" }, { "num": 413, "name": "Wormadam", "variations": [ { "name": "Plant Cloak", "description": "Wormadam is a Bug/Grass type Pokémon introduced in Generation 4. It is known as the Bagworm Pokémon.", "image": "images/wormadam-plant.jpg", "types": [ "Bug", "Grass" ], "specie": "Bagworm Pokémon", "height": 0.5, "weight": 6.5, "abilities": [ "Anticipation", "Overcoat" ], "stats": { "total": 424, "hp": 60, "attack": 59, "defense": 85, "speedAttack": 79, "speedDefense": 105, "speed": 36 }, "evolutions": [ "burmy", "mothim", "burmy" ] }, { "name": "Sandy Cloak", "description": "Wormadam is a Bug/Grass type Pokémon introduced in Generation 4. It is known as the Bagworm Pokémon.", "image": "images/wormadam-sandy.jpg", "types": [ "Bug", "Ground" ], "specie": "Bagworm Pokémon", "height": 0.5, "weight": 6.5, "abilities": [ "Anticipation", "Overcoat" ], "stats": { "total": 424, "hp": 60, "attack": 79, "defense": 105, "speedAttack": 59, "speedDefense": 85, "speed": 36 }, "evolutions": [ "burmy", "mothim", "burmy" ] }, { "name": "Trash Cloak", "description": "Wormadam is a Bug/Grass type Pokémon introduced in Generation 4. It is known as the Bagworm Pokémon.", "image": "images/wormadam-trash.jpg", "types": [ "Bug", "Steel" ], "specie": "Bagworm Pokémon", "height": 0.5, "weight": 6.5, "abilities": [ "Anticipation", "Overcoat" ], "stats": { "total": 424, "hp": 60, "attack": 69, "defense": 95, "speedAttack": 69, "speedDefense": 95, "speed": 36 }, "evolutions": [ "burmy", "mothim", "burmy" ] } ], "link": "https://pokemondb.net/pokedex/wormadam" }, { "num": 414, "name": "Mothim", "variations": [ { "name": "Mothim", "description": "Mothim is a Bug/Flying type Pokémon introduced in Generation 4. It is known as the Moth Pokémon.", "image": "images/mothim.jpg", "types": [ "Bug", "Flying" ], "specie": "Moth Pokémon", "height": 0.9, "weight": 23.3, "abilities": [ "Swarm", "Tinted Lens" ], "stats": { "total": 424, "hp": 70, "attack": 94, "defense": 50, "speedAttack": 94, "speedDefense": 50, "speed": 66 }, "evolutions": [ "burmy", "mothim", "burmy" ] } ], "link": "https://pokemondb.net/pokedex/mothim" }, { "num": 415, "name": "Combee", "variations": [ { "name": "Combee", "description": "Combee is a Bug/Flying type Pokémon introduced in Generation 4. It is known as the Tiny Bee Pokémon.", "image": "images/combee.jpg", "types": [ "Bug", "Flying" ], "specie": "Tiny Bee Pokémon", "height": 0.3, "weight": 5.5, "abilities": [ "Honey Gather", "Hustle" ], "stats": { "total": 244, "hp": 30, "attack": 30, "defense": 42, "speedAttack": 30, "speedDefense": 42, "speed": 70 }, "evolutions": [ "combee", "vespiquen" ] } ], "link": "https://pokemondb.net/pokedex/combee" }, { "num": 416, "name": "Vespiquen", "variations": [ { "name": "Vespiquen", "description": "Vespiquen is a Bug/Flying type Pokémon introduced in Generation 4. It is known as the Beehive Pokémon.", "image": "images/vespiquen.jpg", "types": [ "Bug", "Flying" ], "specie": "Beehive Pokémon", "height": 1.2, "weight": 38.5, "abilities": [ "Pressure", "Unnerve" ], "stats": { "total": 474, "hp": 70, "attack": 80, "defense": 102, "speedAttack": 80, "speedDefense": 102, "speed": 40 }, "evolutions": [ "combee", "vespiquen" ] } ], "link": "https://pokemondb.net/pokedex/vespiquen" }, { "num": 417, "name": "Pachirisu", "variations": [ { "name": "Pachirisu", "description": "Pachirisu is an Electric type Pokémon introduced in Generation 4. It is known as the EleSquirrel Pokémon.", "image": "images/pachirisu.jpg", "types": [ "Electric" ], "specie": "EleSquirrel Pokémon", "height": 0.4, "weight": 3.9, "abilities": [ "Run Away", "Pickup", "Volt Absorb" ], "stats": { "total": 405, "hp": 60, "attack": 45, "defense": 70, "speedAttack": 45, "speedDefense": 90, "speed": 95 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/pachirisu" }, { "num": 418, "name": "Buizel", "variations": [ { "name": "Buizel", "description": "Buizel is a Water type Pokémon introduced in Generation 4. It is known as the Sea Weasel Pokémon.", "image": "images/buizel.jpg", "types": [ "Water" ], "specie": "Sea Weasel Pokémon", "height": 0.7, "weight": 29.5, "abilities": [ "Swift Swim", "Water Veil" ], "stats": { "total": 330, "hp": 55, "attack": 65, "defense": 35, "speedAttack": 60, "speedDefense": 30, "speed": 85 }, "evolutions": [ "buizel", "floatzel" ] } ], "link": "https://pokemondb.net/pokedex/buizel" }, { "num": 419, "name": "Floatzel", "variations": [ { "name": "Floatzel", "description": "Floatzel is a Water type Pokémon introduced in Generation 4. It is known as the Sea Weasel Pokémon.", "image": "images/floatzel.jpg", "types": [ "Water" ], "specie": "Sea Weasel Pokémon", "height": 1.1, "weight": 33.5, "abilities": [ "Swift Swim", "Water Veil" ], "stats": { "total": 495, "hp": 85, "attack": 105, "defense": 55, "speedAttack": 85, "speedDefense": 50, "speed": 115 }, "evolutions": [ "buizel", "floatzel" ] } ], "link": "https://pokemondb.net/pokedex/floatzel" }, { "num": 420, "name": "Cherubi", "variations": [ { "name": "Cherubi", "description": "Cherubi is a Grass type Pokémon introduced in Generation 4. It is known as the Cherry Pokémon.", "image": "images/cherubi.jpg", "types": [ "Grass" ], "specie": "Cherry Pokémon", "height": 0.4, "weight": 3.3, "abilities": [ "Chlorophyll" ], "stats": { "total": 275, "hp": 45, "attack": 35, "defense": 45, "speedAttack": 62, "speedDefense": 53, "speed": 35 }, "evolutions": [ "cherubi", "cherrim" ] } ], "link": "https://pokemondb.net/pokedex/cherubi" }, { "num": 421, "name": "Cherrim", "variations": [ { "name": "Cherrim", "description": "Cherrim is a Grass type Pokémon introduced in Generation 4. It is known as the Blossom Pokémon.", "image": "images/cherrim.jpg", "types": [ "Grass" ], "specie": "Blossom Pokémon", "height": 0.5, "weight": 9.3, "abilities": [ "Flower Gift" ], "stats": { "total": 450, "hp": 70, "attack": 60, "defense": 70, "speedAttack": 87, "speedDefense": 78, "speed": 85 }, "evolutions": [ "cherubi", "cherrim" ] } ], "link": "https://pokemondb.net/pokedex/cherrim" }, { "num": 422, "name": "Shellos", "variations": [ { "name": "Shellos", "description": "Shellos is a Water type Pokémon introduced in Generation 4. It is known as the Sea Slug Pokémon.", "image": "images/shellos.jpg", "types": [ "Water" ], "specie": "Sea Slug Pokémon", "height": 0.3, "weight": 6.3, "abilities": [ "Sticky Hold", "Storm Drain", "Sand Force" ], "stats": { "total": 325, "hp": 76, "attack": 48, "defense": 48, "speedAttack": 57, "speedDefense": 62, "speed": 34 }, "evolutions": [ "shellos", "gastrodon" ] } ], "link": "https://pokemondb.net/pokedex/shellos" }, { "num": 423, "name": "Gastrodon", "variations": [ { "name": "Gastrodon", "description": "Gastrodon is a Water/Ground type Pokémon introduced in Generation 4. It is known as the Sea Slug Pokémon.", "image": "images/gastrodon.jpg", "types": [ "Water", "Ground" ], "specie": "Sea Slug Pokémon", "height": 0.9, "weight": 29.9, "abilities": [ "Sticky Hold", "Storm Drain", "Sand Force" ], "stats": { "total": 475, "hp": 111, "attack": 83, "defense": 68, "speedAttack": 92, "speedDefense": 82, "speed": 39 }, "evolutions": [ "shellos", "gastrodon" ] } ], "link": "https://pokemondb.net/pokedex/gastrodon" }, { "num": 424, "name": "Ambipom", "variations": [ { "name": "Ambipom", "description": "Ambipom is a Normal type Pokémon introduced in Generation 4. It is known as the Long Tail Pokémon.", "image": "images/ambipom.jpg", "types": [ "Normal" ], "specie": "Long Tail Pokémon", "height": 1.2, "weight": 20.3, "abilities": [ "Technician", "Pickup", "Skill Link" ], "stats": { "total": 482, "hp": 75, "attack": 100, "defense": 66, "speedAttack": 60, "speedDefense": 66, "speed": 115 }, "evolutions": [ "aipom", "ambipom" ] } ], "link": "https://pokemondb.net/pokedex/ambipom" }, { "num": 425, "name": "Drifloon", "variations": [ { "name": "Drifloon", "description": "Drifloon is a Ghost/Flying type Pokémon introduced in Generation 4. It is known as the Balloon Pokémon.", "image": "images/drifloon.jpg", "types": [ "Ghost", "Flying" ], "specie": "Balloon Pokémon", "height": 0.4, "weight": 1.2, "abilities": [ "Aftermath", "Unburden", "Flare Boost" ], "stats": { "total": 348, "hp": 90, "attack": 50, "defense": 34, "speedAttack": 60, "speedDefense": 44, "speed": 70 }, "evolutions": [ "drifloon", "drifblim" ] } ], "link": "https://pokemondb.net/pokedex/drifloon" }, { "num": 426, "name": "Drifblim", "variations": [ { "name": "Drifblim", "description": "Drifblim is a Ghost/Flying type Pokémon introduced in Generation 4. It is known as the Blimp Pokémon.", "image": "images/drifblim.jpg", "types": [ "Ghost", "Flying" ], "specie": "Blimp Pokémon", "height": 1.2, "weight": 15, "abilities": [ "Aftermath", "Unburden", "Flare Boost" ], "stats": { "total": 498, "hp": 150, "attack": 80, "defense": 44, "speedAttack": 90, "speedDefense": 54, "speed": 80 }, "evolutions": [ "drifloon", "drifblim" ] } ], "link": "https://pokemondb.net/pokedex/drifblim" }, { "num": 427, "name": "Buneary", "variations": [ { "name": "Buneary", "description": "Buneary is a Normal type Pokémon introduced in Generation 4. It is known as the Rabbit Pokémon.", "image": "images/buneary.jpg", "types": [ "Normal" ], "specie": "Rabbit Pokémon", "height": 0.4, "weight": 5.5, "abilities": [ "Run Away", "Klutz", "Limber" ], "stats": { "total": 350, "hp": 55, "attack": 66, "defense": 44, "speedAttack": 44, "speedDefense": 56, "speed": 85 }, "evolutions": [ "buneary", "lopunny" ] } ], "link": "https://pokemondb.net/pokedex/buneary" }, { "num": 428, "name": "Lopunny", "variations": [ { "name": "Lopunny", "description": "Lopunny is a Normal type Pokémon introduced in Generation 4. It is known as the Rabbit Pokémon.\nLopunny has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/lopunny.jpg", "types": [ "Normal" ], "specie": "Rabbit Pokémon", "height": 1.2, "weight": 33.3, "abilities": [ "Cute Charm", "Klutz", "Limber" ], "stats": { "total": 480, "hp": 65, "attack": 76, "defense": 84, "speedAttack": 54, "speedDefense": 96, "speed": 105 }, "evolutions": [ "buneary", "lopunny" ] }, { "name": "Mega Lopunny", "description": "Lopunny is a Normal type Pokémon introduced in Generation 4. It is known as the Rabbit Pokémon.\nLopunny has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/lopunny-mega.jpg", "types": [ "Normal", "Fighting" ], "specie": "Rabbit Pokémon", "height": 1.3, "weight": 28.3, "abilities": [ "Scrappy" ], "stats": { "total": 580, "hp": 65, "attack": 136, "defense": 94, "speedAttack": 54, "speedDefense": 96, "speed": 135 }, "evolutions": [ "buneary", "lopunny" ] } ], "link": "https://pokemondb.net/pokedex/lopunny" }, { "num": 429, "name": "Mismagius", "variations": [ { "name": "Mismagius", "description": "Mismagius is a Ghost type Pokémon introduced in Generation 4. It is known as the Magical Pokémon.", "image": "images/mismagius.jpg", "types": [ "Ghost" ], "specie": "Magical Pokémon", "height": 0.9, "weight": 4.4, "abilities": [ "Levitate" ], "stats": { "total": 495, "hp": 60, "attack": 60, "defense": 60, "speedAttack": 105, "speedDefense": 105, "speed": 105 }, "evolutions": [ "misdreavus", "mismagius" ] } ], "link": "https://pokemondb.net/pokedex/mismagius" }, { "num": 430, "name": "Honchkrow", "variations": [ { "name": "Honchkrow", "description": "Honchkrow is a Dark/Flying type Pokémon introduced in Generation 4. It is known as the Big Boss Pokémon.", "image": "images/honchkrow.jpg", "types": [ "Dark", "Flying" ], "specie": "Big Boss Pokémon", "height": 0.9, "weight": 27.3, "abilities": [ "Insomnia", "Super Luck", "Moxie" ], "stats": { "total": 505, "hp": 100, "attack": 125, "defense": 52, "speedAttack": 105, "speedDefense": 52, "speed": 71 }, "evolutions": [ "murkrow", "honchkrow" ] } ], "link": "https://pokemondb.net/pokedex/honchkrow" }, { "num": 431, "name": "Glameow", "variations": [ { "name": "Glameow", "description": "Glameow is a Normal type Pokémon introduced in Generation 4. It is known as the Catty Pokémon.", "image": "images/glameow.jpg", "types": [ "Normal" ], "specie": "Catty Pokémon", "height": 0.5, "weight": 3.9, "abilities": [ "Limber", "Own Tempo", "Keen Eye" ], "stats": { "total": 310, "hp": 49, "attack": 55, "defense": 42, "speedAttack": 42, "speedDefense": 37, "speed": 85 }, "evolutions": [ "glameow", "purugly" ] } ], "link": "https://pokemondb.net/pokedex/glameow" }, { "num": 432, "name": "Purugly", "variations": [ { "name": "Purugly", "description": "Purugly is a Normal type Pokémon introduced in Generation 4. It is known as the Tiger Cat Pokémon.", "image": "images/purugly.jpg", "types": [ "Normal" ], "specie": "Tiger Cat Pokémon", "height": 1, "weight": 43.8, "abilities": [ "Thick Fat", "Own Tempo", "Defiant" ], "stats": { "total": 452, "hp": 71, "attack": 82, "defense": 64, "speedAttack": 64, "speedDefense": 59, "speed": 112 }, "evolutions": [ "glameow", "purugly" ] } ], "link": "https://pokemondb.net/pokedex/purugly" }, { "num": 433, "name": "Chingling", "variations": [ { "name": "Chingling", "description": "Chingling is a Psychic type Pokémon introduced in Generation 4. It is known as the Bell Pokémon.", "image": "images/chingling.jpg", "types": [ "Psychic" ], "specie": "Bell Pokémon", "height": 0.2, "weight": 0.6, "abilities": [ "Levitate" ], "stats": { "total": 285, "hp": 45, "attack": 30, "defense": 50, "speedAttack": 65, "speedDefense": 50, "speed": 45 }, "evolutions": [ "chingling", "chimecho" ] } ], "link": "https://pokemondb.net/pokedex/chingling" }, { "num": 434, "name": "Stunky", "variations": [ { "name": "Stunky", "description": "Stunky is a Poison/Dark type Pokémon introduced in Generation 4. It is known as the Skunk Pokémon.", "image": "images/stunky.jpg", "types": [ "Poison", "Dark" ], "specie": "Skunk Pokémon", "height": 0.4, "weight": 19.2, "abilities": [ "Stench", "Aftermath", "Keen Eye" ], "stats": { "total": 329, "hp": 63, "attack": 63, "defense": 47, "speedAttack": 41, "speedDefense": 41, "speed": 74 }, "evolutions": [ "stunky", "skuntank" ] } ], "link": "https://pokemondb.net/pokedex/stunky" }, { "num": 435, "name": "Skuntank", "variations": [ { "name": "Skuntank", "description": "Skuntank is a Poison/Dark type Pokémon introduced in Generation 4. It is known as the Skunk Pokémon.", "image": "images/skuntank.jpg", "types": [ "Poison", "Dark" ], "specie": "Skunk Pokémon", "height": 1, "weight": 38, "abilities": [ "Stench", "Aftermath", "Keen Eye" ], "stats": { "total": 479, "hp": 103, "attack": 93, "defense": 67, "speedAttack": 71, "speedDefense": 61, "speed": 84 }, "evolutions": [ "stunky", "skuntank" ] } ], "link": "https://pokemondb.net/pokedex/skuntank" }, { "num": 436, "name": "Bronzor", "variations": [ { "name": "Bronzor", "description": "Bronzor is a Steel/Psychic type Pokémon introduced in Generation 4. It is known as the Bronze Pokémon.", "image": "images/bronzor.jpg", "types": [ "Steel", "Psychic" ], "specie": "Bronze Pokémon", "height": 0.5, "weight": 60.5, "abilities": [ "Levitate", "Heatproof", "Heavy Metal" ], "stats": { "total": 300, "hp": 57, "attack": 24, "defense": 86, "speedAttack": 24, "speedDefense": 86, "speed": 23 }, "evolutions": [ "bronzor", "bronzong" ] } ], "link": "https://pokemondb.net/pokedex/bronzor" }, { "num": 437, "name": "Bronzong", "variations": [ { "name": "Bronzong", "description": "Bronzong is a Steel/Psychic type Pokémon introduced in Generation 4. It is known as the Bronze Bell Pokémon.", "image": "images/bronzong.jpg", "types": [ "Steel", "Psychic" ], "specie": "Bronze Bell Pokémon", "height": 1.3, "weight": 187, "abilities": [ "Levitate", "Heatproof", "Heavy Metal" ], "stats": { "total": 500, "hp": 67, "attack": 89, "defense": 116, "speedAttack": 79, "speedDefense": 116, "speed": 33 }, "evolutions": [ "bronzor", "bronzong" ] } ], "link": "https://pokemondb.net/pokedex/bronzong" }, { "num": 438, "name": "Bonsly", "variations": [ { "name": "Bonsly", "description": "Bonsly is a Rock type Pokémon introduced in Generation 4. It is known as the Bonsai Pokémon.", "image": "images/bonsly.jpg", "types": [ "Rock" ], "specie": "Bonsai Pokémon", "height": 0.5, "weight": 15, "abilities": [ "Sturdy", "Rock Head", "Rattled" ], "stats": { "total": 290, "hp": 50, "attack": 80, "defense": 95, "speedAttack": 10, "speedDefense": 45, "speed": 10 }, "evolutions": [ "bonsly", "sudowoodo" ] } ], "link": "https://pokemondb.net/pokedex/bonsly" }, { "num": 439, "name": "Mime Jr.", "variations": [ { "name": "Mime Jr.", "description": "Mime Jr. is a Psychic/Fairy type Pokémon introduced in Generation 4. It is known as the Mime Pokémon.", "image": "images/mime-jr.jpg", "types": [ "Psychic", "Fairy" ], "specie": "Mime Pokémon", "height": 0.6, "weight": 13, "abilities": [ "Soundproof", "Filter", "Technician" ], "stats": { "total": 310, "hp": 20, "attack": 25, "defense": 45, "speedAttack": 70, "speedDefense": 90, "speed": 60 }, "evolutions": [ "mime jr.", "mr. mime" ] } ], "link": "https://pokemondb.net/pokedex/mime-jr" }, { "num": 440, "name": "Happiny", "variations": [ { "name": "Happiny", "description": "Happiny is a Normal type Pokémon introduced in Generation 4. It is known as the Playhouse Pokémon.", "image": "images/happiny.jpg", "types": [ "Normal" ], "specie": "Playhouse Pokémon", "height": 0.6, "weight": 24.4, "abilities": [ "Natural Cure", "Serene Grace", "Friend Guard" ], "stats": { "total": 220, "hp": 100, "attack": 5, "defense": 5, "speedAttack": 15, "speedDefense": 65, "speed": 30 }, "evolutions": [ "happiny", "chansey", "blissey" ] } ], "link": "https://pokemondb.net/pokedex/happiny" }, { "num": 441, "name": "Chatot", "variations": [ { "name": "Chatot", "description": "Chatot is a Normal/Flying type Pokémon introduced in Generation 4. It is known as the Music Note Pokémon.", "image": "images/chatot.jpg", "types": [ "Normal", "Flying" ], "specie": "Music Note Pokémon", "height": 0.5, "weight": 1.9, "abilities": [ "Keen Eye", "Tangled Feet", "Big Pecks" ], "stats": { "total": 411, "hp": 76, "attack": 65, "defense": 45, "speedAttack": 92, "speedDefense": 42, "speed": 91 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/chatot" }, { "num": 442, "name": "Spiritomb", "variations": [ { "name": "Spiritomb", "description": "Spiritomb is a Ghost/Dark type Pokémon introduced in Generation 4. It is known as the Forbidden Pokémon.", "image": "images/spiritomb.jpg", "types": [ "Ghost", "Dark" ], "specie": "Forbidden Pokémon", "height": 1, "weight": 108, "abilities": [ "Pressure", "Infiltrator" ], "stats": { "total": 485, "hp": 50, "attack": 92, "defense": 108, "speedAttack": 92, "speedDefense": 108, "speed": 35 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/spiritomb" }, { "num": 443, "name": "Gible", "variations": [ { "name": "Gible", "description": "Gible is a Dragon/Ground type Pokémon introduced in Generation 4. It is known as the Land Shark Pokémon.", "image": "images/gible.jpg", "types": [ "Dragon", "Ground" ], "specie": "Land Shark Pokémon", "height": 0.7, "weight": 20.5, "abilities": [ "Sand Veil", "Rough Skin" ], "stats": { "total": 300, "hp": 58, "attack": 70, "defense": 45, "speedAttack": 40, "speedDefense": 45, "speed": 42 }, "evolutions": [ "gible", "gabite", "garchomp" ] } ], "link": "https://pokemondb.net/pokedex/gible" }, { "num": 444, "name": "Gabite", "variations": [ { "name": "Gabite", "description": "Gabite is a Dragon/Ground type Pokémon introduced in Generation 4. It is known as the Cave Pokémon.", "image": "images/gabite.jpg", "types": [ "Dragon", "Ground" ], "specie": "Cave Pokémon", "height": 1.4, "weight": 56, "abilities": [ "Sand Veil", "Rough Skin" ], "stats": { "total": 410, "hp": 68, "attack": 90, "defense": 65, "speedAttack": 50, "speedDefense": 55, "speed": 82 }, "evolutions": [ "gible", "gabite", "garchomp" ] } ], "link": "https://pokemondb.net/pokedex/gabite" }, { "num": 445, "name": "Garchomp", "variations": [ { "name": "Garchomp", "description": "Garchomp is a Dragon/Ground type Pokémon introduced in Generation 4. It is known as the Mach Pokémon.\nGarchomp has a Mega Evolution, available from X & Y onwards.", "image": "images/garchomp.jpg", "types": [ "Dragon", "Ground" ], "specie": "Mach Pokémon", "height": 1.9, "weight": 95, "abilities": [ "Sand Veil", "Rough Skin" ], "stats": { "total": 600, "hp": 108, "attack": 130, "defense": 95, "speedAttack": 80, "speedDefense": 85, "speed": 102 }, "evolutions": [ "gible", "gabite", "garchomp" ] }, { "name": "Mega Garchomp", "description": "Garchomp is a Dragon/Ground type Pokémon introduced in Generation 4. It is known as the Mach Pokémon.\nGarchomp has a Mega Evolution, available from X & Y onwards.", "image": "images/garchomp-mega.jpg", "types": [ "Dragon", "Ground" ], "specie": "Mach Pokémon", "height": 1.9, "weight": 95, "abilities": [ "Sand Force" ], "stats": { "total": 700, "hp": 108, "attack": 170, "defense": 115, "speedAttack": 120, "speedDefense": 95, "speed": 92 }, "evolutions": [ "gible", "gabite", "garchomp" ] } ], "link": "https://pokemondb.net/pokedex/garchomp" }, { "num": 446, "name": "Munchlax", "variations": [ { "name": "Munchlax", "description": "Munchlax is a Normal type Pokémon introduced in Generation 4. It is known as the Big Eater Pokémon.", "image": "images/munchlax.jpg", "types": [ "Normal" ], "specie": "Big Eater Pokémon", "height": 0.6, "weight": 105, "abilities": [ "Pickup", "Thick Fat", "Gluttony" ], "stats": { "total": 390, "hp": 135, "attack": 85, "defense": 40, "speedAttack": 40, "speedDefense": 85, "speed": 5 }, "evolutions": [ "munchlax", "snorlax" ] } ], "link": "https://pokemondb.net/pokedex/munchlax" }, { "num": 447, "name": "Riolu", "variations": [ { "name": "Riolu", "description": "Riolu is a Fighting type Pokémon introduced in Generation 4. It is known as the Emanation Pokémon.", "image": "images/riolu.jpg", "types": [ "Fighting" ], "specie": "Emanation Pokémon", "height": 0.7, "weight": 20.2, "abilities": [ "Steadfast", "Inner Focus", "Prankster" ], "stats": { "total": 285, "hp": 40, "attack": 70, "defense": 40, "speedAttack": 35, "speedDefense": 40, "speed": 60 }, "evolutions": [ "riolu", "lucario" ] } ], "link": "https://pokemondb.net/pokedex/riolu" }, { "num": 448, "name": "Lucario", "variations": [ { "name": "Lucario", "description": "Lucario is a Fighting/Steel type Pokémon introduced in Generation 4. It is known as the Aura Pokémon.\nLucario has a Mega Evolution, available from X & Y onwards.", "image": "images/lucario.jpg", "types": [ "Fighting", "Steel" ], "specie": "Aura Pokémon", "height": 1.2, "weight": 54, "abilities": [ "Steadfast", "Inner Focus", "Justified" ], "stats": { "total": 525, "hp": 70, "attack": 110, "defense": 70, "speedAttack": 115, "speedDefense": 70, "speed": 90 }, "evolutions": [ "riolu", "lucario" ] }, { "name": "Mega Lucario", "description": "Lucario is a Fighting/Steel type Pokémon introduced in Generation 4. It is known as the Aura Pokémon.\nLucario has a Mega Evolution, available from X & Y onwards.", "image": "images/lucario-mega.jpg", "types": [ "Fighting", "Steel" ], "specie": "Aura Pokémon", "height": 1.3, "weight": 57.5, "abilities": [ "Adaptability" ], "stats": { "total": 625, "hp": 70, "attack": 145, "defense": 88, "speedAttack": 140, "speedDefense": 70, "speed": 112 }, "evolutions": [ "riolu", "lucario" ] } ], "link": "https://pokemondb.net/pokedex/lucario" }, { "num": 449, "name": "Hippopotas", "variations": [ { "name": "Hippopotas", "description": "Hippopotas is a Ground type Pokémon introduced in Generation 4. It is known as the Hippo Pokémon.", "image": "images/hippopotas.jpg", "types": [ "Ground" ], "specie": "Hippo Pokémon", "height": 0.8, "weight": 49.5, "abilities": [ "Sand Stream", "Sand Force" ], "stats": { "total": 330, "hp": 68, "attack": 72, "defense": 78, "speedAttack": 38, "speedDefense": 42, "speed": 32 }, "evolutions": [ "hippopotas", "hippowdon" ] } ], "link": "https://pokemondb.net/pokedex/hippopotas" }, { "num": 450, "name": "Hippowdon", "variations": [ { "name": "Hippowdon", "description": "Hippowdon is a Ground type Pokémon introduced in Generation 4. It is known as the Heavyweight Pokémon.", "image": "images/hippowdon.jpg", "types": [ "Ground" ], "specie": "Heavyweight Pokémon", "height": 2, "weight": 300, "abilities": [ "Sand Stream", "Sand Force" ], "stats": { "total": 525, "hp": 108, "attack": 112, "defense": 118, "speedAttack": 68, "speedDefense": 72, "speed": 47 }, "evolutions": [ "hippopotas", "hippowdon" ] } ], "link": "https://pokemondb.net/pokedex/hippowdon" }, { "num": 451, "name": "Skorupi", "variations": [ { "name": "Skorupi", "description": "Skorupi is a Poison/Bug type Pokémon introduced in Generation 4. It is known as the Scorpion Pokémon.", "image": "images/skorupi.jpg", "types": [ "Poison", "Bug" ], "specie": "Scorpion Pokémon", "height": 0.8, "weight": 12, "abilities": [ "Battle Armor", "Sniper", "Keen Eye" ], "stats": { "total": 330, "hp": 40, "attack": 50, "defense": 90, "speedAttack": 30, "speedDefense": 55, "speed": 65 }, "evolutions": [ "skorupi", "drapion" ] } ], "link": "https://pokemondb.net/pokedex/skorupi" }, { "num": 452, "name": "Drapion", "variations": [ { "name": "Drapion", "description": "Drapion is a Poison/Dark type Pokémon introduced in Generation 4. It is known as the Ogre Scorp Pokémon.\nDrapion is a purple, scorpion-like Pokémon. Its body is segmented and it stands on four pointed legs. It has two large claws at the front, the tips of which release poison, and a similar large pincer on its tail. It can rotate its head 180 degrees. Drapion typically reside in the desert, although they have been spotted in marshland.\nAlthough Drapion is Poison/Dark type, it evolves from Skorupi which is Poison/Bug type, thus loses its Bug type upon evolution - a rare occurrence for Pokémon.", "image": "images/drapion.jpg", "types": [ "Poison", "Dark" ], "specie": "Ogre Scorp Pokémon", "height": 1.3, "weight": 61.5, "abilities": [ "Battle Armor", "Sniper", "Keen Eye" ], "stats": { "total": 500, "hp": 70, "attack": 90, "defense": 110, "speedAttack": 60, "speedDefense": 75, "speed": 95 }, "evolutions": [ "skorupi", "drapion" ] } ], "link": "https://pokemondb.net/pokedex/drapion" }, { "num": 453, "name": "Croagunk", "variations": [ { "name": "Croagunk", "description": "Croagunk is a Poison/Fighting type Pokémon introduced in Generation 4. It is known as the Toxic Mouth Pokémon.", "image": "images/croagunk.jpg", "types": [ "Poison", "Fighting" ], "specie": "Toxic Mouth Pokémon", "height": 0.7, "weight": 23, "abilities": [ "Anticipation", "Dry Skin", "Poison Touch" ], "stats": { "total": 300, "hp": 48, "attack": 61, "defense": 40, "speedAttack": 61, "speedDefense": 40, "speed": 50 }, "evolutions": [ "croagunk", "toxicroak" ] } ], "link": "https://pokemondb.net/pokedex/croagunk" }, { "num": 454, "name": "Toxicroak", "variations": [ { "name": "Toxicroak", "description": "Toxicroak is a Poison/Fighting type Pokémon introduced in Generation 4. It is known as the Toxic Mouth Pokémon.", "image": "images/toxicroak.jpg", "types": [ "Poison", "Fighting" ], "specie": "Toxic Mouth Pokémon", "height": 1.3, "weight": 44.4, "abilities": [ "Anticipation", "Dry Skin", "Poison Touch" ], "stats": { "total": 490, "hp": 83, "attack": 106, "defense": 65, "speedAttack": 86, "speedDefense": 65, "speed": 85 }, "evolutions": [ "croagunk", "toxicroak" ] } ], "link": "https://pokemondb.net/pokedex/toxicroak" }, { "num": 455, "name": "Carnivine", "variations": [ { "name": "Carnivine", "description": "Carnivine is a Grass type Pokémon introduced in Generation 4. It is known as the Bug Catcher Pokémon.", "image": "images/carnivine.jpg", "types": [ "Grass" ], "specie": "Bug Catcher Pokémon", "height": 1.4, "weight": 27, "abilities": [ "Levitate" ], "stats": { "total": 454, "hp": 74, "attack": 100, "defense": 72, "speedAttack": 90, "speedDefense": 72, "speed": 46 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/carnivine" }, { "num": 456, "name": "Finneon", "variations": [ { "name": "Finneon", "description": "Finneon is a Water type Pokémon introduced in Generation 4. It is known as the Wing Fish Pokémon.", "image": "images/finneon.jpg", "types": [ "Water" ], "specie": "Wing Fish Pokémon", "height": 0.4, "weight": 7, "abilities": [ "Swift Swim", "Storm Drain", "Water Veil" ], "stats": { "total": 330, "hp": 49, "attack": 49, "defense": 56, "speedAttack": 49, "speedDefense": 61, "speed": 66 }, "evolutions": [ "finneon", "lumineon" ] } ], "link": "https://pokemondb.net/pokedex/finneon" }, { "num": 457, "name": "Lumineon", "variations": [ { "name": "Lumineon", "description": "Lumineon is a Water type Pokémon introduced in Generation 4. It is known as the Neon Pokémon.", "image": "images/lumineon.jpg", "types": [ "Water" ], "specie": "Neon Pokémon", "height": 1.2, "weight": 24, "abilities": [ "Swift Swim", "Storm Drain", "Water Veil" ], "stats": { "total": 460, "hp": 69, "attack": 69, "defense": 76, "speedAttack": 69, "speedDefense": 86, "speed": 91 }, "evolutions": [ "finneon", "lumineon" ] } ], "link": "https://pokemondb.net/pokedex/lumineon" }, { "num": 458, "name": "Mantyke", "variations": [ { "name": "Mantyke", "description": "Mantyke is a Water/Flying type Pokémon introduced in Generation 4. It is known as the Kite Pokémon.", "image": "images/mantyke.jpg", "types": [ "Water", "Flying" ], "specie": "Kite Pokémon", "height": 1, "weight": 65, "abilities": [ "Swift Swim", "Water Absorb", "Water Veil" ], "stats": { "total": 345, "hp": 45, "attack": 20, "defense": 50, "speedAttack": 60, "speedDefense": 120, "speed": 50 }, "evolutions": [ "mantyke", "mantine" ] } ], "link": "https://pokemondb.net/pokedex/mantyke" }, { "num": 459, "name": "Snover", "variations": [ { "name": "Snover", "description": "Snover is a Grass/Ice type Pokémon introduced in Generation 4. It is known as the Frost Tree Pokémon.", "image": "images/snover.jpg", "types": [ "Grass", "Ice" ], "specie": "Frost Tree Pokémon", "height": 1, "weight": 50.5, "abilities": [ "Snow Warning", "Soundproof" ], "stats": { "total": 334, "hp": 60, "attack": 62, "defense": 50, "speedAttack": 62, "speedDefense": 60, "speed": 40 }, "evolutions": [ "snover", "abomasnow" ] } ], "link": "https://pokemondb.net/pokedex/snover" }, { "num": 460, "name": "Abomasnow", "variations": [ { "name": "Abomasnow", "description": "Abomasnow is a Grass/Ice type Pokémon introduced in Generation 4. It is known as the Frost Tree Pokémon.\nAbomasnow has a Mega Evolution, available from X & Y onwards.", "image": "images/abomasnow.jpg", "types": [ "Grass", "Ice" ], "specie": "Frost Tree Pokémon", "height": 2.2, "weight": 135.5, "abilities": [ "Snow Warning", "Soundproof" ], "stats": { "total": 494, "hp": 90, "attack": 92, "defense": 75, "speedAttack": 92, "speedDefense": 85, "speed": 60 }, "evolutions": [ "snover", "abomasnow" ] }, { "name": "Mega Abomasnow", "description": "Abomasnow is a Grass/Ice type Pokémon introduced in Generation 4. It is known as the Frost Tree Pokémon.\nAbomasnow has a Mega Evolution, available from X & Y onwards.", "image": "images/abomasnow-mega.jpg", "types": [ "Grass", "Ice" ], "specie": "Frost Tree Pokémon", "height": 2.7, "weight": 185, "abilities": [ "Snow Warning" ], "stats": { "total": 594, "hp": 90, "attack": 132, "defense": 105, "speedAttack": 132, "speedDefense": 105, "speed": 30 }, "evolutions": [ "snover", "abomasnow" ] } ], "link": "https://pokemondb.net/pokedex/abomasnow" }, { "num": 461, "name": "Weavile", "variations": [ { "name": "Weavile", "description": "Weavile is a Dark/Ice type Pokémon introduced in Generation 4. It is known as the Sharp Claw Pokémon.", "image": "images/weavile.jpg", "types": [ "Dark", "Ice" ], "specie": "Sharp Claw Pokémon", "height": 1.1, "weight": 34, "abilities": [ "Pressure", "Pickpocket" ], "stats": { "total": 510, "hp": 70, "attack": 120, "defense": 65, "speedAttack": 45, "speedDefense": 85, "speed": 125 }, "evolutions": [ "sneasel", "weavile" ] } ], "link": "https://pokemondb.net/pokedex/weavile" }, { "num": 462, "name": "Magnezone", "variations": [ { "name": "Magnezone", "description": "Magnezone is an Electric/Steel type Pokémon introduced in Generation 4. It is known as the Magnet Area Pokémon.", "image": "images/magnezone.jpg", "types": [ "Electric", "Steel" ], "specie": "Magnet Area Pokémon", "height": 1.2, "weight": 180, "abilities": [ "Magnet Pull", "Sturdy", "Analytic" ], "stats": { "total": 535, "hp": 70, "attack": 70, "defense": 115, "speedAttack": 130, "speedDefense": 90, "speed": 60 }, "evolutions": [ "magnemite", "magneton", "magnezone" ] } ], "link": "https://pokemondb.net/pokedex/magnezone" }, { "num": 463, "name": "Lickilicky", "variations": [ { "name": "Lickilicky", "description": "Lickilicky is a Normal type Pokémon introduced in Generation 4. It is known as the Licking Pokémon.", "image": "images/lickilicky.jpg", "types": [ "Normal" ], "specie": "Licking Pokémon", "height": 1.7, "weight": 140, "abilities": [ "Own Tempo", "Oblivious", "Cloud Nine" ], "stats": { "total": 515, "hp": 110, "attack": 85, "defense": 95, "speedAttack": 80, "speedDefense": 95, "speed": 50 }, "evolutions": [ "lickitung", "lickilicky" ] } ], "link": "https://pokemondb.net/pokedex/lickilicky" }, { "num": 464, "name": "Rhyperior", "variations": [ { "name": "Rhyperior", "description": "Rhyperior is a Ground/Rock type Pokémon introduced in Generation 4. It is known as the Drill Pokémon.", "image": "images/rhyperior.jpg", "types": [ "Ground", "Rock" ], "specie": "Drill Pokémon", "height": 2.4, "weight": 282.8, "abilities": [ "Lightning Rod", "Solid Rock", "Reckless" ], "stats": { "total": 535, "hp": 115, "attack": 140, "defense": 130, "speedAttack": 55, "speedDefense": 55, "speed": 40 }, "evolutions": [ "rhyhorn", "rhydon", "rhyperior" ] } ], "link": "https://pokemondb.net/pokedex/rhyperior" }, { "num": 465, "name": "Tangrowth", "variations": [ { "name": "Tangrowth", "description": "Tangrowth is a Grass type Pokémon introduced in Generation 4. It is known as the Vine Pokémon.", "image": "images/tangrowth.jpg", "types": [ "Grass" ], "specie": "Vine Pokémon", "height": 2, "weight": 128.6, "abilities": [ "Chlorophyll", "Leaf Guard", "Regenerator" ], "stats": { "total": 535, "hp": 100, "attack": 100, "defense": 125, "speedAttack": 110, "speedDefense": 50, "speed": 50 }, "evolutions": [ "tangela", "tangrowth" ] } ], "link": "https://pokemondb.net/pokedex/tangrowth" }, { "num": 466, "name": "Electivire", "variations": [ { "name": "Electivire", "description": "Electivire is an Electric type Pokémon introduced in Generation 4. It is known as the Thunderbolt Pokémon.", "image": "images/electivire.jpg", "types": [ "Electric" ], "specie": "Thunderbolt Pokémon", "height": 1.8, "weight": 138.6, "abilities": [ "Motor Drive", "Vital Spirit" ], "stats": { "total": 540, "hp": 75, "attack": 123, "defense": 67, "speedAttack": 95, "speedDefense": 85, "speed": 95 }, "evolutions": [ "elekid", "electabuzz", "electivire" ] } ], "link": "https://pokemondb.net/pokedex/electivire" }, { "num": 467, "name": "Magmortar", "variations": [ { "name": "Magmortar", "description": "Magmortar is a Fire type Pokémon introduced in Generation 4. It is known as the Blast Pokémon.", "image": "images/magmortar.jpg", "types": [ "Fire" ], "specie": "Blast Pokémon", "height": 1.6, "weight": 68, "abilities": [ "Flame Body", "Vital Spirit" ], "stats": { "total": 540, "hp": 75, "attack": 95, "defense": 67, "speedAttack": 125, "speedDefense": 95, "speed": 83 }, "evolutions": [ "magby", "magmar", "magmortar" ] } ], "link": "https://pokemondb.net/pokedex/magmortar" }, { "num": 468, "name": "Togekiss", "variations": [ { "name": "Togekiss", "description": "Togekiss is a Fairy/Flying type Pokémon introduced in Generation 4. It is known as the Jubilee Pokémon.", "image": "images/togekiss.jpg", "types": [ "Fairy", "Flying" ], "specie": "Jubilee Pokémon", "height": 1.5, "weight": 38, "abilities": [ "Hustle", "Serene Grace", "Super Luck" ], "stats": { "total": 545, "hp": 85, "attack": 50, "defense": 95, "speedAttack": 120, "speedDefense": 115, "speed": 80 }, "evolutions": [ "togepi", "togetic", "togekiss" ] } ], "link": "https://pokemondb.net/pokedex/togekiss" }, { "num": 469, "name": "Yanmega", "variations": [ { "name": "Yanmega", "description": "Yanmega is a Bug/Flying type Pokémon introduced in Generation 4. It is known as the Ogre Darner Pokémon.", "image": "images/yanmega.jpg", "types": [ "Bug", "Flying" ], "specie": "Ogre Darner Pokémon", "height": 1.9, "weight": 51.5, "abilities": [ "Speed Boost", "Tinted Lens", "Frisk" ], "stats": { "total": 515, "hp": 86, "attack": 76, "defense": 86, "speedAttack": 116, "speedDefense": 56, "speed": 95 }, "evolutions": [ "yanma", "yanmega" ] } ], "link": "https://pokemondb.net/pokedex/yanmega" }, { "num": 470, "name": "Leafeon", "variations": [ { "name": "Leafeon", "description": "Leafeon is a Grass type Pokémon introduced in Generation 4. It is known as the Verdant Pokémon.", "image": "images/leafeon.jpg", "types": [ "Grass" ], "specie": "Verdant Pokémon", "height": 1, "weight": 25.5, "abilities": [ "Leaf Guard", "Chlorophyll" ], "stats": { "total": 525, "hp": 65, "attack": 110, "defense": 130, "speedAttack": 60, "speedDefense": 65, "speed": 95 }, "evolutions": [ "eevee", "vaporeon", "jolteon", "flareon", "eevee", "espeon", "umbreon", "eevee", "leafeon", "glaceon", "eevee", "sylveon" ] } ], "link": "https://pokemondb.net/pokedex/leafeon" }, { "num": 471, "name": "Glaceon", "variations": [ { "name": "Glaceon", "description": "Glaceon is an Ice type Pokémon introduced in Generation 4. It is known as the Fresh Snow Pokémon.", "image": "images/glaceon.jpg", "types": [ "Ice" ], "specie": "Fresh Snow Pokémon", "height": 0.8, "weight": 25.9, "abilities": [ "Snow Cloak", "Ice Body" ], "stats": { "total": 525, "hp": 65, "attack": 60, "defense": 110, "speedAttack": 130, "speedDefense": 95, "speed": 65 }, "evolutions": [ "eevee", "vaporeon", "jolteon", "flareon", "eevee", "espeon", "umbreon", "eevee", "leafeon", "glaceon", "eevee", "sylveon" ] } ], "link": "https://pokemondb.net/pokedex/glaceon" }, { "num": 472, "name": "Gliscor", "variations": [ { "name": "Gliscor", "description": "Gliscor is a Ground/Flying type Pokémon introduced in Generation 4. It is known as the Fang Scorp Pokémon.", "image": "images/gliscor.jpg", "types": [ "Ground", "Flying" ], "specie": "Fang Scorp Pokémon", "height": 2, "weight": 42.5, "abilities": [ "Hyper Cutter", "Sand Veil", "Poison Heal" ], "stats": { "total": 510, "hp": 75, "attack": 95, "defense": 125, "speedAttack": 45, "speedDefense": 75, "speed": 95 }, "evolutions": [ "gligar", "gliscor" ] } ], "link": "https://pokemondb.net/pokedex/gliscor" }, { "num": 473, "name": "Mamoswine", "variations": [ { "name": "Mamoswine", "description": "Mamoswine is an Ice/Ground type Pokémon introduced in Generation 4. It is known as the Twin Tusk Pokémon.", "image": "images/mamoswine.jpg", "types": [ "Ice", "Ground" ], "specie": "Twin Tusk Pokémon", "height": 2.5, "weight": 291, "abilities": [ "Oblivious", "Snow Cloak", "Thick Fat" ], "stats": { "total": 530, "hp": 110, "attack": 130, "defense": 80, "speedAttack": 70, "speedDefense": 60, "speed": 80 }, "evolutions": [ "swinub", "piloswine", "mamoswine" ] } ], "link": "https://pokemondb.net/pokedex/mamoswine" }, { "num": 474, "name": "Porygon-Z", "variations": [ { "name": "Porygon-Z", "description": "Porygon-Z is a Normal type Pokémon introduced in Generation 4. It is known as the Virtual Pokémon.", "image": "images/porygon-z.jpg", "types": [ "Normal" ], "specie": "Virtual Pokémon", "height": 0.9, "weight": 34, "abilities": [ "Adaptability", "Download", "Analytic" ], "stats": { "total": 535, "hp": 85, "attack": 80, "defense": 70, "speedAttack": 135, "speedDefense": 75, "speed": 90 }, "evolutions": [ "porygon", "porygon2", "porygon-z" ] } ], "link": "https://pokemondb.net/pokedex/porygon-z" }, { "num": 475, "name": "Gallade", "variations": [ { "name": "Gallade", "description": "Gallade is a Psychic/Fighting type Pokémon introduced in Generation 4. It is known as the Blade Pokémon.\nGallade has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/gallade.jpg", "types": [ "Psychic", "Fighting" ], "specie": "Blade Pokémon", "height": 1.6, "weight": 52, "abilities": [ "Steadfast", "Justified" ], "stats": { "total": 518, "hp": 68, "attack": 125, "defense": 65, "speedAttack": 65, "speedDefense": 115, "speed": 80 }, "evolutions": [ "ralts", "kirlia", "gardevoir", "gallade" ] }, { "name": "Mega Gallade", "description": "Gallade is a Psychic/Fighting type Pokémon introduced in Generation 4. It is known as the Blade Pokémon.\nGallade has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/gallade-mega.jpg", "types": [ "Psychic", "Fighting" ], "specie": "Blade Pokémon", "height": 1.6, "weight": 56.4, "abilities": [ "Inner Focus" ], "stats": { "total": 618, "hp": 68, "attack": 165, "defense": 95, "speedAttack": 65, "speedDefense": 115, "speed": 110 }, "evolutions": [ "ralts", "kirlia", "gardevoir", "gallade" ] } ], "link": "https://pokemondb.net/pokedex/gallade" }, { "num": 476, "name": "Probopass", "variations": [ { "name": "Probopass", "description": "Probopass is a Rock/Steel type Pokémon introduced in Generation 4. It is known as the Compass Pokémon.", "image": "images/probopass.jpg", "types": [ "Rock", "Steel" ], "specie": "Compass Pokémon", "height": 1.4, "weight": 340, "abilities": [ "Sturdy", "Magnet Pull", "Sand Force" ], "stats": { "total": 525, "hp": 60, "attack": 55, "defense": 145, "speedAttack": 75, "speedDefense": 150, "speed": 40 }, "evolutions": [ "nosepass", "probopass" ] } ], "link": "https://pokemondb.net/pokedex/probopass" }, { "num": 477, "name": "Dusknoir", "variations": [ { "name": "Dusknoir", "description": "Dusknoir is a Ghost type Pokémon introduced in Generation 4. It is known as the Gripper Pokémon.", "image": "images/dusknoir.jpg", "types": [ "Ghost" ], "specie": "Gripper Pokémon", "height": 2.2, "weight": 106.6, "abilities": [ "Pressure", "Frisk" ], "stats": { "total": 525, "hp": 45, "attack": 100, "defense": 135, "speedAttack": 65, "speedDefense": 135, "speed": 45 }, "evolutions": [ "duskull", "dusclops", "dusknoir" ] } ], "link": "https://pokemondb.net/pokedex/dusknoir" }, { "num": 478, "name": "Froslass", "variations": [ { "name": "Froslass", "description": "Froslass is an Ice/Ghost type Pokémon introduced in Generation 4. It is known as the Snow Land Pokémon.", "image": "images/froslass.jpg", "types": [ "Ice", "Ghost" ], "specie": "Snow Land Pokémon", "height": 1.3, "weight": 26.6, "abilities": [ "Snow Cloak", "Cursed Body" ], "stats": { "total": 480, "hp": 70, "attack": 80, "defense": 70, "speedAttack": 80, "speedDefense": 70, "speed": 110 }, "evolutions": [ "snorunt", "glalie", "froslass" ] } ], "link": "https://pokemondb.net/pokedex/froslass" }, { "num": 479, "name": "Rotom", "variations": [ { "name": "Rotom", "description": "Rotom is an Electric/Ghost type Pokémon introduced in Generation 4. It is known as the Plasma Pokémon.\nRotom has 5 alternate forms introduced in Pokémon Platinum. Rotom transforms when it possesses different household appliances: an oven (Heat Rotom), a washing machine (Wash Rotom), a refrigerator (Frost Rotom), a fan (Fan Rotom), and a lawnmower (Mow Rotom).\nIn Generation 4, all Rotom forms were Electric/Ghost type. From Generation 5 onwards, they each have their own secondary type.", "image": "images/rotom.jpg", "types": [ "Electric", "Ghost" ], "specie": "Plasma Pokémon", "height": 0.3, "weight": 0.3, "abilities": [ "Levitate" ], "stats": { "total": 440, "hp": 50, "attack": 50, "defense": 77, "speedAttack": 95, "speedDefense": 77, "speed": 91 }, "evolutions": [] }, { "name": "Heat Rotom", "description": "Rotom is an Electric/Ghost type Pokémon introduced in Generation 4. It is known as the Plasma Pokémon.\nRotom has 5 alternate forms introduced in Pokémon Platinum. Rotom transforms when it possesses different household appliances: an oven (Heat Rotom), a washing machine (Wash Rotom), a refrigerator (Frost Rotom), a fan (Fan Rotom), and a lawnmower (Mow Rotom).\nIn Generation 4, all Rotom forms were Electric/Ghost type. From Generation 5 onwards, they each have their own secondary type.", "image": "images/rotom-heat.jpg", "types": [ "Electric", "Fire" ], "specie": "Plasma Pokémon", "height": 0.3, "weight": 0.3, "abilities": [ "Levitate" ], "stats": { "total": 520, "hp": 50, "attack": 65, "defense": 107, "speedAttack": 105, "speedDefense": 107, "speed": 86 }, "evolutions": [] }, { "name": "Wash Rotom", "description": "Rotom is an Electric/Ghost type Pokémon introduced in Generation 4. It is known as the Plasma Pokémon.\nRotom has 5 alternate forms introduced in Pokémon Platinum. Rotom transforms when it possesses different household appliances: an oven (Heat Rotom), a washing machine (Wash Rotom), a refrigerator (Frost Rotom), a fan (Fan Rotom), and a lawnmower (Mow Rotom).\nIn Generation 4, all Rotom forms were Electric/Ghost type. From Generation 5 onwards, they each have their own secondary type.", "image": "images/rotom-wash.jpg", "types": [ "Electric", "Water" ], "specie": "Plasma Pokémon", "height": 0.3, "weight": 0.3, "abilities": [ "Levitate" ], "stats": { "total": 520, "hp": 50, "attack": 65, "defense": 107, "speedAttack": 105, "speedDefense": 107, "speed": 86 }, "evolutions": [] }, { "name": "Frost Rotom", "description": "Rotom is an Electric/Ghost type Pokémon introduced in Generation 4. It is known as the Plasma Pokémon.\nRotom has 5 alternate forms introduced in Pokémon Platinum. Rotom transforms when it possesses different household appliances: an oven (Heat Rotom), a washing machine (Wash Rotom), a refrigerator (Frost Rotom), a fan (Fan Rotom), and a lawnmower (Mow Rotom).\nIn Generation 4, all Rotom forms were Electric/Ghost type. From Generation 5 onwards, they each have their own secondary type.", "image": "images/rotom-frost.jpg", "types": [ "Electric", "Ice" ], "specie": "Plasma Pokémon", "height": 0.3, "weight": 0.3, "abilities": [ "Levitate" ], "stats": { "total": 520, "hp": 50, "attack": 65, "defense": 107, "speedAttack": 105, "speedDefense": 107, "speed": 86 }, "evolutions": [] }, { "name": "Fan Rotom", "description": "Rotom is an Electric/Ghost type Pokémon introduced in Generation 4. It is known as the Plasma Pokémon.\nRotom has 5 alternate forms introduced in Pokémon Platinum. Rotom transforms when it possesses different household appliances: an oven (Heat Rotom), a washing machine (Wash Rotom), a refrigerator (Frost Rotom), a fan (Fan Rotom), and a lawnmower (Mow Rotom).\nIn Generation 4, all Rotom forms were Electric/Ghost type. From Generation 5 onwards, they each have their own secondary type.", "image": "images/rotom-fan.jpg", "types": [ "Electric", "Flying" ], "specie": "Plasma Pokémon", "height": 0.3, "weight": 0.3, "abilities": [ "Levitate" ], "stats": { "total": 520, "hp": 50, "attack": 65, "defense": 107, "speedAttack": 105, "speedDefense": 107, "speed": 86 }, "evolutions": [] }, { "name": "Mow Rotom", "description": "Rotom is an Electric/Ghost type Pokémon introduced in Generation 4. It is known as the Plasma Pokémon.\nRotom has 5 alternate forms introduced in Pokémon Platinum. Rotom transforms when it possesses different household appliances: an oven (Heat Rotom), a washing machine (Wash Rotom), a refrigerator (Frost Rotom), a fan (Fan Rotom), and a lawnmower (Mow Rotom).\nIn Generation 4, all Rotom forms were Electric/Ghost type. From Generation 5 onwards, they each have their own secondary type.", "image": "images/rotom-mow.jpg", "types": [ "Electric", "Grass" ], "specie": "Plasma Pokémon", "height": 0.3, "weight": 0.3, "abilities": [ "Levitate" ], "stats": { "total": 520, "hp": 50, "attack": 65, "defense": 107, "speedAttack": 105, "speedDefense": 107, "speed": 86 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/rotom" }, { "num": 480, "name": "Uxie", "variations": [ { "name": "Uxie", "description": "Uxie is a Psychic type Pokémon introduced in Generation 4. It is known as the Knowledge Pokémon.", "image": "images/uxie.jpg", "types": [ "Psychic" ], "specie": "Knowledge Pokémon", "height": 0.3, "weight": 0.3, "abilities": [ "Levitate" ], "stats": { "total": 580, "hp": 75, "attack": 75, "defense": 130, "speedAttack": 75, "speedDefense": 130, "speed": 95 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/uxie" }, { "num": 481, "name": "Mesprit", "variations": [ { "name": "Mesprit", "description": "Mesprit is a Psychic type Pokémon introduced in Generation 4. It is known as the Emotion Pokémon.", "image": "images/mesprit.jpg", "types": [ "Psychic" ], "specie": "Emotion Pokémon", "height": 0.3, "weight": 0.3, "abilities": [ "Levitate" ], "stats": { "total": 580, "hp": 80, "attack": 105, "defense": 105, "speedAttack": 105, "speedDefense": 105, "speed": 80 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/mesprit" }, { "num": 482, "name": "Azelf", "variations": [ { "name": "Azelf", "description": "Azelf is a Psychic type Pokémon introduced in Generation 4. It is known as the Willpower Pokémon.", "image": "images/azelf.jpg", "types": [ "Psychic" ], "specie": "Willpower Pokémon", "height": 0.3, "weight": 0.3, "abilities": [ "Levitate" ], "stats": { "total": 580, "hp": 75, "attack": 125, "defense": 70, "speedAttack": 125, "speedDefense": 70, "speed": 115 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/azelf" }, { "num": 483, "name": "Dialga", "variations": [ { "name": "Dialga", "description": "Dialga is a Steel/Dragon type Pokémon introduced in Generation 4. It is known as the Temporal Pokémon.", "image": "images/dialga.jpg", "types": [ "Steel", "Dragon" ], "specie": "Temporal Pokémon", "height": 5.4, "weight": 683, "abilities": [ "Pressure", "Telepathy" ], "stats": { "total": 680, "hp": 100, "attack": 120, "defense": 120, "speedAttack": 150, "speedDefense": 100, "speed": 90 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/dialga" }, { "num": 484, "name": "Palkia", "variations": [ { "name": "Palkia", "description": "Palkia is a Water/Dragon type Pokémon introduced in Generation 4. It is known as the Spatial Pokémon.", "image": "images/palkia.jpg", "types": [ "Water", "Dragon" ], "specie": "Spatial Pokémon", "height": 4.2, "weight": 336, "abilities": [ "Pressure", "Telepathy" ], "stats": { "total": 680, "hp": 90, "attack": 120, "defense": 100, "speedAttack": 150, "speedDefense": 120, "speed": 100 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/palkia" }, { "num": 485, "name": "Heatran", "variations": [ { "name": "Heatran", "description": "Heatran is a Fire/Steel type Pokémon introduced in Generation 4. It is known as the Lava Dome Pokémon.", "image": "images/heatran.jpg", "types": [ "Fire", "Steel" ], "specie": "Lava Dome Pokémon", "height": 1.7, "weight": 430, "abilities": [ "Flash Fire", "Flame Body" ], "stats": { "total": 600, "hp": 91, "attack": 90, "defense": 106, "speedAttack": 130, "speedDefense": 106, "speed": 77 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/heatran" }, { "num": 486, "name": "Regigigas", "variations": [ { "name": "Regigigas", "description": "Regigigas is a Normal type Pokémon introduced in Generation 4. It is known as the Colossal Pokémon.", "image": "images/regigigas.jpg", "types": [ "Normal" ], "specie": "Colossal Pokémon", "height": 3.7, "weight": 420, "abilities": [ "Slow Start" ], "stats": { "total": 670, "hp": 110, "attack": 160, "defense": 110, "speedAttack": 80, "speedDefense": 110, "speed": 100 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/regigigas" }, { "num": 487, "name": "Giratina", "variations": [ { "name": "Altered Forme", "description": "Giratina is a Ghost/Dragon type Pokémon introduced in Generation 4. It is known as the Renegade Pokémon.", "image": "images/giratina-altered.jpg", "types": [ "Ghost", "Dragon" ], "specie": "Renegade Pokémon", "height": 4.5, "weight": 750, "abilities": [ "Pressure", "Telepathy" ], "stats": { "total": 680, "hp": 150, "attack": 100, "defense": 120, "speedAttack": 100, "speedDefense": 120, "speed": 90 }, "evolutions": [] }, { "name": "Origin Forme", "description": "Giratina is a Ghost/Dragon type Pokémon introduced in Generation 4. It is known as the Renegade Pokémon.", "image": "images/giratina-origin.jpg", "types": [ "Ghost", "Dragon" ], "specie": "Renegade Pokémon", "height": 6.9, "weight": 650, "abilities": [ "Levitate" ], "stats": { "total": 680, "hp": 150, "attack": 120, "defense": 100, "speedAttack": 120, "speedDefense": 100, "speed": 90 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/giratina" }, { "num": 488, "name": "Cresselia", "variations": [ { "name": "Cresselia", "description": "Cresselia is a Psychic type Pokémon introduced in Generation 4. It is known as the Lunar Pokémon.", "image": "images/cresselia.jpg", "types": [ "Psychic" ], "specie": "Lunar Pokémon", "height": 1.5, "weight": 85.6, "abilities": [ "Levitate" ], "stats": { "total": 600, "hp": 120, "attack": 70, "defense": 120, "speedAttack": 75, "speedDefense": 130, "speed": 85 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/cresselia" }, { "num": 489, "name": "Phione", "variations": [ { "name": "Phione", "description": "Phione is a Water type Pokémon introduced in Generation 4. It is known as the Sea Drifter Pokémon.", "image": "images/phione.jpg", "types": [ "Water" ], "specie": "Sea Drifter Pokémon", "height": 0.4, "weight": 3.1, "abilities": [ "Hydration" ], "stats": { "total": 480, "hp": 80, "attack": 80, "defense": 80, "speedAttack": 80, "speedDefense": 80, "speed": 80 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/phione" }, { "num": 490, "name": "Manaphy", "variations": [ { "name": "Manaphy", "description": "Manaphy is a Water type Pokémon introduced in Generation 4. It is known as the Seafaring Pokémon.", "image": "images/manaphy.jpg", "types": [ "Water" ], "specie": "Seafaring Pokémon", "height": 0.3, "weight": 1.4, "abilities": [ "Hydration" ], "stats": { "total": 600, "hp": 100, "attack": 100, "defense": 100, "speedAttack": 100, "speedDefense": 100, "speed": 100 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/manaphy" }, { "num": 491, "name": "Darkrai", "variations": [ { "name": "Darkrai", "description": "Darkrai is a Dark type Pokémon introduced in Generation 4. It is known as the Pitch-Black Pokémon.", "image": "images/darkrai.jpg", "types": [ "Dark" ], "specie": "Pitch-Black Pokémon", "height": 1.5, "weight": 50.5, "abilities": [ "Bad Dreams" ], "stats": { "total": 600, "hp": 70, "attack": 90, "defense": 90, "speedAttack": 135, "speedDefense": 90, "speed": 125 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/darkrai" }, { "num": 492, "name": "Shaymin", "variations": [ { "name": "Land Forme", "description": "Shaymin is a Grass type Pokémon introduced in Generation 4. It is known as the Gratitude Pokémon.", "image": "images/shaymin-land.jpg", "types": [ "Grass" ], "specie": "Gratitude Pokémon", "height": 0.2, "weight": 2.1, "abilities": [ "Natural Cure" ], "stats": { "total": 600, "hp": 100, "attack": 100, "defense": 100, "speedAttack": 100, "speedDefense": 100, "speed": 100 }, "evolutions": [] }, { "name": "Sky Forme", "description": "Shaymin is a Grass type Pokémon introduced in Generation 4. It is known as the Gratitude Pokémon.", "image": "images/shaymin-sky.jpg", "types": [ "Grass", "Flying" ], "specie": "Gratitude Pokémon", "height": 0.4, "weight": 5.2, "abilities": [ "Serene Grace" ], "stats": { "total": 600, "hp": 100, "attack": 103, "defense": 75, "speedAttack": 120, "speedDefense": 75, "speed": 127 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/shaymin" }, { "num": 493, "name": "Arceus", "variations": [ { "name": "Arceus", "description": "Arceus is a Normal type Pokémon introduced in Generation 4. It is known as the Alpha Pokémon.", "image": "images/arceus.jpg", "types": [ "Normal" ], "specie": "Alpha Pokémon", "height": 3.2, "weight": 320, "abilities": [ "Multitype" ], "stats": { "total": 720, "hp": 120, "attack": 120, "defense": 120, "speedAttack": 120, "speedDefense": 120, "speed": 120 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/arceus" }, { "num": 494, "name": "Victini", "variations": [ { "name": "Victini", "description": "Victini is a Psychic/Fire type Pokémon introduced in Generation 5. It is known as the Victory Pokémon.", "image": "images/victini.jpg", "types": [ "Psychic", "Fire" ], "specie": "Victory Pokémon", "height": 0.4, "weight": 4, "abilities": [ "Victory Star" ], "stats": { "total": 600, "hp": 100, "attack": 100, "defense": 100, "speedAttack": 100, "speedDefense": 100, "speed": 100 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/victini" }, { "num": 495, "name": "Snivy", "variations": [ { "name": "Snivy", "description": "Snivy is a Grass type Pokémon introduced in Generation 5. It is known as the Grass Snake Pokémon.", "image": "images/snivy.jpg", "types": [ "Grass" ], "specie": "Grass Snake Pokémon", "height": 0.6, "weight": 8.1, "abilities": [ "Overgrow", "Contrary" ], "stats": { "total": 308, "hp": 45, "attack": 45, "defense": 55, "speedAttack": 45, "speedDefense": 55, "speed": 63 }, "evolutions": [ "snivy", "servine", "serperior" ] } ], "link": "https://pokemondb.net/pokedex/snivy" }, { "num": 496, "name": "Servine", "variations": [ { "name": "Servine", "description": "Servine is a Grass type Pokémon introduced in Generation 5. It is known as the Grass Snake Pokémon.", "image": "images/servine.jpg", "types": [ "Grass" ], "specie": "Grass Snake Pokémon", "height": 0.8, "weight": 16, "abilities": [ "Overgrow", "Contrary" ], "stats": { "total": 413, "hp": 60, "attack": 60, "defense": 75, "speedAttack": 60, "speedDefense": 75, "speed": 83 }, "evolutions": [ "snivy", "servine", "serperior" ] } ], "link": "https://pokemondb.net/pokedex/servine" }, { "num": 497, "name": "Serperior", "variations": [ { "name": "Serperior", "description": "Serperior is a Grass type Pokémon introduced in Generation 5. It is known as the Regal Pokémon.", "image": "images/serperior.jpg", "types": [ "Grass" ], "specie": "Regal Pokémon", "height": 3.3, "weight": 63, "abilities": [ "Overgrow", "Contrary" ], "stats": { "total": 528, "hp": 75, "attack": 75, "defense": 95, "speedAttack": 75, "speedDefense": 95, "speed": 113 }, "evolutions": [ "snivy", "servine", "serperior" ] } ], "link": "https://pokemondb.net/pokedex/serperior" }, { "num": 498, "name": "Tepig", "variations": [ { "name": "Tepig", "description": "Tepig is a Fire type Pokémon introduced in Generation 5. It is known as the Fire Pig Pokémon.", "image": "images/tepig.jpg", "types": [ "Fire" ], "specie": "Fire Pig Pokémon", "height": 0.5, "weight": 9.9, "abilities": [ "Blaze", "Thick Fat" ], "stats": { "total": 308, "hp": 65, "attack": 63, "defense": 45, "speedAttack": 45, "speedDefense": 45, "speed": 45 }, "evolutions": [ "tepig", "pignite", "emboar" ] } ], "link": "https://pokemondb.net/pokedex/tepig" }, { "num": 499, "name": "Pignite", "variations": [ { "name": "Pignite", "description": "Pignite is a Fire/Fighting type Pokémon introduced in Generation 5. It is known as the Fire Pig Pokémon.", "image": "images/pignite.jpg", "types": [ "Fire", "Fighting" ], "specie": "Fire Pig Pokémon", "height": 1, "weight": 55.5, "abilities": [ "Blaze", "Thick Fat" ], "stats": { "total": 418, "hp": 90, "attack": 93, "defense": 55, "speedAttack": 70, "speedDefense": 55, "speed": 55 }, "evolutions": [ "tepig", "pignite", "emboar" ] } ], "link": "https://pokemondb.net/pokedex/pignite" }, { "num": 500, "name": "Emboar", "variations": [ { "name": "Emboar", "description": "Emboar is a Fire/Fighting type Pokémon introduced in Generation 5. It is known as the Mega Fire Pig Pokémon.", "image": "images/emboar.jpg", "types": [ "Fire", "Fighting" ], "specie": "Mega Fire Pig Pokémon", "height": 1.6, "weight": 150, "abilities": [ "Blaze", "Reckless" ], "stats": { "total": 528, "hp": 110, "attack": 123, "defense": 65, "speedAttack": 100, "speedDefense": 65, "speed": 65 }, "evolutions": [ "tepig", "pignite", "emboar" ] } ], "link": "https://pokemondb.net/pokedex/emboar" }, { "num": 501, "name": "Oshawott", "variations": [ { "name": "Oshawott", "description": "Oshawott is a Water type Pokémon introduced in Generation 5. It is known as the Sea Otter Pokémon.", "image": "images/oshawott.jpg", "types": [ "Water" ], "specie": "Sea Otter Pokémon", "height": 0.5, "weight": 5.9, "abilities": [ "Torrent", "Shell Armor" ], "stats": { "total": 308, "hp": 55, "attack": 55, "defense": 45, "speedAttack": 63, "speedDefense": 45, "speed": 45 }, "evolutions": [ "oshawott", "dewott", "samurott" ] } ], "link": "https://pokemondb.net/pokedex/oshawott" }, { "num": 502, "name": "Dewott", "variations": [ { "name": "Dewott", "description": "Dewott is a Water type Pokémon introduced in Generation 5. It is known as the Discipline Pokémon.", "image": "images/dewott.jpg", "types": [ "Water" ], "specie": "Discipline Pokémon", "height": 0.8, "weight": 24.5, "abilities": [ "Torrent", "Shell Armor" ], "stats": { "total": 413, "hp": 75, "attack": 75, "defense": 60, "speedAttack": 83, "speedDefense": 60, "speed": 60 }, "evolutions": [ "oshawott", "dewott", "samurott" ] } ], "link": "https://pokemondb.net/pokedex/dewott" }, { "num": 503, "name": "Samurott", "variations": [ { "name": "Samurott", "description": "Samurott is a Water type Pokémon introduced in Generation 5. It is known as the Formidable Pokémon.", "image": "images/samurott.jpg", "types": [ "Water" ], "specie": "Formidable Pokémon", "height": 1.5, "weight": 94.6, "abilities": [ "Torrent", "Shell Armor" ], "stats": { "total": 528, "hp": 95, "attack": 100, "defense": 85, "speedAttack": 108, "speedDefense": 70, "speed": 70 }, "evolutions": [ "oshawott", "dewott", "samurott" ] } ], "link": "https://pokemondb.net/pokedex/samurott" }, { "num": 504, "name": "Patrat", "variations": [ { "name": "Patrat", "description": "Patrat is a Normal type Pokémon introduced in Generation 5. It is known as the Scout Pokémon.", "image": "images/patrat.jpg", "types": [ "Normal" ], "specie": "Scout Pokémon", "height": 0.5, "weight": 11.6, "abilities": [ "Run Away", "Keen Eye", "Analytic" ], "stats": { "total": 255, "hp": 45, "attack": 55, "defense": 39, "speedAttack": 35, "speedDefense": 39, "speed": 42 }, "evolutions": [ "patrat", "watchog" ] } ], "link": "https://pokemondb.net/pokedex/patrat" }, { "num": 505, "name": "Watchog", "variations": [ { "name": "Watchog", "description": "Watchog is a Normal type Pokémon introduced in Generation 5. It is known as the Lookout Pokémon.", "image": "images/watchog.jpg", "types": [ "Normal" ], "specie": "Lookout Pokémon", "height": 1.1, "weight": 27, "abilities": [ "Illuminate", "Keen Eye", "Analytic" ], "stats": { "total": 420, "hp": 60, "attack": 85, "defense": 69, "speedAttack": 60, "speedDefense": 69, "speed": 77 }, "evolutions": [ "patrat", "watchog" ] } ], "link": "https://pokemondb.net/pokedex/watchog" }, { "num": 506, "name": "Lillipup", "variations": [ { "name": "Lillipup", "description": "Lillipup is a Normal type Pokémon introduced in Generation 5. It is known as the Puppy Pokémon.", "image": "images/lillipup.jpg", "types": [ "Normal" ], "specie": "Puppy Pokémon", "height": 0.4, "weight": 4.1, "abilities": [ "Vital Spirit", "Pickup", "Run Away" ], "stats": { "total": 275, "hp": 45, "attack": 60, "defense": 45, "speedAttack": 25, "speedDefense": 45, "speed": 55 }, "evolutions": [ "lillipup", "herdier", "stoutland" ] } ], "link": "https://pokemondb.net/pokedex/lillipup" }, { "num": 507, "name": "Herdier", "variations": [ { "name": "Herdier", "description": "Herdier is a Normal type Pokémon introduced in Generation 5. It is known as the Loyal Dog Pokémon.", "image": "images/herdier.jpg", "types": [ "Normal" ], "specie": "Loyal Dog Pokémon", "height": 0.9, "weight": 14.7, "abilities": [ "Intimidate", "Sand Rush", "Scrappy" ], "stats": { "total": 370, "hp": 65, "attack": 80, "defense": 65, "speedAttack": 35, "speedDefense": 65, "speed": 60 }, "evolutions": [ "lillipup", "herdier", "stoutland" ] } ], "link": "https://pokemondb.net/pokedex/herdier" }, { "num": 508, "name": "Stoutland", "variations": [ { "name": "Stoutland", "description": "Stoutland is a Normal type Pokémon introduced in Generation 5. It is known as the Big-Hearted Pokémon.", "image": "images/stoutland.jpg", "types": [ "Normal" ], "specie": "Big-Hearted Pokémon", "height": 1.2, "weight": 61, "abilities": [ "Intimidate", "Sand Rush", "Scrappy" ], "stats": { "total": 500, "hp": 85, "attack": 110, "defense": 90, "speedAttack": 45, "speedDefense": 90, "speed": 80 }, "evolutions": [ "lillipup", "herdier", "stoutland" ] } ], "link": "https://pokemondb.net/pokedex/stoutland" }, { "num": 509, "name": "Purrloin", "variations": [ { "name": "Purrloin", "description": "Purrloin is a Dark type Pokémon introduced in Generation 5. It is known as the Devious Pokémon.", "image": "images/purrloin.jpg", "types": [ "Dark" ], "specie": "Devious Pokémon", "height": 0.4, "weight": 10.1, "abilities": [ "Limber", "Unburden", "Prankster" ], "stats": { "total": 281, "hp": 41, "attack": 50, "defense": 37, "speedAttack": 50, "speedDefense": 37, "speed": 66 }, "evolutions": [ "purrloin", "liepard" ] } ], "link": "https://pokemondb.net/pokedex/purrloin" }, { "num": 510, "name": "Liepard", "variations": [ { "name": "Liepard", "description": "Liepard is a Dark type Pokémon introduced in Generation 5. It is known as the Cruel Pokémon.", "image": "images/liepard.jpg", "types": [ "Dark" ], "specie": "Cruel Pokémon", "height": 1.1, "weight": 37.5, "abilities": [ "Limber", "Unburden", "Prankster" ], "stats": { "total": 446, "hp": 64, "attack": 88, "defense": 50, "speedAttack": 88, "speedDefense": 50, "speed": 106 }, "evolutions": [ "purrloin", "liepard" ] } ], "link": "https://pokemondb.net/pokedex/liepard" }, { "num": 511, "name": "Pansage", "variations": [ { "name": "Pansage", "description": "Pansage is a Grass type Pokémon introduced in Generation 5. It is known as the Grass Monkey Pokémon.", "image": "images/pansage.jpg", "types": [ "Grass" ], "specie": "Grass Monkey Pokémon", "height": 0.6, "weight": 10.5, "abilities": [ "Gluttony", "Overgrow" ], "stats": { "total": 316, "hp": 50, "attack": 53, "defense": 48, "speedAttack": 53, "speedDefense": 48, "speed": 64 }, "evolutions": [ "pansage", "simisage" ] } ], "link": "https://pokemondb.net/pokedex/pansage" }, { "num": 512, "name": "Simisage", "variations": [ { "name": "Simisage", "description": "Simisage is a Grass type Pokémon introduced in Generation 5. It is known as the Thorn Monkey Pokémon.", "image": "images/simisage.jpg", "types": [ "Grass" ], "specie": "Thorn Monkey Pokémon", "height": 1.1, "weight": 30.5, "abilities": [ "Gluttony", "Overgrow" ], "stats": { "total": 498, "hp": 75, "attack": 98, "defense": 63, "speedAttack": 98, "speedDefense": 63, "speed": 101 }, "evolutions": [ "pansage", "simisage" ] } ], "link": "https://pokemondb.net/pokedex/simisage" }, { "num": 513, "name": "Pansear", "variations": [ { "name": "Pansear", "description": "Pansear is a Fire type Pokémon introduced in Generation 5. It is known as the High Temp Pokémon.", "image": "images/pansear.jpg", "types": [ "Fire" ], "specie": "High Temp Pokémon", "height": 0.6, "weight": 11, "abilities": [ "Gluttony", "Blaze" ], "stats": { "total": 316, "hp": 50, "attack": 53, "defense": 48, "speedAttack": 53, "speedDefense": 48, "speed": 64 }, "evolutions": [ "pansear", "simisear" ] } ], "link": "https://pokemondb.net/pokedex/pansear" }, { "num": 514, "name": "Simisear", "variations": [ { "name": "Simisear", "description": "Simisear is a Fire type Pokémon introduced in Generation 5. It is known as the Ember Pokémon.", "image": "images/simisear.jpg", "types": [ "Fire" ], "specie": "Ember Pokémon", "height": 1, "weight": 28, "abilities": [ "Gluttony", "Blaze" ], "stats": { "total": 498, "hp": 75, "attack": 98, "defense": 63, "speedAttack": 98, "speedDefense": 63, "speed": 101 }, "evolutions": [ "pansear", "simisear" ] } ], "link": "https://pokemondb.net/pokedex/simisear" }, { "num": 515, "name": "Panpour", "variations": [ { "name": "Panpour", "description": "Panpour is a Water type Pokémon introduced in Generation 5. It is known as the Spray Pokémon.", "image": "images/panpour.jpg", "types": [ "Water" ], "specie": "Spray Pokémon", "height": 0.6, "weight": 13.5, "abilities": [ "Gluttony", "Torrent" ], "stats": { "total": 316, "hp": 50, "attack": 53, "defense": 48, "speedAttack": 53, "speedDefense": 48, "speed": 64 }, "evolutions": [ "panpour", "simipour" ] } ], "link": "https://pokemondb.net/pokedex/panpour" }, { "num": 516, "name": "Simipour", "variations": [ { "name": "Simipour", "description": "Simipour is a Water type Pokémon introduced in Generation 5. It is known as the Geyser Pokémon.", "image": "images/simipour.jpg", "types": [ "Water" ], "specie": "Geyser Pokémon", "height": 1, "weight": 29, "abilities": [ "Gluttony", "Torrent" ], "stats": { "total": 498, "hp": 75, "attack": 98, "defense": 63, "speedAttack": 98, "speedDefense": 63, "speed": 101 }, "evolutions": [ "panpour", "simipour" ] } ], "link": "https://pokemondb.net/pokedex/simipour" }, { "num": 517, "name": "Munna", "variations": [ { "name": "Munna", "description": "Munna is a Psychic type Pokémon introduced in Generation 5. It is known as the Dream Eater Pokémon.", "image": "images/munna.jpg", "types": [ "Psychic" ], "specie": "Dream Eater Pokémon", "height": 0.6, "weight": 23.3, "abilities": [ "Forewarn", "Synchronize", "Telepathy" ], "stats": { "total": 292, "hp": 76, "attack": 25, "defense": 45, "speedAttack": 67, "speedDefense": 55, "speed": 24 }, "evolutions": [ "munna", "musharna" ] } ], "link": "https://pokemondb.net/pokedex/munna" }, { "num": 518, "name": "Musharna", "variations": [ { "name": "Musharna", "description": "Musharna is a Psychic type Pokémon introduced in Generation 5. It is known as the Drowsing Pokémon.", "image": "images/musharna.jpg", "types": [ "Psychic" ], "specie": "Drowsing Pokémon", "height": 1.1, "weight": 60.5, "abilities": [ "Forewarn", "Synchronize", "Telepathy" ], "stats": { "total": 487, "hp": 116, "attack": 55, "defense": 85, "speedAttack": 107, "speedDefense": 95, "speed": 29 }, "evolutions": [ "munna", "musharna" ] } ], "link": "https://pokemondb.net/pokedex/musharna" }, { "num": 519, "name": "Pidove", "variations": [ { "name": "Pidove", "description": "Pidove is a Normal/Flying type Pokémon introduced in Generation 5. It is known as the Tiny Pigeon Pokémon.", "image": "images/pidove.jpg", "types": [ "Normal", "Flying" ], "specie": "Tiny Pigeon Pokémon", "height": 0.3, "weight": 2.1, "abilities": [ "Big Pecks", "Super Luck", "Rivalry" ], "stats": { "total": 264, "hp": 50, "attack": 55, "defense": 50, "speedAttack": 36, "speedDefense": 30, "speed": 43 }, "evolutions": [ "pidove", "tranquill", "unfezant" ] } ], "link": "https://pokemondb.net/pokedex/pidove" }, { "num": 520, "name": "Tranquill", "variations": [ { "name": "Tranquill", "description": "Tranquill is a Normal/Flying type Pokémon introduced in Generation 5. It is known as the Wild Pigeon Pokémon.", "image": "images/tranquill.jpg", "types": [ "Normal", "Flying" ], "specie": "Wild Pigeon Pokémon", "height": 0.6, "weight": 15, "abilities": [ "Big Pecks", "Super Luck", "Rivalry" ], "stats": { "total": 358, "hp": 62, "attack": 77, "defense": 62, "speedAttack": 50, "speedDefense": 42, "speed": 65 }, "evolutions": [ "pidove", "tranquill", "unfezant" ] } ], "link": "https://pokemondb.net/pokedex/tranquill" }, { "num": 521, "name": "Unfezant", "variations": [ { "name": "Unfezant", "description": "Unfezant is a Normal/Flying type Pokémon introduced in Generation 5. It is known as the Proud Pokémon.", "image": "images/unfezant.jpg", "types": [ "Normal", "Flying" ], "specie": "Proud Pokémon", "height": 1.2, "weight": 29, "abilities": [ "Big Pecks", "Super Luck", "Rivalry" ], "stats": { "total": 488, "hp": 80, "attack": 115, "defense": 80, "speedAttack": 65, "speedDefense": 55, "speed": 93 }, "evolutions": [ "pidove", "tranquill", "unfezant" ] } ], "link": "https://pokemondb.net/pokedex/unfezant" }, { "num": 522, "name": "Blitzle", "variations": [ { "name": "Blitzle", "description": "Blitzle is an Electric type Pokémon introduced in Generation 5. It is known as the Electrified Pokémon.", "image": "images/blitzle.jpg", "types": [ "Electric" ], "specie": "Electrified Pokémon", "height": 0.8, "weight": 29.8, "abilities": [ "Lightning Rod", "Motor Drive", "Sap Sipper" ], "stats": { "total": 295, "hp": 45, "attack": 60, "defense": 32, "speedAttack": 50, "speedDefense": 32, "speed": 76 }, "evolutions": [ "blitzle", "zebstrika" ] } ], "link": "https://pokemondb.net/pokedex/blitzle" }, { "num": 523, "name": "Zebstrika", "variations": [ { "name": "Zebstrika", "description": "Zebstrika is an Electric type Pokémon introduced in Generation 5. It is known as the Thunderbolt Pokémon.", "image": "images/zebstrika.jpg", "types": [ "Electric" ], "specie": "Thunderbolt Pokémon", "height": 1.6, "weight": 79.5, "abilities": [ "Lightning Rod", "Motor Drive", "Sap Sipper" ], "stats": { "total": 497, "hp": 75, "attack": 100, "defense": 63, "speedAttack": 80, "speedDefense": 63, "speed": 116 }, "evolutions": [ "blitzle", "zebstrika" ] } ], "link": "https://pokemondb.net/pokedex/zebstrika" }, { "num": 524, "name": "Roggenrola", "variations": [ { "name": "Roggenrola", "description": "Roggenrola is a Rock type Pokémon introduced in Generation 5. It is known as the Mantle Pokémon.", "image": "images/roggenrola.jpg", "types": [ "Rock" ], "specie": "Mantle Pokémon", "height": 0.4, "weight": 18, "abilities": [ "Sturdy", "Weak Armor", "Sand Force" ], "stats": { "total": 280, "hp": 55, "attack": 75, "defense": 85, "speedAttack": 25, "speedDefense": 25, "speed": 15 }, "evolutions": [ "roggenrola", "boldore", "gigalith" ] } ], "link": "https://pokemondb.net/pokedex/roggenrola" }, { "num": 525, "name": "Boldore", "variations": [ { "name": "Boldore", "description": "Boldore is a Rock type Pokémon introduced in Generation 5. It is known as the Ore Pokémon.", "image": "images/boldore.jpg", "types": [ "Rock" ], "specie": "Ore Pokémon", "height": 0.9, "weight": 102, "abilities": [ "Sturdy", "Weak Armor", "Sand Force" ], "stats": { "total": 390, "hp": 70, "attack": 105, "defense": 105, "speedAttack": 50, "speedDefense": 40, "speed": 20 }, "evolutions": [ "roggenrola", "boldore", "gigalith" ] } ], "link": "https://pokemondb.net/pokedex/boldore" }, { "num": 526, "name": "Gigalith", "variations": [ { "name": "Gigalith", "description": "Gigalith is a Rock type Pokémon introduced in Generation 5. It is known as the Compressed Pokémon.", "image": "images/gigalith.jpg", "types": [ "Rock" ], "specie": "Compressed Pokémon", "height": 1.7, "weight": 260, "abilities": [ "Sturdy", "Sand Stream", "Sand Force" ], "stats": { "total": 515, "hp": 85, "attack": 135, "defense": 130, "speedAttack": 60, "speedDefense": 80, "speed": 25 }, "evolutions": [ "roggenrola", "boldore", "gigalith" ] } ], "link": "https://pokemondb.net/pokedex/gigalith" }, { "num": 527, "name": "Woobat", "variations": [ { "name": "Woobat", "description": "Woobat is a Psychic/Flying type Pokémon introduced in Generation 5. It is known as the Bat Pokémon.", "image": "images/woobat.jpg", "types": [ "Psychic", "Flying" ], "specie": "Bat Pokémon", "height": 0.4, "weight": 2.1, "abilities": [ "Unaware", "Klutz", "Simple" ], "stats": { "total": 323, "hp": 65, "attack": 45, "defense": 43, "speedAttack": 55, "speedDefense": 43, "speed": 72 }, "evolutions": [ "woobat", "swoobat" ] } ], "link": "https://pokemondb.net/pokedex/woobat" }, { "num": 528, "name": "Swoobat", "variations": [ { "name": "Swoobat", "description": "Swoobat is a Psychic/Flying type Pokémon introduced in Generation 5. It is known as the Courting Pokémon.", "image": "images/swoobat.jpg", "types": [ "Psychic", "Flying" ], "specie": "Courting Pokémon", "height": 0.9, "weight": 10.5, "abilities": [ "Unaware", "Klutz", "Simple" ], "stats": { "total": 425, "hp": 67, "attack": 57, "defense": 55, "speedAttack": 77, "speedDefense": 55, "speed": 114 }, "evolutions": [ "woobat", "swoobat" ] } ], "link": "https://pokemondb.net/pokedex/swoobat" }, { "num": 529, "name": "Drilbur", "variations": [ { "name": "Drilbur", "description": "Drilbur is a Ground type Pokémon introduced in Generation 5. It is known as the Mole Pokémon.", "image": "images/drilbur.jpg", "types": [ "Ground" ], "specie": "Mole Pokémon", "height": 0.3, "weight": 8.5, "abilities": [ "Sand Rush", "Sand Force", "Mold Breaker" ], "stats": { "total": 328, "hp": 60, "attack": 85, "defense": 40, "speedAttack": 30, "speedDefense": 45, "speed": 68 }, "evolutions": [ "drilbur", "excadrill" ] } ], "link": "https://pokemondb.net/pokedex/drilbur" }, { "num": 530, "name": "Excadrill", "variations": [ { "name": "Excadrill", "description": "Excadrill is a Ground/Steel type Pokémon introduced in Generation 5. It is known as the Subterrene Pokémon.", "image": "images/excadrill.jpg", "types": [ "Ground", "Steel" ], "specie": "Subterrene Pokémon", "height": 0.7, "weight": 40.4, "abilities": [ "Sand Rush", "Sand Force", "Mold Breaker" ], "stats": { "total": 508, "hp": 110, "attack": 135, "defense": 60, "speedAttack": 50, "speedDefense": 65, "speed": 88 }, "evolutions": [ "drilbur", "excadrill" ] } ], "link": "https://pokemondb.net/pokedex/excadrill" }, { "num": 531, "name": "Audino", "variations": [ { "name": "Audino", "description": "Audino is a Normal type Pokémon introduced in Generation 5. It is known as the Hearing Pokémon.\nAudino has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/audino.jpg", "types": [ "Normal" ], "specie": "Hearing Pokémon", "height": 1.1, "weight": 31, "abilities": [ "Healer", "Regenerator", "Klutz" ], "stats": { "total": 445, "hp": 103, "attack": 60, "defense": 86, "speedAttack": 60, "speedDefense": 86, "speed": 50 }, "evolutions": [] }, { "name": "Mega Audino", "description": "Audino is a Normal type Pokémon introduced in Generation 5. It is known as the Hearing Pokémon.\nAudino has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/audino-mega.jpg", "types": [ "Normal", "Fairy" ], "specie": "Hearing Pokémon", "height": 1.5, "weight": 32, "abilities": [ "Healer" ], "stats": { "total": 545, "hp": 103, "attack": 60, "defense": 126, "speedAttack": 80, "speedDefense": 126, "speed": 50 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/audino" }, { "num": 532, "name": "Timburr", "variations": [ { "name": "Timburr", "description": "Timburr is a Fighting type Pokémon introduced in Generation 5. It is known as the Muscular Pokémon.", "image": "images/timburr.jpg", "types": [ "Fighting" ], "specie": "Muscular Pokémon", "height": 0.6, "weight": 12.5, "abilities": [ "Guts", "Sheer Force", "Iron Fist" ], "stats": { "total": 305, "hp": 75, "attack": 80, "defense": 55, "speedAttack": 25, "speedDefense": 35, "speed": 35 }, "evolutions": [ "timburr", "gurdurr", "conkeldurr" ] } ], "link": "https://pokemondb.net/pokedex/timburr" }, { "num": 533, "name": "Gurdurr", "variations": [ { "name": "Gurdurr", "description": "Gurdurr is a Fighting type Pokémon introduced in Generation 5. It is known as the Muscular Pokémon.", "image": "images/gurdurr.jpg", "types": [ "Fighting" ], "specie": "Muscular Pokémon", "height": 1.2, "weight": 40, "abilities": [ "Guts", "Sheer Force", "Iron Fist" ], "stats": { "total": 405, "hp": 85, "attack": 105, "defense": 85, "speedAttack": 40, "speedDefense": 50, "speed": 40 }, "evolutions": [ "timburr", "gurdurr", "conkeldurr" ] } ], "link": "https://pokemondb.net/pokedex/gurdurr" }, { "num": 534, "name": "Conkeldurr", "variations": [ { "name": "Conkeldurr", "description": "Conkeldurr is a Fighting type Pokémon introduced in Generation 5. It is known as the Muscular Pokémon.", "image": "images/conkeldurr.jpg", "types": [ "Fighting" ], "specie": "Muscular Pokémon", "height": 1.4, "weight": 87, "abilities": [ "Guts", "Sheer Force", "Iron Fist" ], "stats": { "total": 505, "hp": 105, "attack": 140, "defense": 95, "speedAttack": 55, "speedDefense": 65, "speed": 45 }, "evolutions": [ "timburr", "gurdurr", "conkeldurr" ] } ], "link": "https://pokemondb.net/pokedex/conkeldurr" }, { "num": 535, "name": "Tympole", "variations": [ { "name": "Tympole", "description": "Tympole is a Water type Pokémon introduced in Generation 5. It is known as the Tadpole Pokémon.", "image": "images/tympole.jpg", "types": [ "Water" ], "specie": "Tadpole Pokémon", "height": 0.5, "weight": 4.5, "abilities": [ "Swift Swim", "Hydration", "Water Absorb" ], "stats": { "total": 294, "hp": 50, "attack": 50, "defense": 40, "speedAttack": 50, "speedDefense": 40, "speed": 64 }, "evolutions": [ "tympole", "palpitoad", "seismitoad" ] } ], "link": "https://pokemondb.net/pokedex/tympole" }, { "num": 536, "name": "Palpitoad", "variations": [ { "name": "Palpitoad", "description": "Palpitoad is a Water/Ground type Pokémon introduced in Generation 5. It is known as the Vibration Pokémon.", "image": "images/palpitoad.jpg", "types": [ "Water", "Ground" ], "specie": "Vibration Pokémon", "height": 0.8, "weight": 17, "abilities": [ "Swift Swim", "Hydration", "Water Absorb" ], "stats": { "total": 384, "hp": 75, "attack": 65, "defense": 55, "speedAttack": 65, "speedDefense": 55, "speed": 69 }, "evolutions": [ "tympole", "palpitoad", "seismitoad" ] } ], "link": "https://pokemondb.net/pokedex/palpitoad" }, { "num": 537, "name": "Seismitoad", "variations": [ { "name": "Seismitoad", "description": "Seismitoad is a Water/Ground type Pokémon introduced in Generation 5. It is known as the Vibration Pokémon.", "image": "images/seismitoad.jpg", "types": [ "Water", "Ground" ], "specie": "Vibration Pokémon", "height": 1.5, "weight": 62, "abilities": [ "Swift Swim", "Poison Touch", "Water Absorb" ], "stats": { "total": 509, "hp": 105, "attack": 95, "defense": 75, "speedAttack": 85, "speedDefense": 75, "speed": 74 }, "evolutions": [ "tympole", "palpitoad", "seismitoad" ] } ], "link": "https://pokemondb.net/pokedex/seismitoad" }, { "num": 538, "name": "Throh", "variations": [ { "name": "Throh", "description": "Throh is a Fighting type Pokémon introduced in Generation 5. It is known as the Judo Pokémon.", "image": "images/throh.jpg", "types": [ "Fighting" ], "specie": "Judo Pokémon", "height": 1.3, "weight": 55.5, "abilities": [ "Guts", "Inner Focus", "Mold Breaker" ], "stats": { "total": 465, "hp": 120, "attack": 100, "defense": 85, "speedAttack": 30, "speedDefense": 85, "speed": 45 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/throh" }, { "num": 539, "name": "Sawk", "variations": [ { "name": "Sawk", "description": "Sawk is a Fighting type Pokémon introduced in Generation 5. It is known as the Karate Pokémon.", "image": "images/sawk.jpg", "types": [ "Fighting" ], "specie": "Karate Pokémon", "height": 1.4, "weight": 51, "abilities": [ "Sturdy", "Inner Focus", "Mold Breaker" ], "stats": { "total": 465, "hp": 75, "attack": 125, "defense": 75, "speedAttack": 30, "speedDefense": 75, "speed": 85 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/sawk" }, { "num": 540, "name": "Sewaddle", "variations": [ { "name": "Sewaddle", "description": "Sewaddle is a Bug/Grass type Pokémon introduced in Generation 5. It is known as the Sewing Pokémon.", "image": "images/sewaddle.jpg", "types": [ "Bug", "Grass" ], "specie": "Sewing Pokémon", "height": 0.3, "weight": 2.5, "abilities": [ "Swarm", "Chlorophyll", "Overcoat" ], "stats": { "total": 310, "hp": 45, "attack": 53, "defense": 70, "speedAttack": 40, "speedDefense": 60, "speed": 42 }, "evolutions": [ "sewaddle", "swadloon", "leavanny" ] } ], "link": "https://pokemondb.net/pokedex/sewaddle" }, { "num": 541, "name": "Swadloon", "variations": [ { "name": "Swadloon", "description": "Swadloon is a Bug/Grass type Pokémon introduced in Generation 5. It is known as the Leaf-Wrapped Pokémon.", "image": "images/swadloon.jpg", "types": [ "Bug", "Grass" ], "specie": "Leaf-Wrapped Pokémon", "height": 0.5, "weight": 7.3, "abilities": [ "Leaf Guard", "Chlorophyll", "Overcoat" ], "stats": { "total": 380, "hp": 55, "attack": 63, "defense": 90, "speedAttack": 50, "speedDefense": 80, "speed": 42 }, "evolutions": [ "sewaddle", "swadloon", "leavanny" ] } ], "link": "https://pokemondb.net/pokedex/swadloon" }, { "num": 542, "name": "Leavanny", "variations": [ { "name": "Leavanny", "description": "Leavanny is a Bug/Grass type Pokémon introduced in Generation 5. It is known as the Nurturing Pokémon.", "image": "images/leavanny.jpg", "types": [ "Bug", "Grass" ], "specie": "Nurturing Pokémon", "height": 1.2, "weight": 20.5, "abilities": [ "Swarm", "Chlorophyll", "Overcoat" ], "stats": { "total": 500, "hp": 75, "attack": 103, "defense": 80, "speedAttack": 70, "speedDefense": 80, "speed": 92 }, "evolutions": [ "sewaddle", "swadloon", "leavanny" ] } ], "link": "https://pokemondb.net/pokedex/leavanny" }, { "num": 543, "name": "Venipede", "variations": [ { "name": "Venipede", "description": "Venipede is a Bug/Poison type Pokémon introduced in Generation 5. It is known as the Centipede Pokémon.", "image": "images/venipede.jpg", "types": [ "Bug", "Poison" ], "specie": "Centipede Pokémon", "height": 0.4, "weight": 5.3, "abilities": [ "Poison Point", "Swarm", "Speed Boost" ], "stats": { "total": 260, "hp": 30, "attack": 45, "defense": 59, "speedAttack": 30, "speedDefense": 39, "speed": 57 }, "evolutions": [ "venipede", "whirlipede", "scolipede" ] } ], "link": "https://pokemondb.net/pokedex/venipede" }, { "num": 544, "name": "Whirlipede", "variations": [ { "name": "Whirlipede", "description": "Whirlipede is a Bug/Poison type Pokémon introduced in Generation 5. It is known as the Curlipede Pokémon.", "image": "images/whirlipede.jpg", "types": [ "Bug", "Poison" ], "specie": "Curlipede Pokémon", "height": 1.2, "weight": 58.5, "abilities": [ "Poison Point", "Swarm", "Speed Boost" ], "stats": { "total": 360, "hp": 40, "attack": 55, "defense": 99, "speedAttack": 40, "speedDefense": 79, "speed": 47 }, "evolutions": [ "venipede", "whirlipede", "scolipede" ] } ], "link": "https://pokemondb.net/pokedex/whirlipede" }, { "num": 545, "name": "Scolipede", "variations": [ { "name": "Scolipede", "description": "Scolipede is a Bug/Poison type Pokémon introduced in Generation 5. It is known as the Megapede Pokémon.", "image": "images/scolipede.jpg", "types": [ "Bug", "Poison" ], "specie": "Megapede Pokémon", "height": 2.5, "weight": 200.5, "abilities": [ "Poison Point", "Swarm", "Speed Boost" ], "stats": { "total": 485, "hp": 60, "attack": 100, "defense": 89, "speedAttack": 55, "speedDefense": 69, "speed": 112 }, "evolutions": [ "venipede", "whirlipede", "scolipede" ] } ], "link": "https://pokemondb.net/pokedex/scolipede" }, { "num": 546, "name": "Cottonee", "variations": [ { "name": "Cottonee", "description": "Cottonee is a Grass/Fairy type Pokémon introduced in Generation 5. It is known as the Cotton Puff Pokémon.", "image": "images/cottonee.jpg", "types": [ "Grass", "Fairy" ], "specie": "Cotton Puff Pokémon", "height": 0.3, "weight": 0.6, "abilities": [ "Prankster", "Infiltrator", "Chlorophyll" ], "stats": { "total": 280, "hp": 40, "attack": 27, "defense": 60, "speedAttack": 37, "speedDefense": 50, "speed": 66 }, "evolutions": [ "cottonee", "whimsicott" ] } ], "link": "https://pokemondb.net/pokedex/cottonee" }, { "num": 547, "name": "Whimsicott", "variations": [ { "name": "Whimsicott", "description": "Whimsicott is a Grass/Fairy type Pokémon introduced in Generation 5. It is known as the Windveiled Pokémon.", "image": "images/whimsicott.jpg", "types": [ "Grass", "Fairy" ], "specie": "Windveiled Pokémon", "height": 0.7, "weight": 6.6, "abilities": [ "Prankster", "Infiltrator", "Chlorophyll" ], "stats": { "total": 480, "hp": 60, "attack": 67, "defense": 85, "speedAttack": 77, "speedDefense": 75, "speed": 116 }, "evolutions": [ "cottonee", "whimsicott" ] } ], "link": "https://pokemondb.net/pokedex/whimsicott" }, { "num": 548, "name": "Petilil", "variations": [ { "name": "Petilil", "description": "Petilil is a Grass type Pokémon introduced in Generation 5. It is known as the Bulb Pokémon.", "image": "images/petilil.jpg", "types": [ "Grass" ], "specie": "Bulb Pokémon", "height": 0.5, "weight": 6.6, "abilities": [ "Chlorophyll", "Own Tempo", "Leaf Guard" ], "stats": { "total": 280, "hp": 45, "attack": 35, "defense": 50, "speedAttack": 70, "speedDefense": 50, "speed": 30 }, "evolutions": [ "petilil", "lilligant" ] } ], "link": "https://pokemondb.net/pokedex/petilil" }, { "num": 549, "name": "Lilligant", "variations": [ { "name": "Lilligant", "description": "Lilligant is a Grass type Pokémon introduced in Generation 5. It is known as the Flowering Pokémon.", "image": "images/lilligant.jpg", "types": [ "Grass" ], "specie": "Flowering Pokémon", "height": 1.1, "weight": 16.3, "abilities": [ "Chlorophyll", "Own Tempo", "Leaf Guard" ], "stats": { "total": 480, "hp": 70, "attack": 60, "defense": 75, "speedAttack": 110, "speedDefense": 75, "speed": 90 }, "evolutions": [ "petilil", "lilligant" ] } ], "link": "https://pokemondb.net/pokedex/lilligant" }, { "num": 550, "name": "Basculin", "variations": [ { "name": "Red-Striped Form", "description": "Basculin is a Water type Pokémon introduced in Generation 5. It is known as the Hostile Pokémon.", "image": "images/basculin-red-striped.jpg", "types": [ "Water" ], "specie": "Hostile Pokémon", "height": 1, "weight": 18, "abilities": [ "Reckless", "Adaptability", "Mold Breaker" ], "stats": { "total": 460, "hp": 70, "attack": 92, "defense": 65, "speedAttack": 80, "speedDefense": 55, "speed": 98 }, "evolutions": [] }, { "name": "Blue-Striped Form", "description": "Basculin is a Water type Pokémon introduced in Generation 5. It is known as the Hostile Pokémon.", "image": "images/basculin-blue-striped.jpg", "types": [ "Water" ], "specie": "Hostile Pokémon", "height": 1, "weight": 18, "abilities": [ "Rock Head", "Adaptability", "Mold Breaker" ], "stats": { "total": 460, "hp": 70, "attack": 92, "defense": 65, "speedAttack": 80, "speedDefense": 55, "speed": 98 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/basculin" }, { "num": 551, "name": "Sandile", "variations": [ { "name": "Sandile", "description": "Sandile is a Ground/Dark type Pokémon introduced in Generation 5. It is known as the Desert Croc Pokémon.", "image": "images/sandile.jpg", "types": [ "Ground", "Dark" ], "specie": "Desert Croc Pokémon", "height": 0.7, "weight": 15.2, "abilities": [ "Intimidate", "Moxie", "Anger Point" ], "stats": { "total": 292, "hp": 50, "attack": 72, "defense": 35, "speedAttack": 35, "speedDefense": 35, "speed": 65 }, "evolutions": [ "sandile", "krokorok", "krookodile" ] } ], "link": "https://pokemondb.net/pokedex/sandile" }, { "num": 552, "name": "Krokorok", "variations": [ { "name": "Krokorok", "description": "Krokorok is a Ground/Dark type Pokémon introduced in Generation 5. It is known as the Desert Croc Pokémon.", "image": "images/krokorok.jpg", "types": [ "Ground", "Dark" ], "specie": "Desert Croc Pokémon", "height": 1, "weight": 33.4, "abilities": [ "Intimidate", "Moxie", "Anger Point" ], "stats": { "total": 351, "hp": 60, "attack": 82, "defense": 45, "speedAttack": 45, "speedDefense": 45, "speed": 74 }, "evolutions": [ "sandile", "krokorok", "krookodile" ] } ], "link": "https://pokemondb.net/pokedex/krokorok" }, { "num": 553, "name": "Krookodile", "variations": [ { "name": "Krookodile", "description": "Krookodile is a Ground/Dark type Pokémon introduced in Generation 5. It is known as the Intimidation Pokémon.", "image": "images/krookodile.jpg", "types": [ "Ground", "Dark" ], "specie": "Intimidation Pokémon", "height": 1.5, "weight": 96.3, "abilities": [ "Intimidate", "Moxie", "Anger Point" ], "stats": { "total": 519, "hp": 95, "attack": 117, "defense": 80, "speedAttack": 65, "speedDefense": 70, "speed": 92 }, "evolutions": [ "sandile", "krokorok", "krookodile" ] } ], "link": "https://pokemondb.net/pokedex/krookodile" }, { "num": 554, "name": "Darumaka", "variations": [ { "name": "Darumaka", "description": "Darumaka is a Fire type Pokémon introduced in Generation 5. It is known as the Zen Charm Pokémon.", "image": "images/darumaka.jpg", "types": [ "Fire" ], "specie": "Zen Charm Pokémon", "height": 0.6, "weight": 37.5, "abilities": [ "Hustle", "Inner Focus" ], "stats": { "total": 315, "hp": 70, "attack": 90, "defense": 45, "speedAttack": 15, "speedDefense": 45, "speed": 50 }, "evolutions": [ "darumaka" ] } ], "link": "https://pokemondb.net/pokedex/darumaka" }, { "num": 555, "name": "Darmanitan", "variations": [ { "name": "Standard Mode", "description": "Darmanitan is a Fire type Pokémon introduced in Generation 5. It is known as the Blazing Pokémon.", "image": "images/darmanitan-standard.jpg", "types": [ "Fire" ], "specie": "Blazing Pokémon", "height": 1.3, "weight": 92.9, "abilities": [ "Sheer Force", "Zen Mode" ], "stats": { "total": 480, "hp": 105, "attack": 140, "defense": 55, "speedAttack": 30, "speedDefense": 55, "speed": 95 }, "evolutions": [ "darumaka" ] }, { "name": "Zen Mode", "description": "Darmanitan is a Fire type Pokémon introduced in Generation 5. It is known as the Blazing Pokémon.", "image": "images/darmanitan-zen.jpg", "types": [ "Fire", "Psychic" ], "specie": "Blazing Pokémon", "height": 1.3, "weight": 92.9, "abilities": [ "Zen Mode" ], "stats": { "total": 540, "hp": 105, "attack": 30, "defense": 105, "speedAttack": 140, "speedDefense": 105, "speed": 55 }, "evolutions": [ "darumaka" ] } ], "link": "https://pokemondb.net/pokedex/darmanitan" }, { "num": 556, "name": "Maractus", "variations": [ { "name": "Maractus", "description": "Maractus is a Grass type Pokémon introduced in Generation 5. It is known as the Cactus Pokémon.", "image": "images/maractus.jpg", "types": [ "Grass" ], "specie": "Cactus Pokémon", "height": 1, "weight": 28, "abilities": [ "Water Absorb", "Chlorophyll", "Storm Drain" ], "stats": { "total": 461, "hp": 75, "attack": 86, "defense": 67, "speedAttack": 106, "speedDefense": 67, "speed": 60 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/maractus" }, { "num": 557, "name": "Dwebble", "variations": [ { "name": "Dwebble", "description": "Dwebble is a Bug/Rock type Pokémon introduced in Generation 5. It is known as the Rock Inn Pokémon.", "image": "images/dwebble.jpg", "types": [ "Bug", "Rock" ], "specie": "Rock Inn Pokémon", "height": 0.3, "weight": 14.5, "abilities": [ "Sturdy", "Shell Armor", "Weak Armor" ], "stats": { "total": 325, "hp": 50, "attack": 65, "defense": 85, "speedAttack": 35, "speedDefense": 35, "speed": 55 }, "evolutions": [ "dwebble", "crustle" ] } ], "link": "https://pokemondb.net/pokedex/dwebble" }, { "num": 558, "name": "Crustle", "variations": [ { "name": "Crustle", "description": "Crustle is a Bug/Rock type Pokémon introduced in Generation 5. It is known as the Stone Home Pokémon.", "image": "images/crustle.jpg", "types": [ "Bug", "Rock" ], "specie": "Stone Home Pokémon", "height": 1.4, "weight": 200, "abilities": [ "Sturdy", "Shell Armor", "Weak Armor" ], "stats": { "total": 485, "hp": 70, "attack": 105, "defense": 125, "speedAttack": 65, "speedDefense": 75, "speed": 45 }, "evolutions": [ "dwebble", "crustle" ] } ], "link": "https://pokemondb.net/pokedex/crustle" }, { "num": 559, "name": "Scraggy", "variations": [ { "name": "Scraggy", "description": "Scraggy is a Dark/Fighting type Pokémon introduced in Generation 5. It is known as the Shedding Pokémon.", "image": "images/scraggy.jpg", "types": [ "Dark", "Fighting" ], "specie": "Shedding Pokémon", "height": 0.6, "weight": 11.8, "abilities": [ "Shed Skin", "Moxie", "Intimidate" ], "stats": { "total": 348, "hp": 50, "attack": 75, "defense": 70, "speedAttack": 35, "speedDefense": 70, "speed": 48 }, "evolutions": [ "scraggy", "scrafty" ] } ], "link": "https://pokemondb.net/pokedex/scraggy" }, { "num": 560, "name": "Scrafty", "variations": [ { "name": "Scrafty", "description": "Scrafty is a Dark/Fighting type Pokémon introduced in Generation 5. It is known as the Hoodlum Pokémon.", "image": "images/scrafty.jpg", "types": [ "Dark", "Fighting" ], "specie": "Hoodlum Pokémon", "height": 1.1, "weight": 30, "abilities": [ "Shed Skin", "Moxie", "Intimidate" ], "stats": { "total": 488, "hp": 65, "attack": 90, "defense": 115, "speedAttack": 45, "speedDefense": 115, "speed": 58 }, "evolutions": [ "scraggy", "scrafty" ] } ], "link": "https://pokemondb.net/pokedex/scrafty" }, { "num": 561, "name": "Sigilyph", "variations": [ { "name": "Sigilyph", "description": "Sigilyph is a Psychic/Flying type Pokémon introduced in Generation 5. It is known as the Avianoid Pokémon.", "image": "images/sigilyph.jpg", "types": [ "Psychic", "Flying" ], "specie": "Avianoid Pokémon", "height": 1.4, "weight": 14, "abilities": [ "Wonder Skin", "Magic Guard", "Tinted Lens" ], "stats": { "total": 490, "hp": 72, "attack": 58, "defense": 80, "speedAttack": 103, "speedDefense": 80, "speed": 97 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/sigilyph" }, { "num": 562, "name": "Yamask", "variations": [ { "name": "Yamask", "description": "Yamask is a Ghost type Pokémon introduced in Generation 5. It is known as the Spirit Pokémon.", "image": "images/yamask.jpg", "types": [ "Ghost" ], "specie": "Spirit Pokémon", "height": 0.5, "weight": 1.5, "abilities": [ "Mummy" ], "stats": { "total": 303, "hp": 38, "attack": 30, "defense": 85, "speedAttack": 55, "speedDefense": 65, "speed": 30 }, "evolutions": [ "yamask", "cofagrigus" ] } ], "link": "https://pokemondb.net/pokedex/yamask" }, { "num": 563, "name": "Cofagrigus", "variations": [ { "name": "Cofagrigus", "description": "Cofagrigus is a Ghost type Pokémon introduced in Generation 5. It is known as the Coffin Pokémon.", "image": "images/cofagrigus.jpg", "types": [ "Ghost" ], "specie": "Coffin Pokémon", "height": 1.7, "weight": 76.5, "abilities": [ "Mummy" ], "stats": { "total": 483, "hp": 58, "attack": 50, "defense": 145, "speedAttack": 95, "speedDefense": 105, "speed": 30 }, "evolutions": [ "yamask", "cofagrigus" ] } ], "link": "https://pokemondb.net/pokedex/cofagrigus" }, { "num": 564, "name": "Tirtouga", "variations": [ { "name": "Tirtouga", "description": "Tirtouga is a Water/Rock type Pokémon introduced in Generation 5. It is known as the Prototurtle Pokémon.", "image": "images/tirtouga.jpg", "types": [ "Water", "Rock" ], "specie": "Prototurtle Pokémon", "height": 0.7, "weight": 16.5, "abilities": [ "Solid Rock", "Sturdy", "Swift Swim" ], "stats": { "total": 355, "hp": 54, "attack": 78, "defense": 103, "speedAttack": 53, "speedDefense": 45, "speed": 22 }, "evolutions": [ "tirtouga", "carracosta" ] } ], "link": "https://pokemondb.net/pokedex/tirtouga" }, { "num": 565, "name": "Carracosta", "variations": [ { "name": "Carracosta", "description": "Carracosta is a Water/Rock type Pokémon introduced in Generation 5. It is known as the Prototurtle Pokémon.", "image": "images/carracosta.jpg", "types": [ "Water", "Rock" ], "specie": "Prototurtle Pokémon", "height": 1.2, "weight": 81, "abilities": [ "Solid Rock", "Sturdy", "Swift Swim" ], "stats": { "total": 495, "hp": 74, "attack": 108, "defense": 133, "speedAttack": 83, "speedDefense": 65, "speed": 32 }, "evolutions": [ "tirtouga", "carracosta" ] } ], "link": "https://pokemondb.net/pokedex/carracosta" }, { "num": 566, "name": "Archen", "variations": [ { "name": "Archen", "description": "Archen is a Rock/Flying type Pokémon introduced in Generation 5. It is known as the First Bird Pokémon.", "image": "images/archen.jpg", "types": [ "Rock", "Flying" ], "specie": "First Bird Pokémon", "height": 0.5, "weight": 9.5, "abilities": [ "Defeatist" ], "stats": { "total": 401, "hp": 55, "attack": 112, "defense": 45, "speedAttack": 74, "speedDefense": 45, "speed": 70 }, "evolutions": [ "archen", "archeops" ] } ], "link": "https://pokemondb.net/pokedex/archen" }, { "num": 567, "name": "Archeops", "variations": [ { "name": "Archeops", "description": "Archeops is a Rock/Flying type Pokémon introduced in Generation 5. It is known as the First Bird Pokémon.", "image": "images/archeops.jpg", "types": [ "Rock", "Flying" ], "specie": "First Bird Pokémon", "height": 1.4, "weight": 32, "abilities": [ "Defeatist" ], "stats": { "total": 567, "hp": 75, "attack": 140, "defense": 65, "speedAttack": 112, "speedDefense": 65, "speed": 110 }, "evolutions": [ "archen", "archeops" ] } ], "link": "https://pokemondb.net/pokedex/archeops" }, { "num": 568, "name": "Trubbish", "variations": [ { "name": "Trubbish", "description": "Trubbish is a Poison type Pokémon introduced in Generation 5. It is known as the Trash Bag Pokémon.", "image": "images/trubbish.jpg", "types": [ "Poison" ], "specie": "Trash Bag Pokémon", "height": 0.6, "weight": 31, "abilities": [ "Stench", "Sticky Hold", "Aftermath" ], "stats": { "total": 329, "hp": 50, "attack": 50, "defense": 62, "speedAttack": 40, "speedDefense": 62, "speed": 65 }, "evolutions": [ "trubbish", "garbodor" ] } ], "link": "https://pokemondb.net/pokedex/trubbish" }, { "num": 569, "name": "Garbodor", "variations": [ { "name": "Garbodor", "description": "Garbodor is a Poison type Pokémon introduced in Generation 5. It is known as the Trash Heap Pokémon.", "image": "images/garbodor.jpg", "types": [ "Poison" ], "specie": "Trash Heap Pokémon", "height": 1.9, "weight": 107.3, "abilities": [ "Stench", "Weak Armor", "Aftermath" ], "stats": { "total": 474, "hp": 80, "attack": 95, "defense": 82, "speedAttack": 60, "speedDefense": 82, "speed": 75 }, "evolutions": [ "trubbish", "garbodor" ] } ], "link": "https://pokemondb.net/pokedex/garbodor" }, { "num": 570, "name": "Zorua", "variations": [ { "name": "Zorua", "description": "Zorua is a Dark type Pokémon introduced in Generation 5. It is known as the Tricky Fox Pokémon.", "image": "images/zorua.jpg", "types": [ "Dark" ], "specie": "Tricky Fox Pokémon", "height": 0.7, "weight": 12.5, "abilities": [ "Illusion" ], "stats": { "total": 330, "hp": 40, "attack": 65, "defense": 40, "speedAttack": 80, "speedDefense": 40, "speed": 65 }, "evolutions": [ "zorua", "zoroark" ] } ], "link": "https://pokemondb.net/pokedex/zorua" }, { "num": 571, "name": "Zoroark", "variations": [ { "name": "Zoroark", "description": "Zoroark is a Dark type Pokémon introduced in Generation 5. It is known as the Illusion Fox Pokémon.", "image": "images/zoroark.jpg", "types": [ "Dark" ], "specie": "Illusion Fox Pokémon", "height": 1.6, "weight": 81.1, "abilities": [ "Illusion" ], "stats": { "total": 510, "hp": 60, "attack": 105, "defense": 60, "speedAttack": 120, "speedDefense": 60, "speed": 105 }, "evolutions": [ "zorua", "zoroark" ] } ], "link": "https://pokemondb.net/pokedex/zoroark" }, { "num": 572, "name": "Minccino", "variations": [ { "name": "Minccino", "description": "Minccino is a Normal type Pokémon introduced in Generation 5. It is known as the Chinchilla Pokémon.", "image": "images/minccino.jpg", "types": [ "Normal" ], "specie": "Chinchilla Pokémon", "height": 0.4, "weight": 5.8, "abilities": [ "Cute Charm", "Technician", "Skill Link" ], "stats": { "total": 300, "hp": 55, "attack": 50, "defense": 40, "speedAttack": 40, "speedDefense": 40, "speed": 75 }, "evolutions": [ "minccino", "cinccino" ] } ], "link": "https://pokemondb.net/pokedex/minccino" }, { "num": 573, "name": "Cinccino", "variations": [ { "name": "Cinccino", "description": "Cinccino is a Normal type Pokémon introduced in Generation 5. It is known as the Scarf Pokémon.", "image": "images/cinccino.jpg", "types": [ "Normal" ], "specie": "Scarf Pokémon", "height": 0.5, "weight": 7.5, "abilities": [ "Cute Charm", "Technician", "Skill Link" ], "stats": { "total": 470, "hp": 75, "attack": 95, "defense": 60, "speedAttack": 65, "speedDefense": 60, "speed": 115 }, "evolutions": [ "minccino", "cinccino" ] } ], "link": "https://pokemondb.net/pokedex/cinccino" }, { "num": 574, "name": "Gothita", "variations": [ { "name": "Gothita", "description": "Gothita is a Psychic type Pokémon introduced in Generation 5. It is known as the Fixation Pokémon.", "image": "images/gothita.jpg", "types": [ "Psychic" ], "specie": "Fixation Pokémon", "height": 0.4, "weight": 5.8, "abilities": [ "Frisk", "Competitive", "Shadow Tag" ], "stats": { "total": 290, "hp": 45, "attack": 30, "defense": 50, "speedAttack": 55, "speedDefense": 65, "speed": 45 }, "evolutions": [ "gothita", "gothorita", "gothitelle" ] } ], "link": "https://pokemondb.net/pokedex/gothita" }, { "num": 575, "name": "Gothorita", "variations": [ { "name": "Gothorita", "description": "Gothorita is a Psychic type Pokémon introduced in Generation 5. It is known as the Manipulate Pokémon.", "image": "images/gothorita.jpg", "types": [ "Psychic" ], "specie": "Manipulate Pokémon", "height": 0.7, "weight": 18, "abilities": [ "Frisk", "Competitive", "Shadow Tag" ], "stats": { "total": 390, "hp": 60, "attack": 45, "defense": 70, "speedAttack": 75, "speedDefense": 85, "speed": 55 }, "evolutions": [ "gothita", "gothorita", "gothitelle" ] } ], "link": "https://pokemondb.net/pokedex/gothorita" }, { "num": 576, "name": "Gothitelle", "variations": [ { "name": "Gothitelle", "description": "Gothitelle is a Psychic type Pokémon introduced in Generation 5. It is known as the Astral Body Pokémon.", "image": "images/gothitelle.jpg", "types": [ "Psychic" ], "specie": "Astral Body Pokémon", "height": 1.5, "weight": 44, "abilities": [ "Frisk", "Competitive", "Shadow Tag" ], "stats": { "total": 490, "hp": 70, "attack": 55, "defense": 95, "speedAttack": 95, "speedDefense": 110, "speed": 65 }, "evolutions": [ "gothita", "gothorita", "gothitelle" ] } ], "link": "https://pokemondb.net/pokedex/gothitelle" }, { "num": 577, "name": "Solosis", "variations": [ { "name": "Solosis", "description": "Solosis is a Psychic type Pokémon introduced in Generation 5. It is known as the Cell Pokémon.", "image": "images/solosis.jpg", "types": [ "Psychic" ], "specie": "Cell Pokémon", "height": 0.3, "weight": 1, "abilities": [ "Overcoat", "Magic Guard", "Regenerator" ], "stats": { "total": 290, "hp": 45, "attack": 30, "defense": 40, "speedAttack": 105, "speedDefense": 50, "speed": 20 }, "evolutions": [ "solosis", "duosion", "reuniclus" ] } ], "link": "https://pokemondb.net/pokedex/solosis" }, { "num": 578, "name": "Duosion", "variations": [ { "name": "Duosion", "description": "Duosion is a Psychic type Pokémon introduced in Generation 5. It is known as the Mitosis Pokémon.", "image": "images/duosion.jpg", "types": [ "Psychic" ], "specie": "Mitosis Pokémon", "height": 0.6, "weight": 8, "abilities": [ "Overcoat", "Magic Guard", "Regenerator" ], "stats": { "total": 370, "hp": 65, "attack": 40, "defense": 50, "speedAttack": 125, "speedDefense": 60, "speed": 30 }, "evolutions": [ "solosis", "duosion", "reuniclus" ] } ], "link": "https://pokemondb.net/pokedex/duosion" }, { "num": 579, "name": "Reuniclus", "variations": [ { "name": "Reuniclus", "description": "Reuniclus is a Psychic type Pokémon introduced in Generation 5. It is known as the Multiplying Pokémon.", "image": "images/reuniclus.jpg", "types": [ "Psychic" ], "specie": "Multiplying Pokémon", "height": 1, "weight": 20.1, "abilities": [ "Overcoat", "Magic Guard", "Regenerator" ], "stats": { "total": 490, "hp": 110, "attack": 65, "defense": 75, "speedAttack": 125, "speedDefense": 85, "speed": 30 }, "evolutions": [ "solosis", "duosion", "reuniclus" ] } ], "link": "https://pokemondb.net/pokedex/reuniclus" }, { "num": 580, "name": "Ducklett", "variations": [ { "name": "Ducklett", "description": "Ducklett is a Water/Flying type Pokémon introduced in Generation 5. It is known as the Water Bird Pokémon.", "image": "images/ducklett.jpg", "types": [ "Water", "Flying" ], "specie": "Water Bird Pokémon", "height": 0.5, "weight": 5.5, "abilities": [ "Keen Eye", "Big Pecks", "Hydration" ], "stats": { "total": 305, "hp": 62, "attack": 44, "defense": 50, "speedAttack": 44, "speedDefense": 50, "speed": 55 }, "evolutions": [ "ducklett", "swanna" ] } ], "link": "https://pokemondb.net/pokedex/ducklett" }, { "num": 581, "name": "Swanna", "variations": [ { "name": "Swanna", "description": "Swanna is a Water/Flying type Pokémon introduced in Generation 5. It is known as the White Bird Pokémon.", "image": "images/swanna.jpg", "types": [ "Water", "Flying" ], "specie": "White Bird Pokémon", "height": 1.3, "weight": 24.2, "abilities": [ "Keen Eye", "Big Pecks", "Hydration" ], "stats": { "total": 473, "hp": 75, "attack": 87, "defense": 63, "speedAttack": 87, "speedDefense": 63, "speed": 98 }, "evolutions": [ "ducklett", "swanna" ] } ], "link": "https://pokemondb.net/pokedex/swanna" }, { "num": 582, "name": "Vanillite", "variations": [ { "name": "Vanillite", "description": "Vanillite is an Ice type Pokémon introduced in Generation 5. It is known as the Fresh Snow Pokémon.", "image": "images/vanillite.jpg", "types": [ "Ice" ], "specie": "Fresh Snow Pokémon", "height": 0.4, "weight": 5.7, "abilities": [ "Ice Body", "Snow Cloak", "Weak Armor" ], "stats": { "total": 305, "hp": 36, "attack": 50, "defense": 50, "speedAttack": 65, "speedDefense": 60, "speed": 44 }, "evolutions": [ "vanillite", "vanillish", "vanilluxe" ] } ], "link": "https://pokemondb.net/pokedex/vanillite" }, { "num": 583, "name": "Vanillish", "variations": [ { "name": "Vanillish", "description": "Vanillish is an Ice type Pokémon introduced in Generation 5. It is known as the Icy Snow Pokémon.", "image": "images/vanillish.jpg", "types": [ "Ice" ], "specie": "Icy Snow Pokémon", "height": 1.1, "weight": 41, "abilities": [ "Ice Body", "Snow Cloak", "Weak Armor" ], "stats": { "total": 395, "hp": 51, "attack": 65, "defense": 65, "speedAttack": 80, "speedDefense": 75, "speed": 59 }, "evolutions": [ "vanillite", "vanillish", "vanilluxe" ] } ], "link": "https://pokemondb.net/pokedex/vanillish" }, { "num": 584, "name": "Vanilluxe", "variations": [ { "name": "Vanilluxe", "description": "Vanilluxe is an Ice type Pokémon introduced in Generation 5. It is known as the Snowstorm Pokémon.", "image": "images/vanilluxe.jpg", "types": [ "Ice" ], "specie": "Snowstorm Pokémon", "height": 1.3, "weight": 57.5, "abilities": [ "Ice Body", "Snow Warning", "Weak Armor" ], "stats": { "total": 535, "hp": 71, "attack": 95, "defense": 85, "speedAttack": 110, "speedDefense": 95, "speed": 79 }, "evolutions": [ "vanillite", "vanillish", "vanilluxe" ] } ], "link": "https://pokemondb.net/pokedex/vanilluxe" }, { "num": 585, "name": "Deerling", "variations": [ { "name": "Deerling", "description": "Deerling is a Normal/Grass type Pokémon introduced in Generation 5. It is known as the Season Pokémon.", "image": "images/deerling.jpg", "types": [ "Normal", "Grass" ], "specie": "Season Pokémon", "height": 0.6, "weight": 19.5, "abilities": [ "Chlorophyll", "Sap Sipper", "Serene Grace" ], "stats": { "total": 335, "hp": 60, "attack": 60, "defense": 50, "speedAttack": 40, "speedDefense": 50, "speed": 75 }, "evolutions": [ "deerling", "sawsbuck" ] } ], "link": "https://pokemondb.net/pokedex/deerling" }, { "num": 586, "name": "Sawsbuck", "variations": [ { "name": "Sawsbuck", "description": "Sawsbuck is a Normal/Grass type Pokémon introduced in Generation 5. It is known as the Season Pokémon.", "image": "images/sawsbuck.jpg", "types": [ "Normal", "Grass" ], "specie": "Season Pokémon", "height": 1.9, "weight": 92.5, "abilities": [ "Chlorophyll", "Sap Sipper", "Serene Grace" ], "stats": { "total": 475, "hp": 80, "attack": 100, "defense": 70, "speedAttack": 60, "speedDefense": 70, "speed": 95 }, "evolutions": [ "deerling", "sawsbuck" ] } ], "link": "https://pokemondb.net/pokedex/sawsbuck" }, { "num": 587, "name": "Emolga", "variations": [ { "name": "Emolga", "description": "Emolga is an Electric/Flying type Pokémon introduced in Generation 5. It is known as the Sky Squirrel Pokémon.", "image": "images/emolga.jpg", "types": [ "Electric", "Flying" ], "specie": "Sky Squirrel Pokémon", "height": 0.4, "weight": 5, "abilities": [ "Static", "Motor Drive" ], "stats": { "total": 428, "hp": 55, "attack": 75, "defense": 60, "speedAttack": 75, "speedDefense": 60, "speed": 103 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/emolga" }, { "num": 588, "name": "Karrablast", "variations": [ { "name": "Karrablast", "description": "Karrablast is a Bug type Pokémon introduced in Generation 5. It is known as the Clamping Pokémon.", "image": "images/karrablast.jpg", "types": [ "Bug" ], "specie": "Clamping Pokémon", "height": 0.5, "weight": 5.9, "abilities": [ "Swarm", "Shed Skin", "No Guard" ], "stats": { "total": 315, "hp": 50, "attack": 75, "defense": 45, "speedAttack": 40, "speedDefense": 45, "speed": 60 }, "evolutions": [ "karrablast", "escavalier" ] } ], "link": "https://pokemondb.net/pokedex/karrablast" }, { "num": 589, "name": "Escavalier", "variations": [ { "name": "Escavalier", "description": "Escavalier is a Bug/Steel type Pokémon introduced in Generation 5. It is known as the Cavalry Pokémon.", "image": "images/escavalier.jpg", "types": [ "Bug", "Steel" ], "specie": "Cavalry Pokémon", "height": 1, "weight": 33, "abilities": [ "Swarm", "Shell Armor", "Overcoat" ], "stats": { "total": 495, "hp": 70, "attack": 135, "defense": 105, "speedAttack": 60, "speedDefense": 105, "speed": 20 }, "evolutions": [ "karrablast", "escavalier" ] } ], "link": "https://pokemondb.net/pokedex/escavalier" }, { "num": 590, "name": "Foongus", "variations": [ { "name": "Foongus", "description": "Foongus is a Grass/Poison type Pokémon introduced in Generation 5. It is known as the Mushroom Pokémon.", "image": "images/foongus.jpg", "types": [ "Grass", "Poison" ], "specie": "Mushroom Pokémon", "height": 0.2, "weight": 1, "abilities": [ "Effect Spore", "Regenerator" ], "stats": { "total": 294, "hp": 69, "attack": 55, "defense": 45, "speedAttack": 55, "speedDefense": 55, "speed": 15 }, "evolutions": [ "foongus", "amoonguss" ] } ], "link": "https://pokemondb.net/pokedex/foongus" }, { "num": 591, "name": "Amoonguss", "variations": [ { "name": "Amoonguss", "description": "Amoonguss is a Grass/Poison type Pokémon introduced in Generation 5. It is known as the Mushroom Pokémon.", "image": "images/amoonguss.jpg", "types": [ "Grass", "Poison" ], "specie": "Mushroom Pokémon", "height": 0.6, "weight": 10.5, "abilities": [ "Effect Spore", "Regenerator" ], "stats": { "total": 464, "hp": 114, "attack": 85, "defense": 70, "speedAttack": 85, "speedDefense": 80, "speed": 30 }, "evolutions": [ "foongus", "amoonguss" ] } ], "link": "https://pokemondb.net/pokedex/amoonguss" }, { "num": 592, "name": "Frillish", "variations": [ { "name": "Frillish", "description": "Frillish is a Water/Ghost type Pokémon introduced in Generation 5. It is known as the Floating Pokémon.", "image": "images/frillish.jpg", "types": [ "Water", "Ghost" ], "specie": "Floating Pokémon", "height": 1.2, "weight": 33, "abilities": [ "Water Absorb", "Cursed Body", "Damp" ], "stats": { "total": 335, "hp": 55, "attack": 40, "defense": 50, "speedAttack": 65, "speedDefense": 85, "speed": 40 }, "evolutions": [ "frillish", "jellicent" ] } ], "link": "https://pokemondb.net/pokedex/frillish" }, { "num": 593, "name": "Jellicent", "variations": [ { "name": "Jellicent", "description": "Jellicent is a Water/Ghost type Pokémon introduced in Generation 5. It is known as the Floating Pokémon.", "image": "images/jellicent.jpg", "types": [ "Water", "Ghost" ], "specie": "Floating Pokémon", "height": 2.2, "weight": 135, "abilities": [ "Water Absorb", "Cursed Body", "Damp" ], "stats": { "total": 480, "hp": 100, "attack": 60, "defense": 70, "speedAttack": 85, "speedDefense": 105, "speed": 60 }, "evolutions": [ "frillish", "jellicent" ] } ], "link": "https://pokemondb.net/pokedex/jellicent" }, { "num": 594, "name": "Alomomola", "variations": [ { "name": "Alomomola", "description": "Alomomola is a Water type Pokémon introduced in Generation 5. It is known as the Caring Pokémon.", "image": "images/alomomola.jpg", "types": [ "Water" ], "specie": "Caring Pokémon", "height": 1.2, "weight": 31.6, "abilities": [ "Healer", "Hydration", "Regenerator" ], "stats": { "total": 470, "hp": 165, "attack": 75, "defense": 80, "speedAttack": 40, "speedDefense": 45, "speed": 65 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/alomomola" }, { "num": 595, "name": "Joltik", "variations": [ { "name": "Joltik", "description": "Joltik is a Bug/Electric type Pokémon introduced in Generation 5. It is known as the Attaching Pokémon.", "image": "images/joltik.jpg", "types": [ "Bug", "Electric" ], "specie": "Attaching Pokémon", "height": 0.1, "weight": 0.6, "abilities": [ "Compound Eyes", "Unnerve", "Swarm" ], "stats": { "total": 319, "hp": 50, "attack": 47, "defense": 50, "speedAttack": 57, "speedDefense": 50, "speed": 65 }, "evolutions": [ "joltik", "galvantula" ] } ], "link": "https://pokemondb.net/pokedex/joltik" }, { "num": 596, "name": "Galvantula", "variations": [ { "name": "Galvantula", "description": "Galvantula is a Bug/Electric type Pokémon introduced in Generation 5. It is known as the EleSpider Pokémon.", "image": "images/galvantula.jpg", "types": [ "Bug", "Electric" ], "specie": "EleSpider Pokémon", "height": 0.8, "weight": 14.3, "abilities": [ "Compound Eyes", "Unnerve", "Swarm" ], "stats": { "total": 472, "hp": 70, "attack": 77, "defense": 60, "speedAttack": 97, "speedDefense": 60, "speed": 108 }, "evolutions": [ "joltik", "galvantula" ] } ], "link": "https://pokemondb.net/pokedex/galvantula" }, { "num": 597, "name": "Ferroseed", "variations": [ { "name": "Ferroseed", "description": "Ferroseed is a Grass/Steel type Pokémon introduced in Generation 5. It is known as the Thorn Seed Pokémon.", "image": "images/ferroseed.jpg", "types": [ "Grass", "Steel" ], "specie": "Thorn Seed Pokémon", "height": 0.6, "weight": 18.8, "abilities": [ "Iron Barbs", "Anticipation" ], "stats": { "total": 305, "hp": 44, "attack": 50, "defense": 91, "speedAttack": 24, "speedDefense": 86, "speed": 10 }, "evolutions": [ "ferroseed", "ferrothorn" ] } ], "link": "https://pokemondb.net/pokedex/ferroseed" }, { "num": 598, "name": "Ferrothorn", "variations": [ { "name": "Ferrothorn", "description": "Ferrothorn is a Grass/Steel type Pokémon introduced in Generation 5. It is known as the Thorn Pod Pokémon.", "image": "images/ferrothorn.jpg", "types": [ "Grass", "Steel" ], "specie": "Thorn Pod Pokémon", "height": 1, "weight": 110, "abilities": [ "Iron Barbs", "Anticipation" ], "stats": { "total": 489, "hp": 74, "attack": 94, "defense": 131, "speedAttack": 54, "speedDefense": 116, "speed": 20 }, "evolutions": [ "ferroseed", "ferrothorn" ] } ], "link": "https://pokemondb.net/pokedex/ferrothorn" }, { "num": 599, "name": "Klink", "variations": [ { "name": "Klink", "description": "Klink is a Steel type Pokémon introduced in Generation 5. It is known as the Gear Pokémon.", "image": "images/klink.jpg", "types": [ "Steel" ], "specie": "Gear Pokémon", "height": 0.3, "weight": 21, "abilities": [ "Plus", "Minus", "Clear Body" ], "stats": { "total": 300, "hp": 40, "attack": 55, "defense": 70, "speedAttack": 45, "speedDefense": 60, "speed": 30 }, "evolutions": [ "klink", "klang", "klinklang" ] } ], "link": "https://pokemondb.net/pokedex/klink" }, { "num": 600, "name": "Klang", "variations": [ { "name": "Klang", "description": "Klang is a Steel type Pokémon introduced in Generation 5. It is known as the Gear Pokémon.", "image": "images/klang.jpg", "types": [ "Steel" ], "specie": "Gear Pokémon", "height": 0.6, "weight": 51, "abilities": [ "Plus", "Minus", "Clear Body" ], "stats": { "total": 440, "hp": 60, "attack": 80, "defense": 95, "speedAttack": 70, "speedDefense": 85, "speed": 50 }, "evolutions": [ "klink", "klang", "klinklang" ] } ], "link": "https://pokemondb.net/pokedex/klang" }, { "num": 601, "name": "Klinklang", "variations": [ { "name": "Klinklang", "description": "Klinklang is a Steel type Pokémon introduced in Generation 5. It is known as the Gear Pokémon.", "image": "images/klinklang.jpg", "types": [ "Steel" ], "specie": "Gear Pokémon", "height": 0.6, "weight": 81, "abilities": [ "Plus", "Minus", "Clear Body" ], "stats": { "total": 520, "hp": 60, "attack": 100, "defense": 115, "speedAttack": 70, "speedDefense": 85, "speed": 90 }, "evolutions": [ "klink", "klang", "klinklang" ] } ], "link": "https://pokemondb.net/pokedex/klinklang" }, { "num": 602, "name": "Tynamo", "variations": [ { "name": "Tynamo", "description": "Tynamo is an Electric type Pokémon introduced in Generation 5. It is known as the EleFish Pokémon.", "image": "images/tynamo.jpg", "types": [ "Electric" ], "specie": "EleFish Pokémon", "height": 0.2, "weight": 0.3, "abilities": [ "Levitate" ], "stats": { "total": 275, "hp": 35, "attack": 55, "defense": 40, "speedAttack": 45, "speedDefense": 40, "speed": 60 }, "evolutions": [ "tynamo", "eelektrik", "eelektross" ] } ], "link": "https://pokemondb.net/pokedex/tynamo" }, { "num": 603, "name": "Eelektrik", "variations": [ { "name": "Eelektrik", "description": "Eelektrik is an Electric type Pokémon introduced in Generation 5. It is known as the EleFish Pokémon.", "image": "images/eelektrik.jpg", "types": [ "Electric" ], "specie": "EleFish Pokémon", "height": 1.2, "weight": 22, "abilities": [ "Levitate" ], "stats": { "total": 405, "hp": 65, "attack": 85, "defense": 70, "speedAttack": 75, "speedDefense": 70, "speed": 40 }, "evolutions": [ "tynamo", "eelektrik", "eelektross" ] } ], "link": "https://pokemondb.net/pokedex/eelektrik" }, { "num": 604, "name": "Eelektross", "variations": [ { "name": "Eelektross", "description": "Eelektross is an Electric type Pokémon introduced in Generation 5. It is known as the EleFish Pokémon.", "image": "images/eelektross.jpg", "types": [ "Electric" ], "specie": "EleFish Pokémon", "height": 2.1, "weight": 80.5, "abilities": [ "Levitate" ], "stats": { "total": 515, "hp": 85, "attack": 115, "defense": 80, "speedAttack": 105, "speedDefense": 80, "speed": 50 }, "evolutions": [ "tynamo", "eelektrik", "eelektross" ] } ], "link": "https://pokemondb.net/pokedex/eelektross" }, { "num": 605, "name": "Elgyem", "variations": [ { "name": "Elgyem", "description": "Elgyem is a Psychic type Pokémon introduced in Generation 5. It is known as the Cerebral Pokémon.", "image": "images/elgyem.jpg", "types": [ "Psychic" ], "specie": "Cerebral Pokémon", "height": 0.5, "weight": 9, "abilities": [ "Telepathy", "Synchronize", "Analytic" ], "stats": { "total": 335, "hp": 55, "attack": 55, "defense": 55, "speedAttack": 85, "speedDefense": 55, "speed": 30 }, "evolutions": [ "elgyem", "beheeyem" ] } ], "link": "https://pokemondb.net/pokedex/elgyem" }, { "num": 606, "name": "Beheeyem", "variations": [ { "name": "Beheeyem", "description": "Beheeyem is a Psychic type Pokémon introduced in Generation 5. It is known as the Cerebral Pokémon.", "image": "images/beheeyem.jpg", "types": [ "Psychic" ], "specie": "Cerebral Pokémon", "height": 1, "weight": 34.5, "abilities": [ "Telepathy", "Synchronize", "Analytic" ], "stats": { "total": 485, "hp": 75, "attack": 75, "defense": 75, "speedAttack": 125, "speedDefense": 95, "speed": 40 }, "evolutions": [ "elgyem", "beheeyem" ] } ], "link": "https://pokemondb.net/pokedex/beheeyem" }, { "num": 607, "name": "Litwick", "variations": [ { "name": "Litwick", "description": "Litwick is a Ghost/Fire type Pokémon introduced in Generation 5. It is known as the Candle Pokémon.", "image": "images/litwick.jpg", "types": [ "Ghost", "Fire" ], "specie": "Candle Pokémon", "height": 0.3, "weight": 3.1, "abilities": [ "Flash Fire", "Flame Body", "Infiltrator" ], "stats": { "total": 275, "hp": 50, "attack": 30, "defense": 55, "speedAttack": 65, "speedDefense": 55, "speed": 20 }, "evolutions": [ "litwick", "lampent", "chandelure" ] } ], "link": "https://pokemondb.net/pokedex/litwick" }, { "num": 608, "name": "Lampent", "variations": [ { "name": "Lampent", "description": "Lampent is a Ghost/Fire type Pokémon introduced in Generation 5. It is known as the Lamp Pokémon.", "image": "images/lampent.jpg", "types": [ "Ghost", "Fire" ], "specie": "Lamp Pokémon", "height": 0.6, "weight": 13, "abilities": [ "Flash Fire", "Flame Body", "Infiltrator" ], "stats": { "total": 370, "hp": 60, "attack": 40, "defense": 60, "speedAttack": 95, "speedDefense": 60, "speed": 55 }, "evolutions": [ "litwick", "lampent", "chandelure" ] } ], "link": "https://pokemondb.net/pokedex/lampent" }, { "num": 609, "name": "Chandelure", "variations": [ { "name": "Chandelure", "description": "Chandelure is a Ghost/Fire type Pokémon introduced in Generation 5. It is known as the Luring Pokémon.", "image": "images/chandelure.jpg", "types": [ "Ghost", "Fire" ], "specie": "Luring Pokémon", "height": 1, "weight": 34.3, "abilities": [ "Flash Fire", "Flame Body", "Infiltrator" ], "stats": { "total": 520, "hp": 60, "attack": 55, "defense": 90, "speedAttack": 145, "speedDefense": 90, "speed": 80 }, "evolutions": [ "litwick", "lampent", "chandelure" ] } ], "link": "https://pokemondb.net/pokedex/chandelure" }, { "num": 610, "name": "Axew", "variations": [ { "name": "Axew", "description": "Axew is a Dragon type Pokémon introduced in Generation 5. It is known as the Tusk Pokémon.", "image": "images/axew.jpg", "types": [ "Dragon" ], "specie": "Tusk Pokémon", "height": 0.6, "weight": 18, "abilities": [ "Rivalry", "Mold Breaker", "Unnerve" ], "stats": { "total": 320, "hp": 46, "attack": 87, "defense": 60, "speedAttack": 30, "speedDefense": 40, "speed": 57 }, "evolutions": [ "axew", "fraxure", "haxorus" ] } ], "link": "https://pokemondb.net/pokedex/axew" }, { "num": 611, "name": "Fraxure", "variations": [ { "name": "Fraxure", "description": "Fraxure is a Dragon type Pokémon introduced in Generation 5. It is known as the Axe Jaw Pokémon.", "image": "images/fraxure.jpg", "types": [ "Dragon" ], "specie": "Axe Jaw Pokémon", "height": 1, "weight": 36, "abilities": [ "Rivalry", "Mold Breaker", "Unnerve" ], "stats": { "total": 410, "hp": 66, "attack": 117, "defense": 70, "speedAttack": 40, "speedDefense": 50, "speed": 67 }, "evolutions": [ "axew", "fraxure", "haxorus" ] } ], "link": "https://pokemondb.net/pokedex/fraxure" }, { "num": 612, "name": "Haxorus", "variations": [ { "name": "Haxorus", "description": "Haxorus is a Dragon type Pokémon introduced in Generation 5. It is known as the Axe Jaw Pokémon.", "image": "images/haxorus.jpg", "types": [ "Dragon" ], "specie": "Axe Jaw Pokémon", "height": 1.8, "weight": 105.5, "abilities": [ "Rivalry", "Mold Breaker", "Unnerve" ], "stats": { "total": 540, "hp": 76, "attack": 147, "defense": 90, "speedAttack": 60, "speedDefense": 70, "speed": 97 }, "evolutions": [ "axew", "fraxure", "haxorus" ] } ], "link": "https://pokemondb.net/pokedex/haxorus" }, { "num": 613, "name": "Cubchoo", "variations": [ { "name": "Cubchoo", "description": "Cubchoo is an Ice type Pokémon introduced in Generation 5. It is known as the Chill Pokémon.", "image": "images/cubchoo.jpg", "types": [ "Ice" ], "specie": "Chill Pokémon", "height": 0.5, "weight": 8.5, "abilities": [ "Snow Cloak", "Slush Rush", "Rattled" ], "stats": { "total": 305, "hp": 55, "attack": 70, "defense": 40, "speedAttack": 60, "speedDefense": 40, "speed": 40 }, "evolutions": [ "cubchoo", "beartic" ] } ], "link": "https://pokemondb.net/pokedex/cubchoo" }, { "num": 614, "name": "Beartic", "variations": [ { "name": "Beartic", "description": "Beartic is an Ice type Pokémon introduced in Generation 5. It is known as the Freezing Pokémon.", "image": "images/beartic.jpg", "types": [ "Ice" ], "specie": "Freezing Pokémon", "height": 2.6, "weight": 260, "abilities": [ "Snow Cloak", "Slush Rush", "Swift Swim" ], "stats": { "total": 505, "hp": 95, "attack": 130, "defense": 80, "speedAttack": 70, "speedDefense": 80, "speed": 50 }, "evolutions": [ "cubchoo", "beartic" ] } ], "link": "https://pokemondb.net/pokedex/beartic" }, { "num": 615, "name": "Cryogonal", "variations": [ { "name": "Cryogonal", "description": "Cryogonal is an Ice type Pokémon introduced in Generation 5. It is known as the Crystallizing Pokémon.", "image": "images/cryogonal.jpg", "types": [ "Ice" ], "specie": "Crystallizing Pokémon", "height": 1.1, "weight": 148, "abilities": [ "Levitate" ], "stats": { "total": 515, "hp": 80, "attack": 50, "defense": 50, "speedAttack": 95, "speedDefense": 135, "speed": 105 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/cryogonal" }, { "num": 616, "name": "Shelmet", "variations": [ { "name": "Shelmet", "description": "Shelmet is a Bug type Pokémon introduced in Generation 5. It is known as the Snail Pokémon.", "image": "images/shelmet.jpg", "types": [ "Bug" ], "specie": "Snail Pokémon", "height": 0.4, "weight": 7.7, "abilities": [ "Hydration", "Shell Armor", "Overcoat" ], "stats": { "total": 305, "hp": 50, "attack": 40, "defense": 85, "speedAttack": 40, "speedDefense": 65, "speed": 25 }, "evolutions": [ "shelmet", "accelgor" ] } ], "link": "https://pokemondb.net/pokedex/shelmet" }, { "num": 617, "name": "Accelgor", "variations": [ { "name": "Accelgor", "description": "Accelgor is a Bug type Pokémon introduced in Generation 5. It is known as the Shell Out Pokémon.", "image": "images/accelgor.jpg", "types": [ "Bug" ], "specie": "Shell Out Pokémon", "height": 0.8, "weight": 25.3, "abilities": [ "Hydration", "Sticky Hold", "Unburden" ], "stats": { "total": 495, "hp": 80, "attack": 70, "defense": 40, "speedAttack": 100, "speedDefense": 60, "speed": 145 }, "evolutions": [ "shelmet", "accelgor" ] } ], "link": "https://pokemondb.net/pokedex/accelgor" }, { "num": 618, "name": "Stunfisk", "variations": [ { "name": "Stunfisk", "description": "Stunfisk is a Ground/Electric type Pokémon introduced in Generation 5. It is known as the Trap Pokémon.", "image": "images/stunfisk.jpg", "types": [ "Ground", "Electric" ], "specie": "Trap Pokémon", "height": 0.7, "weight": 11, "abilities": [ "Static", "Limber", "Sand Veil" ], "stats": { "total": 471, "hp": 109, "attack": 66, "defense": 84, "speedAttack": 81, "speedDefense": 99, "speed": 32 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/stunfisk" }, { "num": 619, "name": "Mienfoo", "variations": [ { "name": "Mienfoo", "description": "Mienfoo is a Fighting type Pokémon introduced in Generation 5. It is known as the Martial Arts Pokémon.", "image": "images/mienfoo.jpg", "types": [ "Fighting" ], "specie": "Martial Arts Pokémon", "height": 0.9, "weight": 20, "abilities": [ "Inner Focus", "Regenerator", "Reckless" ], "stats": { "total": 350, "hp": 45, "attack": 85, "defense": 50, "speedAttack": 55, "speedDefense": 50, "speed": 65 }, "evolutions": [ "mienfoo", "mienshao" ] } ], "link": "https://pokemondb.net/pokedex/mienfoo" }, { "num": 620, "name": "Mienshao", "variations": [ { "name": "Mienshao", "description": "Mienshao is a Fighting type Pokémon introduced in Generation 5. It is known as the Martial Arts Pokémon.", "image": "images/mienshao.jpg", "types": [ "Fighting" ], "specie": "Martial Arts Pokémon", "height": 1.4, "weight": 35.5, "abilities": [ "Inner Focus", "Regenerator", "Reckless" ], "stats": { "total": 510, "hp": 65, "attack": 125, "defense": 60, "speedAttack": 95, "speedDefense": 60, "speed": 105 }, "evolutions": [ "mienfoo", "mienshao" ] } ], "link": "https://pokemondb.net/pokedex/mienshao" }, { "num": 621, "name": "Druddigon", "variations": [ { "name": "Druddigon", "description": "Druddigon is a Dragon type Pokémon introduced in Generation 5. It is known as the Cave Pokémon.", "image": "images/druddigon.jpg", "types": [ "Dragon" ], "specie": "Cave Pokémon", "height": 1.6, "weight": 139, "abilities": [ "Rough Skin", "Sheer Force", "Mold Breaker" ], "stats": { "total": 485, "hp": 77, "attack": 120, "defense": 90, "speedAttack": 60, "speedDefense": 90, "speed": 48 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/druddigon" }, { "num": 622, "name": "Golett", "variations": [ { "name": "Golett", "description": "Golett is a Ground/Ghost type Pokémon introduced in Generation 5. It is known as the Automaton Pokémon.", "image": "images/golett.jpg", "types": [ "Ground", "Ghost" ], "specie": "Automaton Pokémon", "height": 1, "weight": 92, "abilities": [ "Iron Fist", "Klutz", "No Guard" ], "stats": { "total": 303, "hp": 59, "attack": 74, "defense": 50, "speedAttack": 35, "speedDefense": 50, "speed": 35 }, "evolutions": [ "golett", "golurk" ] } ], "link": "https://pokemondb.net/pokedex/golett" }, { "num": 623, "name": "Golurk", "variations": [ { "name": "Golurk", "description": "Golurk is a Ground/Ghost type Pokémon introduced in Generation 5. It is known as the Automaton Pokémon.", "image": "images/golurk.jpg", "types": [ "Ground", "Ghost" ], "specie": "Automaton Pokémon", "height": 2.8, "weight": 330, "abilities": [ "Iron Fist", "Klutz", "No Guard" ], "stats": { "total": 483, "hp": 89, "attack": 124, "defense": 80, "speedAttack": 55, "speedDefense": 80, "speed": 55 }, "evolutions": [ "golett", "golurk" ] } ], "link": "https://pokemondb.net/pokedex/golurk" }, { "num": 624, "name": "Pawniard", "variations": [ { "name": "Pawniard", "description": "Pawniard is a Dark/Steel type Pokémon introduced in Generation 5. It is known as the Sharp Blade Pokémon.", "image": "images/pawniard.jpg", "types": [ "Dark", "Steel" ], "specie": "Sharp Blade Pokémon", "height": 0.5, "weight": 10.2, "abilities": [ "Defiant", "Inner Focus", "Pressure" ], "stats": { "total": 340, "hp": 45, "attack": 85, "defense": 70, "speedAttack": 40, "speedDefense": 40, "speed": 60 }, "evolutions": [ "pawniard", "bisharp" ] } ], "link": "https://pokemondb.net/pokedex/pawniard" }, { "num": 625, "name": "Bisharp", "variations": [ { "name": "Bisharp", "description": "Bisharp is a Dark/Steel type Pokémon introduced in Generation 5. It is known as the Sword Blade Pokémon.", "image": "images/bisharp.jpg", "types": [ "Dark", "Steel" ], "specie": "Sword Blade Pokémon", "height": 1.6, "weight": 70, "abilities": [ "Defiant", "Inner Focus", "Pressure" ], "stats": { "total": 490, "hp": 65, "attack": 125, "defense": 100, "speedAttack": 60, "speedDefense": 70, "speed": 70 }, "evolutions": [ "pawniard", "bisharp" ] } ], "link": "https://pokemondb.net/pokedex/bisharp" }, { "num": 626, "name": "Bouffalant", "variations": [ { "name": "Bouffalant", "description": "Bouffalant is a Normal type Pokémon introduced in Generation 5. It is known as the Bash Buffalo Pokémon.", "image": "images/bouffalant.jpg", "types": [ "Normal" ], "specie": "Bash Buffalo Pokémon", "height": 1.6, "weight": 94.6, "abilities": [ "Reckless", "Sap Sipper", "Soundproof" ], "stats": { "total": 490, "hp": 95, "attack": 110, "defense": 95, "speedAttack": 40, "speedDefense": 95, "speed": 55 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/bouffalant" }, { "num": 627, "name": "Rufflet", "variations": [ { "name": "Rufflet", "description": "Rufflet is a Normal/Flying type Pokémon introduced in Generation 5. It is known as the Eaglet Pokémon.", "image": "images/rufflet.jpg", "types": [ "Normal", "Flying" ], "specie": "Eaglet Pokémon", "height": 0.5, "weight": 10.5, "abilities": [ "Keen Eye", "Sheer Force", "Hustle" ], "stats": { "total": 350, "hp": 70, "attack": 83, "defense": 50, "speedAttack": 37, "speedDefense": 50, "speed": 60 }, "evolutions": [ "rufflet", "braviary" ] } ], "link": "https://pokemondb.net/pokedex/rufflet" }, { "num": 628, "name": "Braviary", "variations": [ { "name": "Braviary", "description": "Braviary is a Normal/Flying type Pokémon introduced in Generation 5. It is known as the Valiant Pokémon.", "image": "images/braviary.jpg", "types": [ "Normal", "Flying" ], "specie": "Valiant Pokémon", "height": 1.5, "weight": 41, "abilities": [ "Keen Eye", "Sheer Force", "Defiant" ], "stats": { "total": 510, "hp": 100, "attack": 123, "defense": 75, "speedAttack": 57, "speedDefense": 75, "speed": 80 }, "evolutions": [ "rufflet", "braviary" ] } ], "link": "https://pokemondb.net/pokedex/braviary" }, { "num": 629, "name": "Vullaby", "variations": [ { "name": "Vullaby", "description": "Vullaby is a Dark/Flying type Pokémon introduced in Generation 5. It is known as the Diapered Pokémon.", "image": "images/vullaby.jpg", "types": [ "Dark", "Flying" ], "specie": "Diapered Pokémon", "height": 0.5, "weight": 9, "abilities": [ "Big Pecks", "Overcoat", "Weak Armor" ], "stats": { "total": 370, "hp": 70, "attack": 55, "defense": 75, "speedAttack": 45, "speedDefense": 65, "speed": 60 }, "evolutions": [ "vullaby", "mandibuzz" ] } ], "link": "https://pokemondb.net/pokedex/vullaby" }, { "num": 630, "name": "Mandibuzz", "variations": [ { "name": "Mandibuzz", "description": "Mandibuzz is a Dark/Flying type Pokémon introduced in Generation 5. It is known as the Bone Vulture Pokémon.", "image": "images/mandibuzz.jpg", "types": [ "Dark", "Flying" ], "specie": "Bone Vulture Pokémon", "height": 1.2, "weight": 39.5, "abilities": [ "Big Pecks", "Overcoat", "Weak Armor" ], "stats": { "total": 510, "hp": 110, "attack": 65, "defense": 105, "speedAttack": 55, "speedDefense": 95, "speed": 80 }, "evolutions": [ "vullaby", "mandibuzz" ] } ], "link": "https://pokemondb.net/pokedex/mandibuzz" }, { "num": 631, "name": "Heatmor", "variations": [ { "name": "Heatmor", "description": "Heatmor is a Fire type Pokémon introduced in Generation 5. It is known as the Anteater Pokémon.", "image": "images/heatmor.jpg", "types": [ "Fire" ], "specie": "Anteater Pokémon", "height": 1.4, "weight": 58, "abilities": [ "Gluttony", "Flash Fire", "White Smoke" ], "stats": { "total": 484, "hp": 85, "attack": 97, "defense": 66, "speedAttack": 105, "speedDefense": 66, "speed": 65 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/heatmor" }, { "num": 632, "name": "Durant", "variations": [ { "name": "Durant", "description": "Durant is a Bug/Steel type Pokémon introduced in Generation 5. It is known as the Iron Ant Pokémon.", "image": "images/durant.jpg", "types": [ "Bug", "Steel" ], "specie": "Iron Ant Pokémon", "height": 0.3, "weight": 33, "abilities": [ "Swarm", "Hustle", "Truant" ], "stats": { "total": 484, "hp": 58, "attack": 109, "defense": 112, "speedAttack": 48, "speedDefense": 48, "speed": 109 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/durant" }, { "num": 633, "name": "Deino", "variations": [ { "name": "Deino", "description": "Deino is a Dark/Dragon type Pokémon introduced in Generation 5. It is known as the Irate Pokémon.", "image": "images/deino.jpg", "types": [ "Dark", "Dragon" ], "specie": "Irate Pokémon", "height": 0.8, "weight": 17.3, "abilities": [ "Hustle" ], "stats": { "total": 300, "hp": 52, "attack": 65, "defense": 50, "speedAttack": 45, "speedDefense": 50, "speed": 38 }, "evolutions": [ "deino", "zweilous", "hydreigon" ] } ], "link": "https://pokemondb.net/pokedex/deino" }, { "num": 634, "name": "Zweilous", "variations": [ { "name": "Zweilous", "description": "Zweilous is a Dark/Dragon type Pokémon introduced in Generation 5. It is known as the Hostile Pokémon.", "image": "images/zweilous.jpg", "types": [ "Dark", "Dragon" ], "specie": "Hostile Pokémon", "height": 1.4, "weight": 50, "abilities": [ "Hustle" ], "stats": { "total": 420, "hp": 72, "attack": 85, "defense": 70, "speedAttack": 65, "speedDefense": 70, "speed": 58 }, "evolutions": [ "deino", "zweilous", "hydreigon" ] } ], "link": "https://pokemondb.net/pokedex/zweilous" }, { "num": 635, "name": "Hydreigon", "variations": [ { "name": "Hydreigon", "description": "Hydreigon is a Dark/Dragon type Pokémon introduced in Generation 5. It is known as the Brutal Pokémon.", "image": "images/hydreigon.jpg", "types": [ "Dark", "Dragon" ], "specie": "Brutal Pokémon", "height": 1.8, "weight": 160, "abilities": [ "Levitate" ], "stats": { "total": 600, "hp": 92, "attack": 105, "defense": 90, "speedAttack": 125, "speedDefense": 90, "speed": 98 }, "evolutions": [ "deino", "zweilous", "hydreigon" ] } ], "link": "https://pokemondb.net/pokedex/hydreigon" }, { "num": 636, "name": "Larvesta", "variations": [ { "name": "Larvesta", "description": "Larvesta is a Bug/Fire type Pokémon introduced in Generation 5. It is known as the Torch Pokémon.", "image": "images/larvesta.jpg", "types": [ "Bug", "Fire" ], "specie": "Torch Pokémon", "height": 1.1, "weight": 28.8, "abilities": [ "Flame Body", "Swarm" ], "stats": { "total": 360, "hp": 55, "attack": 85, "defense": 55, "speedAttack": 50, "speedDefense": 55, "speed": 60 }, "evolutions": [ "larvesta", "volcarona" ] } ], "link": "https://pokemondb.net/pokedex/larvesta" }, { "num": 637, "name": "Volcarona", "variations": [ { "name": "Volcarona", "description": "Volcarona is a Bug/Fire type Pokémon introduced in Generation 5. It is known as the Sun Pokémon.", "image": "images/volcarona.jpg", "types": [ "Bug", "Fire" ], "specie": "Sun Pokémon", "height": 1.6, "weight": 46, "abilities": [ "Flame Body", "Swarm" ], "stats": { "total": 550, "hp": 85, "attack": 60, "defense": 65, "speedAttack": 135, "speedDefense": 105, "speed": 100 }, "evolutions": [ "larvesta", "volcarona" ] } ], "link": "https://pokemondb.net/pokedex/volcarona" }, { "num": 638, "name": "Cobalion", "variations": [ { "name": "Cobalion", "description": "Cobalion is a Steel/Fighting type Pokémon introduced in Generation 5. It is known as the Iron Will Pokémon.", "image": "images/cobalion.jpg", "types": [ "Steel", "Fighting" ], "specie": "Iron Will Pokémon", "height": 2.1, "weight": 250, "abilities": [ "Justified" ], "stats": { "total": 580, "hp": 91, "attack": 90, "defense": 129, "speedAttack": 90, "speedDefense": 72, "speed": 108 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/cobalion" }, { "num": 639, "name": "Terrakion", "variations": [ { "name": "Terrakion", "description": "Terrakion is a Rock/Fighting type Pokémon introduced in Generation 5. It is known as the Cavern Pokémon.", "image": "images/terrakion.jpg", "types": [ "Rock", "Fighting" ], "specie": "Cavern Pokémon", "height": 1.9, "weight": 260, "abilities": [ "Justified" ], "stats": { "total": 580, "hp": 91, "attack": 129, "defense": 90, "speedAttack": 72, "speedDefense": 90, "speed": 108 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/terrakion" }, { "num": 640, "name": "Virizion", "variations": [ { "name": "Virizion", "description": "Virizion is a Grass/Fighting type Pokémon introduced in Generation 5. It is known as the Grassland Pokémon.", "image": "images/virizion.jpg", "types": [ "Grass", "Fighting" ], "specie": "Grassland Pokémon", "height": 2, "weight": 200, "abilities": [ "Justified" ], "stats": { "total": 580, "hp": 91, "attack": 90, "defense": 72, "speedAttack": 90, "speedDefense": 129, "speed": 108 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/virizion" }, { "num": 641, "name": "Tornadus", "variations": [ { "name": "Incarnate Forme", "description": "Tornadus is a Flying type Pokémon introduced in Generation 5. It is known as the Cyclone Pokémon.", "image": "images/tornadus-incarnate.jpg", "types": [ "Flying" ], "specie": "Cyclone Pokémon", "height": 1.5, "weight": 63, "abilities": [ "Prankster", "Defiant" ], "stats": { "total": 580, "hp": 79, "attack": 115, "defense": 70, "speedAttack": 125, "speedDefense": 80, "speed": 111 }, "evolutions": [] }, { "name": "Therian Forme", "description": "Tornadus is a Flying type Pokémon introduced in Generation 5. It is known as the Cyclone Pokémon.", "image": "images/tornadus-therian.jpg", "types": [ "Flying" ], "specie": "Cyclone Pokémon", "height": 1.4, "weight": 63, "abilities": [ "Regenerator" ], "stats": { "total": 580, "hp": 79, "attack": 100, "defense": 80, "speedAttack": 110, "speedDefense": 90, "speed": 121 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/tornadus" }, { "num": 642, "name": "Thundurus", "variations": [ { "name": "Incarnate Forme", "description": "Thundurus is an Electric/Flying type Pokémon introduced in Generation 5. It is known as the Bolt Strike Pokémon.", "image": "images/thundurus-incarnate.jpg", "types": [ "Electric", "Flying" ], "specie": "Bolt Strike Pokémon", "height": 1.5, "weight": 61, "abilities": [ "Prankster", "Defiant" ], "stats": { "total": 580, "hp": 79, "attack": 115, "defense": 70, "speedAttack": 125, "speedDefense": 80, "speed": 111 }, "evolutions": [] }, { "name": "Therian Forme", "description": "Thundurus is an Electric/Flying type Pokémon introduced in Generation 5. It is known as the Bolt Strike Pokémon.", "image": "images/thundurus-therian.jpg", "types": [ "Electric", "Flying" ], "specie": "Bolt Strike Pokémon", "height": 3, "weight": 61, "abilities": [ "Volt Absorb" ], "stats": { "total": 580, "hp": 79, "attack": 105, "defense": 70, "speedAttack": 145, "speedDefense": 80, "speed": 101 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/thundurus" }, { "num": 643, "name": "Reshiram", "variations": [ { "name": "Reshiram", "description": "Reshiram is a Dragon/Fire type Pokémon introduced in Generation 5. It is known as the Vast White Pokémon.", "image": "images/reshiram.jpg", "types": [ "Dragon", "Fire" ], "specie": "Vast White Pokémon", "height": 3.2, "weight": 330, "abilities": [ "Turboblaze" ], "stats": { "total": 680, "hp": 100, "attack": 120, "defense": 100, "speedAttack": 150, "speedDefense": 120, "speed": 90 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/reshiram" }, { "num": 644, "name": "Zekrom", "variations": [ { "name": "Zekrom", "description": "Zekrom is a Dragon/Electric type Pokémon introduced in Generation 5. It is known as the Deep Black Pokémon.", "image": "images/zekrom.jpg", "types": [ "Dragon", "Electric" ], "specie": "Deep Black Pokémon", "height": 2.9, "weight": 345, "abilities": [ "Teravolt" ], "stats": { "total": 680, "hp": 100, "attack": 150, "defense": 120, "speedAttack": 120, "speedDefense": 100, "speed": 90 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/zekrom" }, { "num": 645, "name": "Landorus", "variations": [ { "name": "Incarnate Forme", "description": "Landorus is a Ground/Flying type Pokémon introduced in Generation 5. It is known as the Abundance Pokémon.", "image": "images/landorus-incarnate.jpg", "types": [ "Ground", "Flying" ], "specie": "Abundance Pokémon", "height": 1.5, "weight": 68, "abilities": [ "Sand Force", "Sheer Force" ], "stats": { "total": 600, "hp": 89, "attack": 125, "defense": 90, "speedAttack": 115, "speedDefense": 80, "speed": 101 }, "evolutions": [] }, { "name": "Therian Forme", "description": "Landorus is a Ground/Flying type Pokémon introduced in Generation 5. It is known as the Abundance Pokémon.", "image": "images/landorus-therian.jpg", "types": [ "Ground", "Flying" ], "specie": "Abundance Pokémon", "height": 1.3, "weight": 68, "abilities": [ "Intimidate" ], "stats": { "total": 600, "hp": 89, "attack": 145, "defense": 90, "speedAttack": 105, "speedDefense": 80, "speed": 91 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/landorus" }, { "num": 646, "name": "Kyurem", "variations": [ { "name": "Kyurem", "description": "Kyurem is a Dragon/Ice type Pokémon introduced in Generation 5. It is known as the Boundary Pokémon.", "image": "images/kyurem.jpg", "types": [ "Dragon", "Ice" ], "specie": "Boundary Pokémon", "height": 3, "weight": 325, "abilities": [ "Pressure" ], "stats": { "total": 660, "hp": 125, "attack": 130, "defense": 90, "speedAttack": 130, "speedDefense": 90, "speed": 95 }, "evolutions": [] }, { "name": "Black Kyurem", "description": "Kyurem is a Dragon/Ice type Pokémon introduced in Generation 5. It is known as the Boundary Pokémon.", "image": "images/kyurem-black.jpg", "types": [ "Dragon", "Ice" ], "specie": "Boundary Pokémon", "height": 3.3, "weight": 325, "abilities": [ "Teravolt" ], "stats": { "total": 700, "hp": 125, "attack": 170, "defense": 100, "speedAttack": 120, "speedDefense": 90, "speed": 95 }, "evolutions": [] }, { "name": "White Kyurem", "description": "Kyurem is a Dragon/Ice type Pokémon introduced in Generation 5. It is known as the Boundary Pokémon.", "image": "images/kyurem-white.jpg", "types": [ "Dragon", "Ice" ], "specie": "Boundary Pokémon", "height": 3.6, "weight": 325, "abilities": [ "Turboblaze" ], "stats": { "total": 700, "hp": 125, "attack": 120, "defense": 90, "speedAttack": 170, "speedDefense": 100, "speed": 95 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/kyurem" }, { "num": 647, "name": "Keldeo", "variations": [ { "name": "Ordinary Forme", "description": "Keldeo is a Water/Fighting type Pokémon introduced in Generation 5. It is known as the Colt Pokémon.", "image": "images/keldeo-ordinary.jpg", "types": [ "Water", "Fighting" ], "specie": "Colt Pokémon", "height": 1.4, "weight": 48.5, "abilities": [ "Justified" ], "stats": { "total": 580, "hp": 91, "attack": 72, "defense": 90, "speedAttack": 129, "speedDefense": 90, "speed": 108 }, "evolutions": [] }, { "name": "Resolute Forme", "description": "Keldeo is a Water/Fighting type Pokémon introduced in Generation 5. It is known as the Colt Pokémon.", "image": "images/keldeo-resolute.jpg", "types": [ "Water", "Fighting" ], "specie": "Colt Pokémon", "height": 1.4, "weight": 48.5, "abilities": [ "Justified" ], "stats": { "total": 580, "hp": 91, "attack": 72, "defense": 90, "speedAttack": 129, "speedDefense": 90, "speed": 108 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/keldeo" }, { "num": 648, "name": "Meloetta", "variations": [ { "name": "Aria Forme", "description": "Meloetta is a Normal/Psychic type Pokémon introduced in Generation 5. It is known as the Melody Pokémon.", "image": "images/meloetta-aria.jpg", "types": [ "Normal", "Psychic" ], "specie": "Melody Pokémon", "height": 0.6, "weight": 6.5, "abilities": [ "Serene Grace" ], "stats": { "total": 600, "hp": 100, "attack": 77, "defense": 77, "speedAttack": 128, "speedDefense": 128, "speed": 90 }, "evolutions": [] }, { "name": "Pirouette Forme", "description": "Meloetta is a Normal/Psychic type Pokémon introduced in Generation 5. It is known as the Melody Pokémon.", "image": "images/meloetta-pirouette.jpg", "types": [ "Normal", "Fighting" ], "specie": "Melody Pokémon", "height": 0.6, "weight": 6.5, "abilities": [ "Serene Grace" ], "stats": { "total": 600, "hp": 100, "attack": 128, "defense": 90, "speedAttack": 77, "speedDefense": 77, "speed": 128 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/meloetta" }, { "num": 649, "name": "Genesect", "variations": [ { "name": "Genesect", "description": "Genesect is a Bug/Steel type Pokémon introduced in Generation 5. It is known as the Paleozoic Pokémon.", "image": "images/genesect.jpg", "types": [ "Bug", "Steel" ], "specie": "Paleozoic Pokémon", "height": 1.5, "weight": 82.5, "abilities": [ "Download" ], "stats": { "total": 600, "hp": 71, "attack": 120, "defense": 95, "speedAttack": 120, "speedDefense": 95, "speed": 99 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/genesect" }, { "num": 650, "name": "Chespin", "variations": [ { "name": "Chespin", "description": "Chespin is a Grass type Pokémon introduced in Generation 6. It is known as the Spiny Nut Pokémon.\nChespin has a tough shell covering its head and back. Despite having a curious nature that tends to get it in trouble, Chespin keeps an optimistic outlook and doesn't worry about small details.\nChespin evolves into Quilladin at level 16.", "image": "images/chespin.jpg", "types": [ "Grass" ], "specie": "Spiny Nut Pokémon", "height": 0.4, "weight": 9, "abilities": [ "Overgrow", "Bulletproof" ], "stats": { "total": 313, "hp": 56, "attack": 61, "defense": 65, "speedAttack": 48, "speedDefense": 45, "speed": 38 }, "evolutions": [ "chespin", "quilladin", "chesnaught" ] } ], "link": "https://pokemondb.net/pokedex/chespin" }, { "num": 651, "name": "Quilladin", "variations": [ { "name": "Quilladin", "description": "Quilladin is a Grass type Pokémon introduced in Generation 6. It is known as the Spiny Armor Pokémon.\nUpon evolution, the hard spikes on Quilladin's body grow even sturdier. Despite its prickly appearance, Quilladin is considered a gentle Pokémon that avoids battle.\nQuilladin evolves from Chespin at level 16, and evolves into Chesnaught at level 36.", "image": "images/quilladin.jpg", "types": [ "Grass" ], "specie": "Spiny Armor Pokémon", "height": 0.7, "weight": 29, "abilities": [ "Overgrow", "Bulletproof" ], "stats": { "total": 405, "hp": 61, "attack": 78, "defense": 95, "speedAttack": 56, "speedDefense": 58, "speed": 57 }, "evolutions": [ "chespin", "quilladin", "chesnaught" ] } ], "link": "https://pokemondb.net/pokedex/quilladin" }, { "num": 652, "name": "Chesnaught", "variations": [ { "name": "Chesnaught", "description": "Chesnaught is a Grass/Fighting type Pokémon introduced in Generation 6. It is known as the Spiny Armor Pokémon.\nChesnaught evolves from Quilladin at level 36.", "image": "images/chesnaught.jpg", "types": [ "Grass", "Fighting" ], "specie": "Spiny Armor Pokémon", "height": 1.6, "weight": 90, "abilities": [ "Overgrow", "Bulletproof" ], "stats": { "total": 530, "hp": 88, "attack": 107, "defense": 122, "speedAttack": 74, "speedDefense": 75, "speed": 64 }, "evolutions": [ "chespin", "quilladin", "chesnaught" ] } ], "link": "https://pokemondb.net/pokedex/chesnaught" }, { "num": 653, "name": "Fennekin", "variations": [ { "name": "Fennekin", "description": "Fennekin is a Fire type Pokémon introduced in Generation 6. It is known as the Fox Pokémon.\nFennekin can be temperamental, but it tries to do its best for its Trainer. Searing heat blows from its ears. This Pokémon loves to snack on twigs.\nFennekin evolves into Braixen at level 16.", "image": "images/fennekin.jpg", "types": [ "Fire" ], "specie": "Fox Pokémon", "height": 0.4, "weight": 9.4, "abilities": [ "Blaze", "Magician" ], "stats": { "total": 307, "hp": 40, "attack": 45, "defense": 40, "speedAttack": 62, "speedDefense": 60, "speed": 60 }, "evolutions": [ "fennekin", "braixen", "delphox" ] } ], "link": "https://pokemondb.net/pokedex/fennekin" }, { "num": 654, "name": "Braixen", "variations": [ { "name": "Braixen", "description": "Braixen is a Fire type Pokémon introduced in Generation 6. It is known as the Fox Pokémon.\nBraixen no longer eats branches but it still keeps a tree branch in its tail, which seems to calm the Pokémon. It will occasionally wield the branch in battle and use friction to light it on fire.\nBraixen evolves from Fennekin at level 16, and evolves into Delphox at level 36.", "image": "images/braixen.jpg", "types": [ "Fire" ], "specie": "Fox Pokémon", "height": 1, "weight": 14.5, "abilities": [ "Blaze", "Magician" ], "stats": { "total": 409, "hp": 59, "attack": 59, "defense": 58, "speedAttack": 90, "speedDefense": 70, "speed": 73 }, "evolutions": [ "fennekin", "braixen", "delphox" ] } ], "link": "https://pokemondb.net/pokedex/braixen" }, { "num": 655, "name": "Delphox", "variations": [ { "name": "Delphox", "description": "Delphox is a Fire/Psychic type Pokémon introduced in Generation 6. It is known as the Fox Pokémon.\nDelphox evolves from Braixen at level 36.", "image": "images/delphox.jpg", "types": [ "Fire", "Psychic" ], "specie": "Fox Pokémon", "height": 1.5, "weight": 39, "abilities": [ "Blaze", "Magician" ], "stats": { "total": 534, "hp": 75, "attack": 69, "defense": 72, "speedAttack": 114, "speedDefense": 100, "speed": 104 }, "evolutions": [ "fennekin", "braixen", "delphox" ] } ], "link": "https://pokemondb.net/pokedex/delphox" }, { "num": 656, "name": "Froakie", "variations": [ { "name": "Froakie", "description": "Froakie is a Water type Pokémon introduced in Generation 6. It is known as the Bubble Frog Pokémon.\nFroakie is both light and strong, making it capable of jumping incredibly high. The bubbles on its chest and back protect it from attacks. Froakie may appear absentminded, but in truth it pays close attention to its surroundings at all times.\nFroakie evolves into Frogadier at level 16.", "image": "images/froakie.jpg", "types": [ "Water" ], "specie": "Bubble Frog Pokémon", "height": 0.3, "weight": 7, "abilities": [ "Torrent", "Protean" ], "stats": { "total": 314, "hp": 41, "attack": 56, "defense": 40, "speedAttack": 62, "speedDefense": 44, "speed": 71 }, "evolutions": [ "froakie", "frogadier", "greninja" ] } ], "link": "https://pokemondb.net/pokedex/froakie" }, { "num": 657, "name": "Frogadier", "variations": [ { "name": "Frogadier", "description": "Frogadier is a Water type Pokémon introduced in Generation 6. It is known as the Bubble Frog Pokémon.\nDuring battle, Frogadier confounds its opponents by leaping about the ceiling or into trees. Its jumping skill improves greatly.\nFrogadier evolves from Froakie at level 16, and evolves into Greninja at level 36.", "image": "images/frogadier.jpg", "types": [ "Water" ], "specie": "Bubble Frog Pokémon", "height": 0.6, "weight": 10.9, "abilities": [ "Torrent", "Protean" ], "stats": { "total": 405, "hp": 54, "attack": 63, "defense": 52, "speedAttack": 83, "speedDefense": 56, "speed": 97 }, "evolutions": [ "froakie", "frogadier", "greninja" ] } ], "link": "https://pokemondb.net/pokedex/frogadier" }, { "num": 658, "name": "Greninja", "variations": [ { "name": "Greninja", "description": "Greninja is a Water/Dark type Pokémon introduced in Generation 6. It is known as the Ninja Pokémon.\nGreninja evolves from Frogadier at level 36.\nGreninja has a new form Ash-Greninja introduced in Pokémon Sun/Moon.", "image": "images/greninja.jpg", "types": [ "Water", "Dark" ], "specie": "Ninja Pokémon", "height": 1.5, "weight": 40, "abilities": [ "Torrent", "Protean" ], "stats": { "total": 530, "hp": 72, "attack": 95, "defense": 67, "speedAttack": 103, "speedDefense": 71, "speed": 122 }, "evolutions": [ "froakie", "frogadier", "greninja" ] }, { "name": "Ash-Greninja", "description": "Greninja is a Water/Dark type Pokémon introduced in Generation 6. It is known as the Ninja Pokémon.\nGreninja evolves from Frogadier at level 36.\nGreninja has a new form Ash-Greninja introduced in Pokémon Sun/Moon.", "image": "images/greninja-ash.jpg", "types": [ "Water", "Dark" ], "specie": "Ninja Pokémon", "height": 1.5, "weight": 40, "abilities": [ "Battle Bond" ], "stats": { "total": 640, "hp": 72, "attack": 145, "defense": 67, "speedAttack": 153, "speedDefense": 71, "speed": 132 }, "evolutions": [ "froakie", "frogadier", "greninja" ] } ], "link": "https://pokemondb.net/pokedex/greninja" }, { "num": 659, "name": "Bunnelby", "variations": [ { "name": "Bunnelby", "description": "Bunnelby is a Normal type Pokémon introduced in Generation 6. It is known as the Digging Pokémon.\nBunnelby is based on a rabbit. It creates its den by digging in the ground with its large, shovel-shaped ears. They are strong enough to chop right through thick tree roots.\nBunnelby evolves into Diggersby at level 20.", "image": "images/bunnelby.jpg", "types": [ "Normal" ], "specie": "Digging Pokémon", "height": 0.4, "weight": 5, "abilities": [ "Pickup", "Cheek Pouch", "Huge Power" ], "stats": { "total": 237, "hp": 38, "attack": 36, "defense": 38, "speedAttack": 32, "speedDefense": 36, "speed": 57 }, "evolutions": [ "bunnelby", "diggersby" ] } ], "link": "https://pokemondb.net/pokedex/bunnelby" }, { "num": 660, "name": "Diggersby", "variations": [ { "name": "Diggersby", "description": "Diggersby is a Normal/Ground type Pokémon introduced in Generation 6. It is known as the Digging Pokémon.\nDiggersby evolves from Bunnelby at level 20.", "image": "images/diggersby.jpg", "types": [ "Normal", "Ground" ], "specie": "Digging Pokémon", "height": 1, "weight": 42.4, "abilities": [ "Pickup", "Cheek Pouch", "Huge Power" ], "stats": { "total": 423, "hp": 85, "attack": 56, "defense": 77, "speedAttack": 50, "speedDefense": 77, "speed": 78 }, "evolutions": [ "bunnelby", "diggersby" ] } ], "link": "https://pokemondb.net/pokedex/diggersby" }, { "num": 661, "name": "Fletchling", "variations": [ { "name": "Fletchling", "description": "Fletchling is a Normal/Flying type Pokémon introduced in Generation 6. It is known as the Tiny Robin Pokémon.\nIt has a friendly nature and a beautiful chirp, but Fletchling is also known to be ferocious in battle, capable of unleashing relentless attacks.\nIt evolves into Fletchinder at level 17.", "image": "images/fletchling.jpg", "types": [ "Normal", "Flying" ], "specie": "Tiny Robin Pokémon", "height": 0.3, "weight": 1.7, "abilities": [ "Big Pecks", "Gale Wings" ], "stats": { "total": 278, "hp": 45, "attack": 50, "defense": 43, "speedAttack": 40, "speedDefense": 38, "speed": 62 }, "evolutions": [ "fletchling", "fletchinder", "talonflame" ] } ], "link": "https://pokemondb.net/pokedex/fletchling" }, { "num": 662, "name": "Fletchinder", "variations": [ { "name": "Fletchinder", "description": "Fletchinder is a Fire/Flying type Pokémon introduced in Generation 6. It is known as the Ember Pokémon.\nFletchinder evolves from Fletchling at level 17 and evolves into Talonflame at level 35.", "image": "images/fletchinder.jpg", "types": [ "Fire", "Flying" ], "specie": "Ember Pokémon", "height": 0.7, "weight": 16, "abilities": [ "Flame Body", "Gale Wings" ], "stats": { "total": 382, "hp": 62, "attack": 73, "defense": 55, "speedAttack": 56, "speedDefense": 52, "speed": 84 }, "evolutions": [ "fletchling", "fletchinder", "talonflame" ] } ], "link": "https://pokemondb.net/pokedex/fletchinder" }, { "num": 663, "name": "Talonflame", "variations": [ { "name": "Talonflame", "description": "Talonflame is a Fire/Flying type Pokémon introduced in Generation 6. It is known as the Scorching Pokémon.\nIt dives at foes, and then attacks with devastating kicks.\nIt evolves from Fletchinder at level 35.", "image": "images/talonflame.jpg", "types": [ "Fire", "Flying" ], "specie": "Scorching Pokémon", "height": 1.2, "weight": 24.5, "abilities": [ "Flame Body", "Gale Wings" ], "stats": { "total": 499, "hp": 78, "attack": 81, "defense": 71, "speedAttack": 74, "speedDefense": 69, "speed": 126 }, "evolutions": [ "fletchling", "fletchinder", "talonflame" ] } ], "link": "https://pokemondb.net/pokedex/talonflame" }, { "num": 664, "name": "Scatterbug", "variations": [ { "name": "Scatterbug", "description": "Scatterbug is a Bug type Pokémon introduced in Generation 6. It is known as the Scatterdust Pokémon.\nScatterbug resides mostly in forests and wild plains. It uses the fur around its neck to control its body temperature.", "image": "images/scatterbug.jpg", "types": [ "Bug" ], "specie": "Scatterdust Pokémon", "height": 0.3, "weight": 2.5, "abilities": [ "Shield Dust", "Compound Eyes", "Friend Guard" ], "stats": { "total": 200, "hp": 38, "attack": 35, "defense": 40, "speedAttack": 27, "speedDefense": 25, "speed": 35 }, "evolutions": [ "scatterbug", "spewpa", "vivillon" ] } ], "link": "https://pokemondb.net/pokedex/scatterbug" }, { "num": 665, "name": "Spewpa", "variations": [ { "name": "Spewpa", "description": "Spewpa is a Bug type Pokémon introduced in Generation 6. It is known as the Scatterdust Pokémon.", "image": "images/spewpa.jpg", "types": [ "Bug" ], "specie": "Scatterdust Pokémon", "height": 0.3, "weight": 8.4, "abilities": [ "Shed Skin", "Friend Guard" ], "stats": { "total": 213, "hp": 45, "attack": 22, "defense": 60, "speedAttack": 27, "speedDefense": 30, "speed": 29 }, "evolutions": [ "scatterbug", "spewpa", "vivillon" ] } ], "link": "https://pokemondb.net/pokedex/spewpa" }, { "num": 666, "name": "Vivillon", "variations": [ { "name": "Vivillon", "description": "Vivillon is a Bug/Flying type Pokémon introduced in Generation 6. It is known as the Scale Pokémon.\nVivillon has 18 different forms, depending on the region set on the 3DS. (Once encountered, changing the region does not change the form found.) There are also two event-exclusive patterns. The forms are:\n\nMeadow Pattern\nGarden Pattern\nArchipelago Pattern\nContinental Pattern\nElegant Pattern\nHigh Plains Pattern\nIcy Snow Pattern\nJungle Pattern\nMarine Pattern\nModern Pattern\nMonsoon Pattern\nOcean Pattern\nPolar Pattern\nRiver Pattern\nSandstorm Pattern\nSavanna Pattern\nSun Pattern\nTundra Pattern\nPoké Ball Pattern (event)\nFancy Pattern (event)", "image": "images/vivillon.jpg", "types": [ "Bug", "Flying" ], "specie": "Scale Pokémon", "height": 1.2, "weight": 17, "abilities": [ "Shield Dust", "Compound Eyes", "Friend Guard" ], "stats": { "total": 411, "hp": 80, "attack": 52, "defense": 50, "speedAttack": 90, "speedDefense": 50, "speed": 89 }, "evolutions": [ "scatterbug", "spewpa", "vivillon" ] } ], "link": "https://pokemondb.net/pokedex/vivillon" }, { "num": 667, "name": "Litleo", "variations": [ { "name": "Litleo", "description": "Litleo is a Fire/Normal type Pokémon introduced in Generation 6. It is known as the Lion Cub Pokémon.\nIts mane blazes with heat during battle, burning hotter and hotter the stronger its opponent.", "image": "images/litleo.jpg", "types": [ "Fire", "Normal" ], "specie": "Lion Cub Pokémon", "height": 0.6, "weight": 13.5, "abilities": [ "Rivalry", "Unnerve", "Moxie" ], "stats": { "total": 369, "hp": 62, "attack": 50, "defense": 58, "speedAttack": 73, "speedDefense": 54, "speed": 72 }, "evolutions": [ "litleo", "pyroar" ] } ], "link": "https://pokemondb.net/pokedex/litleo" }, { "num": 668, "name": "Pyroar", "variations": [ { "name": "Pyroar", "description": "Pyroar is a Fire/Normal type Pokémon introduced in Generation 6. It is known as the Royal Pokémon.\nMale and female Pyroar have different forms - the male has a large mane, while the female is more sleek. Both have the same stats/attributes.", "image": "images/pyroar.jpg", "types": [ "Fire", "Normal" ], "specie": "Royal Pokémon", "height": 1.5, "weight": 81.5, "abilities": [ "Rivalry", "Unnerve", "Moxie" ], "stats": { "total": 507, "hp": 86, "attack": 68, "defense": 72, "speedAttack": 109, "speedDefense": 66, "speed": 106 }, "evolutions": [ "litleo", "pyroar" ] } ], "link": "https://pokemondb.net/pokedex/pyroar" }, { "num": 669, "name": "Flabébé", "variations": [ { "name": "Flabébé", "description": "Flabébé is a Fairy type Pokémon introduced in Generation 6. It is known as the Single Bloom Pokémon.\nFlabébé has several forms, based on the flower it is holding. They are each found in wild flower patches corresponding to its color. The forms are: Yellow Flower, Red Flower, Orange Flower, Blue Flower and White Flower.", "image": "images/flabebe.jpg", "types": [ "Fairy" ], "specie": "Single Bloom Pokémon", "height": 0.1, "weight": 0.1, "abilities": [ "Flower Veil", "Symbiosis" ], "stats": { "total": 303, "hp": 44, "attack": 38, "defense": 39, "speedAttack": 61, "speedDefense": 79, "speed": 42 }, "evolutions": [ "flabébé", "floette", "florges" ] } ], "link": "https://pokemondb.net/pokedex/flabebe" }, { "num": 670, "name": "Floette", "variations": [ { "name": "Floette", "description": "Floette is a Fairy type Pokémon introduced in Generation 6. It is known as the Single Bloom Pokémon.\nLike Flabébé, Floette has several forms: Yellow Flower, Red Flower, Orange Flower, Blue Flower and White Flower.", "image": "images/floette.jpg", "types": [ "Fairy" ], "specie": "Single Bloom Pokémon", "height": 0.2, "weight": 0.9, "abilities": [ "Flower Veil", "Symbiosis" ], "stats": { "total": 371, "hp": 54, "attack": 45, "defense": 47, "speedAttack": 75, "speedDefense": 98, "speed": 52 }, "evolutions": [ "flabébé", "floette", "florges" ] } ], "link": "https://pokemondb.net/pokedex/floette" }, { "num": 671, "name": "Florges", "variations": [ { "name": "Florges", "description": "Florges is a Fairy type Pokémon introduced in Generation 6. It is known as the Garden Pokémon.\nLike Flabébé, Florges has several forms: Yellow Flower, Red Flower, Orange Flower, Blue Flower and White Flower.", "image": "images/florges.jpg", "types": [ "Fairy" ], "specie": "Garden Pokémon", "height": 1.1, "weight": 10, "abilities": [ "Flower Veil", "Symbiosis" ], "stats": { "total": 552, "hp": 78, "attack": 65, "defense": 68, "speedAttack": 112, "speedDefense": 154, "speed": 75 }, "evolutions": [ "flabébé", "floette", "florges" ] } ], "link": "https://pokemondb.net/pokedex/florges" }, { "num": 672, "name": "Skiddo", "variations": [ { "name": "Skiddo", "description": "Skiddo is a Grass type Pokémon introduced in Generation 6. It is known as the Mount Pokémon.\nSkiddo is said to have been the first Pokémon to live alongside humans. It has become able to read the feelings of its riders through their grip on its horns.", "image": "images/skiddo.jpg", "types": [ "Grass" ], "specie": "Mount Pokémon", "height": 0.9, "weight": 31, "abilities": [ "Sap Sipper", "Grass Pelt" ], "stats": { "total": 350, "hp": 66, "attack": 65, "defense": 48, "speedAttack": 62, "speedDefense": 57, "speed": 52 }, "evolutions": [ "skiddo", "gogoat" ] } ], "link": "https://pokemondb.net/pokedex/skiddo" }, { "num": 673, "name": "Gogoat", "variations": [ { "name": "Gogoat", "description": "Gogoat is a Grass type Pokémon introduced in Generation 6. It is known as the Mount Pokémon.\nGogoat is so large that people are able to ride on its back. It's very calm, and can form a strong bond with its Trainer's feelings when its Trainer grabs onto its horns.", "image": "images/gogoat.jpg", "types": [ "Grass" ], "specie": "Mount Pokémon", "height": 1.7, "weight": 91, "abilities": [ "Sap Sipper", "Grass Pelt" ], "stats": { "total": 531, "hp": 123, "attack": 100, "defense": 62, "speedAttack": 97, "speedDefense": 81, "speed": 68 }, "evolutions": [ "skiddo", "gogoat" ] } ], "link": "https://pokemondb.net/pokedex/gogoat" }, { "num": 674, "name": "Pancham", "variations": [ { "name": "Pancham", "description": "Pancham is a Fighting type Pokémon introduced in Generation 6. It is known as the Playful Pokémon.\nWith its trademark leaf always sticking out of its mouth, Pancham tries to intimidate its opponents by glaring at them intensely (although this is rarely successful).", "image": "images/pancham.jpg", "types": [ "Fighting" ], "specie": "Playful Pokémon", "height": 0.6, "weight": 8, "abilities": [ "Iron Fist", "Mold Breaker", "Scrappy" ], "stats": { "total": 348, "hp": 67, "attack": 82, "defense": 62, "speedAttack": 46, "speedDefense": 48, "speed": 43 }, "evolutions": [ "pancham", "pangoro" ] } ], "link": "https://pokemondb.net/pokedex/pancham" }, { "num": 675, "name": "Pangoro", "variations": [ { "name": "Pangoro", "description": "Pangoro is a Fighting/Dark type Pokémon introduced in Generation 6. It is known as the Daunting Pokémon.\nPangoro is a cantankerous Pokémon, but it has a strong heart and doesn't forgive those who pick on the weak.", "image": "images/pangoro.jpg", "types": [ "Fighting", "Dark" ], "specie": "Daunting Pokémon", "height": 2.1, "weight": 136, "abilities": [ "Iron Fist", "Mold Breaker", "Scrappy" ], "stats": { "total": 495, "hp": 95, "attack": 124, "defense": 78, "speedAttack": 69, "speedDefense": 71, "speed": 58 }, "evolutions": [ "pancham", "pangoro" ] } ], "link": "https://pokemondb.net/pokedex/pangoro" }, { "num": 676, "name": "Furfrou", "variations": [ { "name": "Furfrou", "description": "Furfrou is a Normal type Pokémon introduced in Generation 6. It is known as the Poodle Pokémon.\nFurfrou can have its appearance changed by grooming. There are number of different appearances it can take, and the more it's groomed, the more styles become available.\nFurfrou is also considered very intelligent and loyal to its Trainer. It's said that in ancient times, Furfrou guarded the king of Kalos.", "image": "images/furfrou.jpg", "types": [ "Normal" ], "specie": "Poodle Pokémon", "height": 1.2, "weight": 28, "abilities": [ "Fur Coat" ], "stats": { "total": 472, "hp": 75, "attack": 80, "defense": 60, "speedAttack": 65, "speedDefense": 90, "speed": 102 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/furfrou" }, { "num": 677, "name": "Espurr", "variations": [ { "name": "Espurr", "description": "Espurr is a Psychic type Pokémon introduced in Generation 6. It is known as the Restraint Pokémon.\nThe organ that emits its intense psychic power is sheltered by its ears to keep power from leaking out.", "image": "images/espurr.jpg", "types": [ "Psychic" ], "specie": "Restraint Pokémon", "height": 0.3, "weight": 3.5, "abilities": [ "Keen Eye", "Infiltrator", "Own Tempo" ], "stats": { "total": 355, "hp": 62, "attack": 48, "defense": 54, "speedAttack": 63, "speedDefense": 60, "speed": 68 }, "evolutions": [ "espurr" ] } ], "link": "https://pokemondb.net/pokedex/espurr" }, { "num": 678, "name": "Meowstic", "variations": [ { "name": "Male", "description": "Meowstic is a Psychic type Pokémon introduced in Generation 6. It is known as the Constraint Pokémon.\nMeowstic is based on a cat. The organs within Meowstic's ears possess a formidable psychic power, so it usually keeps them clamped shut. But when Meowstic is threatened, it will lift its ears and release this power.\nMeowstic has different forms depending on its gender. The male is mainly blue and learns more defensive moves; the female is mainly white and learns more attacking moves.", "image": "images/meowstic-male.jpg", "types": [ "Psychic" ], "specie": "Constraint Pokémon", "height": 0.6, "weight": 8.5, "abilities": [ "Keen Eye", "Infiltrator", "Prankster" ], "stats": { "total": 466, "hp": 74, "attack": 48, "defense": 76, "speedAttack": 83, "speedDefense": 81, "speed": 104 }, "evolutions": [ "espurr" ] }, { "name": "Female", "description": "Meowstic is a Psychic type Pokémon introduced in Generation 6. It is known as the Constraint Pokémon.\nMeowstic is based on a cat. The organs within Meowstic's ears possess a formidable psychic power, so it usually keeps them clamped shut. But when Meowstic is threatened, it will lift its ears and release this power.\nMeowstic has different forms depending on its gender. The male is mainly blue and learns more defensive moves; the female is mainly white and learns more attacking moves.", "image": "images/meowstic-female.jpg", "types": [ "Psychic" ], "specie": "Constraint Pokémon", "height": 0.6, "weight": 8.5, "abilities": [ "Keen Eye", "Infiltrator", "Competitive" ], "stats": { "total": 466, "hp": 74, "attack": 48, "defense": 76, "speedAttack": 83, "speedDefense": 81, "speed": 104 }, "evolutions": [ "espurr" ] } ], "link": "https://pokemondb.net/pokedex/meowstic" }, { "num": 679, "name": "Honedge", "variations": [ { "name": "Honedge", "description": "Honedge is a Steel/Ghost type Pokémon introduced in Generation 6. It is known as the Sword Pokémon.", "image": "images/honedge.jpg", "types": [ "Steel", "Ghost" ], "specie": "Sword Pokémon", "height": 0.8, "weight": 2, "abilities": [ "No Guard" ], "stats": { "total": 325, "hp": 45, "attack": 80, "defense": 100, "speedAttack": 35, "speedDefense": 37, "speed": 28 }, "evolutions": [ "honedge", "doublade" ] } ], "link": "https://pokemondb.net/pokedex/honedge" }, { "num": 680, "name": "Doublade", "variations": [ { "name": "Doublade", "description": "Doublade is a Steel/Ghost type Pokémon introduced in Generation 6. It is known as the Sword Pokémon.\nDoublade is capable of carrying out intricate attacks by telepathically coordinating its two blades to deliver twice the slice in battle.", "image": "images/doublade.jpg", "types": [ "Steel", "Ghost" ], "specie": "Sword Pokémon", "height": 0.8, "weight": 4.5, "abilities": [ "No Guard" ], "stats": { "total": 448, "hp": 59, "attack": 110, "defense": 150, "speedAttack": 45, "speedDefense": 49, "speed": 35 }, "evolutions": [ "honedge", "doublade" ] } ], "link": "https://pokemondb.net/pokedex/doublade" }, { "num": 681, "name": "Aegislash", "variations": [ { "name": "Blade Forme", "description": "Aegislash is a Steel/Ghost type Pokémon introduced in Generation 6. It is known as the Royal Sword Pokémon.\nAegislash has two different forms - Shield Forme, which is more defensive, and Blade Forme, which is more offensive. Its ability, Stance Change, causes Aegislash to change into Shield Forme when a defensive move is used, or change into Blade Forme when an attacking move is used.", "image": "images/aegislash-blade.jpg", "types": [ "Steel", "Ghost" ], "specie": "Royal Sword Pokémon", "height": 1.7, "weight": 53, "abilities": [ "Stance Change" ], "stats": { "total": 520, "hp": 60, "attack": 150, "defense": 50, "speedAttack": 150, "speedDefense": 50, "speed": 60 }, "evolutions": [ "honedge", "doublade" ] }, { "name": "Shield Forme", "description": "Aegislash is a Steel/Ghost type Pokémon introduced in Generation 6. It is known as the Royal Sword Pokémon.\nAegislash has two different forms - Shield Forme, which is more defensive, and Blade Forme, which is more offensive. Its ability, Stance Change, causes Aegislash to change into Shield Forme when a defensive move is used, or change into Blade Forme when an attacking move is used.", "image": "images/aegislash-shield.jpg", "types": [ "Steel", "Ghost" ], "specie": "Royal Sword Pokémon", "height": 1.7, "weight": 53, "abilities": [ "Stance Change" ], "stats": { "total": 520, "hp": 60, "attack": 50, "defense": 150, "speedAttack": 50, "speedDefense": 150, "speed": 60 }, "evolutions": [ "honedge", "doublade" ] } ], "link": "https://pokemondb.net/pokedex/aegislash" }, { "num": 682, "name": "Spritzee", "variations": [ { "name": "Spritzee", "description": "Spritzee is a Fairy type Pokémon introduced in Generation 6. It is known as the Perfume Pokémon.\nIt emits a unique fragrance from its body, and any who smell it fall under its spell.", "image": "images/spritzee.jpg", "types": [ "Fairy" ], "specie": "Perfume Pokémon", "height": 0.2, "weight": 0.5, "abilities": [ "Healer", "Aroma Veil" ], "stats": { "total": 341, "hp": 78, "attack": 52, "defense": 60, "speedAttack": 63, "speedDefense": 65, "speed": 23 }, "evolutions": [ "spritzee", "aromatisse" ] } ], "link": "https://pokemondb.net/pokedex/spritzee" }, { "num": 683, "name": "Aromatisse", "variations": [ { "name": "Aromatisse", "description": "Aromatisse is a Fairy type Pokémon introduced in Generation 6. It is known as the Fragrance Pokémon.\nAromatisse can give off a variety of different smells, from a pleasant fragrance to an odor so repugnant to its opponent that it can turn a battle in its favor.", "image": "images/aromatisse.jpg", "types": [ "Fairy" ], "specie": "Fragrance Pokémon", "height": 0.8, "weight": 15.5, "abilities": [ "Healer", "Aroma Veil" ], "stats": { "total": 462, "hp": 101, "attack": 72, "defense": 72, "speedAttack": 99, "speedDefense": 89, "speed": 29 }, "evolutions": [ "spritzee", "aromatisse" ] } ], "link": "https://pokemondb.net/pokedex/aromatisse" }, { "num": 684, "name": "Swirlix", "variations": [ { "name": "Swirlix", "description": "Swirlix is a Fairy type Pokémon introduced in Generation 6. It is known as the Cotton Candy Pokémon.\nIt loves sweets and eats nothing else, making its body as sweet and sticky as cotton candy.", "image": "images/swirlix.jpg", "types": [ "Fairy" ], "specie": "Cotton Candy Pokémon", "height": 0.4, "weight": 3.5, "abilities": [ "Sweet Veil", "Unburden" ], "stats": { "total": 341, "hp": 62, "attack": 48, "defense": 66, "speedAttack": 59, "speedDefense": 57, "speed": 49 }, "evolutions": [ "swirlix", "slurpuff" ] } ], "link": "https://pokemondb.net/pokedex/swirlix" }, { "num": 685, "name": "Slurpuff", "variations": [ { "name": "Slurpuff", "description": "Slurpuff is a Fairy type Pokémon introduced in Generation 6. It is known as the Meringue Pokémon.\nSlurpuff has an unbelievable sense of smell - a hundred million times more sensitive than that of humans. With its highly attuned senses, it can distinguish the faintest of odors.", "image": "images/slurpuff.jpg", "types": [ "Fairy" ], "specie": "Meringue Pokémon", "height": 0.8, "weight": 5, "abilities": [ "Sweet Veil", "Unburden" ], "stats": { "total": 480, "hp": 82, "attack": 80, "defense": 86, "speedAttack": 85, "speedDefense": 75, "speed": 72 }, "evolutions": [ "swirlix", "slurpuff" ] } ], "link": "https://pokemondb.net/pokedex/slurpuff" }, { "num": 686, "name": "Inkay", "variations": [ { "name": "Inkay", "description": "Inkay is a Dark/Psychic type Pokémon introduced in Generation 6. It is known as the Revolving Pokémon.\nTransmitters above Inkay's eyes have the ability to drain the will to fight from other Pokémon. It uses this skill to run and hide when attacked by stronger enemies.", "image": "images/inkay.jpg", "types": [ "Dark", "Psychic" ], "specie": "Revolving Pokémon", "height": 0.4, "weight": 3.5, "abilities": [ "Contrary", "Suction Cups", "Infiltrator" ], "stats": { "total": 288, "hp": 53, "attack": 54, "defense": 53, "speedAttack": 37, "speedDefense": 46, "speed": 45 }, "evolutions": [ "inkay", "malamar" ] } ], "link": "https://pokemondb.net/pokedex/inkay" }, { "num": 687, "name": "Malamar", "variations": [ { "name": "Malamar", "description": "Malamar is a Dark/Psychic type Pokémon introduced in Generation 6. It is known as the Overturning Pokémon.\nMalamar wields some of the strongest hypnotic powers of any Pokémon and can make its opponents bend to its will.", "image": "images/malamar.jpg", "types": [ "Dark", "Psychic" ], "specie": "Overturning Pokémon", "height": 1.5, "weight": 47, "abilities": [ "Contrary", "Suction Cups", "Infiltrator" ], "stats": { "total": 482, "hp": 86, "attack": 92, "defense": 88, "speedAttack": 68, "speedDefense": 75, "speed": 73 }, "evolutions": [ "inkay", "malamar" ] } ], "link": "https://pokemondb.net/pokedex/malamar" }, { "num": 688, "name": "Binacle", "variations": [ { "name": "Binacle", "description": "Binacle is a Rock/Water type Pokémon introduced in Generation 6. It is known as the Two-Handed Pokémon.", "image": "images/binacle.jpg", "types": [ "Rock", "Water" ], "specie": "Two-Handed Pokémon", "height": 0.5, "weight": 31, "abilities": [ "Sniper", "Tough Claws", "Pickpocket" ], "stats": { "total": 306, "hp": 42, "attack": 52, "defense": 67, "speedAttack": 39, "speedDefense": 56, "speed": 50 }, "evolutions": [ "binacle", "barbaracle" ] } ], "link": "https://pokemondb.net/pokedex/binacle" }, { "num": 689, "name": "Barbaracle", "variations": [ { "name": "Barbaracle", "description": "Barbaracle is a Rock/Water type Pokémon introduced in Generation 6. It is known as the Collective Pokémon.", "image": "images/barbaracle.jpg", "types": [ "Rock", "Water" ], "specie": "Collective Pokémon", "height": 1.3, "weight": 96, "abilities": [ "Sniper", "Tough Claws", "Pickpocket" ], "stats": { "total": 500, "hp": 72, "attack": 105, "defense": 115, "speedAttack": 54, "speedDefense": 86, "speed": 68 }, "evolutions": [ "binacle", "barbaracle" ] } ], "link": "https://pokemondb.net/pokedex/barbaracle" }, { "num": 690, "name": "Skrelp", "variations": [ { "name": "Skrelp", "description": "Skrelp is a Poison/Water type Pokémon introduced in Generation 6. It is known as the Mock Kelp Pokémon.\nDisguised by its shape, Skrelp pretends to be a piece of seaweed. When prey gets too close, Skrelp bathes it in poison to keep it from struggling.", "image": "images/skrelp.jpg", "types": [ "Poison", "Water" ], "specie": "Mock Kelp Pokémon", "height": 0.5, "weight": 7.3, "abilities": [ "Poison Point", "Poison Touch", "Adaptability" ], "stats": { "total": 320, "hp": 50, "attack": 60, "defense": 60, "speedAttack": 60, "speedDefense": 60, "speed": 30 }, "evolutions": [ "skrelp", "dragalge" ] } ], "link": "https://pokemondb.net/pokedex/skrelp" }, { "num": 691, "name": "Dragalge", "variations": [ { "name": "Dragalge", "description": "Dragalge is a Poison/Dragon type Pokémon introduced in Generation 6. It is known as the Mock Kelp Pokémon.\nTales are told of ships that wander into seas where Dragalge live, never to return.\nWhen Dragalge evolves from Skrelp, its loses its Water type and gains Dragon type.", "image": "images/dragalge.jpg", "types": [ "Poison", "Dragon" ], "specie": "Mock Kelp Pokémon", "height": 1.8, "weight": 81.5, "abilities": [ "Poison Point", "Poison Touch", "Adaptability" ], "stats": { "total": 494, "hp": 65, "attack": 75, "defense": 90, "speedAttack": 97, "speedDefense": 123, "speed": 44 }, "evolutions": [ "skrelp", "dragalge" ] } ], "link": "https://pokemondb.net/pokedex/dragalge" }, { "num": 692, "name": "Clauncher", "variations": [ { "name": "Clauncher", "description": "Clauncher is a Water type Pokémon introduced in Generation 6. It is known as the Water Gun Pokémon.\nIt has an oversized claw on one of its arms. This useful claw can seize prey and shoot water at others as a projectile.", "image": "images/clauncher.jpg", "types": [ "Water" ], "specie": "Water Gun Pokémon", "height": 0.5, "weight": 8.3, "abilities": [ "Mega Launcher" ], "stats": { "total": 330, "hp": 50, "attack": 53, "defense": 62, "speedAttack": 58, "speedDefense": 63, "speed": 44 }, "evolutions": [ "clauncher", "clawitzer" ] } ], "link": "https://pokemondb.net/pokedex/clauncher" }, { "num": 693, "name": "Clawitzer", "variations": [ { "name": "Clawitzer", "description": "Clawitzer is a Water type Pokémon introduced in Generation 6. It is known as the Howitzer Pokémon.", "image": "images/clawitzer.jpg", "types": [ "Water" ], "specie": "Howitzer Pokémon", "height": 1.3, "weight": 35.3, "abilities": [ "Mega Launcher" ], "stats": { "total": 500, "hp": 71, "attack": 73, "defense": 88, "speedAttack": 120, "speedDefense": 89, "speed": 59 }, "evolutions": [ "clauncher", "clawitzer" ] } ], "link": "https://pokemondb.net/pokedex/clawitzer" }, { "num": 694, "name": "Helioptile", "variations": [ { "name": "Helioptile", "description": "Helioptile is an Electric/Normal type Pokémon introduced in Generation 6. It is known as the Generator Pokémon.\nIt charges itself by bathing in the light of the sun, providing it with enough energy that it doesn't need to eat.", "image": "images/helioptile.jpg", "types": [ "Electric", "Normal" ], "specie": "Generator Pokémon", "height": 0.5, "weight": 6, "abilities": [ "Dry Skin", "Sand Veil", "Solar Power" ], "stats": { "total": 289, "hp": 44, "attack": 38, "defense": 33, "speedAttack": 61, "speedDefense": 43, "speed": 70 }, "evolutions": [ "helioptile", "heliolisk" ] } ], "link": "https://pokemondb.net/pokedex/helioptile" }, { "num": 695, "name": "Heliolisk", "variations": [ { "name": "Heliolisk", "description": "Heliolisk is an Electric/Normal type Pokémon introduced in Generation 6. It is known as the Generator Pokémon.", "image": "images/heliolisk.jpg", "types": [ "Electric", "Normal" ], "specie": "Generator Pokémon", "height": 1, "weight": 21, "abilities": [ "Dry Skin", "Sand Veil", "Solar Power" ], "stats": { "total": 481, "hp": 62, "attack": 55, "defense": 52, "speedAttack": 109, "speedDefense": 94, "speed": 109 }, "evolutions": [ "helioptile", "heliolisk" ] } ], "link": "https://pokemondb.net/pokedex/heliolisk" }, { "num": 696, "name": "Tyrunt", "variations": [ { "name": "Tyrunt", "description": "Tyrunt is a Rock/Dragon type Pokémon introduced in Generation 6. It is known as the Royal Heir Pokémon.\nIt's believed that Tyrunt is over one hundred million years old. The Pokémon is known to be a bit selfish, and will throw a fit when it doesn't like something.\nTyrunt is obtained by reviving it from the Jaw Fossil.", "image": "images/tyrunt.jpg", "types": [ "Rock", "Dragon" ], "specie": "Royal Heir Pokémon", "height": 0.8, "weight": 26, "abilities": [ "Strong Jaw", "Sturdy" ], "stats": { "total": 362, "hp": 58, "attack": 89, "defense": 77, "speedAttack": 45, "speedDefense": 45, "speed": 48 }, "evolutions": [ "tyrunt", "tyrantrum" ] } ], "link": "https://pokemondb.net/pokedex/tyrunt" }, { "num": 697, "name": "Tyrantrum", "variations": [ { "name": "Tyrantrum", "description": "Tyrantrum is a Rock/Dragon type Pokémon introduced in Generation 6. It is known as the Despot Pokémon.\nTyrantrum's jaws can shred thick metal plates as if they were paper.", "image": "images/tyrantrum.jpg", "types": [ "Rock", "Dragon" ], "specie": "Despot Pokémon", "height": 2.5, "weight": 270, "abilities": [ "Strong Jaw", "Rock Head" ], "stats": { "total": 521, "hp": 82, "attack": 121, "defense": 119, "speedAttack": 69, "speedDefense": 59, "speed": 71 }, "evolutions": [ "tyrunt", "tyrantrum" ] } ], "link": "https://pokemondb.net/pokedex/tyrantrum" }, { "num": 698, "name": "Amaura", "variations": [ { "name": "Amaura", "description": "Amaura is a Rock/Ice type Pokémon introduced in Generation 6. It is known as the Tundra Pokémon.\nIt's believed that Amaura is over one hundred million years old.\nAmaura is obtained by reviving it from the Sail Fossil.", "image": "images/amaura.jpg", "types": [ "Rock", "Ice" ], "specie": "Tundra Pokémon", "height": 1.3, "weight": 25.2, "abilities": [ "Refrigerate", "Snow Warning" ], "stats": { "total": 362, "hp": 77, "attack": 59, "defense": 50, "speedAttack": 67, "speedDefense": 63, "speed": 46 }, "evolutions": [ "amaura", "aurorus" ] } ], "link": "https://pokemondb.net/pokedex/amaura" }, { "num": 699, "name": "Aurorus", "variations": [ { "name": "Aurorus", "description": "Aurorus is a Rock/Ice type Pokémon introduced in Generation 6. It is known as the Tundra Pokémon.\nAurorus can blast freezing cold air to form a wall of ice to protect itself from attacks.", "image": "images/aurorus.jpg", "types": [ "Rock", "Ice" ], "specie": "Tundra Pokémon", "height": 2.7, "weight": 225, "abilities": [ "Refrigerate", "Snow Warning" ], "stats": { "total": 521, "hp": 123, "attack": 77, "defense": 72, "speedAttack": 99, "speedDefense": 92, "speed": 58 }, "evolutions": [ "amaura", "aurorus" ] } ], "link": "https://pokemondb.net/pokedex/aurorus" }, { "num": 700, "name": "Sylveon", "variations": [ { "name": "Sylveon", "description": "Sylveon is a Fairy type Pokémon introduced in Generation 6. It is known as the Intertwining Pokémon.", "image": "images/sylveon.jpg", "types": [ "Fairy" ], "specie": "Intertwining Pokémon", "height": 1, "weight": 23.5, "abilities": [ "Cute Charm", "Pixilate" ], "stats": { "total": 525, "hp": 95, "attack": 65, "defense": 65, "speedAttack": 110, "speedDefense": 130, "speed": 60 }, "evolutions": [ "eevee", "vaporeon", "jolteon", "flareon", "eevee", "espeon", "umbreon", "eevee", "leafeon", "glaceon", "eevee", "sylveon" ] } ], "link": "https://pokemondb.net/pokedex/sylveon" }, { "num": 701, "name": "Hawlucha", "variations": [ { "name": "Hawlucha", "description": "Hawlucha is a Fighting/Flying type Pokémon introduced in Generation 6. It is known as the Wrestling Pokémon.", "image": "images/hawlucha.jpg", "types": [ "Fighting", "Flying" ], "specie": "Wrestling Pokémon", "height": 0.8, "weight": 21.5, "abilities": [ "Limber", "Unburden", "Mold Breaker" ], "stats": { "total": 500, "hp": 78, "attack": 92, "defense": 75, "speedAttack": 74, "speedDefense": 63, "speed": 118 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/hawlucha" }, { "num": 702, "name": "Dedenne", "variations": [ { "name": "Dedenne", "description": "Dedenne is an Electric/Fairy type Pokémon introduced in Generation 6. It is known as the Antenna Pokémon.\nBy emitting radio waves from its antenna-shaped whiskers, it can communicate with far-off allies. Dedenne can also plug its tail into outlets to drain electricity from them.", "image": "images/dedenne.jpg", "types": [ "Electric", "Fairy" ], "specie": "Antenna Pokémon", "height": 0.2, "weight": 2.2, "abilities": [ "Cheek Pouch", "Pickup", "Plus" ], "stats": { "total": 431, "hp": 67, "attack": 58, "defense": 57, "speedAttack": 81, "speedDefense": 67, "speed": 101 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/dedenne" }, { "num": 703, "name": "Carbink", "variations": [ { "name": "Carbink", "description": "Carbink is a Rock/Fairy type Pokémon introduced in Generation 6. It is known as the Jewel Pokémon.", "image": "images/carbink.jpg", "types": [ "Rock", "Fairy" ], "specie": "Jewel Pokémon", "height": 0.3, "weight": 5.7, "abilities": [ "Clear Body", "Sturdy" ], "stats": { "total": 500, "hp": 50, "attack": 50, "defense": 150, "speedAttack": 50, "speedDefense": 150, "speed": 50 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/carbink" }, { "num": 704, "name": "Goomy", "variations": [ { "name": "Goomy", "description": "Goomy is a Dragon type Pokémon introduced in Generation 6. It is known as the Soft Tissue Pokémon.\nGoomy is covered in a slimy membrane that makes any punches or kicks slide off it harmlessly.", "image": "images/goomy.jpg", "types": [ "Dragon" ], "specie": "Soft Tissue Pokémon", "height": 0.3, "weight": 2.8, "abilities": [ "Sap Sipper", "Hydration", "Gooey" ], "stats": { "total": 300, "hp": 45, "attack": 50, "defense": 35, "speedAttack": 55, "speedDefense": 75, "speed": 40 }, "evolutions": [ "goomy", "sliggoo", "goodra" ] } ], "link": "https://pokemondb.net/pokedex/goomy" }, { "num": 705, "name": "Sliggoo", "variations": [ { "name": "Sliggoo", "description": "Sliggoo is a Dragon type Pokémon introduced in Generation 6. It is known as the Soft Tissue Pokémon.\nIts four horns are a high-performance radar system. It uses them to sense sounds and smells.", "image": "images/sliggoo.jpg", "types": [ "Dragon" ], "specie": "Soft Tissue Pokémon", "height": 0.8, "weight": 17.5, "abilities": [ "Sap Sipper", "Hydration", "Gooey" ], "stats": { "total": 452, "hp": 68, "attack": 75, "defense": 53, "speedAttack": 83, "speedDefense": 113, "speed": 60 }, "evolutions": [ "goomy", "sliggoo", "goodra" ] } ], "link": "https://pokemondb.net/pokedex/sliggoo" }, { "num": 706, "name": "Goodra", "variations": [ { "name": "Goodra", "description": "Goodra is a Dragon type Pokémon introduced in Generation 6. It is known as the Dragon Pokémon.", "image": "images/goodra.jpg", "types": [ "Dragon" ], "specie": "Dragon Pokémon", "height": 2, "weight": 150.5, "abilities": [ "Sap Sipper", "Hydration", "Gooey" ], "stats": { "total": 600, "hp": 90, "attack": 100, "defense": 70, "speedAttack": 110, "speedDefense": 150, "speed": 80 }, "evolutions": [ "goomy", "sliggoo", "goodra" ] } ], "link": "https://pokemondb.net/pokedex/goodra" }, { "num": 707, "name": "Klefki", "variations": [ { "name": "Klefki", "description": "Klefki is a Steel/Fairy type Pokémon introduced in Generation 6. It is known as the Key Ring Pokémon.\nKlefki never lets go of a key that it likes, so people give it the keys to vaults and safes as a way to prevent crime.", "image": "images/klefki.jpg", "types": [ "Steel", "Fairy" ], "specie": "Key Ring Pokémon", "height": 0.2, "weight": 3, "abilities": [ "Prankster", "Magician" ], "stats": { "total": 470, "hp": 57, "attack": 80, "defense": 91, "speedAttack": 80, "speedDefense": 87, "speed": 75 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/klefki" }, { "num": 708, "name": "Phantump", "variations": [ { "name": "Phantump", "description": "Phantump is a Ghost/Grass type Pokémon introduced in Generation 6. It is known as the Stump Pokémon.\nAccording to old tales, Phantump are stumps possessed by the spirits of children who died while lost in the forest.", "image": "images/phantump.jpg", "types": [ "Ghost", "Grass" ], "specie": "Stump Pokémon", "height": 0.4, "weight": 7, "abilities": [ "Natural Cure", "Frisk", "Harvest" ], "stats": { "total": 309, "hp": 43, "attack": 70, "defense": 48, "speedAttack": 50, "speedDefense": 60, "speed": 38 }, "evolutions": [ "phantump", "trevenant" ] } ], "link": "https://pokemondb.net/pokedex/phantump" }, { "num": 709, "name": "Trevenant", "variations": [ { "name": "Trevenant", "description": "Trevenant is a Ghost/Grass type Pokémon introduced in Generation 6. It is known as the Elder Tree Pokémon.", "image": "images/trevenant.jpg", "types": [ "Ghost", "Grass" ], "specie": "Elder Tree Pokémon", "height": 1.5, "weight": 71, "abilities": [ "Natural Cure", "Frisk", "Harvest" ], "stats": { "total": 474, "hp": 85, "attack": 110, "defense": 76, "speedAttack": 65, "speedDefense": 82, "speed": 56 }, "evolutions": [ "phantump", "trevenant" ] } ], "link": "https://pokemondb.net/pokedex/trevenant" }, { "num": 710, "name": "Pumpkaboo", "variations": [ { "name": "Average Size", "description": "Pumpkaboo is a Ghost/Grass type Pokémon introduced in Generation 6. It is known as the Pumpkin Pokémon.\nPumpkaboo are said to carry wandering spirits to the place where they belong so they can move on.", "image": "images/pumpkaboo.jpg", "types": [ "Ghost", "Grass" ], "specie": "Pumpkin Pokémon", "height": 0.4, "weight": 5, "abilities": [ "Pickup", "Frisk", "Insomnia" ], "stats": { "total": 335, "hp": 49, "attack": 66, "defense": 70, "speedAttack": 44, "speedDefense": 55, "speed": 51 }, "evolutions": [] }, { "name": "Small Size", "description": "Pumpkaboo is a Ghost/Grass type Pokémon introduced in Generation 6. It is known as the Pumpkin Pokémon.\nPumpkaboo are said to carry wandering spirits to the place where they belong so they can move on.", "image": "images/pumpkaboo.jpg", "types": [ "Ghost", "Grass" ], "specie": "Pumpkin Pokémon", "height": 0.3, "weight": 3.5, "abilities": [ "Pickup", "Frisk", "Insomnia" ], "stats": { "total": 335, "hp": 44, "attack": 66, "defense": 70, "speedAttack": 44, "speedDefense": 55, "speed": 56 }, "evolutions": [] }, { "name": "Large Size", "description": "Pumpkaboo is a Ghost/Grass type Pokémon introduced in Generation 6. It is known as the Pumpkin Pokémon.\nPumpkaboo are said to carry wandering spirits to the place where they belong so they can move on.", "image": "images/pumpkaboo.jpg", "types": [ "Ghost", "Grass" ], "specie": "Pumpkin Pokémon", "height": 0.5, "weight": 7.5, "abilities": [ "Pickup", "Frisk", "Insomnia" ], "stats": { "total": 335, "hp": 54, "attack": 66, "defense": 70, "speedAttack": 44, "speedDefense": 55, "speed": 46 }, "evolutions": [] }, { "name": "Super Size", "description": "Pumpkaboo is a Ghost/Grass type Pokémon introduced in Generation 6. It is known as the Pumpkin Pokémon.\nPumpkaboo are said to carry wandering spirits to the place where they belong so they can move on.", "image": "images/pumpkaboo.jpg", "types": [ "Ghost", "Grass" ], "specie": "Pumpkin Pokémon", "height": 0.8, "weight": 15, "abilities": [ "Pickup", "Frisk", "Insomnia" ], "stats": { "total": 335, "hp": 59, "attack": 66, "defense": 70, "speedAttack": 44, "speedDefense": 55, "speed": 41 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/pumpkaboo" }, { "num": 711, "name": "Gourgeist", "variations": [ { "name": "Average Size", "description": "Gourgeist is a Ghost/Grass type Pokémon introduced in Generation 6. It is known as the Pumpkin Pokémon.", "image": "images/gourgeist.jpg", "types": [ "Ghost", "Grass" ], "specie": "Pumpkin Pokémon", "height": 0.9, "weight": 12.5, "abilities": [ "Pickup", "Frisk", "Insomnia" ], "stats": { "total": 494, "hp": 65, "attack": 90, "defense": 122, "speedAttack": 58, "speedDefense": 75, "speed": 84 }, "evolutions": [] }, { "name": "Small Size", "description": "Gourgeist is a Ghost/Grass type Pokémon introduced in Generation 6. It is known as the Pumpkin Pokémon.", "image": "images/gourgeist.jpg", "types": [ "Ghost", "Grass" ], "specie": "Pumpkin Pokémon", "height": 0.7, "weight": 9.5, "abilities": [ "Pickup", "Frisk", "Insomnia" ], "stats": { "total": 494, "hp": 55, "attack": 85, "defense": 122, "speedAttack": 58, "speedDefense": 75, "speed": 99 }, "evolutions": [] }, { "name": "Large Size", "description": "Gourgeist is a Ghost/Grass type Pokémon introduced in Generation 6. It is known as the Pumpkin Pokémon.", "image": "images/gourgeist.jpg", "types": [ "Ghost", "Grass" ], "specie": "Pumpkin Pokémon", "height": 1.1, "weight": 14, "abilities": [ "Pickup", "Frisk", "Insomnia" ], "stats": { "total": 494, "hp": 75, "attack": 95, "defense": 122, "speedAttack": 58, "speedDefense": 75, "speed": 69 }, "evolutions": [] }, { "name": "Super Size", "description": "Gourgeist is a Ghost/Grass type Pokémon introduced in Generation 6. It is known as the Pumpkin Pokémon.", "image": "images/gourgeist.jpg", "types": [ "Ghost", "Grass" ], "specie": "Pumpkin Pokémon", "height": 1.7, "weight": 39, "abilities": [ "Pickup", "Frisk", "Insomnia" ], "stats": { "total": 494, "hp": 85, "attack": 100, "defense": 122, "speedAttack": 58, "speedDefense": 75, "speed": 54 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/gourgeist" }, { "num": 712, "name": "Bergmite", "variations": [ { "name": "Bergmite", "description": "Bergmite is an Ice type Pokémon introduced in Generation 6. It is known as the Ice Chunk Pokémon.\nUsing air of -150 degrees Farenheit, they freeze opponents solid.", "image": "images/bergmite.jpg", "types": [ "Ice" ], "specie": "Ice Chunk Pokémon", "height": 1, "weight": 99.5, "abilities": [ "Own Tempo", "Ice Body", "Sturdy" ], "stats": { "total": 304, "hp": 55, "attack": 69, "defense": 85, "speedAttack": 32, "speedDefense": 35, "speed": 28 }, "evolutions": [ "bergmite", "avalugg" ] } ], "link": "https://pokemondb.net/pokedex/bergmite" }, { "num": 713, "name": "Avalugg", "variations": [ { "name": "Avalugg", "description": "Avalugg is an Ice type Pokémon introduced in Generation 6. It is known as the Iceberg Pokémon.", "image": "images/avalugg.jpg", "types": [ "Ice" ], "specie": "Iceberg Pokémon", "height": 2, "weight": 505, "abilities": [ "Own Tempo", "Ice Body", "Sturdy" ], "stats": { "total": 514, "hp": 95, "attack": 117, "defense": 184, "speedAttack": 44, "speedDefense": 46, "speed": 28 }, "evolutions": [ "bergmite", "avalugg" ] } ], "link": "https://pokemondb.net/pokedex/avalugg" }, { "num": 714, "name": "Noibat", "variations": [ { "name": "Noibat", "description": "Noibat is a Flying/Dragon type Pokémon introduced in Generation 6. It is known as the Sound Wave Pokémon.", "image": "images/noibat.jpg", "types": [ "Flying", "Dragon" ], "specie": "Sound Wave Pokémon", "height": 0.5, "weight": 8, "abilities": [ "Frisk", "Infiltrator", "Telepathy" ], "stats": { "total": 245, "hp": 40, "attack": 30, "defense": 35, "speedAttack": 45, "speedDefense": 40, "speed": 55 }, "evolutions": [ "noibat", "noivern" ] } ], "link": "https://pokemondb.net/pokedex/noibat" }, { "num": 715, "name": "Noivern", "variations": [ { "name": "Noivern", "description": "Noivern is a Flying/Dragon type Pokémon introduced in Generation 6. It is known as the Sound Wave Pokémon.\nIt is extremely combative toward anything that wanders too close to it. It flies through even the darkest nights using ultrasonic waves it emits from its ears. Noivern loves fruit, and feeding it fruit will keep it calm.", "image": "images/noivern.jpg", "types": [ "Flying", "Dragon" ], "specie": "Sound Wave Pokémon", "height": 1.5, "weight": 85, "abilities": [ "Frisk", "Infiltrator", "Telepathy" ], "stats": { "total": 535, "hp": 85, "attack": 70, "defense": 80, "speedAttack": 97, "speedDefense": 80, "speed": 123 }, "evolutions": [ "noibat", "noivern" ] } ], "link": "https://pokemondb.net/pokedex/noivern" }, { "num": 716, "name": "Xerneas", "variations": [ { "name": "Xerneas", "description": "Xerneas is a Fairy type Pokémon introduced in Generation 6. It is known as the Life Pokémon.\nXerneas is a legendary Pokémon exclusive to Pokémon X.", "image": "images/xerneas.jpg", "types": [ "Fairy" ], "specie": "Life Pokémon", "height": 3, "weight": 215, "abilities": [ "Fairy Aura" ], "stats": { "total": 680, "hp": 126, "attack": 131, "defense": 95, "speedAttack": 131, "speedDefense": 98, "speed": 99 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/xerneas" }, { "num": 717, "name": "Yveltal", "variations": [ { "name": "Yveltal", "description": "Yveltal is a Dark/Flying type Pokémon introduced in Generation 6. It is known as the Destruction Pokémon.\nYveltal is a legendary Pokémon exclusive to Pokémon Y.", "image": "images/yveltal.jpg", "types": [ "Dark", "Flying" ], "specie": "Destruction Pokémon", "height": 5.8, "weight": 203, "abilities": [ "Dark Aura" ], "stats": { "total": 680, "hp": 126, "attack": 131, "defense": 95, "speedAttack": 131, "speedDefense": 98, "speed": 99 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/yveltal" }, { "num": 718, "name": "Zygarde", "variations": [ { "name": "50% Forme", "description": "Zygarde is a Dragon/Ground type Pokémon introduced in Generation 6. It is known as the Order Pokémon.\nZygarde is a snake-like legendary Pokémon. Its ability Aura Break counters the effects of the abilities of Xerneas and Yveltal.\nIt was later revealed that Zygarde as seen in Pokémon X & Y is in fact an alternate Forme. Zygarde has five different Formes in total:\n\nZygarde Cell are single cells that make up Zygarde. They cannot use any moves.\nZygarde Core is part of Zygarde's brain, and they are known to take action when the ecosystem changes.\nZygarde 10% Forme occurs when Zygarde Core gathers 10% of the Cells nearby. Capable of travelling over 60mph.\nZygarde 50% Forme occurs when Zygarde Core gathers 50% of the Cells nearby. This is the standard form.\nZygarde Complete Forme is the perfect form, which is more powerful than Xerneas and Yveltal. Zygarde takes this form when the ecosystem is under threat.", "image": "images/zygarde-50.jpg", "types": [ "Dragon", "Ground" ], "specie": "Order Pokémon", "height": 5, "weight": 305, "abilities": [ "Aura Break", "Power Construct" ], "stats": { "total": 600, "hp": 108, "attack": 100, "defense": 121, "speedAttack": 81, "speedDefense": 95, "speed": 95 }, "evolutions": [] }, { "name": "10% Forme", "description": "Zygarde is a Dragon/Ground type Pokémon introduced in Generation 6. It is known as the Order Pokémon.\nZygarde is a snake-like legendary Pokémon. Its ability Aura Break counters the effects of the abilities of Xerneas and Yveltal.\nIt was later revealed that Zygarde as seen in Pokémon X & Y is in fact an alternate Forme. Zygarde has five different Formes in total:\n\nZygarde Cell are single cells that make up Zygarde. They cannot use any moves.\nZygarde Core is part of Zygarde's brain, and they are known to take action when the ecosystem changes.\nZygarde 10% Forme occurs when Zygarde Core gathers 10% of the Cells nearby. Capable of travelling over 60mph.\nZygarde 50% Forme occurs when Zygarde Core gathers 50% of the Cells nearby. This is the standard form.\nZygarde Complete Forme is the perfect form, which is more powerful than Xerneas and Yveltal. Zygarde takes this form when the ecosystem is under threat.", "image": "images/zygarde-10.jpg", "types": [ "Dragon", "Ground" ], "specie": "Order Pokémon", "height": 1.2, "weight": 33.5, "abilities": [ "Aura Break", "Power Construct" ], "stats": { "total": 486, "hp": 54, "attack": 100, "defense": 71, "speedAttack": 61, "speedDefense": 85, "speed": 115 }, "evolutions": [] }, { "name": "Complete Forme", "description": "Zygarde is a Dragon/Ground type Pokémon introduced in Generation 6. It is known as the Order Pokémon.\nZygarde is a snake-like legendary Pokémon. Its ability Aura Break counters the effects of the abilities of Xerneas and Yveltal.\nIt was later revealed that Zygarde as seen in Pokémon X & Y is in fact an alternate Forme. Zygarde has five different Formes in total:\n\nZygarde Cell are single cells that make up Zygarde. They cannot use any moves.\nZygarde Core is part of Zygarde's brain, and they are known to take action when the ecosystem changes.\nZygarde 10% Forme occurs when Zygarde Core gathers 10% of the Cells nearby. Capable of travelling over 60mph.\nZygarde 50% Forme occurs when Zygarde Core gathers 50% of the Cells nearby. This is the standard form.\nZygarde Complete Forme is the perfect form, which is more powerful than Xerneas and Yveltal. Zygarde takes this form when the ecosystem is under threat.", "image": "images/zygarde-complete.jpg", "types": [ "Dragon", "Ground" ], "specie": "Order Pokémon", "height": 4.5, "weight": 610, "abilities": [ "Power Construct" ], "stats": { "total": 708, "hp": 216, "attack": 100, "defense": 121, "speedAttack": 91, "speedDefense": 95, "speed": 85 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/zygarde" }, { "num": 719, "name": "Diancie", "variations": [ { "name": "Diancie", "description": "Diancie is a Rock/Fairy type Pokémon introduced in Generation 6. It is known as the Jewel Pokémon.\nDiancie is an event-exclusive Pokémon. It also has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/diancie.jpg", "types": [ "Rock", "Fairy" ], "specie": "Jewel Pokémon", "height": 0.7, "weight": 8.8, "abilities": [ "Clear Body" ], "stats": { "total": 600, "hp": 50, "attack": 100, "defense": 150, "speedAttack": 100, "speedDefense": 150, "speed": 50 }, "evolutions": [] }, { "name": "Mega Diancie", "description": "Diancie is a Rock/Fairy type Pokémon introduced in Generation 6. It is known as the Jewel Pokémon.\nDiancie is an event-exclusive Pokémon. It also has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.", "image": "images/diancie-mega.jpg", "types": [ "Rock", "Fairy" ], "specie": "Jewel Pokémon", "height": 1.1, "weight": 27.8, "abilities": [ "Magic Bounce" ], "stats": { "total": 700, "hp": 50, "attack": 160, "defense": 110, "speedAttack": 160, "speedDefense": 110, "speed": 110 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/diancie" }, { "num": 720, "name": "Hoopa", "variations": [ { "name": "Hoopa Confined", "description": "Hoopa is a Psychic/Ghost type Pokémon introduced in Generation 6. It is known as the Mischief Pokémon.\nHoopa is an event-exclusive Pokémon.", "image": "images/hoopa-confined.jpg", "types": [ "Psychic", "Ghost" ], "specie": "Mischief Pokémon", "height": 0.5, "weight": 9, "abilities": [ "Magician" ], "stats": { "total": 600, "hp": 80, "attack": 110, "defense": 60, "speedAttack": 150, "speedDefense": 130, "speed": 70 }, "evolutions": [] }, { "name": "Hoopa Unbound", "description": "Hoopa is a Psychic/Ghost type Pokémon introduced in Generation 6. It is known as the Mischief Pokémon.\nHoopa is an event-exclusive Pokémon.", "image": "images/hoopa-unbound.jpg", "types": [ "Psychic", "Dark" ], "specie": "Djinn Pokémon", "height": 6.5, "weight": 490, "abilities": [ "Magician" ], "stats": { "total": 680, "hp": 80, "attack": 160, "defense": 60, "speedAttack": 170, "speedDefense": 130, "speed": 80 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/hoopa" }, { "num": 721, "name": "Volcanion", "variations": [ { "name": "Volcanion", "description": "Volcanion is a Fire/Water type Pokémon introduced in Generation 6. It is known as the Steam Pokémon.\nVolcanion is an event-exclusive Pokémon; full details are not yet known.", "image": "images/volcanion.jpg", "types": [ "Fire", "Water" ], "specie": "Steam Pokémon", "height": 1.7, "weight": 195, "abilities": [ "Water Absorb" ], "stats": { "total": 600, "hp": 80, "attack": 110, "defense": 120, "speedAttack": 130, "speedDefense": 90, "speed": 70 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/volcanion" }, { "num": 722, "name": "Rowlet", "variations": [ { "name": "Rowlet", "description": "Rowlet is a Grass/Flying type Pokémon introduced in Generation 7. It is known as the Grass Quill Pokémon.\nRowlet can fly silently through the skies, sneaking up on its opponent without being noticed. It can attack its opponents using powerful kicks, and it can also attack from a distance using the razor-sharp leaves that form part of its feathers.\nRowlet can survey its environment and turn its neck nearly 180 degrees from front to back, so it can see directly behind itself. When in battle, Rowlet turns its head to face its Trainer when waiting for instructions.\nRowlet starts with the move Leafage.", "image": "images/rowlet.jpg", "types": [ "Grass", "Flying" ], "specie": "Grass Quill Pokémon", "height": 0.3, "weight": 1.5, "abilities": [ "Overgrow", "Long Reach" ], "stats": { "total": 320, "hp": 68, "attack": 55, "defense": 55, "speedAttack": 50, "speedDefense": 50, "speed": 42 }, "evolutions": [ "rowlet", "dartrix", "decidueye" ] } ], "link": "https://pokemondb.net/pokedex/rowlet" }, { "num": 723, "name": "Dartrix", "variations": [ { "name": "Dartrix", "description": "Dartrix is a Grass/Flying type Pokémon introduced in Generation 7. It is known as the Blade Quill Pokémon.\nDartrix is extremely sensitive to other presences in the area and can detect opponents behind it and throw feathers to strike them without even seeing them. This Pokémon conceals sharp-bladed feathers inside its wings, showing astounding precision as it sends them flying in attack.", "image": "images/dartrix.jpg", "types": [ "Grass", "Flying" ], "specie": "Blade Quill Pokémon", "height": 0.7, "weight": 16, "abilities": [ "Overgrow", "Long Reach" ], "stats": { "total": 420, "hp": 78, "attack": 75, "defense": 75, "speedAttack": 70, "speedDefense": 70, "speed": 52 }, "evolutions": [ "rowlet", "dartrix", "decidueye" ] } ], "link": "https://pokemondb.net/pokedex/dartrix" }, { "num": 724, "name": "Decidueye", "variations": [ { "name": "Decidueye", "description": "Decidueye is a Grass/Ghost type Pokémon introduced in Generation 7. It is known as the Arrow Quill Pokémon.\nDecidueye is able to move about while completely masking its presence from others. Once an opponent has lost sight of it, Decidueye seizes the chance to attack it unawares. In a tenth of a second, Decidueye plucks an arrow quill from within its wing and sends its hurtling toward its target.", "image": "images/decidueye.jpg", "types": [ "Grass", "Ghost" ], "specie": "Arrow Quill Pokémon", "height": 1.6, "weight": 36.6, "abilities": [ "Overgrow", "Long Reach" ], "stats": { "total": 530, "hp": 78, "attack": 107, "defense": 75, "speedAttack": 100, "speedDefense": 100, "speed": 70 }, "evolutions": [ "rowlet", "dartrix", "decidueye" ] } ], "link": "https://pokemondb.net/pokedex/decidueye" }, { "num": 725, "name": "Litten", "variations": [ { "name": "Litten", "description": "Litten is a Fire type Pokémon introduced in Generation 7. It is known as the Fire Cat Pokémon.\nThe cool-headed Fire Cat Pokémon, Litten, is the next choice for a first-partner Pokémon. Litten's fur is rich in oils and is immensely flammable. It constantly grooms itself by licking its coat, collecting loose fur into balls. It then ignites these hairballs to create fireball attacks. When the time comes for Litten to molt, it burns off all of its fur in one glorious blaze.\nLitten starts with the move Ember.", "image": "images/litten.jpg", "types": [ "Fire" ], "specie": "Fire Cat Pokémon", "height": 0.4, "weight": 4.3, "abilities": [ "Blaze", "Intimidate" ], "stats": { "total": 320, "hp": 45, "attack": 65, "defense": 40, "speedAttack": 60, "speedDefense": 40, "speed": 70 }, "evolutions": [ "litten", "torracat", "incineroar" ] } ], "link": "https://pokemondb.net/pokedex/litten" }, { "num": 726, "name": "Torracat", "variations": [ { "name": "Torracat", "description": "Torracat is a Fire type Pokémon introduced in Generation 7. It is known as the Fire Cat Pokémon.\nThe bell-like object attached at the base of Torracat's neck is a flame sac, an organ that can produce flames. Torracat's emotions cause a rise in the organ’s temperature, and when the organ spits flames, it rings with the high, clear sound of a bell. Torracat attacks using the flames emitted from this bell.", "image": "images/torracat.jpg", "types": [ "Fire" ], "specie": "Fire Cat Pokémon", "height": 0.7, "weight": 25, "abilities": [ "Blaze", "Intimidate" ], "stats": { "total": 420, "hp": 65, "attack": 85, "defense": 50, "speedAttack": 80, "speedDefense": 50, "speed": 90 }, "evolutions": [ "litten", "torracat", "incineroar" ] } ], "link": "https://pokemondb.net/pokedex/torracat" }, { "num": 727, "name": "Incineroar", "variations": [ { "name": "Incineroar", "description": "Incineroar is a Fire/Dark type Pokémon introduced in Generation 7. It is known as the Heel Pokémon.\nAs its fighting spirit increases, the flames that Incineroar produces within its body burst from its navel and waistline. In the heat of battle, Incineroar shows no concern for its opponents - and sometimes even launches attacks that strike the opposing Trainer! As a result, many tend to dislike this Pokémon and keep it at a distance.", "image": "images/incineroar.jpg", "types": [ "Fire", "Dark" ], "specie": "Heel Pokémon", "height": 1.8, "weight": 83, "abilities": [ "Blaze", "Intimidate" ], "stats": { "total": 530, "hp": 95, "attack": 115, "defense": 90, "speedAttack": 80, "speedDefense": 90, "speed": 60 }, "evolutions": [ "litten", "torracat", "incineroar" ] } ], "link": "https://pokemondb.net/pokedex/incineroar" }, { "num": 728, "name": "Popplio", "variations": [ { "name": "Popplio", "description": "Popplio is a Water type Pokémon introduced in Generation 7. It is known as the Sea Lion Pokémon.\nPopplio can create balloons made of water from its nose and utilize them to create a variety of different strategies and attacks in battle. This Pokémon is better at moving in the water than on land, and can swim at speeds over 25 mph. On land, it uses the elasticity of the balloons it creates to perform jumps and acrobatic stunts.\nPopplio starts with the move Water Gun.", "image": "images/popplio.jpg", "types": [ "Water" ], "specie": "Sea Lion Pokémon", "height": 0.4, "weight": 7.5, "abilities": [ "Torrent", "Liquid Voice" ], "stats": { "total": 320, "hp": 50, "attack": 54, "defense": 54, "speedAttack": 66, "speedDefense": 56, "speed": 40 }, "evolutions": [ "popplio", "brionne", "primarina" ] } ], "link": "https://pokemondb.net/pokedex/popplio" }, { "num": 729, "name": "Brionne", "variations": [ { "name": "Brionne", "description": "Brionne is a Water type Pokémon introduced in Generation 7. It is known as the Pop Star Pokémon.\nBrionne learns its dances by imitating the other members of its colony. It sometimes even learns dances from humans. This Pokémon is a hard worker and pours itself into its efforts until it has memorized each dance. As it dances, Brionne creates balloon after balloon. In battle, it first sends its opponent into disarray with its dancing, and then slaps its balloons into its target, causing the balloons to explode and deal damage.", "image": "images/brionne.jpg", "types": [ "Water" ], "specie": "Pop Star Pokémon", "height": 0.6, "weight": 17.5, "abilities": [ "Torrent", "Liquid Voice" ], "stats": { "total": 420, "hp": 60, "attack": 69, "defense": 69, "speedAttack": 91, "speedDefense": 81, "speed": 50 }, "evolutions": [ "popplio", "brionne", "primarina" ] } ], "link": "https://pokemondb.net/pokedex/brionne" }, { "num": 730, "name": "Primarina", "variations": [ { "name": "Primarina", "description": "Primarina is a Water/Fairy type Pokémon introduced in Generation 7. It is known as the Soloist Pokémon.\nAs it dances, Primarina releases balloons of water into the area around itself, moving them using the sound waves from its voice. The sight of moonlight reflecting off its glittering balloons creates a magical scene. Since Primarina controls its balloons using its voice, any injury to its throat can become a grave problem. Its greatest enemies are arid environments and the overuse of its voice during back-to-back battles.", "image": "images/primarina.jpg", "types": [ "Water", "Fairy" ], "specie": "Soloist Pokémon", "height": 1.8, "weight": 44, "abilities": [ "Torrent", "Liquid Voice" ], "stats": { "total": 530, "hp": 80, "attack": 74, "defense": 74, "speedAttack": 126, "speedDefense": 116, "speed": 60 }, "evolutions": [ "popplio", "brionne", "primarina" ] } ], "link": "https://pokemondb.net/pokedex/primarina" }, { "num": 731, "name": "Pikipek", "variations": [ { "name": "Pikipek", "description": "Pikipek is a Normal/Flying type Pokémon introduced in Generation 7. It is known as the Woodpecker Pokémon.\nPikipek can strike 16 times a second with its beak. These strikes are powerful enough to not only drill through hard wood but even shatter stone. Pikipek will attack distant opponents by zipping seeds at them. These shots have enough strength to embed the seeds in tree trunks.", "image": "images/pikipek.jpg", "types": [ "Normal", "Flying" ], "specie": "Woodpecker Pokémon", "height": 0.3, "weight": 1.2, "abilities": [ "Keen Eye", "Skill Link", "Pickup" ], "stats": { "total": 265, "hp": 35, "attack": 75, "defense": 30, "speedAttack": 30, "speedDefense": 30, "speed": 65 }, "evolutions": [ "pikipek", "trumbeak", "toucannon" ] } ], "link": "https://pokemondb.net/pokedex/pikipek" }, { "num": 732, "name": "Trumbeak", "variations": [ { "name": "Trumbeak", "description": "Trumbeak is a Normal/Flying type Pokémon introduced in Generation 7. It is known as the Bugle Beak Pokémon.", "image": "images/trumbeak.jpg", "types": [ "Normal", "Flying" ], "specie": "Bugle Beak Pokémon", "height": 0.6, "weight": 14.8, "abilities": [ "Keen Eye", "Skill Link", "Pickup" ], "stats": { "total": 355, "hp": 55, "attack": 85, "defense": 50, "speedAttack": 40, "speedDefense": 50, "speed": 75 }, "evolutions": [ "pikipek", "trumbeak", "toucannon" ] } ], "link": "https://pokemondb.net/pokedex/trumbeak" }, { "num": 733, "name": "Toucannon", "variations": [ { "name": "Toucannon", "description": "Toucannon is a Normal/Flying type Pokémon introduced in Generation 7. It is known as the Cannon Pokémon.", "image": "images/toucannon.jpg", "types": [ "Normal", "Flying" ], "specie": "Cannon Pokémon", "height": 1.1, "weight": 26, "abilities": [ "Keen Eye", "Skill Link", "Sheer Force" ], "stats": { "total": 485, "hp": 80, "attack": 120, "defense": 75, "speedAttack": 75, "speedDefense": 75, "speed": 60 }, "evolutions": [ "pikipek", "trumbeak", "toucannon" ] } ], "link": "https://pokemondb.net/pokedex/toucannon" }, { "num": 734, "name": "Yungoos", "variations": [ { "name": "Yungoos", "description": "Yungoos is a Normal type Pokémon introduced in Generation 7. It is known as the Loitering Pokémon.\nYungoos is a big eater that is never satisfied. The majority of its long body is given over to its stomach, and its digestion is swift, so it’s always hungry. It has strong fangs, so it can crush and consume the hardest of objects.", "image": "images/yungoos.jpg", "types": [ "Normal" ], "specie": "Loitering Pokémon", "height": 0.4, "weight": 6, "abilities": [ "Strong Jaw", "Stakeout", "Adaptability" ], "stats": { "total": 253, "hp": 48, "attack": 70, "defense": 30, "speedAttack": 30, "speedDefense": 30, "speed": 45 }, "evolutions": [ "yungoos", "gumshoos" ] } ], "link": "https://pokemondb.net/pokedex/yungoos" }, { "num": 735, "name": "Gumshoos", "variations": [ { "name": "Gumshoos", "description": "Gumshoos is a Normal type Pokémon introduced in Generation 7. It is known as the Stakeout Pokémon.\nGumshoos' method of targeting prey is the exact opposite of Yungoos's strategy. While Yungoos prowls around, Gumshoos stakes out its prey's usual routes and waits patiently for it to come by.\nGumshoos has a tenacious personality, which is why it targets one prey for so long without wavering. But when the sun goes down, it runs low on stamina, falling asleep right on the spot. Gumshoos can withstand a great deal of hunger. It's able to stay perfectly still while waiting for its prey, keeping watch without eating a thing.\nGumshoos evolves from Yungoos.", "image": "images/gumshoos.jpg", "types": [ "Normal" ], "specie": "Stakeout Pokémon", "height": 0.7, "weight": 14.2, "abilities": [ "Strong Jaw", "Stakeout", "Adaptability" ], "stats": { "total": 418, "hp": 88, "attack": 110, "defense": 60, "speedAttack": 55, "speedDefense": 60, "speed": 45 }, "evolutions": [ "yungoos", "gumshoos" ] } ], "link": "https://pokemondb.net/pokedex/gumshoos" }, { "num": 736, "name": "Grubbin", "variations": [ { "name": "Grubbin", "description": "Grubbin is a Bug type Pokémon introduced in Generation 7. It is known as the Larva Pokémon.\nGrubbin relies on its sturdy jaw as a weapon in battle and as a tool for burrowing through the earth. Grubbin loves electricity, which is why it can be found near power plants and substations. By wrapping tree branches in the sticky threads that it spews from its mouth, Grubbin can swing around like an actor on suspension wires!\nGrubbin evolves into Charjabug.", "image": "images/grubbin.jpg", "types": [ "Bug" ], "specie": "Larva Pokémon", "height": 0.4, "weight": 4.4, "abilities": [ "Swarm" ], "stats": { "total": 300, "hp": 47, "attack": 62, "defense": 45, "speedAttack": 55, "speedDefense": 45, "speed": 46 }, "evolutions": [ "grubbin", "charjabug", "vikavolt" ] } ], "link": "https://pokemondb.net/pokedex/grubbin" }, { "num": 737, "name": "Charjabug", "variations": [ { "name": "Charjabug", "description": "Charjabug is a Bug/Electric type Pokémon introduced in Generation 7. It is known as the Battery Pokémon.\nCharjabug stays perfectly still in preparation for Evolution, and often spends time with its body half-buried in the earth. Charjabug is able to store up electricity. It can store enough power to run a household for a whole day. The power it stores can be provided to other Pokémon, so it can also serve as a battery!\nCharjabug evolves from Grubbin and evolves into Vikavolt.", "image": "images/charjabug.jpg", "types": [ "Bug", "Electric" ], "specie": "Battery Pokémon", "height": 0.5, "weight": 10.5, "abilities": [ "Battery" ], "stats": { "total": 400, "hp": 57, "attack": 82, "defense": 95, "speedAttack": 55, "speedDefense": 75, "speed": 36 }, "evolutions": [ "grubbin", "charjabug", "vikavolt" ] } ], "link": "https://pokemondb.net/pokedex/charjabug" }, { "num": 738, "name": "Vikavolt", "variations": [ { "name": "Vikavolt", "description": "Vikavolt is a Bug/Electric type Pokémon introduced in Generation 7. It is known as the Stag Beetle Pokémon.\nVikavolt is like a fortress that zooms through the forest, firing a beam of electricity from its mouth. Its huge jaws control the electricity it blasts out. Vikavolt is adept at acrobatic flight maneuvers like tailspins and sharp turns. It can fly at high speeds even as it weaves its way through the complicated tangle of branches in the forest.\nVikavolt evolves from Charjabug.", "image": "images/vikavolt.jpg", "types": [ "Bug", "Electric" ], "specie": "Stag Beetle Pokémon", "height": 1.5, "weight": 45, "abilities": [ "Levitate" ], "stats": { "total": 500, "hp": 77, "attack": 70, "defense": 90, "speedAttack": 145, "speedDefense": 75, "speed": 43 }, "evolutions": [ "grubbin", "charjabug", "vikavolt" ] } ], "link": "https://pokemondb.net/pokedex/vikavolt" }, { "num": 739, "name": "Crabrawler", "variations": [ { "name": "Crabrawler", "description": "Crabrawler is a Fighting type Pokémon introduced in Generation 7. It is known as the Boxing Pokémon.\nCrabrawler has a personality that really hates to lose, and it's driven not only to aim for a higher position than its fellows in terms of social standing, but literally to aim for a higher position in the landscape.\nCrabrawler punches the trunks of trees to give the branches a good shake and knock any ripe Berries to the ground so it can feast.", "image": "images/crabrawler.jpg", "types": [ "Fighting" ], "specie": "Boxing Pokémon", "height": 0.6, "weight": 7, "abilities": [ "Hyper Cutter", "Iron Fist", "Anger Point" ], "stats": { "total": 338, "hp": 47, "attack": 82, "defense": 57, "speedAttack": 42, "speedDefense": 47, "speed": 63 }, "evolutions": [ "crabrawler", "crabominable" ] } ], "link": "https://pokemondb.net/pokedex/crabrawler" }, { "num": 740, "name": "Crabominable", "variations": [ { "name": "Crabominable", "description": "Crabominable is a Fighting/Ice type Pokémon introduced in Generation 7. It is known as the Woolly Crab Pokémon.", "image": "images/crabominable.jpg", "types": [ "Fighting", "Ice" ], "specie": "Woolly Crab Pokémon", "height": 1.7, "weight": 180, "abilities": [ "Hyper Cutter", "Iron Fist", "Anger Point" ], "stats": { "total": 478, "hp": 97, "attack": 132, "defense": 77, "speedAttack": 62, "speedDefense": 67, "speed": 43 }, "evolutions": [ "crabrawler", "crabominable" ] } ], "link": "https://pokemondb.net/pokedex/crabominable" }, { "num": 741, "name": "Oricorio", "variations": [ { "name": "Baile Style", "description": "Oricorio is a Fire/Flying type Pokémon introduced in Generation 7. It is known as the Dancing Pokémon.\nOricorio has four different forms - one for each of Alola's islands. Oricorio changes its form by sipping the nectar of certain flowers.\nThe Baile Style Oricorio is very passionate, and power fills its body when it dances. It sends downy fluff flying during its intense dances.\nThe Pom-Pom Style Oricorio is very friendly toward people, and it uses dancing to encourage Trainers who are feeling glum. When it dances, its feathers are charged with static electricity.\nThe Pa'u Style Oricorio acts at its own pace, which sometimes makes it difficult to deal with. It sharpens its spirited moves through dance, which increases its psychic power.\nThe Sensu Style Oricorio is quiet and collected. By means of its dance, it gathers the spirits drifting about in an area and borrows their power to fight.", "image": "images/oricorio-baile.jpg", "types": [ "Fire", "Flying" ], "specie": "Dancing Pokémon", "height": 0.6, "weight": 3.4, "abilities": [ "Dancer" ], "stats": { "total": 476, "hp": 75, "attack": 70, "defense": 70, "speedAttack": 98, "speedDefense": 70, "speed": 93 }, "evolutions": [] }, { "name": "Pom-Pom Style", "description": "Oricorio is a Fire/Flying type Pokémon introduced in Generation 7. It is known as the Dancing Pokémon.\nOricorio has four different forms - one for each of Alola's islands. Oricorio changes its form by sipping the nectar of certain flowers.\nThe Baile Style Oricorio is very passionate, and power fills its body when it dances. It sends downy fluff flying during its intense dances.\nThe Pom-Pom Style Oricorio is very friendly toward people, and it uses dancing to encourage Trainers who are feeling glum. When it dances, its feathers are charged with static electricity.\nThe Pa'u Style Oricorio acts at its own pace, which sometimes makes it difficult to deal with. It sharpens its spirited moves through dance, which increases its psychic power.\nThe Sensu Style Oricorio is quiet and collected. By means of its dance, it gathers the spirits drifting about in an area and borrows their power to fight.", "image": "images/oricorio-pom-pom.jpg", "types": [ "Electric", "Flying" ], "specie": "Dancing Pokémon", "height": 0.6, "weight": 3.4, "abilities": [ "Dancer" ], "stats": { "total": 476, "hp": 75, "attack": 70, "defense": 70, "speedAttack": 98, "speedDefense": 70, "speed": 93 }, "evolutions": [] }, { "name": "Pa'u Style", "description": "Oricorio is a Fire/Flying type Pokémon introduced in Generation 7. It is known as the Dancing Pokémon.\nOricorio has four different forms - one for each of Alola's islands. Oricorio changes its form by sipping the nectar of certain flowers.\nThe Baile Style Oricorio is very passionate, and power fills its body when it dances. It sends downy fluff flying during its intense dances.\nThe Pom-Pom Style Oricorio is very friendly toward people, and it uses dancing to encourage Trainers who are feeling glum. When it dances, its feathers are charged with static electricity.\nThe Pa'u Style Oricorio acts at its own pace, which sometimes makes it difficult to deal with. It sharpens its spirited moves through dance, which increases its psychic power.\nThe Sensu Style Oricorio is quiet and collected. By means of its dance, it gathers the spirits drifting about in an area and borrows their power to fight.", "image": "images/oricorio-pau.jpg", "types": [ "Psychic", "Flying" ], "specie": "Dancing Pokémon", "height": 0.6, "weight": 3.4, "abilities": [ "Dancer" ], "stats": { "total": 476, "hp": 75, "attack": 70, "defense": 70, "speedAttack": 98, "speedDefense": 70, "speed": 93 }, "evolutions": [] }, { "name": "Sensu Style", "description": "Oricorio is a Fire/Flying type Pokémon introduced in Generation 7. It is known as the Dancing Pokémon.\nOricorio has four different forms - one for each of Alola's islands. Oricorio changes its form by sipping the nectar of certain flowers.\nThe Baile Style Oricorio is very passionate, and power fills its body when it dances. It sends downy fluff flying during its intense dances.\nThe Pom-Pom Style Oricorio is very friendly toward people, and it uses dancing to encourage Trainers who are feeling glum. When it dances, its feathers are charged with static electricity.\nThe Pa'u Style Oricorio acts at its own pace, which sometimes makes it difficult to deal with. It sharpens its spirited moves through dance, which increases its psychic power.\nThe Sensu Style Oricorio is quiet and collected. By means of its dance, it gathers the spirits drifting about in an area and borrows their power to fight.", "image": "images/oricorio-sensu.jpg", "types": [ "Ghost", "Flying" ], "specie": "Dancing Pokémon", "height": 0.6, "weight": 3.4, "abilities": [ "Dancer" ], "stats": { "total": 476, "hp": 75, "attack": 70, "defense": 70, "speedAttack": 98, "speedDefense": 70, "speed": 93 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/oricorio" }, { "num": 742, "name": "Cutiefly", "variations": [ { "name": "Cutiefly", "description": "Cutiefly is a Bug/Fairy type Pokémon introduced in Generation 7. It is known as the Bee Fly Pokémon.\nCutiefly can detect the auras of living things, including people, Pokémon, and plants. They search out flowers by the color and brightness of their auras and then gather their nectar and pollen.\nWhen living creatures are excited, it seems that their auras resemble those of flowers in full bloom. As a result, these Pokémon tend to gather near people or Pokémon feeling particularly happy or sad.", "image": "images/cutiefly.jpg", "types": [ "Bug", "Fairy" ], "specie": "Bee Fly Pokémon", "height": 0.1, "weight": 0.2, "abilities": [ "Honey Gather", "Shield Dust", "Sweet Veil" ], "stats": { "total": 304, "hp": 40, "attack": 45, "defense": 40, "speedAttack": 55, "speedDefense": 40, "speed": 84 }, "evolutions": [ "cutiefly", "ribombee" ] } ], "link": "https://pokemondb.net/pokedex/cutiefly" }, { "num": 743, "name": "Ribombee", "variations": [ { "name": "Ribombee", "description": "Ribombee is a Bug/Fairy type Pokémon introduced in Generation 7. It is known as the Bee Fly Pokémon.\nRibombee collect flower nectar and pollen to make into balls known as Pollen Puffs. These serve as food, and what’s more, they also can cause effects like paralysis or dizziness. Ribombee may use puffs to strike their opponents during battles.", "image": "images/ribombee.jpg", "types": [ "Bug", "Fairy" ], "specie": "Bee Fly Pokémon", "height": 0.2, "weight": 0.5, "abilities": [ "Honey Gather", "Shield Dust", "Sweet Veil" ], "stats": { "total": 464, "hp": 60, "attack": 55, "defense": 60, "speedAttack": 95, "speedDefense": 70, "speed": 124 }, "evolutions": [ "cutiefly", "ribombee" ] } ], "link": "https://pokemondb.net/pokedex/ribombee" }, { "num": 744, "name": "Rockruff", "variations": [ { "name": "Rockruff", "description": "Rockruff is a Rock type Pokémon introduced in Generation 7. It is known as the Puppy Pokémon.\nRockruff has an excellent sense of smell, and once it has smelled an odor, it doesn’t forget it! There are tales of these Pokémon getting separated from their Trainers, then using the faintest traces of their scent to track them for days until they are reunited!\nRockruff is a sociable Pokémon, but as it grows, its disposition gets wilder. If it begins to howl when the sun goes down, that is proof that it’s close to evolving. It’s said that it leaves its Trainer’s side to evolve and returns again when fully evolved.", "image": "images/rockruff.jpg", "types": [ "Rock" ], "specie": "Puppy Pokémon", "height": 0.5, "weight": 9.2, "abilities": [ "Keen Eye", "Vital Spirit", "Steadfast" ], "stats": { "total": 280, "hp": 45, "attack": 65, "defense": 40, "speedAttack": 30, "speedDefense": 40, "speed": 60 }, "evolutions": [ "rockruff" ] }, { "name": "Own Tempo Rockruff", "description": "Rockruff is a Rock type Pokémon introduced in Generation 7. It is known as the Puppy Pokémon.\nRockruff has an excellent sense of smell, and once it has smelled an odor, it doesn’t forget it! There are tales of these Pokémon getting separated from their Trainers, then using the faintest traces of their scent to track them for days until they are reunited!\nRockruff is a sociable Pokémon, but as it grows, its disposition gets wilder. If it begins to howl when the sun goes down, that is proof that it’s close to evolving. It’s said that it leaves its Trainer’s side to evolve and returns again when fully evolved.", "image": "images/rockruff.jpg", "types": [ "Rock" ], "specie": "Puppy Pokémon", "height": 0.5, "weight": 9.2, "abilities": [ "Own Tempo" ], "stats": { "total": 280, "hp": 45, "attack": 65, "defense": 40, "speedAttack": 30, "speedDefense": 40, "speed": 60 }, "evolutions": [ "rockruff" ] } ], "link": "https://pokemondb.net/pokedex/rockruff" }, { "num": 745, "name": "Lycanroc", "variations": [ { "name": "Midday Form", "description": "Lycanroc is a Rock type Pokémon introduced in Generation 7. It is known as the Wolf Pokémon.\nLycanroc has three forms. Midday Form and Midnight Form were available in Pokémon Sun & Moon, while Dusk Form was added in Ultra Sun & Ultra Moon. Lycanroc evolves from Rockruff into one of the forms:\n\nIn Pokémon Sun, influenced by Solgaleo, Rockruff evolves into Lycanroc Midday Form.\nIn Pokémon Moon, influenced by Lunala, Rockruff evolves into Lycanroc Midnight Form.\nIn Pokémon Ultra Sun/Moon, a special event Rockruff (from Mystery Gift) evolves into Lycanroc Dusk Form.", "image": "images/lycanroc-midday.jpg", "types": [ "Rock" ], "specie": "Wolf Pokémon", "height": 0.8, "weight": 25, "abilities": [ "Keen Eye", "Sand Rush", "Steadfast" ], "stats": { "total": 487, "hp": 75, "attack": 115, "defense": 65, "speedAttack": 55, "speedDefense": 65, "speed": 112 }, "evolutions": [ "rockruff" ] }, { "name": "Midnight Form", "description": "Lycanroc is a Rock type Pokémon introduced in Generation 7. It is known as the Wolf Pokémon.\nLycanroc has three forms. Midday Form and Midnight Form were available in Pokémon Sun & Moon, while Dusk Form was added in Ultra Sun & Ultra Moon. Lycanroc evolves from Rockruff into one of the forms:\n\nIn Pokémon Sun, influenced by Solgaleo, Rockruff evolves into Lycanroc Midday Form.\nIn Pokémon Moon, influenced by Lunala, Rockruff evolves into Lycanroc Midnight Form.\nIn Pokémon Ultra Sun/Moon, a special event Rockruff (from Mystery Gift) evolves into Lycanroc Dusk Form.", "image": "images/lycanroc-midnight.jpg", "types": [ "Rock" ], "specie": "Wolf Pokémon", "height": 1.1, "weight": 25, "abilities": [ "Keen Eye", "Vital Spirit", "No Guard" ], "stats": { "total": 487, "hp": 85, "attack": 115, "defense": 75, "speedAttack": 55, "speedDefense": 75, "speed": 82 }, "evolutions": [ "rockruff" ] }, { "name": "Dusk Form", "description": "Lycanroc is a Rock type Pokémon introduced in Generation 7. It is known as the Wolf Pokémon.\nLycanroc has three forms. Midday Form and Midnight Form were available in Pokémon Sun & Moon, while Dusk Form was added in Ultra Sun & Ultra Moon. Lycanroc evolves from Rockruff into one of the forms:\n\nIn Pokémon Sun, influenced by Solgaleo, Rockruff evolves into Lycanroc Midday Form.\nIn Pokémon Moon, influenced by Lunala, Rockruff evolves into Lycanroc Midnight Form.\nIn Pokémon Ultra Sun/Moon, a special event Rockruff (from Mystery Gift) evolves into Lycanroc Dusk Form.", "image": "images/lycanroc-dusk.jpg", "types": [ "Rock" ], "specie": "Wolf Pokémon", "height": 0.8, "weight": 25, "abilities": [ "Tough Claws" ], "stats": { "total": 487, "hp": 75, "attack": 117, "defense": 65, "speedAttack": 55, "speedDefense": 65, "speed": 110 }, "evolutions": [ "rockruff" ] } ], "link": "https://pokemondb.net/pokedex/lycanroc" }, { "num": 746, "name": "Wishiwashi", "variations": [ { "name": "Solo Form", "description": "Wishiwashi is a Water type Pokémon introduced in Generation 7. It is known as the Small Fry Pokémon.\nWishiwashi is very small, yet the people of the Alola region seem to view it as a terrifying Pokémon. When it’s in danger, Wishiwashi's glistening eyes catch the light and shine out, sending an SOS signal to its allies.", "image": "images/wishiwashi-solo.jpg", "types": [ "Water" ], "specie": "Small Fry Pokémon", "height": 0.2, "weight": 0.3, "abilities": [ "Schooling" ], "stats": { "total": 175, "hp": 45, "attack": 20, "defense": 20, "speedAttack": 25, "speedDefense": 25, "speed": 40 }, "evolutions": [] }, { "name": "School Form", "description": "Wishiwashi is a Water type Pokémon introduced in Generation 7. It is known as the Small Fry Pokémon.\nWishiwashi is very small, yet the people of the Alola region seem to view it as a terrifying Pokémon. When it’s in danger, Wishiwashi's glistening eyes catch the light and shine out, sending an SOS signal to its allies.", "image": "images/wishiwashi-school.jpg", "types": [ "Water" ], "specie": "Small Fry Pokémon", "height": 8.2, "weight": 78.6, "abilities": [ "Schooling" ], "stats": { "total": 620, "hp": 45, "attack": 140, "defense": 130, "speedAttack": 140, "speedDefense": 135, "speed": 30 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/wishiwashi" }, { "num": 747, "name": "Mareanie", "variations": [ { "name": "Mareanie", "description": "Mareanie is a Poison/Water type Pokémon introduced in Generation 7. It is known as the Brutal Star Pokémon.", "image": "images/mareanie.jpg", "types": [ "Poison", "Water" ], "specie": "Brutal Star Pokémon", "height": 0.4, "weight": 8, "abilities": [ "Merciless", "Limber", "Regenerator" ], "stats": { "total": 305, "hp": 50, "attack": 53, "defense": 62, "speedAttack": 43, "speedDefense": 52, "speed": 45 }, "evolutions": [ "mareanie", "toxapex" ] } ], "link": "https://pokemondb.net/pokedex/mareanie" }, { "num": 748, "name": "Toxapex", "variations": [ { "name": "Toxapex", "description": "Toxapex is a Poison/Water type Pokémon introduced in Generation 7. It is known as the Brutal Star Pokémon.", "image": "images/toxapex.jpg", "types": [ "Poison", "Water" ], "specie": "Brutal Star Pokémon", "height": 0.7, "weight": 14.5, "abilities": [ "Merciless", "Limber", "Regenerator" ], "stats": { "total": 495, "hp": 50, "attack": 63, "defense": 152, "speedAttack": 53, "speedDefense": 142, "speed": 35 }, "evolutions": [ "mareanie", "toxapex" ] } ], "link": "https://pokemondb.net/pokedex/toxapex" }, { "num": 749, "name": "Mudbray", "variations": [ { "name": "Mudbray", "description": "Mudbray is a Ground type Pokémon introduced in Generation 7. It is known as the Donkey Pokémon.\nMudbray could once be found all over the world, but it was over-hunted and ended up on the verge of extinction. It’s said that the Alola region is the only place in the world where Mudbray can still be found in the wild.\nMudbray boasts superhuman strength—a surprise, considering its small body. Mudbray can carry loads up to 50 times its own weight on its back or dragging behind it.\nMudbray evolves into Mudsdale.", "image": "images/mudbray.jpg", "types": [ "Ground" ], "specie": "Donkey Pokémon", "height": 1, "weight": 110, "abilities": [ "Own Tempo", "Stamina", "Inner Focus" ], "stats": { "total": 385, "hp": 70, "attack": 100, "defense": 70, "speedAttack": 45, "speedDefense": 55, "speed": 45 }, "evolutions": [ "mudbray", "mudsdale" ] } ], "link": "https://pokemondb.net/pokedex/mudbray" }, { "num": 750, "name": "Mudsdale", "variations": [ { "name": "Mudsdale", "description": "Mudsdale is a Ground type Pokémon introduced in Generation 7. It is known as the Draft Horse Pokémon.\nMudsdale is known for its powerful body as well as its emotional fortitude, which keeps it from being agitated by anything. It never cries out, no matter what kind of trouble it’s in, and it defeats its opponents with a single powerful blow. Its legs are coated in protective mud, and the weight of this coating increases the force of its kicks.\nWhen Mudsdale gallops in earnest, the power of each hoof-clop can dig out huge holes, even in asphalt. Mudsdale is forbidden to run on some of Alola’s public roads.", "image": "images/mudsdale.jpg", "types": [ "Ground" ], "specie": "Draft Horse Pokémon", "height": 2.5, "weight": 920, "abilities": [ "Own Tempo", "Stamina", "Inner Focus" ], "stats": { "total": 500, "hp": 100, "attack": 125, "defense": 100, "speedAttack": 55, "speedDefense": 85, "speed": 35 }, "evolutions": [ "mudbray", "mudsdale" ] } ], "link": "https://pokemondb.net/pokedex/mudsdale" }, { "num": 751, "name": "Dewpider", "variations": [ { "name": "Dewpider", "description": "Dewpider is a Water/Bug type Pokémon introduced in Generation 7. It is known as the Water Bubble Pokémon.", "image": "images/dewpider.jpg", "types": [ "Water", "Bug" ], "specie": "Water Bubble Pokémon", "height": 0.3, "weight": 4, "abilities": [ "Water Bubble", "Water Absorb" ], "stats": { "total": 269, "hp": 38, "attack": 40, "defense": 52, "speedAttack": 40, "speedDefense": 72, "speed": 27 }, "evolutions": [ "dewpider", "araquanid" ] } ], "link": "https://pokemondb.net/pokedex/dewpider" }, { "num": 752, "name": "Araquanid", "variations": [ { "name": "Araquanid", "description": "Araquanid is a Water/Bug type Pokémon introduced in Generation 7. It is known as the Water Bubble Pokémon.", "image": "images/araquanid.jpg", "types": [ "Water", "Bug" ], "specie": "Water Bubble Pokémon", "height": 1.8, "weight": 82, "abilities": [ "Water Bubble", "Water Absorb" ], "stats": { "total": 454, "hp": 68, "attack": 70, "defense": 92, "speedAttack": 50, "speedDefense": 132, "speed": 42 }, "evolutions": [ "dewpider", "araquanid" ] } ], "link": "https://pokemondb.net/pokedex/araquanid" }, { "num": 753, "name": "Fomantis", "variations": [ { "name": "Fomantis", "description": "Fomantis is a Grass type Pokémon introduced in Generation 7. It is known as the Sickle Grass Pokémon.\nFomantis is nocturnal, and it performs photosynthesis while it sleeps during the day by spreading out its leaves in all directions. Because of the danger of staying in the same location two days in a row, Fomantis begins its search for the next day's spot as soon as the sun sets.\nFomantis evolves into Lurantis.", "image": "images/fomantis.jpg", "types": [ "Grass" ], "specie": "Sickle Grass Pokémon", "height": 0.3, "weight": 1.5, "abilities": [ "Leaf Guard", "Contrary" ], "stats": { "total": 250, "hp": 40, "attack": 55, "defense": 35, "speedAttack": 50, "speedDefense": 35, "speed": 35 }, "evolutions": [ "fomantis", "lurantis" ] } ], "link": "https://pokemondb.net/pokedex/fomantis" }, { "num": 754, "name": "Lurantis", "variations": [ { "name": "Lurantis", "description": "Lurantis is a Grass type Pokémon introduced in Generation 7. It is known as the Bloom Sickle Pokémon.\nLurantis draws opponents near to itself with its flowerlike appearance and aroma—and then it takes them down. It’s said to be the most gorgeous of all Grass-type Pokémon, due to its brilliant coloration and elegant moves. Lurantis' appearance is maintained through detailed grooming. It will trust a Trainer who does a good job of caring for it, but it will apparently have a difficult time growing closer to a lazy Trainer.\nLurantis evolves from Fomantis.", "image": "images/lurantis.jpg", "types": [ "Grass" ], "specie": "Bloom Sickle Pokémon", "height": 0.9, "weight": 18.5, "abilities": [ "Leaf Guard", "Contrary" ], "stats": { "total": 480, "hp": 70, "attack": 105, "defense": 90, "speedAttack": 80, "speedDefense": 90, "speed": 45 }, "evolutions": [ "fomantis", "lurantis" ] } ], "link": "https://pokemondb.net/pokedex/lurantis" }, { "num": 755, "name": "Morelull", "variations": [ { "name": "Morelull", "description": "Morelull is a Grass/Fairy type Pokémon introduced in Generation 7. It is known as the Illuminating Pokémon.\nMorelull are nocturnal Pokémon that walk around at night on their leg-like roots. They move because staying in one spot and sucking all the nutrients from the soil would cause surrounding plants to wither. Morelull uses its roots to make contact with its fellows and communicate with them.", "image": "images/morelull.jpg", "types": [ "Grass", "Fairy" ], "specie": "Illuminating Pokémon", "height": 0.2, "weight": 1.5, "abilities": [ "Illuminate", "Effect Spore", "Rain Dish" ], "stats": { "total": 285, "hp": 40, "attack": 35, "defense": 55, "speedAttack": 65, "speedDefense": 75, "speed": 15 }, "evolutions": [ "morelull", "shiinotic" ] } ], "link": "https://pokemondb.net/pokedex/morelull" }, { "num": 756, "name": "Shiinotic", "variations": [ { "name": "Shiinotic", "description": "Shiinotic is a Grass/Fairy type Pokémon introduced in Generation 7. It is known as the Illuminating Pokémon.", "image": "images/shiinotic.jpg", "types": [ "Grass", "Fairy" ], "specie": "Illuminating Pokémon", "height": 1, "weight": 11.5, "abilities": [ "Illuminate", "Effect Spore", "Rain Dish" ], "stats": { "total": 405, "hp": 60, "attack": 45, "defense": 80, "speedAttack": 90, "speedDefense": 100, "speed": 30 }, "evolutions": [ "morelull", "shiinotic" ] } ], "link": "https://pokemondb.net/pokedex/shiinotic" }, { "num": 757, "name": "Salandit", "variations": [ { "name": "Salandit", "description": "Salandit is a Poison/Fire type Pokémon introduced in Generation 7. It is known as the Toxic Lizard Pokémon.\nSalandit emits toxic gas, together with flames, from the base of its tail. This poisonous gas has a sweet smell, and anyone who unknowingly breathes it in will become dizzy. Salandit is not a very powerful Pokémon, but its cunning nature allows it to battle fiercely by throwing its opponents off balance. \nSalandit females not only release toxic gases, they can also emit pheromones that attract males of all species, including Pokémon and humans. Inhaling these pheromones may cause opponents to be controlled by Salandit's will.", "image": "images/salandit.jpg", "types": [ "Poison", "Fire" ], "specie": "Toxic Lizard Pokémon", "height": 0.6, "weight": 4.8, "abilities": [ "Corrosion", "Oblivious" ], "stats": { "total": 320, "hp": 48, "attack": 44, "defense": 40, "speedAttack": 71, "speedDefense": 40, "speed": 77 }, "evolutions": [ "salandit", "salazzle" ] } ], "link": "https://pokemondb.net/pokedex/salandit" }, { "num": 758, "name": "Salazzle", "variations": [ { "name": "Salazzle", "description": "Salazzle is a Poison/Fire type Pokémon introduced in Generation 7. It is known as the Toxic Lizard Pokémon.", "image": "images/salazzle.jpg", "types": [ "Poison", "Fire" ], "specie": "Toxic Lizard Pokémon", "height": 1.2, "weight": 22.2, "abilities": [ "Corrosion", "Oblivious" ], "stats": { "total": 480, "hp": 68, "attack": 64, "defense": 60, "speedAttack": 111, "speedDefense": 60, "speed": 117 }, "evolutions": [ "salandit", "salazzle" ] } ], "link": "https://pokemondb.net/pokedex/salazzle" }, { "num": 759, "name": "Stufful", "variations": [ { "name": "Stufful", "description": "Stufful is a Normal/Fighting type Pokémon introduced in Generation 7. It is known as the Flailing Pokémon.\nStufful's cute appearance and movements - plus the fluffy feel of its fur - all combine to make it super popular. Stufful may have a small body, but its strength is extraordinary. Receiving one of its powerful hits without being prepared for it can bring down even well-trained Pokémon.", "image": "images/stufful.jpg", "types": [ "Normal", "Fighting" ], "specie": "Flailing Pokémon", "height": 0.5, "weight": 6.8, "abilities": [ "Fluffy", "Klutz", "Cute Charm" ], "stats": { "total": 340, "hp": 70, "attack": 75, "defense": 50, "speedAttack": 45, "speedDefense": 50, "speed": 50 }, "evolutions": [ "stufful", "bewear" ] } ], "link": "https://pokemondb.net/pokedex/stufful" }, { "num": 760, "name": "Bewear", "variations": [ { "name": "Bewear", "description": "Bewear is a Normal/Fighting type Pokémon introduced in Generation 7. It is known as the Strong Arm Pokémon.\nWhen Bewear is acting in a friendly fashion, just swinging its arms around, you must never dare to approach it carelessly. It is acknowledged to be a dangerous Pokémon, even within the Alola region. You may see warning signs posted near places it resides.\nWhen Bewear grows fond of its Trainer, it may show that feeling in a fond embrace—but the force of that hug is tremendous! Trainers must teach these Pokémon how to restrain their strength when showing affection.", "image": "images/bewear.jpg", "types": [ "Normal", "Fighting" ], "specie": "Strong Arm Pokémon", "height": 2.1, "weight": 135, "abilities": [ "Fluffy", "Klutz", "Unnerve" ], "stats": { "total": 500, "hp": 120, "attack": 125, "defense": 80, "speedAttack": 55, "speedDefense": 60, "speed": 60 }, "evolutions": [ "stufful", "bewear" ] } ], "link": "https://pokemondb.net/pokedex/bewear" }, { "num": 761, "name": "Bounsweet", "variations": [ { "name": "Bounsweet", "description": "Bounsweet is a Grass type Pokémon introduced in Generation 7. It is known as the Fruit Pokémon.\nBecause it exudes a delicious smell from its entire body, Bounsweet is popular with Pokémon and people of the Alola region. Bounsweet's scent has a calming effect on humans, so many people let them live inside their homes as a sort of air freshener. Unfortunately, it’s sometimes swallowed whole by Pokémon drawn to its aroma.\nWhen running away from other Pokémon, Bounsweet flees danger by skipping along the ground. Since its bouncy movements don’t convey to others that it’s actually in desperate flight, no one ever comes to its aid.", "image": "images/bounsweet.jpg", "types": [ "Grass" ], "specie": "Fruit Pokémon", "height": 0.3, "weight": 3.2, "abilities": [ "Leaf Guard", "Oblivious", "Sweet Veil" ], "stats": { "total": 210, "hp": 42, "attack": 30, "defense": 38, "speedAttack": 30, "speedDefense": 38, "speed": 32 }, "evolutions": [ "bounsweet", "steenee", "tsareena" ] } ], "link": "https://pokemondb.net/pokedex/bounsweet" }, { "num": 762, "name": "Steenee", "variations": [ { "name": "Steenee", "description": "Steenee is a Grass type Pokémon introduced in Generation 7. It is known as the Fruit Pokémon.\nUpon evolving, Steenee's fragrance becomes even more delectable, but it also gains a tomboy-like personality. Living together with one is quite the ordeal. As it moves around, it spins its calyx, striking nearby objects, but Steenee couldn’t care less.", "image": "images/steenee.jpg", "types": [ "Grass" ], "specie": "Fruit Pokémon", "height": 0.7, "weight": 8.2, "abilities": [ "Leaf Guard", "Oblivious", "Sweet Veil" ], "stats": { "total": 290, "hp": 52, "attack": 40, "defense": 48, "speedAttack": 40, "speedDefense": 48, "speed": 62 }, "evolutions": [ "bounsweet", "steenee", "tsareena" ] } ], "link": "https://pokemondb.net/pokedex/steenee" }, { "num": 763, "name": "Tsareena", "variations": [ { "name": "Tsareena", "description": "Tsareena is a Grass type Pokémon introduced in Generation 7. It is known as the Fruit Pokémon.\nTsareena has the nature of high-class nobility. Any Pokémon or human that approaches it with evil in mind will be punished forthwith. It even turns its fearsome glare upon its own Trainer if the two of them are not fully in sync, or if its Trainer orders it to use a move that will be ineffective. Only the strongest of Steenee are able to evolve. When this happens, the Steenee evolves with the blessing of other Steenee. It then uses its strength to protect the Bounsweet.", "image": "images/tsareena.jpg", "types": [ "Grass" ], "specie": "Fruit Pokémon", "height": 1.2, "weight": 21.4, "abilities": [ "Leaf Guard", "Queenly Majesty", "Sweet Veil" ], "stats": { "total": 510, "hp": 72, "attack": 120, "defense": 98, "speedAttack": 50, "speedDefense": 98, "speed": 72 }, "evolutions": [ "bounsweet", "steenee", "tsareena" ] } ], "link": "https://pokemondb.net/pokedex/tsareena" }, { "num": 764, "name": "Comfey", "variations": [ { "name": "Comfey", "description": "Comfey is a Fairy type Pokémon introduced in Generation 7. It is known as the Posy Picker Pokémon.\nComfey picks flowers and always carries them around. It makes a ring of blossoms and spreads oil from its body on it, which changes the flowers so they emit a soothing fragrance. It has a habit of giving these flower rings to those it’s fond of. The aroma can soothe both itself and its allies. Comfey also helps with the treatment of people and Pokémon at Pokémon Centers and hospitals, thanks to its aroma.\nWhen attacked by other Pokémon, it throws its flowers at them to create an opening, and then it either flees or strikes back.", "image": "images/comfey.jpg", "types": [ "Fairy" ], "specie": "Posy Picker Pokémon", "height": 0.1, "weight": 0.3, "abilities": [ "Flower Veil", "Triage", "Natural Cure" ], "stats": { "total": 485, "hp": 51, "attack": 52, "defense": 90, "speedAttack": 82, "speedDefense": 110, "speed": 100 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/comfey" }, { "num": 765, "name": "Oranguru", "variations": [ { "name": "Oranguru", "description": "Oranguru is a Normal/Psychic type Pokémon introduced in Generation 7. It is known as the Sage Pokémon.\nOranguru live solitary lives deep in the forests and do not usually take much action. Instead, they position themselves high up in the trees to meditate. Long ago, people thought that Oranguru were humans who dwelled in the forest depths, so they called them the people of the forests. Oranguru is kind to the other Pokémon living in the forest, providing medicine for injured Pokémon and food for the hungry.\nThe fan-like objects held by Oranguru are handmade by the Oranguru themselves. These fans appear to be made of layers of leaves bound together with Oranguru's own fur.", "image": "images/oranguru.jpg", "types": [ "Normal", "Psychic" ], "specie": "Sage Pokémon", "height": 1.5, "weight": 76, "abilities": [ "Inner Focus", "Telepathy", "Symbiosis" ], "stats": { "total": 490, "hp": 90, "attack": 60, "defense": 80, "speedAttack": 90, "speedDefense": 110, "speed": 60 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/oranguru" }, { "num": 766, "name": "Passimian", "variations": [ { "name": "Passimian", "description": "Passimian is a Fighting type Pokémon introduced in Generation 7. It is known as the Teamwork Pokémon.\nPassimian live in troops of 20 to 30 individuals, all following a leader. This leader will take 10 of the individuals in the best condition to search for food. The troop's teamwork is strong, and the boss of each troop decides what mark members will wear on their arms to distinguish the troops.\nThe boss puts the troop members through training to improve their coordination with one another and their skill in handling Berries.", "image": "images/passimian.jpg", "types": [ "Fighting" ], "specie": "Teamwork Pokémon", "height": 2, "weight": 82.8, "abilities": [ "Receiver", "Defiant" ], "stats": { "total": 490, "hp": 100, "attack": 120, "defense": 90, "speedAttack": 40, "speedDefense": 60, "speed": 80 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/passimian" }, { "num": 767, "name": "Wimpod", "variations": [ { "name": "Wimpod", "description": "Wimpod is a Bug/Water type Pokémon introduced in Generation 7. It is known as the Turn Tail Pokémon.\nWimpod have a cowardly nature and are wary of noises and sudden movements. If you approach them in a group, they’ll immediately run off. When Wimpod feel threatened, they spit out a poisonous liquid. The stench of this toxic fluid signals others that danger is near. Despite their extreme cowardice, their curiosity leads Wimpod to approach people or Pokémon that are standing still.\nWimpod eat and store anything that they find fallen on the ground. They also scavenge any garbage that’s been dropped in the sea, so they’re highly valued as cleaners. They sometimes carry pearls or other valuable items, so humans or Pokémon like Murkrow may target them.", "image": "images/wimpod.jpg", "types": [ "Bug", "Water" ], "specie": "Turn Tail Pokémon", "height": 0.5, "weight": 12, "abilities": [ "Wimp Out" ], "stats": { "total": 230, "hp": 25, "attack": 35, "defense": 40, "speedAttack": 20, "speedDefense": 30, "speed": 80 }, "evolutions": [ "wimpod", "golisopod" ] } ], "link": "https://pokemondb.net/pokedex/wimpod" }, { "num": 768, "name": "Golisopod", "variations": [ { "name": "Golisopod", "description": "Golisopod is a Bug/Water type Pokémon introduced in Generation 7. It is known as the Hard Scale Pokémon.", "image": "images/golisopod.jpg", "types": [ "Bug", "Water" ], "specie": "Hard Scale Pokémon", "height": 2, "weight": 108, "abilities": [ "Emergency Exit" ], "stats": { "total": 530, "hp": 75, "attack": 125, "defense": 140, "speedAttack": 60, "speedDefense": 90, "speed": 40 }, "evolutions": [ "wimpod", "golisopod" ] } ], "link": "https://pokemondb.net/pokedex/golisopod" }, { "num": 769, "name": "Sandygast", "variations": [ { "name": "Sandygast", "description": "Sandygast is a Ghost/Ground type Pokémon introduced in Generation 7. It is known as the Sand Heap Pokémon.\nA Sandygast emerges when the grudges of Pokémon and other creatures soak into the sand after they fall in battle. A Sandygast uses its power to manipulate children into gathering sand to increase the size of its body. If a Sandygast loses its shovel, it may put up a tree branch, a flag, or another item in its place.\nThe tunnel-like mouth of a Sandygast can suck the vitality from people and Pokémon. Apparently it's a test of courage in the Alola region to put your hand in a Sandygast's mouth.", "image": "images/sandygast.jpg", "types": [ "Ghost", "Ground" ], "specie": "Sand Heap Pokémon", "height": 0.5, "weight": 70, "abilities": [ "Water Compaction", "Sand Veil" ], "stats": { "total": 320, "hp": 55, "attack": 55, "defense": 80, "speedAttack": 70, "speedDefense": 45, "speed": 15 }, "evolutions": [ "sandygast", "palossand" ] } ], "link": "https://pokemondb.net/pokedex/sandygast" }, { "num": 770, "name": "Palossand", "variations": [ { "name": "Palossand", "description": "Palossand is a Ghost/Ground type Pokémon introduced in Generation 7. It is known as the Sand Castle Pokémon.\nPalossand controls human adults, making them build a sand castle that provides camouflage and also raises its defensive abilities. Unlike Sandygast, if Palossand loses some of the sand from its body, it can restore itself on its own. When moving about in search of prey, the shovel on top of Palossand's head revolves. It’s said that the shovel could be serving as some kind of radar.", "image": "images/palossand.jpg", "types": [ "Ghost", "Ground" ], "specie": "Sand Castle Pokémon", "height": 1.3, "weight": 250, "abilities": [ "Water Compaction", "Sand Veil" ], "stats": { "total": 480, "hp": 85, "attack": 75, "defense": 110, "speedAttack": 100, "speedDefense": 75, "speed": 35 }, "evolutions": [ "sandygast", "palossand" ] } ], "link": "https://pokemondb.net/pokedex/palossand" }, { "num": 771, "name": "Pyukumuku", "variations": [ { "name": "Pyukumuku", "description": "Pyukumuku is a Water type Pokémon introduced in Generation 7. It is known as the Sea Cucumber Pokémon.\nDue to their appearance and their lifestyle, Pyukumuku are considered unappealing to tourists. Part-time work chucking Pyukumuku back into the sea is available at tourist beaches. But no matter how far they’re thrown, Pyukumuku will always return to the same spot.\nPyukumuku hate to have their spikes and mouths touched, and if you step on one, it will hurl out its fist-like inner organs to strike at you.", "image": "images/pyukumuku.jpg", "types": [ "Water" ], "specie": "Sea Cucumber Pokémon", "height": 0.3, "weight": 1.2, "abilities": [ "Innards Out", "Unaware" ], "stats": { "total": 410, "hp": 55, "attack": 60, "defense": 130, "speedAttack": 30, "speedDefense": 130, "speed": 5 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/pyukumuku" }, { "num": 772, "name": "Type: Null", "variations": [ { "name": "Type: Null", "description": "Type: Null is a Normal type Pokémon introduced in Generation 7. It is known as the Synthetic Pokémon.\nThe shapes of its front and hind legs are different, as Type: Null was constructed to synthesize the strengths of various Pokémon, enabling it to adapt to any situation.\nThe mask fitted to Type: Null's head is a piece of equipment designed to control its latent powers. It's extremely heavy, so it also serves to hinder Type: Null's agility.", "image": "images/type-null.jpg", "types": [ "Normal" ], "specie": "Synthetic Pokémon", "height": 1.9, "weight": 120.5, "abilities": [ "Battle Armor" ], "stats": { "total": 534, "hp": 95, "attack": 95, "defense": 95, "speedAttack": 95, "speedDefense": 95, "speed": 59 }, "evolutions": [ "type: null", "silvally" ] } ], "link": "https://pokemondb.net/pokedex/type-null" }, { "num": 773, "name": "Silvally", "variations": [ { "name": "Silvally", "description": "Silvally is a Normal type Pokémon introduced in Generation 7. It is known as the Synthetic Pokémon.\nWhen Type: Null gains a partner it can trust, it deliberately destroys the restraining device it wears. Once released from that heavy mask, the Pokémon’s speed increases substantially.\nSilvally's ability changes its type based on the item being held.", "image": "images/silvally.jpg", "types": [ "Normal" ], "specie": "Synthetic Pokémon", "height": 2.3, "weight": 100.5, "abilities": [ "RKS System" ], "stats": { "total": 570, "hp": 95, "attack": 95, "defense": 95, "speedAttack": 95, "speedDefense": 95, "speed": 95 }, "evolutions": [ "type: null", "silvally" ] } ], "link": "https://pokemondb.net/pokedex/silvally" }, { "num": 774, "name": "Minior", "variations": [ { "name": "Meteor Form", "description": "Minior is a Rock/Flying type Pokémon introduced in Generation 7. It is known as the Meteor Pokémon.\nMinior are formed in the stratosphere and live by absorbing the detritus around them. When they’ve consumed a large quantity of particles, their bodies become heavy, and they fall toward the planet’s surface. Minior has a hard and heavy outer shell with a core inside it.\nWhen its shell breaks, the core in its center is revealed, which can be different colors.", "image": "images/minior-meteor.jpg", "types": [ "Rock", "Flying" ], "specie": "Meteor Pokémon", "height": 0.3, "weight": 40, "abilities": [ "Shields Down" ], "stats": { "total": 440, "hp": 60, "attack": 60, "defense": 100, "speedAttack": 60, "speedDefense": 100, "speed": 60 }, "evolutions": [] }, { "name": "Core Form", "description": "Minior is a Rock/Flying type Pokémon introduced in Generation 7. It is known as the Meteor Pokémon.\nMinior are formed in the stratosphere and live by absorbing the detritus around them. When they’ve consumed a large quantity of particles, their bodies become heavy, and they fall toward the planet’s surface. Minior has a hard and heavy outer shell with a core inside it.\nWhen its shell breaks, the core in its center is revealed, which can be different colors.", "image": "images/minior-core.jpg", "types": [ "Rock", "Flying" ], "specie": "Meteor Pokémon", "height": 0.3, "weight": 0.3, "abilities": [ "Shields Down" ], "stats": { "total": 500, "hp": 60, "attack": 100, "defense": 60, "speedAttack": 100, "speedDefense": 60, "speed": 120 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/minior" }, { "num": 775, "name": "Komala", "variations": [ { "name": "Komala", "description": "Komala is a Normal type Pokémon introduced in Generation 7. It is known as the Drowsing Pokémon.\nNo one has ever seen a Komala awake. It eats, travels, and even battles while sound asleep! Its saliva can be used as medicine for the sick or sleepless, according to ancient people. They say if you take a small amount of the saliva remaining after it eats leaves, water the saliva down, and drink it, you’ll be able to sleep well. \nKomala clings to a log pillow that its parents have given to it. Once it has grasped this log, it almost never releases it. If it does lose hold of its log, the Pokémon will be unable to sleep well and will thrash about wildly.", "image": "images/komala.jpg", "types": [ "Normal" ], "specie": "Drowsing Pokémon", "height": 0.4, "weight": 19.9, "abilities": [ "Comatose" ], "stats": { "total": 480, "hp": 65, "attack": 115, "defense": 65, "speedAttack": 75, "speedDefense": 95, "speed": 65 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/komala" }, { "num": 776, "name": "Turtonator", "variations": [ { "name": "Turtonator", "description": "Turtonator is a Fire/Dragon type Pokémon introduced in Generation 7. It is known as the Blast Turtle Pokémon.\nBecause Turtonator lives on volcanoes, feeding on sulfur and other materials found near volcanic craters, its shell has a layer of explosive material—mostly sulfur. When something strikes this Pokémon, sparks fly from the horns on its shell, igniting an explosion! \nIn areas around volcanic craters, this Pokémon camouflages itself as a rock and waits for prey. At the moment when its prey steps onto the back of its shell, Turtonator strikes its shell with its own tail, triggering an explosion!", "image": "images/turtonator.jpg", "types": [ "Fire", "Dragon" ], "specie": "Blast Turtle Pokémon", "height": 2, "weight": 212, "abilities": [ "Shell Armor" ], "stats": { "total": 485, "hp": 60, "attack": 78, "defense": 135, "speedAttack": 91, "speedDefense": 85, "speed": 36 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/turtonator" }, { "num": 777, "name": "Togedemaru", "variations": [ { "name": "Togedemaru", "description": "Togedemaru is an Electric/Steel type Pokémon introduced in Generation 7. It is known as the Roly-Poly Pokémon.\nTogedemaru gathers electricity and stores it. The long needle that grows from the back of its head works as a lightning rod to attract electricity.\nCovering its body is a pattern of fur with strands like needles. On days when lightning strikes, you can sometimes see Togedemaru gather and bristle up their needles, waiting to be struck by lightning.", "image": "images/togedemaru.jpg", "types": [ "Electric", "Steel" ], "specie": "Roly-Poly Pokémon", "height": 0.3, "weight": 3.3, "abilities": [ "Iron Barbs", "Lightning Rod", "Sturdy" ], "stats": { "total": 435, "hp": 65, "attack": 98, "defense": 63, "speedAttack": 40, "speedDefense": 73, "speed": 96 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/togedemaru" }, { "num": 778, "name": "Mimikyu", "variations": [ { "name": "Mimikyu", "description": "Mimikyu is a Ghost/Fairy type Pokémon introduced in Generation 7. It is known as the Disguise Pokémon.\nMimikyu lives its life completely covered by its cloth and is always hidden. People believe that anybody who sees its true form beneath the cloth will be stricken with a mysterious illness. People in the Alola region are convinced that you must never try to peek beneath its covering. Mimikyu's health fails when it’s bathed in the rays of the sun, so it prefers to stick to dark places. It’s rumored that the reason it covers itself with a cloth is to avoid sunlight.", "image": "images/mimikyu.jpg", "types": [ "Ghost", "Fairy" ], "specie": "Disguise Pokémon", "height": 0.2, "weight": 0.7, "abilities": [ "Disguise" ], "stats": { "total": 476, "hp": 55, "attack": 90, "defense": 80, "speedAttack": 50, "speedDefense": 105, "speed": 96 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/mimikyu" }, { "num": 779, "name": "Bruxish", "variations": [ { "name": "Bruxish", "description": "Bruxish is a Water/Psychic type Pokémon introduced in Generation 7. It is known as the Gnash Teeth Pokémon.\nBruxish emits a strong psychic power from the protuberance on its head. When its opponents are bathed in this power, they're stricken with terrible headaches and fall unconscious. As it emits its psychic power, it grinds its teeth loudly. When nearby Pokémon hear the sound of Bruxish's teeth gnashing, they sense danger and flee immediately.", "image": "images/bruxish.jpg", "types": [ "Water", "Psychic" ], "specie": "Gnash Teeth Pokémon", "height": 0.9, "weight": 19, "abilities": [ "Dazzling", "Strong Jaw", "Wonder Skin" ], "stats": { "total": 475, "hp": 68, "attack": 105, "defense": 70, "speedAttack": 70, "speedDefense": 70, "speed": 92 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/bruxish" }, { "num": 780, "name": "Drampa", "variations": [ { "name": "Drampa", "description": "Drampa is a Normal/Dragon type Pokémon introduced in Generation 7. It is known as the Placid Pokémon.\nDrampa are dragons that live alone in the mountains 10,000 feet above sea level. Since they can’t obtain the Berries they feed on at that range, they descend to the base of the mountains at dawn every day. Drampa love communicating with people and Pokémon.\nWhile Drampa is usually a very gentle Pokémon, it can fly into a rage if a child it cares for is hurt in some way.", "image": "images/drampa.jpg", "types": [ "Normal", "Dragon" ], "specie": "Placid Pokémon", "height": 3, "weight": 185, "abilities": [ "Berserk", "Sap Sipper", "Cloud Nine" ], "stats": { "total": 485, "hp": 78, "attack": 60, "defense": 85, "speedAttack": 135, "speedDefense": 91, "speed": 36 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/drampa" }, { "num": 781, "name": "Dhelmise", "variations": [ { "name": "Dhelmise", "description": "Dhelmise is a Ghost/Grass type Pokémon introduced in Generation 7. It is known as the Sea Creeper Pokémon.", "image": "images/dhelmise.jpg", "types": [ "Ghost", "Grass" ], "specie": "Sea Creeper Pokémon", "height": 3.9, "weight": 210, "abilities": [ "Steelworker" ], "stats": { "total": 517, "hp": 70, "attack": 131, "defense": 100, "speedAttack": 86, "speedDefense": 90, "speed": 40 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/dhelmise" }, { "num": 782, "name": "Jangmo-o", "variations": [ { "name": "Jangmo-o", "description": "Jangmo-o is a Dragon type Pokémon introduced in Generation 7. It is known as the Scaly Pokémon.\nJangmo-o has the pride of a warrior, although it remains humble about its capabilities. In its pursuit to become stronger, it never neglects its training.\nBecause Jangmo-o uses the scales on its head for both offense and defense, it never turns its back to its enemies. Many Trainers see this behavior and take it as proof that Jangmo-o is a valiant Pokémon.", "image": "images/jangmo-o.jpg", "types": [ "Dragon" ], "specie": "Scaly Pokémon", "height": 0.6, "weight": 29.7, "abilities": [ "Bulletproof", "Soundproof", "Overcoat" ], "stats": { "total": 300, "hp": 45, "attack": 55, "defense": 65, "speedAttack": 45, "speedDefense": 45, "speed": 45 }, "evolutions": [ "jangmo-o", "hakamo-o", "kommo-o" ] } ], "link": "https://pokemondb.net/pokedex/jangmo-o" }, { "num": 783, "name": "Hakamo-o", "variations": [ { "name": "Hakamo-o", "description": "Hakamo-o is a Dragon/Fighting type Pokémon introduced in Generation 7. It is known as the Scaly Pokémon.\nHakamo-o dances before battle to show its strength, clanging its scales together to make them ring out. When this dance reaches its climax, Hakamo-o bellows a fierce war cry to challenge its opponent.", "image": "images/hakamo-o.jpg", "types": [ "Dragon", "Fighting" ], "specie": "Scaly Pokémon", "height": 1.2, "weight": 47, "abilities": [ "Bulletproof", "Soundproof", "Overcoat" ], "stats": { "total": 420, "hp": 55, "attack": 75, "defense": 90, "speedAttack": 65, "speedDefense": 70, "speed": 65 }, "evolutions": [ "jangmo-o", "hakamo-o", "kommo-o" ] } ], "link": "https://pokemondb.net/pokedex/hakamo-o" }, { "num": 784, "name": "Kommo-o", "variations": [ { "name": "Kommo-o", "description": "Kommo-o is a Dragon/Fighting type Pokémon introduced in Generation 7. It is known as the Scaly Pokémon.\nThere is a legend that says Kommo-o is covered in glittering scales in order to drive away a great darkness covering the world. The reason these Pokémon seek out battle is to gain the power needed to defeat this darkness. When it detects someone approaching, Kommo-o rings the scales on its tail to announce its presence. It has no desire to battle against weak Pokémon.", "image": "images/kommo-o.jpg", "types": [ "Dragon", "Fighting" ], "specie": "Scaly Pokémon", "height": 1.6, "weight": 78.2, "abilities": [ "Bulletproof", "Soundproof", "Overcoat" ], "stats": { "total": 600, "hp": 75, "attack": 110, "defense": 125, "speedAttack": 100, "speedDefense": 105, "speed": 85 }, "evolutions": [ "jangmo-o", "hakamo-o", "kommo-o" ] } ], "link": "https://pokemondb.net/pokedex/kommo-o" }, { "num": 785, "name": "Tapu Koko", "variations": [ { "name": "Tapu Koko", "description": "Tapu Koko is an Electric/Fairy type Pokémon introduced in Generation 7. It is known as the Land Spirit Pokémon.\nTapu Koko is a special Pokémon that protects the area where it lives. It's called the guardian deity of Melemele Island, one of the islands of the Alola region. Although it's known as a guardian deity, it's a surprisingly fickle Pokémon, and will not necessarily come to your aid if you need help.\nDespite that, Tapu Koko has a strong sense of curiosity. If it becomes interested in a person or in other Pokémon, it may come to play or battle with them.", "image": "images/tapu-koko.jpg", "types": [ "Electric", "Fairy" ], "specie": "Land Spirit Pokémon", "height": 1.8, "weight": 20.5, "abilities": [ "Electric Surge", "Telepathy" ], "stats": { "total": 570, "hp": 70, "attack": 115, "defense": 85, "speedAttack": 95, "speedDefense": 75, "speed": 130 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/tapu-koko" }, { "num": 786, "name": "Tapu Lele", "variations": [ { "name": "Tapu Lele", "description": "Tapu Lele is a Psychic/Fairy type Pokémon introduced in Generation 7. It is known as the Land Spirit Pokémon.\nTapu Lele scatters glowing scales that physically affect others - providing stimulation to their bodies and healing their illnesses or injuries. But these scales can be dangerous as well, because a body can’t withstand the changes brought about by contact with too many scales at the same time. It will scatter its scales over humans and Pokémon for its own enjoyment; while it is innocent in one sense, there is also cruelty in the way it casually brings others to ruin.", "image": "images/tapu-lele.jpg", "types": [ "Psychic", "Fairy" ], "specie": "Land Spirit Pokémon", "height": 1.2, "weight": 18.6, "abilities": [ "Psychic Surge", "Telepathy" ], "stats": { "total": 570, "hp": 70, "attack": 85, "defense": 75, "speedAttack": 130, "speedDefense": 115, "speed": 95 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/tapu-lele" }, { "num": 787, "name": "Tapu Bulu", "variations": [ { "name": "Tapu Bulu", "description": "Tapu Bulu is a Grass/Fairy type Pokémon introduced in Generation 7. It is known as the Land Spirit Pokémon.\nTapu Bulu has the power to manipulate vegetation and cause it to grow. It can use this power on its own horns - which are made of wood - changing their shape or making them larger. This can come in handy in battle!\nThis stolid Pokémon is not very active. People’s opinions differ on whether it’s as docile as it seems, or if the reason it doesn’t move much can be chalked up to simple laziness.", "image": "images/tapu-bulu.jpg", "types": [ "Grass", "Fairy" ], "specie": "Land Spirit Pokémon", "height": 1.9, "weight": 45.5, "abilities": [ "Grassy Surge", "Telepathy" ], "stats": { "total": 570, "hp": 70, "attack": 130, "defense": 115, "speedAttack": 85, "speedDefense": 95, "speed": 75 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/tapu-bulu" }, { "num": 788, "name": "Tapu Fini", "variations": [ { "name": "Tapu Fini", "description": "Tapu Fini is a Water/Fairy type Pokémon introduced in Generation 7. It is known as the Land Spirit Pokémon.\nTapu Fini is able to create a special water that purifies both mind and body. But it requires that supplicants wishing to obtain the purifying water demonstrate the strength to withstand the tapu's fog.\nSince it hates to risk harm to itself during battle, Tapu Fini prefers to create a thick fog that puts opponents in a trance and leads them to destroy themselves.", "image": "images/tapu-fini.jpg", "types": [ "Water", "Fairy" ], "specie": "Land Spirit Pokémon", "height": 1.3, "weight": 21.2, "abilities": [ "Misty Surge", "Telepathy" ], "stats": { "total": 570, "hp": 70, "attack": 75, "defense": 115, "speedAttack": 95, "speedDefense": 130, "speed": 85 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/tapu-fini" }, { "num": 789, "name": "Cosmog", "variations": [ { "name": "Cosmog", "description": "Cosmog is a Psychic type Pokémon introduced in Generation 7. It is known as the Nebula Pokémon.\nThis extremely rare Pokémon is known to only a select few in Alola. At one time, it was known only by the kings of Alola and their heirs, and it was called the child of the stars.\nCosmog is very curious and shows no fear of people or Pokémon. If you treat it with any consideration at all, it will take an immediate liking to you. This personality trait often leads it into danger.", "image": "images/cosmog.jpg", "types": [ "Psychic" ], "specie": "Nebula Pokémon", "height": 0.2, "weight": 0.1, "abilities": [ "Unaware" ], "stats": { "total": 200, "hp": 43, "attack": 29, "defense": 31, "speedAttack": 29, "speedDefense": 31, "speed": 37 }, "evolutions": [ "cosmog", "cosmoem", "solgaleo", "lunala" ] } ], "link": "https://pokemondb.net/pokedex/cosmog" }, { "num": 790, "name": "Cosmoem", "variations": [ { "name": "Cosmoem", "description": "Cosmoem is a Psychic type Pokémon introduced in Generation 7. It is known as the Protostar Pokémon.", "image": "images/cosmoem.jpg", "types": [ "Psychic" ], "specie": "Protostar Pokémon", "height": 0.1, "weight": 999.9, "abilities": [ "Sturdy" ], "stats": { "total": 400, "hp": 43, "attack": 29, "defense": 131, "speedAttack": 29, "speedDefense": 131, "speed": 37 }, "evolutions": [ "cosmog", "cosmoem", "solgaleo", "lunala" ] } ], "link": "https://pokemondb.net/pokedex/cosmoem" }, { "num": 791, "name": "Solgaleo", "variations": [ { "name": "Solgaleo", "description": "Solgaleo is a Psychic/Steel type Pokémon introduced in Generation 7. It is known as the Sunne Pokémon.\nSince ancient times, Solgaleo has been honored as an emissary of the sun. It is referred to with reverence as the beast that devours the sun. Solgaleo's body holds a vast amount of energy, and it shines with light when it's active. It has a flowing mane with a remarkable resemblance to the sun.\nIt has a powerful signature move, Sunsteel Strike. When it releases its mighty power it takes on a new appearance known as the Radiant Sun phase.", "image": "images/solgaleo.jpg", "types": [ "Psychic", "Steel" ], "specie": "Sunne Pokémon", "height": 3.4, "weight": 230, "abilities": [ "Full Metal Body" ], "stats": { "total": 680, "hp": 137, "attack": 137, "defense": 107, "speedAttack": 113, "speedDefense": 89, "speed": 97 }, "evolutions": [ "cosmog", "cosmoem", "solgaleo", "lunala" ] } ], "link": "https://pokemondb.net/pokedex/solgaleo" }, { "num": 792, "name": "Lunala", "variations": [ { "name": "Lunala", "description": "Lunala is a Psychic/Ghost type Pokémon introduced in Generation 7. It is known as the Moone Pokémon.\nSince ancient times, Lunala has been honored as an emissary of the moon. It is referred to with reverence as the beast that calls the moon. Lunala is constantly absorbing light and converting it into energy. With its wings spread to absorb the surrounding light and glittering like a crescent moon, it resembles a beautiful night sky.\nIt has a powerful signature move, Moongeist Beam. When it releases its mighty power it takes on a new appearance known as the Full Moon phase.", "image": "images/lunala.jpg", "types": [ "Psychic", "Ghost" ], "specie": "Moone Pokémon", "height": 4, "weight": 120, "abilities": [ "Shadow Shield" ], "stats": { "total": 680, "hp": 137, "attack": 113, "defense": 89, "speedAttack": 137, "speedDefense": 107, "speed": 97 }, "evolutions": [ "cosmog", "cosmoem", "solgaleo", "lunala" ] } ], "link": "https://pokemondb.net/pokedex/lunala" }, { "num": 793, "name": "Nihilego", "variations": [ { "name": "Nihilego", "description": "Nihilego is a Rock/Poison type Pokémon introduced in Generation 7. It is known as the Parasite Pokémon.\nNihilego is an Ultra Beast, also known by the code name UB-01 Symbiont.", "image": "images/nihilego.jpg", "types": [ "Rock", "Poison" ], "specie": "Parasite Pokémon", "height": 1.2, "weight": 55.5, "abilities": [ "Beast Boost" ], "stats": { "total": 570, "hp": 109, "attack": 53, "defense": 47, "speedAttack": 127, "speedDefense": 131, "speed": 103 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/nihilego" }, { "num": 794, "name": "Buzzwole", "variations": [ { "name": "Buzzwole", "description": "Buzzwole is a Bug/Fighting type Pokémon introduced in Generation 7. It is known as the Swollen Pokémon.\nBuzzwole is an Ultra Beast, also known by the code name UB-02 Absorption.", "image": "images/buzzwole.jpg", "types": [ "Bug", "Fighting" ], "specie": "Swollen Pokémon", "height": 2.4, "weight": 333.6, "abilities": [ "Beast Boost" ], "stats": { "total": 570, "hp": 107, "attack": 139, "defense": 139, "speedAttack": 53, "speedDefense": 53, "speed": 79 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/buzzwole" }, { "num": 795, "name": "Pheromosa", "variations": [ { "name": "Pheromosa", "description": "Pheromosa is a Bug/Fighting type Pokémon introduced in Generation 7. It is known as the Lissome Pokémon.\nPheromosa is an Ultra Beast, also known by the code name UB-02 Beauty.", "image": "images/pheromosa.jpg", "types": [ "Bug", "Fighting" ], "specie": "Lissome Pokémon", "height": 1.8, "weight": 25, "abilities": [ "Beast Boost" ], "stats": { "total": 570, "hp": 71, "attack": 137, "defense": 37, "speedAttack": 137, "speedDefense": 37, "speed": 151 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/pheromosa" }, { "num": 796, "name": "Xurkitree", "variations": [ { "name": "Xurkitree", "description": "Xurkitree is an Electric type Pokémon introduced in Generation 7. It is known as the Glowing Pokémon.\nXurkitree is an Ultra Beast, also known by the code name UB-03 Lighting.", "image": "images/xurkitree.jpg", "types": [ "Electric" ], "specie": "Glowing Pokémon", "height": 3.8, "weight": 100, "abilities": [ "Beast Boost" ], "stats": { "total": 570, "hp": 83, "attack": 89, "defense": 71, "speedAttack": 173, "speedDefense": 71, "speed": 83 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/xurkitree" }, { "num": 797, "name": "Celesteela", "variations": [ { "name": "Celesteela", "description": "Celesteela is a Steel/Flying type Pokémon introduced in Generation 7. It is known as the Launch Pokémon.\nCelesteela is an Ultra Beast, also known by the code name UB-04 Blaster.", "image": "images/celesteela.jpg", "types": [ "Steel", "Flying" ], "specie": "Launch Pokémon", "height": 9.2, "weight": 999.9, "abilities": [ "Beast Boost" ], "stats": { "total": 570, "hp": 97, "attack": 101, "defense": 103, "speedAttack": 107, "speedDefense": 101, "speed": 61 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/celesteela" }, { "num": 798, "name": "Kartana", "variations": [ { "name": "Kartana", "description": "Kartana is a Grass/Steel type Pokémon introduced in Generation 7. It is known as the Drawn Sword Pokémon.\nKartana is an Ultra Beast, also known by the code name UB-04 Blade.", "image": "images/kartana.jpg", "types": [ "Grass", "Steel" ], "specie": "Drawn Sword Pokémon", "height": 0.3, "weight": 0.1, "abilities": [ "Beast Boost" ], "stats": { "total": 570, "hp": 59, "attack": 181, "defense": 131, "speedAttack": 59, "speedDefense": 31, "speed": 109 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/kartana" }, { "num": 799, "name": "Guzzlord", "variations": [ { "name": "Guzzlord", "description": "Guzzlord is a Dark/Dragon type Pokémon introduced in Generation 7. It is known as the Junkivore Pokémon.\nGuzzlord is an Ultra Beast, also known by the code name UB-05 Glutton.", "image": "images/guzzlord.jpg", "types": [ "Dark", "Dragon" ], "specie": "Junkivore Pokémon", "height": 5.5, "weight": 888, "abilities": [ "Beast Boost" ], "stats": { "total": 570, "hp": 223, "attack": 101, "defense": 53, "speedAttack": 97, "speedDefense": 53, "speed": 43 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/guzzlord" }, { "num": 800, "name": "Necrozma", "variations": [ { "name": "Necrozma", "description": "Necrozma is a Psychic type Pokémon introduced in Generation 7. It is known as the Prism Pokémon.", "image": "images/necrozma.jpg", "types": [ "Psychic" ], "specie": "Prism Pokémon", "height": 2.4, "weight": 230, "abilities": [ "Prism Armor" ], "stats": { "total": 600, "hp": 97, "attack": 107, "defense": 101, "speedAttack": 127, "speedDefense": 89, "speed": 79 }, "evolutions": [] }, { "name": "Dusk Mane Necrozma", "description": "Necrozma is a Psychic type Pokémon introduced in Generation 7. It is known as the Prism Pokémon.", "image": "images/necrozma-dusk-mane.jpg", "types": [ "Psychic", "Steel" ], "specie": "Prism Pokémon", "height": 3.8, "weight": 460, "abilities": [ "Prism Armor" ], "stats": { "total": 680, "hp": 97, "attack": 157, "defense": 127, "speedAttack": 113, "speedDefense": 109, "speed": 77 }, "evolutions": [] }, { "name": "Dawn Wings Necrozma", "description": "Necrozma is a Psychic type Pokémon introduced in Generation 7. It is known as the Prism Pokémon.", "image": "images/necrozma-dawn-wings.jpg", "types": [ "Psychic", "Ghost" ], "specie": "Prism Pokémon", "height": 4.2, "weight": 350, "abilities": [ "Prism Armor" ], "stats": { "total": 680, "hp": 97, "attack": 113, "defense": 109, "speedAttack": 157, "speedDefense": 127, "speed": 77 }, "evolutions": [] }, { "name": "Ultra Necrozma", "description": "Necrozma is a Psychic type Pokémon introduced in Generation 7. It is known as the Prism Pokémon.", "image": "images/necrozma-ultra.jpg", "types": [ "Psychic", "Dragon" ], "specie": "Prism Pokémon", "height": 7.5, "weight": 230, "abilities": [ "Neuroforce" ], "stats": { "total": 754, "hp": 97, "attack": 167, "defense": 97, "speedAttack": 167, "speedDefense": 97, "speed": 129 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/necrozma" }, { "num": 801, "name": "Magearna", "variations": [ { "name": "Magearna", "description": "Magearna is a Steel/Fairy type Pokémon introduced in Generation 7. It is known as the Artificial Pokémon.\nMagearna is a Mythical Pokémon that was created by a scientist of uncommon genius 500 years ago. Magearna has the power to perceive the emotions, thoughts, and feelings of other Pokémon. If a Pokémon is injured, Magearna will feel the other’s pain and suffering and will try as hard as it can to save that Pokémon.\nMagearna's real body is the spherical construction in its chest called the Soul-Heart, created by a scientist who gathered the life energy from Pokémon.\nMagearna is obtainable in Sun/Moon by scanning a special QR code.", "image": "images/magearna.jpg", "types": [ "Steel", "Fairy" ], "specie": "Artificial Pokémon", "height": 1, "weight": 80.5, "abilities": [ "Soul-Heart" ], "stats": { "total": 600, "hp": 80, "attack": 95, "defense": 115, "speedAttack": 130, "speedDefense": 115, "speed": 65 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/magearna" }, { "num": 802, "name": "Marshadow", "variations": [ { "name": "Marshadow", "description": "Marshadow is a Fighting/Ghost type Pokémon introduced in Generation 7. It is known as the Gloomdweller Pokémon.", "image": "images/marshadow.jpg", "types": [ "Fighting", "Ghost" ], "specie": "Gloomdweller Pokémon", "height": 0.7, "weight": 22.2, "abilities": [ "Technician" ], "stats": { "total": 600, "hp": 90, "attack": 125, "defense": 80, "speedAttack": 90, "speedDefense": 90, "speed": 125 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/marshadow" }, { "num": 803, "name": "Poipole", "variations": [ { "name": "Poipole", "description": "Poipole is a Poison type Pokémon introduced in Generation 7. It is known as the Poison Pin Pokémon.\nPoipole is an Ultra Beast introduced in Pokémon Ultra Sun & Ultra Moon, also known by the code name UB Adhesive.\nPoipole displays many emotions, and it’s said to be able to understand human speech if it spends enough time together with them. Their large heads are filled with venom, and they fire this venom from the poisonous needles on top of them.", "image": "images/poipole.jpg", "types": [ "Poison" ], "specie": "Poison Pin Pokémon", "height": 0.6, "weight": 1.8, "abilities": [ "Beast Boost" ], "stats": { "total": 420, "hp": 67, "attack": 73, "defense": 67, "speedAttack": 73, "speedDefense": 67, "speed": 73 }, "evolutions": [ "poipole", "naganadel" ] } ], "link": "https://pokemondb.net/pokedex/poipole" }, { "num": 804, "name": "Naganadel", "variations": [ { "name": "Naganadel", "description": "Naganadel is a Poison/Dragon type Pokémon introduced in Generation 7. It is known as the Poison Pin Pokémon.\nNaganadel is an Ultra Beast introduced in Pokémon Ultra Sun & Ultra Moon.", "image": "images/naganadel.jpg", "types": [ "Poison", "Dragon" ], "specie": "Poison Pin Pokémon", "height": 3.6, "weight": 150, "abilities": [ "Beast Boost" ], "stats": { "total": 540, "hp": 73, "attack": 73, "defense": 73, "speedAttack": 127, "speedDefense": 73, "speed": 121 }, "evolutions": [ "poipole", "naganadel" ] } ], "link": "https://pokemondb.net/pokedex/naganadel" }, { "num": 805, "name": "Stakataka", "variations": [ { "name": "Stakataka", "description": "Stakataka is a Rock/Steel type Pokémon introduced in Generation 7. It is known as the Rampart Pokémon.\nStakataka is an Ultra Beast introduced in Pokémon Ultra Sun & Ultra Moon, also known by the code name UB Assembly.\nWhile Stakataka may appear to be made up of stones stacked atop one another, apparently each \"stone\" is in fact a separate life-form, and this UB is made up of an assemblage of these life-forms.\nWhen confronting another, or when feeling particularly enraged, the eyes on each of these stones begin to glow red.", "image": "images/stakataka.jpg", "types": [ "Rock", "Steel" ], "specie": "Rampart Pokémon", "height": 5.5, "weight": 820, "abilities": [ "Beast Boost" ], "stats": { "total": 570, "hp": 61, "attack": 131, "defense": 211, "speedAttack": 53, "speedDefense": 101, "speed": 13 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/stakataka" }, { "num": 806, "name": "Blacephalon", "variations": [ { "name": "Blacephalon", "description": "Blacephalon is a Fire/Ghost type Pokémon introduced in Generation 7. It is known as the Fireworks Pokémon.\nBlacephalon is an Ultra Beast introduced in Pokémon Ultra Sun & Ultra Moon, also known by the code name UB Burst.\nBlacephalon tricks targets into letting their guard down as it draws near with its funny gait. Its head is made up of collection of curious sparks, and it appears to have the wondrous ability to freely remove its own head and make it explode.", "image": "images/blacephalon.jpg", "types": [ "Fire", "Ghost" ], "specie": "Fireworks Pokémon", "height": 1.8, "weight": 13, "abilities": [ "Beast Boost" ], "stats": { "total": 570, "hp": 53, "attack": 127, "defense": 53, "speedAttack": 151, "speedDefense": 79, "speed": 107 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/blacephalon" }, { "num": 807, "name": "Zeraora", "variations": [ { "name": "Zeraora", "description": "Zeraora is an Electric type Pokémon introduced in Generation 7. It is known as the Thunderclap Pokémon.\nZeraora is mythical Pokémon introduced in Pokémon Ultra Sun & Ultra Moon.\nThis Pokémon creates a powerful magnetic field by emitting strong electric currents from the pads on its hands and feet. Unlike most Electric-type Pokémon, Zeraora doesn’t have an organ within its body that can produce electricity. However, it is able to gather and store electricity from outside sources, then use it as its own electric energy.", "image": "images/zeraora.jpg", "types": [ "Electric" ], "specie": "Thunderclap Pokémon", "height": 1.5, "weight": 44.5, "abilities": [ "Volt Absorb" ], "stats": { "total": 600, "hp": 88, "attack": 112, "defense": 75, "speedAttack": 102, "speedDefense": 80, "speed": 143 }, "evolutions": [] } ], "link": "https://pokemondb.net/pokedex/zeraora" }, { "num": 808, "name": "Meltan", "variations": [ { "name": "Meltan", "description": "Meltan is a Steel type Pokémon introduced in Generation 7. It is known as the Hex Nut Pokémon.\nMost of Meltan's body is made from liquid metal, and its shape is very fluid. It can use its liquid arms and legs to corrode metal and absorb it into its own body. Meltan generates electricity using the metal it absorbs from outside sources. It uses this electricity as an energy source and also as an attack that can be fired from its eye.\nMeltan is a new mythical Pokémon available in Pokémon Let's Go Pikachu & Let's Go Eevee. It is obtained by connecting Let's Go Pikachu or Let's Go Eevee with the smartphone game Pokémon GO. First, send any Pokémon from GO to Let's Go to receive a Mystery Box item in GO. Opening the box causes Meltan to spawn in Pokémon GO. These Meltan can be caught and then sent over to Let's Go Pikachu/Eevee.\nMeltan evolves into Melmetal in Pokémon GO, with 400 Meltan Candies.\nNote: Meltan has an ability assigned in the code for Pokémon Let's Go, even though abilities are not available.", "image": "images/meltan.jpg", "types": [ "Steel" ], "specie": "Hex Nut Pokémon", "height": 0.2, "weight": 8, "abilities": [ "Magnet Pull" ], "stats": { "total": 300, "hp": 46, "attack": 65, "defense": 65, "speedAttack": 55, "speedDefense": 35, "speed": 34 }, "evolutions": [ "meltan", "melmetal" ] } ], "link": "https://pokemondb.net/pokedex/meltan" }, { "num": 809, "name": "Melmetal", "variations": [ { "name": "Melmetal", "description": "Melmetal is a Steel type Pokémon introduced in Generation 7. It is known as the Hex Nut Pokémon.\nMelmetal evolves from Meltan only in Pokémon GO, with 400 Meltan Candies. Candies can be obtained by catching many Meltan, have it travel as a Buddy Pokémon, or transferring some to Pokémon Let's Go.\nMelmetal has an exclusive move, Double Iron Bash.\nNote: Meltan has an ability assigned in the code for Pokémon Let's Go, even though abilities are not available.", "image": "images/melmetal.jpg", "types": [ "Steel" ], "specie": "Hex Nut Pokémon", "height": 2.5, "weight": 800, "abilities": [ "Iron Fist" ], "stats": { "total": 600, "hp": 135, "attack": 143, "defense": 143, "speedAttack": 80, "speedDefense": 65, "speed": 34 }, "evolutions": [ "meltan", "melmetal" ] } ], "link": "https://pokemondb.net/pokedex/melmetal" } ] ================================================ FILE: projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Dockerfile ================================================ #See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base WORKDIR /app EXPOSE 80 EXPOSE 443 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build WORKDIR /src COPY ["Minimal.Api.Pokedex.csproj", "."] RUN dotnet restore "./Minimal.Api.Pokedex.csproj" COPY . . WORKDIR "/src/." RUN dotnet build "Minimal.Api.Pokedex.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "Minimal.Api.Pokedex.csproj" -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "Minimal.Api.Pokedex.dll"] ================================================ FILE: projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Extensions/DependencyInjection.cs ================================================ using Minimal.Api.Pokedex.Services; namespace Minimal.Api.Pokedex.Extensions { public static class DependencyInjection { public static IServiceCollection AddPokedexApi(this IServiceCollection services) { services.AddScoped(); services.AddScoped(); return services; } } } ================================================ FILE: projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Minimal.Api.Pokedex.csproj ================================================ net10.0 enable enable c631830b-e4be-4f6a-bc34-fe87e2fe09c9 Linux . preview true $(NoWarn);1591 ================================================ FILE: projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Models/PokedexPagedResponse.cs ================================================ namespace Minimal.Api.Pokedex.Models { public class PokedexPagedResponse : PokedexResponse { public int Page { get; set; } public int TotalPages { get; set; } public int TotalResults { get; set; } } } ================================================ FILE: projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Models/PokedexResponse.cs ================================================ namespace Minimal.Api.Pokedex.Models { public class PokedexResponse { public PokemonListItemEntity[] Data { get; set; } } } ================================================ FILE: projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Models/PokemonEntity.cs ================================================ namespace Minimal.Api.Pokedex.Models { public class PokemonEntity { public int Num { get; set; } public string Name { get; set; } public Variation[] Variations { get; set; } public string Link { get; set; } } public class Variation { public string Name { get; set; } public string Description { get; set; } public string Image { get; set; } public string[] Types { get; set; } public string Specie { get; set; } public float Height { get; set; } public float Weight { get; set; } public string[] Abilities { get; set; } public Stats Stats { get; set; } public string[] Evolutions { get; set; } } public class Stats { public int Total { get; set; } public int Hp { get; set; } public int Attack { get; set; } public int Defense { get; set; } public int SpeedAttack { get; set; } public int SpeedDefense { get; set; } public int Speed { get; set; } } } ================================================ FILE: projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Models/PokemonListItemEntity.cs ================================================ namespace Minimal.Api.Pokedex.Models { public class PokemonListItemEntity { public int Num { get; set; } public string Name { get; set; } public string Image { get; set; } } } ================================================ FILE: projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Models/RouteConstants.cs ================================================ namespace Minimal.Api.Pokedex.Models { public class RouteConstants { public const string PagedPokemonListing = "/pokedex"; public const string PokemonRead = "/pokedex/{name}"; public const string AllPokemonListing = "/pokedex/all"; public const string PokemonSearch = "/pokedex/search"; } } ================================================ FILE: projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/PokedexApiEndpoint.cs ================================================ using Minimal.Api.Pokedex.Models; using Minimal.Api.Pokedex.Services; namespace Minimal.Api.Pokedex { public static class PokedexApiEndpoint { public static IEndpointRouteBuilder MapPokedexApiRoutes(this IEndpointRouteBuilder builder) { MapPagedPokemonListing(builder); MapPokemonRead(builder); MapAllPokemonListing(builder); MapSearchingPokemon(builder); return builder; } private static void MapSearchingPokemon(IEndpointRouteBuilder builder) { builder.MapGet(RouteConstants.PokemonSearch, async (string query, int? page, int? pageSize, IPokedexService service) => { if (string.IsNullOrWhiteSpace(query)) { return Results.BadRequest(); } return Results.Ok(await service.SearchAsync(query, page ?? 1, pageSize ?? 20)); }) .Produces(StatusCodes.Status200OK) .Produces(StatusCodes.Status400BadRequest); } private static void MapAllPokemonListing(IEndpointRouteBuilder builder) { builder.MapGet(RouteConstants.AllPokemonListing, async (IPokedexService service) => { return await service.GetAllAsync(); }) .Produces(StatusCodes.Status200OK); } private static void MapPokemonRead(IEndpointRouteBuilder builder) { builder.MapGet(RouteConstants.PokemonRead, async (string name, IPokedexService service) => { var pokemon = await service.GetAsync(name); if (pokemon == null) { return Results.NotFound(); } return Results.Ok(pokemon); }) .Produces(StatusCodes.Status200OK) .ProducesProblem(StatusCodes.Status404NotFound); } private static void MapPagedPokemonListing(IEndpointRouteBuilder builder) { builder.MapGet(RouteConstants.PagedPokemonListing, async (int? page, int? pageSize, IPokedexService service) => { return await service.GetAsync(page ?? 1, pageSize ?? 20); }) .Produces(StatusCodes.Status200OK); } } } ================================================ FILE: projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Program.cs ================================================ using Minimal.Api.Pokedex; using Minimal.Api.Pokedex.Extensions; using Scalar.AspNetCore; var builder = WebApplication.CreateBuilder(args); builder.Services.AddOpenApi(); builder.Services.AddPokedexApi(); var app = builder.Build(); app.UseStaticFiles(); app.MapOpenApi(); app.MapScalarApiReference(); app.MapPokedexApiRoutes(); app.Run(); ================================================ FILE: projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Services/IPokedexRepository.cs ================================================ using Minimal.Api.Pokedex.Models; namespace Minimal.Api.Pokedex.Services { public interface IPokedexRepository { public Task Read(); } } ================================================ FILE: projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Services/IPokedexService.cs ================================================ using Minimal.Api.Pokedex.Models; namespace Minimal.Api.Pokedex.Services { public interface IPokedexService { public Task GetAsync(int page, int pageSize); public Task GetAsync(string name); public Task GetAllAsync(); public Task SearchAsync(string query, int page, int pageSize); } } ================================================ FILE: projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Services/PokedexRepository.cs ================================================ using System.Text.Json; using Microsoft.AspNetCore.Http.Json; using Minimal.Api.Pokedex.Models; namespace Minimal.Api.Pokedex.Services { public class PokedexRepository : IPokedexRepository { private readonly string _dataFile; private IList _pokemons = null; private JsonSerializerOptions _jsonOptions = new JsonSerializerOptions { PropertyNameCaseInsensitive = true }; public PokedexRepository(IWebHostEnvironment environment) { _dataFile = Path.Combine(environment.ContentRootPath,"Data","pokemon.json"); } public async Task Read() { if(_pokemons == null) _pokemons = await LoadPokemons(); return _pokemons.ToArray(); } private async Task> LoadPokemons() { var data = await File.ReadAllTextAsync(_dataFile); var pokemons = new List(); using (var document = JsonDocument.Parse(data)) { foreach(var item in document.RootElement.EnumerateArray()) { pokemons.Add(JsonSerializer.Deserialize(item, _jsonOptions)); } } return pokemons; } } } ================================================ FILE: projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Services/PokedexService.cs ================================================ using Minimal.Api.Pokedex.Models; namespace Minimal.Api.Pokedex.Services { public class PokedexService : IPokedexService { private readonly IPokedexRepository _pokedexRepository; public PokedexService(IPokedexRepository pokedexRepository) { _pokedexRepository = pokedexRepository; } public async Task GetAllAsync() { var pokemons = await _pokedexRepository.Read(); return BuildResponse(pokemons); } public async Task GetAsync(int page, int pageSize) { var pokemons = await _pokedexRepository.Read(); return BuildPagedResponse(page, pageSize, pokemons); } public async Task GetAsync(string name) { var pokemons = await _pokedexRepository.Read(); return pokemons.FirstOrDefault(p => p.Name.ToLowerInvariant() == name.ToLowerInvariant()); } public async Task SearchAsync(string query, int page, int pageSize) { var pokemons = await _pokedexRepository.Read(); var filteredPokemons = pokemons.Where(p => { var variation = p.Variations[0]; return variation.Name.ToLowerInvariant().Contains(query.ToLowerInvariant()) || variation.Description.ToLowerInvariant().Contains(query.ToLowerInvariant()) || variation.Image.ToLowerInvariant().Contains(query.ToLowerInvariant()) || variation.Specie.ToLowerInvariant().Contains(query.ToLowerInvariant()); }); return BuildPagedResponse(page, pageSize, filteredPokemons.ToArray()); } private PokedexPagedResponse BuildPagedResponse(int page, int pageSize, PokemonEntity[] pokemons) { var pokemonCount = pokemons.Count(); var totalaPages = Convert.ToInt32(Math.Ceiling((double)pokemonCount / pageSize)); int skipCount = (page - 1) * pageSize; return new PokedexPagedResponse { Data = pokemons.Skip(skipCount).Take(pageSize).Select(p => new PokemonListItemEntity { Num = p.Num, Name = p.Name, Image = p.Variations[0].Image }).ToArray(), Page = page, TotalPages = totalaPages, TotalResults = pokemonCount }; } private static PokedexResponse BuildResponse(PokemonEntity[] pokemons) { return new PokedexResponse { Data = pokemons.Select(p => new PokemonListItemEntity { Num = p.Num, Name = p.Name, Image = p.Variations[0].Image }).ToArray(), }; } } } ================================================ FILE: projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/appsettings.Development.json ================================================ { "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } } } ================================================ FILE: projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/appsettings.json ================================================ { "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*" } ================================================ FILE: projects/mini/pdf-viewer/Pages/Index.cshtml ================================================ @page PDF.js viewer
    Current View
    ================================================ FILE: projects/mini/pdf-viewer/Program.cs ================================================ using Microsoft.AspNetCore.StaticFiles; var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); var app = builder.Build(); var provider = new FileExtensionContentTypeProvider(); provider.Mappings[".properties"] = "application/octet-stream"; app.UseStaticFiles(new StaticFileOptions { ContentTypeProvider = provider }); app.MapRazorPages(); app.Run(); ================================================ FILE: projects/mini/pdf-viewer/README.md ================================================ # Create a PDF Viewer using PDF.js This sample shows you how to create a PDF Viewer using [PDF.js](https://mozilla.github.io/pdf.js/). The viewer code is based on their [sample code](https://github.com/mozilla/pdf.js/archive/gh-pages.zip) as outlined [here](https://github.com/mozilla/pdf.js/wiki/Frequently-Asked-Questions#gh-pages). The sample PDF is [The early history of F#](https://dl.acm.org/doi/10.1145/3386325). The ASP.NET Core code is a straightforward Razor Pages code. ![How it looks like](screenshot.png) ================================================ FILE: projects/mini/pdf-viewer/pdf-viewer.csproj ================================================ net10.0 true preview ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/cmaps/CNS2-V.bcmap ================================================ RCopyright 1990-2009 Adobe Systems Incorporated. All rights reserved. See ./LICENSECNS2-H ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/cmaps/ETenms-B5-H.bcmap ================================================ RCopyright 1990-2009 Adobe Systems Incorporated. All rights reserved. See ./LICENSE ETen-B5-H` ^ ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/cmaps/GB-H.bcmap ================================================ RCopyright 1990-2009 Adobe Systems Incorporated. All rights reserved. See ./LICENSE!!]aX!!]`21> p z$]"Rd-U7* 4%+ Z {/%<9Kb1]." `],"] "]h"]F"]$"]"]`"]>"]"]z"]X"]6"]"]r"]P"]."] "]j"]H"]&"]"]b"]@"]"]|"]Z"]8"]"]t"]R"]0"]"]l"]J"]("]"]d"]B"] "X~']W"]5"]"]q"]O"]-"] "]i"]G"]%"]"]a"]?"]"]{"]Y"]7"]"]s"]Q"]/"] "]k"]I"]'"]"]c"]A"]"]}"]["]9 ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/cmaps/LICENSE ================================================ %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. %%Copyright: All rights reserved. %%Copyright: %%Copyright: Redistribution and use in source and binary forms, with or %%Copyright: without modification, are permitted provided that the %%Copyright: following conditions are met: %%Copyright: %%Copyright: Redistributions of source code must retain the above %%Copyright: copyright notice, this list of conditions and the following %%Copyright: disclaimer. %%Copyright: %%Copyright: Redistributions in binary form must reproduce the above %%Copyright: copyright notice, this list of conditions and the following %%Copyright: disclaimer in the documentation and/or other materials %%Copyright: provided with the distribution. %%Copyright: %%Copyright: Neither the name of Adobe Systems Incorporated nor the names %%Copyright: of its contributors may be used to endorse or promote %%Copyright: products derived from this software without specific prior %%Copyright: written permission. %%Copyright: %%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND %%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, %%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF %%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE %%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR %%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, %%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT %%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; %%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) %%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN %%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR %%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS %%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. %%Copyright: ----------------------------------------------------------- ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/debugger.js ================================================ /* Copyright 2012 Mozilla Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* eslint-disable no-var */ "use strict"; var FontInspector = (function FontInspectorClosure() { var fonts; var active = false; var fontAttribute = "data-font-name"; function removeSelection() { const divs = document.querySelectorAll(`span[${fontAttribute}]`); for (const div of divs) { div.className = ""; } } function resetSelection() { const divs = document.querySelectorAll(`span[${fontAttribute}]`); for (const div of divs) { div.className = "debuggerHideText"; } } function selectFont(fontName, show) { const divs = document.querySelectorAll( `span[${fontAttribute}=${fontName}]` ); for (const div of divs) { div.className = show ? "debuggerShowText" : "debuggerHideText"; } } function textLayerClick(e) { if ( !e.target.dataset.fontName || e.target.tagName.toUpperCase() !== "SPAN" ) { return; } var fontName = e.target.dataset.fontName; var selects = document.getElementsByTagName("input"); for (var i = 0; i < selects.length; ++i) { var select = selects[i]; if (select.dataset.fontName !== fontName) { continue; } select.checked = !select.checked; selectFont(fontName, select.checked); select.scrollIntoView(); } } return { // Properties/functions needed by PDFBug. id: "FontInspector", name: "Font Inspector", panel: null, manager: null, init: function init(pdfjsLib) { var panel = this.panel; var tmp = document.createElement("button"); tmp.addEventListener("click", resetSelection); tmp.textContent = "Refresh"; panel.appendChild(tmp); fonts = document.createElement("div"); panel.appendChild(fonts); }, cleanup: function cleanup() { fonts.textContent = ""; }, enabled: false, get active() { return active; }, set active(value) { active = value; if (active) { document.body.addEventListener("click", textLayerClick, true); resetSelection(); } else { document.body.removeEventListener("click", textLayerClick, true); removeSelection(); } }, // FontInspector specific functions. fontAdded: function fontAdded(fontObj, url) { function properties(obj, list) { var moreInfo = document.createElement("table"); for (var i = 0; i < list.length; i++) { var tr = document.createElement("tr"); var td1 = document.createElement("td"); td1.textContent = list[i]; tr.appendChild(td1); var td2 = document.createElement("td"); td2.textContent = obj[list[i]].toString(); tr.appendChild(td2); moreInfo.appendChild(tr); } return moreInfo; } var moreInfo = properties(fontObj, ["name", "type"]); const fontName = fontObj.loadedName; var font = document.createElement("div"); var name = document.createElement("span"); name.textContent = fontName; var download = document.createElement("a"); if (url) { url = /url\(['"]?([^)"']+)/.exec(url); download.href = url[1]; } else if (fontObj.data) { download.href = URL.createObjectURL( new Blob([fontObj.data], { type: fontObj.mimeType }) ); } download.textContent = "Download"; var logIt = document.createElement("a"); logIt.href = ""; logIt.textContent = "Log"; logIt.addEventListener("click", function (event) { event.preventDefault(); console.log(fontObj); }); const select = document.createElement("input"); select.setAttribute("type", "checkbox"); select.dataset.fontName = fontName; select.addEventListener("click", function () { selectFont(fontName, select.checked); }); font.appendChild(select); font.appendChild(name); font.appendChild(document.createTextNode(" ")); font.appendChild(download); font.appendChild(document.createTextNode(" ")); font.appendChild(logIt); font.appendChild(moreInfo); fonts.appendChild(font); // Somewhat of a hack, should probably add a hook for when the text layer // is done rendering. setTimeout(() => { if (this.active) { resetSelection(); } }, 2000); }, }; })(); var opMap; // Manages all the page steppers. var StepperManager = (function StepperManagerClosure() { var steppers = []; var stepperDiv = null; var stepperControls = null; var stepperChooser = null; var breakPoints = Object.create(null); return { // Properties/functions needed by PDFBug. id: "Stepper", name: "Stepper", panel: null, manager: null, init: function init(pdfjsLib) { var self = this; stepperControls = document.createElement("div"); stepperChooser = document.createElement("select"); stepperChooser.addEventListener("change", function (event) { self.selectStepper(this.value); }); stepperControls.appendChild(stepperChooser); stepperDiv = document.createElement("div"); this.panel.appendChild(stepperControls); this.panel.appendChild(stepperDiv); if (sessionStorage.getItem("pdfjsBreakPoints")) { breakPoints = JSON.parse(sessionStorage.getItem("pdfjsBreakPoints")); } opMap = Object.create(null); for (var key in pdfjsLib.OPS) { opMap[pdfjsLib.OPS[key]] = key; } }, cleanup: function cleanup() { stepperChooser.textContent = ""; stepperDiv.textContent = ""; steppers = []; }, enabled: false, active: false, // Stepper specific functions. create: function create(pageIndex) { var debug = document.createElement("div"); debug.id = "stepper" + pageIndex; debug.setAttribute("hidden", true); debug.className = "stepper"; stepperDiv.appendChild(debug); var b = document.createElement("option"); b.textContent = "Page " + (pageIndex + 1); b.value = pageIndex; stepperChooser.appendChild(b); var initBreakPoints = breakPoints[pageIndex] || []; var stepper = new Stepper(debug, pageIndex, initBreakPoints); steppers.push(stepper); if (steppers.length === 1) { this.selectStepper(pageIndex, false); } return stepper; }, selectStepper: function selectStepper(pageIndex, selectPanel) { var i; pageIndex = pageIndex | 0; if (selectPanel) { this.manager.selectPanel(this); } for (i = 0; i < steppers.length; ++i) { var stepper = steppers[i]; if (stepper.pageIndex === pageIndex) { stepper.panel.removeAttribute("hidden"); } else { stepper.panel.setAttribute("hidden", true); } } var options = stepperChooser.options; for (i = 0; i < options.length; ++i) { var option = options[i]; option.selected = (option.value | 0) === pageIndex; } }, saveBreakPoints: function saveBreakPoints(pageIndex, bps) { breakPoints[pageIndex] = bps; sessionStorage.setItem("pdfjsBreakPoints", JSON.stringify(breakPoints)); }, }; })(); // The stepper for each page's IRQueue. var Stepper = (function StepperClosure() { // Shorter way to create element and optionally set textContent. function c(tag, textContent) { var d = document.createElement(tag); if (textContent) { d.textContent = textContent; } return d; } function simplifyArgs(args) { if (typeof args === "string") { var MAX_STRING_LENGTH = 75; return args.length <= MAX_STRING_LENGTH ? args : args.substring(0, MAX_STRING_LENGTH) + "..."; } if (typeof args !== "object" || args === null) { return args; } if ("length" in args) { // array var simpleArgs = [], i, ii; var MAX_ITEMS = 10; for (i = 0, ii = Math.min(MAX_ITEMS, args.length); i < ii; i++) { simpleArgs.push(simplifyArgs(args[i])); } if (i < args.length) { simpleArgs.push("..."); } return simpleArgs; } var simpleObj = {}; for (var key in args) { simpleObj[key] = simplifyArgs(args[key]); } return simpleObj; } // eslint-disable-next-line no-shadow function Stepper(panel, pageIndex, initialBreakPoints) { this.panel = panel; this.breakPoint = 0; this.nextBreakPoint = null; this.pageIndex = pageIndex; this.breakPoints = initialBreakPoints; this.currentIdx = -1; this.operatorListIdx = 0; } Stepper.prototype = { init: function init(operatorList) { var panel = this.panel; var content = c("div", "c=continue, s=step"); var table = c("table"); content.appendChild(table); table.cellSpacing = 0; var headerRow = c("tr"); table.appendChild(headerRow); headerRow.appendChild(c("th", "Break")); headerRow.appendChild(c("th", "Idx")); headerRow.appendChild(c("th", "fn")); headerRow.appendChild(c("th", "args")); panel.appendChild(content); this.table = table; this.updateOperatorList(operatorList); }, updateOperatorList: function updateOperatorList(operatorList) { var self = this; function cboxOnClick() { var x = +this.dataset.idx; if (this.checked) { self.breakPoints.push(x); } else { self.breakPoints.splice(self.breakPoints.indexOf(x), 1); } StepperManager.saveBreakPoints(self.pageIndex, self.breakPoints); } var MAX_OPERATORS_COUNT = 15000; if (this.operatorListIdx > MAX_OPERATORS_COUNT) { return; } var chunk = document.createDocumentFragment(); var operatorsToDisplay = Math.min( MAX_OPERATORS_COUNT, operatorList.fnArray.length ); for (var i = this.operatorListIdx; i < operatorsToDisplay; i++) { var line = c("tr"); line.className = "line"; line.dataset.idx = i; chunk.appendChild(line); var checked = this.breakPoints.includes(i); var args = operatorList.argsArray[i] || []; var breakCell = c("td"); var cbox = c("input"); cbox.type = "checkbox"; cbox.className = "points"; cbox.checked = checked; cbox.dataset.idx = i; cbox.onclick = cboxOnClick; breakCell.appendChild(cbox); line.appendChild(breakCell); line.appendChild(c("td", i.toString())); var fn = opMap[operatorList.fnArray[i]]; var decArgs = args; if (fn === "showText") { var glyphs = args[0]; var newArgs = []; var str = []; for (var j = 0; j < glyphs.length; j++) { var glyph = glyphs[j]; if (typeof glyph === "object" && glyph !== null) { str.push(glyph.fontChar); } else { if (str.length > 0) { newArgs.push(str.join("")); str = []; } newArgs.push(glyph); // null or number } } if (str.length > 0) { newArgs.push(str.join("")); } decArgs = [newArgs]; } line.appendChild(c("td", fn)); line.appendChild(c("td", JSON.stringify(simplifyArgs(decArgs)))); } if (operatorsToDisplay < operatorList.fnArray.length) { var lastCell = c("td", "..."); lastCell.colspan = 4; chunk.appendChild(lastCell); } this.operatorListIdx = operatorList.fnArray.length; this.table.appendChild(chunk); }, getNextBreakPoint: function getNextBreakPoint() { this.breakPoints.sort(function (a, b) { return a - b; }); for (var i = 0; i < this.breakPoints.length; i++) { if (this.breakPoints[i] > this.currentIdx) { return this.breakPoints[i]; } } return null; }, breakIt: function breakIt(idx, callback) { StepperManager.selectStepper(this.pageIndex, true); var self = this; var dom = document; self.currentIdx = idx; var listener = function (e) { switch (e.keyCode) { case 83: // step dom.removeEventListener("keydown", listener); self.nextBreakPoint = self.currentIdx + 1; self.goTo(-1); callback(); break; case 67: // continue dom.removeEventListener("keydown", listener); var breakPoint = self.getNextBreakPoint(); self.nextBreakPoint = breakPoint; self.goTo(-1); callback(); break; } }; dom.addEventListener("keydown", listener); self.goTo(idx); }, goTo: function goTo(idx) { var allRows = this.panel.getElementsByClassName("line"); for (var x = 0, xx = allRows.length; x < xx; ++x) { var row = allRows[x]; if ((row.dataset.idx | 0) === idx) { row.style.backgroundColor = "rgb(251,250,207)"; row.scrollIntoView(); } else { row.style.backgroundColor = null; } } }, }; return Stepper; })(); var Stats = (function Stats() { var stats = []; function clear(node) { while (node.hasChildNodes()) { node.removeChild(node.lastChild); } } function getStatIndex(pageNumber) { for (var i = 0, ii = stats.length; i < ii; ++i) { if (stats[i].pageNumber === pageNumber) { return i; } } return false; } return { // Properties/functions needed by PDFBug. id: "Stats", name: "Stats", panel: null, manager: null, init(pdfjsLib) {}, enabled: false, active: false, // Stats specific functions. add(pageNumber, stat) { if (!stat) { return; } var statsIndex = getStatIndex(pageNumber); if (statsIndex !== false) { const b = stats[statsIndex]; this.panel.removeChild(b.div); stats.splice(statsIndex, 1); } var wrapper = document.createElement("div"); wrapper.className = "stats"; var title = document.createElement("div"); title.className = "title"; title.textContent = "Page: " + pageNumber; var statsDiv = document.createElement("div"); statsDiv.textContent = stat.toString(); wrapper.appendChild(title); wrapper.appendChild(statsDiv); stats.push({ pageNumber, div: wrapper }); stats.sort(function (a, b) { return a.pageNumber - b.pageNumber; }); clear(this.panel); for (var i = 0, ii = stats.length; i < ii; ++i) { this.panel.appendChild(stats[i].div); } }, cleanup() { stats = []; clear(this.panel); }, }; })(); // Manages all the debugging tools. window.PDFBug = (function PDFBugClosure() { var panelWidth = 300; var buttons = []; var activePanel = null; return { tools: [FontInspector, StepperManager, Stats], enable(ids) { var all = false, tools = this.tools; if (ids.length === 1 && ids[0] === "all") { all = true; } for (var i = 0; i < tools.length; ++i) { var tool = tools[i]; if (all || ids.includes(tool.id)) { tool.enabled = true; } } if (!all) { // Sort the tools by the order they are enabled. tools.sort(function (a, b) { var indexA = ids.indexOf(a.id); indexA = indexA < 0 ? tools.length : indexA; var indexB = ids.indexOf(b.id); indexB = indexB < 0 ? tools.length : indexB; return indexA - indexB; }); } }, init(pdfjsLib, container) { /* * Basic Layout: * PDFBug * Controls * Panels * Panel * Panel * ... */ var ui = document.createElement("div"); ui.id = "PDFBug"; var controls = document.createElement("div"); controls.setAttribute("class", "controls"); ui.appendChild(controls); var panels = document.createElement("div"); panels.setAttribute("class", "panels"); ui.appendChild(panels); container.appendChild(ui); container.style.right = panelWidth + "px"; // Initialize all the debugging tools. var tools = this.tools; var self = this; for (var i = 0; i < tools.length; ++i) { var tool = tools[i]; var panel = document.createElement("div"); var panelButton = document.createElement("button"); panelButton.textContent = tool.name; panelButton.addEventListener( "click", (function (selected) { return function (event) { event.preventDefault(); self.selectPanel(selected); }; })(i) ); controls.appendChild(panelButton); panels.appendChild(panel); tool.panel = panel; tool.manager = this; if (tool.enabled) { tool.init(pdfjsLib); } else { panel.textContent = tool.name + " is disabled. To enable add " + ' "' + tool.id + '" to the pdfBug parameter ' + "and refresh (separate multiple by commas)."; } buttons.push(panelButton); } this.selectPanel(0); }, cleanup() { for (var i = 0, ii = this.tools.length; i < ii; i++) { if (this.tools[i].enabled) { this.tools[i].cleanup(); } } }, selectPanel(index) { if (typeof index !== "number") { index = this.tools.indexOf(index); } if (index === activePanel) { return; } activePanel = index; var tools = this.tools; for (var j = 0; j < tools.length; ++j) { if (j === index) { buttons[j].setAttribute("class", "active"); tools[j].active = true; tools[j].panel.removeAttribute("hidden"); } else { buttons[j].setAttribute("class", ""); tools[j].active = false; tools[j].panel.setAttribute("hidden", "true"); } } }, }; })(); ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ach/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Pot buk mukato previous_label=Mukato next.title=Pot buk malubo next_label=Malubo # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Pot buk # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=pi {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} me {{pagesCount}}) zoom_out.title=Jwik Matidi zoom_out_label=Jwik Matidi zoom_in.title=Kwot Madit zoom_in_label=Kwot Madit zoom.title=Kwoti presentation_mode.title=Lokke i kit me tyer presentation_mode_label=Kit me tyer open_file.title=Yab Pwail open_file_label=Yab print.title=Go print_label=Go download.title=Gam download_label=Gam bookmark.title=Neno ma kombedi (lok onyo yab i dirica manyen) bookmark_label=Neno ma kombedi # Secondary toolbar and context menu tools.title=Gintic tools_label=Gintic first_page.title=Cit i pot buk mukwongo first_page.label=Cit i pot buk mukwongo first_page_label=Cit i pot buk mukwongo last_page.title=Cit i pot buk magiko last_page.label=Cit i pot buk magiko last_page_label=Cit i pot buk magiko page_rotate_cw.title=Wire i tung lacuc page_rotate_cw.label=Wire i tung lacuc page_rotate_cw_label=Wire i tung lacuc page_rotate_ccw.title=Wire i tung lacam page_rotate_ccw.label=Wire i tung lacam page_rotate_ccw_label=Wire i tung lacam cursor_text_select_tool.title=Cak gitic me yero coc cursor_text_select_tool_label=Gitic me yero coc cursor_hand_tool.title=Cak gitic me cing cursor_hand_tool_label=Gitic cing # Document properties dialog box document_properties.title=Jami me gin acoya… document_properties_label=Jami me gin acoya… document_properties_file_name=Nying pwail: document_properties_file_size=Dit pa pwail: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Wiye: document_properties_author=Ngat mucoyo: document_properties_subject=Subjek: document_properties_keywords=Lok mapire tek: document_properties_creation_date=Nino dwe me cwec: document_properties_modification_date=Nino dwe me yub: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Lacwec: document_properties_producer=Layub PDF: document_properties_version=Kit PDF: document_properties_page_count=Kwan me pot buk: document_properties_page_size=Dit pa potbuk: document_properties_page_size_unit_inches=i document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=atir document_properties_page_size_orientation_landscape=arii document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Waraga document_properties_page_size_name_legal=Cik # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized_yes=Eyo document_properties_linearized_no=Pe document_properties_close=Lor print_progress_message=Yubo coc me agoya… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Juki # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Lok gintic ma inget toggle_sidebar_notification.title=Lok lanyut me nget (wiyewiye tye i gin acoya/attachments) toggle_sidebar_label=Lok gintic ma inget document_outline.title=Nyut Wiyewiye me Gin acoya (dii-kiryo me yaro/kano jami weng) document_outline_label=Pek pa gin acoya attachments.title=Nyut twec attachments_label=Twec thumbs.title=Nyut cal thumbs_label=Cal findbar.title=Nong iye gin acoya findbar_label=Nong # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Pot buk {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Cal me pot buk {{page}} # Find panel button title and messages find_input.title=Nong find_input.placeholder=Nong i dokumen… find_previous.title=Nong timme pa lok mukato find_previous_label=Mukato find_next.title=Nong timme pa lok malubo find_next_label=Malubo find_highlight=Wer weng find_match_case_label=Lok marwate find_reached_top=Oo iwi gin acoya, omede ki i tere find_reached_bottom=Oo i agiki me gin acoya, omede ki iwiye find_not_found=Lok pe ononge # Error panel labels error_more_info=Ngec Mukene error_less_info=Ngec Manok error_close=Lor # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Kwena: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Can kikore {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Pwail: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Rek: {{line}} rendering_error=Bal otime i kare me nyuto pot buk. # Predefined zoom values page_scale_width=Lac me iye pot buk page_scale_fit=Porre me pot buk page_scale_auto=Kwot pire kene page_scale_actual=Dite kikome # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Bal loading_error=Bal otime kun cano PDF. invalid_file_error=Pwail me PDF ma pe atir onyo obale woko. missing_file_error=Pwail me PDF tye ka rem. unexpected_response_error=Lagam mape kigeno pa lapok tic. # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Lok angea manok] password_label=Ket mung me donyo me yabo pwail me PDF man. password_invalid=Mung me donyo pe atir. Tim ber i tem doki. password_ok=OK password_cancel=Juki printing_not_supported=Ciko: Layeny ma pe teno goyo liweng. printing_not_ready=Ciko: PDF pe ocane weng me agoya. web_fonts_disabled=Kijuko dit pa coc me kakube woko: pe romo tic ki dit pa coc me PDF ma kiketo i kine. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/af/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Vorige bladsy previous_label=Vorige next.title=Volgende bladsy next_label=Volgende # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Bladsy # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=van {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} van {{pagesCount}}) zoom_out.title=Zoem uit zoom_out_label=Zoem uit zoom_in.title=Zoem in zoom_in_label=Zoem in zoom.title=Zoem presentation_mode.title=Wissel na voorleggingsmodus presentation_mode_label=Voorleggingsmodus open_file.title=Open lêer open_file_label=Open print.title=Druk print_label=Druk download.title=Laai af download_label=Laai af bookmark.title=Huidige aansig (kopieer of open in nuwe venster) bookmark_label=Huidige aansig # Secondary toolbar and context menu tools.title=Nutsgoed tools_label=Nutsgoed first_page.title=Gaan na eerste bladsy first_page.label=Gaan na eerste bladsy first_page_label=Gaan na eerste bladsy last_page.title=Gaan na laaste bladsy last_page.label=Gaan na laaste bladsy last_page_label=Gaan na laaste bladsy page_rotate_cw.title=Roteer kloksgewys page_rotate_cw.label=Roteer kloksgewys page_rotate_cw_label=Roteer kloksgewys page_rotate_ccw.title=Roteer anti-kloksgewys page_rotate_ccw.label=Roteer anti-kloksgewys page_rotate_ccw_label=Roteer anti-kloksgewys cursor_text_select_tool.title=Aktiveer gereedskap om teks te merk cursor_text_select_tool_label=Teksmerkgereedskap cursor_hand_tool.title=Aktiveer handjie cursor_hand_tool_label=Handjie # Document properties dialog box document_properties.title=Dokumenteienskappe… document_properties_label=Dokumenteienskappe… document_properties_file_name=Lêernaam: document_properties_file_size=Lêergrootte: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} kG ({{size_b}} grepe) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MG ({{size_b}} grepe) document_properties_title=Titel: document_properties_author=Outeur: document_properties_subject=Onderwerp: document_properties_keywords=Sleutelwoorde: document_properties_creation_date=Skeppingsdatum: document_properties_modification_date=Wysigingsdatum: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Skepper: document_properties_producer=PDF-vervaardiger: document_properties_version=PDF-weergawe: document_properties_page_count=Aantal bladsye: document_properties_close=Sluit print_progress_message=Berei tans dokument voor om te druk… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Kanselleer # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Sypaneel aan/af toggle_sidebar_notification.title=Sypaneel aan/af (dokument bevat skema/aanhegsels) toggle_sidebar_label=Sypaneel aan/af document_outline.title=Wys dokumentskema (dubbelklik om alle items oop/toe te vou) document_outline_label=Dokumentoorsig attachments.title=Wys aanhegsels attachments_label=Aanhegsels thumbs.title=Wys duimnaels thumbs_label=Duimnaels findbar.title=Soek in dokument findbar_label=Vind # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Bladsy {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Duimnael van bladsy {{page}} # Find panel button title and messages find_input.title=Vind find_input.placeholder=Soek in dokument… find_previous.title=Vind die vorige voorkoms van die frase find_previous_label=Vorige find_next.title=Vind die volgende voorkoms van die frase find_next_label=Volgende find_highlight=Verlig almal find_match_case_label=Kassensitief find_reached_top=Bokant van dokument is bereik; gaan voort van onder af find_reached_bottom=Einde van dokument is bereik; gaan voort van bo af find_not_found=Frase nie gevind nie # Error panel labels error_more_info=Meer inligting error_less_info=Minder inligting error_close=Sluit # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (ID: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Boodskap: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stapel: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Lêer: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Lyn: {{line}} rendering_error='n Fout het voorgekom toe die bladsy weergegee is. # Predefined zoom values page_scale_width=Bladsywydte page_scale_fit=Pas bladsy page_scale_auto=Outomatiese zoem page_scale_actual=Werklike grootte # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Fout loading_error='n Fout het voorgekom met die laai van die PDF. invalid_file_error=Ongeldige of korrupte PDF-lêer. missing_file_error=PDF-lêer is weg. unexpected_response_error=Onverwagse antwoord van bediener. # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}}-annotasie] password_label=Gee die wagwoord om dié PDF-lêer mee te open. password_invalid=Ongeldige wagwoord. Probeer gerus weer. password_ok=OK password_cancel=Kanselleer printing_not_supported=Waarskuwing: Dié blaaier ondersteun nie drukwerk ten volle nie. printing_not_ready=Waarskuwing: Die PDF is nog nie volledig gelaai vir drukwerk nie. web_fonts_disabled=Webfonte is gedeaktiveer: kan nie PDF-fonte wat ingebed is, gebruik nie. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/an/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Pachina anterior previous_label=Anterior next.title=Pachina siguient next_label=Siguient # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Pachina # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=de {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} de {{pagesCount}}) zoom_out.title=Achiquir zoom_out_label=Achiquir zoom_in.title=Agrandir zoom_in_label=Agrandir zoom.title=Grandaria presentation_mode.title=Cambear t'o modo de presentación presentation_mode_label=Modo de presentación open_file.title=Ubrir o fichero open_file_label=Ubrir print.title=Imprentar print_label=Imprentar download.title=Descargar download_label=Descargar bookmark.title=Vista actual (copiar u ubrir en una nueva finestra) bookmark_label=Vista actual # Secondary toolbar and context menu tools.title=Ferramientas tools_label=Ferramientas first_page.title=Ir ta la primer pachina first_page.label=Ir ta la primer pachina first_page_label=Ir ta la primer pachina last_page.title=Ir ta la zaguer pachina last_page.label=Ir ta la zaguera pachina last_page_label=Ir ta la zaguer pachina page_rotate_cw.title=Chirar enta la dreita page_rotate_cw.label=Chirar enta la dreita page_rotate_cw_label=Chira enta la dreita page_rotate_ccw.title=Chirar enta la zurda page_rotate_ccw.label=Chirar en sentiu antihorario page_rotate_ccw_label=Chirar enta la zurda cursor_text_select_tool.title=Activar la ferramienta de selección de texto cursor_text_select_tool_label=Ferramienta de selección de texto cursor_hand_tool.title=Activar la ferramienta man cursor_hand_tool_label=Ferramienta man scroll_vertical.title=Usar lo desplazamiento vertical scroll_vertical_label=Desplazamiento vertical scroll_horizontal.title=Usar lo desplazamiento horizontal scroll_horizontal_label=Desplazamiento horizontal scroll_wrapped.title=Activaar lo desplazamiento contino scroll_wrapped_label=Desplazamiento contino spread_none.title=No unir vistas de pachinas spread_none_label=Una pachina nomás spread_odd.title=Mostrar vista de pachinas, con as impars a la zurda spread_odd_label=Doble pachina, impar a la zurda spread_even.title=Amostrar vista de pachinas, con as pars a la zurda spread_even_label=Doble pachina, para a la zurda # Document properties dialog box document_properties.title=Propiedatz d'o documento... document_properties_label=Propiedatz d'o documento... document_properties_file_name=Nombre de fichero: document_properties_file_size=Grandaria d'o fichero: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Titol: document_properties_author=Autor: document_properties_subject=Afer: document_properties_keywords=Parolas clau: document_properties_creation_date=Calendata de creyación: document_properties_modification_date=Calendata de modificación: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Creyador: document_properties_producer=Creyador de PDF: document_properties_version=Versión de PDF: document_properties_page_count=Numero de pachinas: document_properties_page_size=Mida de pachina: document_properties_page_size_unit_inches=pulgadas document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=vertical document_properties_page_size_orientation_landscape=horizontal document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Carta document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} x {{height}} {{unit}} {{orientation}} # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} x {{height}} {{unit}} {{name}}, {{orientation}} # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Vista web rapida: document_properties_linearized_yes=Sí document_properties_linearized_no=No document_properties_close=Zarrar print_progress_message=Se ye preparando la documentación pa imprentar… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Cancelar # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Amostrar u amagar a barra lateral toggle_sidebar_notification.title=Cambiar barra lateral (lo documento contiene esquema/adchuntos) toggle_sidebar_notification2.title=Cambiar barra lateral (lo documento contiene esquema/adchuntos/capas) toggle_sidebar_label=Amostrar a barra lateral document_outline.title=Amostrar esquema d'o documento (fer doble clic pa expandir/compactar totz los items) document_outline_label=Esquema d'o documento attachments.title=Amostrar os adchuntos attachments_label=Adchuntos layers.title=Amostrar capas (doble clic para reiniciar totas las capas a lo estau per defecto) layers_label=Capas thumbs.title=Amostrar as miniaturas thumbs_label=Miniaturas findbar.title=Trobar en o documento findbar_label=Trobar additional_layers=Capas adicionals # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Pachina {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Pachina {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Miniatura d'a pachina {{page}} # Find panel button title and messages find_input.title=Trobar find_input.placeholder=Trobar en o documento… find_previous.title=Trobar l'anterior coincidencia d'a frase find_previous_label=Anterior find_next.title=Trobar a siguient coincidencia d'a frase find_next_label=Siguient find_highlight=Resaltar-lo tot find_match_case_label=Coincidencia de mayusclas/minusclas find_entire_word_label=Parolas completas find_reached_top=S'ha plegau a l'inicio d'o documento, se contina dende baixo find_reached_bottom=S'ha plegau a la fin d'o documento, se contina dende alto # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} de {{total}} coincidencia find_match_count[two]={{current}} de {{total}} coincidencias find_match_count[few]={{current}} de {{total}} coincidencias find_match_count[many]={{current}} de {{total}} coincidencias find_match_count[other]={{current}} de {{total}} coincidencias # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Mas de {{limit}} coincidencias find_match_count_limit[one]=Mas de {{limit}} coincidencias find_match_count_limit[two]=Mas que {{limit}} coincidencias find_match_count_limit[few]=Mas que {{limit}} coincidencias find_match_count_limit[many]=Mas que {{limit}} coincidencias find_match_count_limit[other]=Mas que {{limit}} coincidencias find_not_found=No s'ha trobau a frase # Error panel labels error_more_info=Mas información error_less_info=Menos información error_close=Zarrar # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Mensache: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Pila: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Fichero: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Linia: {{line}} rendering_error=Ha ocurriu una error en renderizar a pachina. # Predefined zoom values page_scale_width=Amplaria d'a pachina page_scale_fit=Achuste d'a pachina page_scale_auto=Grandaria automatica page_scale_actual=Grandaria actual # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Error loading_error=S'ha produciu una error en cargar o PDF. invalid_file_error=O PDF no ye valido u ye estorbau. missing_file_error=No i ha fichero PDF. unexpected_response_error=Respuesta a lo servicio inasperada. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Anotación {{type}}] password_label=Introduzca a clau ta ubrir iste fichero PDF. password_invalid=Clau invalida. Torna a intentar-lo. password_ok=Acceptar password_cancel=Cancelar printing_not_supported=Pare cuenta: Iste navegador no maneya totalment as impresions. printing_not_ready=Aviso: Encara no se ha cargau completament o PDF ta imprentar-lo. web_fonts_disabled=As fuents web son desactivadas: no se puet incrustar fichers PDF. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ar/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=الصفحة السابقة previous_label=السابقة next.title=الصفحة التالية next_label=التالية # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=صفحة # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=من {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} من {{pagesCount}}) zoom_out.title=بعّد zoom_out_label=بعّد zoom_in.title=قرّب zoom_in_label=قرّب zoom.title=التقريب presentation_mode.title=انتقل لوضع العرض التقديمي presentation_mode_label=وضع العرض التقديمي open_file.title=افتح ملفًا open_file_label=افتح print.title=اطبع print_label=اطبع download.title=نزّل download_label=نزّل bookmark.title=المنظور الحالي (انسخ أو افتح في نافذة جديدة) bookmark_label=المنظور الحالي # Secondary toolbar and context menu tools.title=الأدوات tools_label=الأدوات first_page.title=انتقل إلى الصفحة الأولى first_page.label=انتقل إلى الصفحة الأولى first_page_label=انتقل إلى الصفحة الأولى last_page.title=انتقل إلى الصفحة الأخيرة last_page.label=انتقل إلى الصفحة الأخيرة last_page_label=انتقل إلى الصفحة الأخيرة page_rotate_cw.title=أدر باتجاه عقارب الساعة page_rotate_cw.label=أدر باتجاه عقارب الساعة page_rotate_cw_label=أدر باتجاه عقارب الساعة page_rotate_ccw.title=أدر بعكس اتجاه عقارب الساعة page_rotate_ccw.label=أدر بعكس اتجاه عقارب الساعة page_rotate_ccw_label=أدر بعكس اتجاه عقارب الساعة cursor_text_select_tool.title=فعّل أداة اختيار النص cursor_text_select_tool_label=أداة اختيار النص cursor_hand_tool.title=فعّل أداة اليد cursor_hand_tool_label=أداة اليد scroll_vertical.title=استخدم التمرير الرأسي scroll_vertical_label=التمرير الرأسي scroll_horizontal.title=استخدم التمرير الأفقي scroll_horizontal_label=التمرير الأفقي scroll_wrapped.title=استخدم التمرير الملتف scroll_wrapped_label=التمرير الملتف spread_none.title=لا تدمج هوامش الصفحات مع بعضها البعض spread_none_label=بلا هوامش spread_odd.title=ادمج هوامش الصفحات الفردية spread_odd_label=هوامش الصفحات الفردية spread_even.title=ادمج هوامش الصفحات الزوجية spread_even_label=هوامش الصفحات الزوجية # Document properties dialog box document_properties.title=خصائص المستند… document_properties_label=خصائص المستند… document_properties_file_name=اسم الملف: document_properties_file_size=حجم الملف: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} ك.بايت ({{size_b}} بايت) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} م.بايت ({{size_b}} بايت) document_properties_title=العنوان: document_properties_author=المؤلف: document_properties_subject=الموضوع: document_properties_keywords=الكلمات الأساسية: document_properties_creation_date=تاريخ الإنشاء: document_properties_modification_date=تاريخ التعديل: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}، {{time}} document_properties_creator=المنشئ: document_properties_producer=منتج PDF: document_properties_version=إصدارة PDF: document_properties_page_count=عدد الصفحات: document_properties_page_size=مقاس الورقة: document_properties_page_size_unit_inches=بوصة document_properties_page_size_unit_millimeters=ملم document_properties_page_size_orientation_portrait=طوليّ document_properties_page_size_orientation_landscape=عرضيّ document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=خطاب document_properties_page_size_name_legal=قانونيّ # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string=‏{{width}} × ‏{{height}} ‏{{unit}} (‏{{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string=‏{{width}} × ‏{{height}} ‏{{unit}} (‏{{name}}، {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=العرض السريع عبر الوِب: document_properties_linearized_yes=نعم document_properties_linearized_no=لا document_properties_close=أغلق print_progress_message=يُحضّر المستند للطباعة… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}٪ print_progress_close=ألغِ # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=بدّل ظهور الشريط الجانبي toggle_sidebar_notification.title=بدّل ظهور الشريط الجانبي (يحتوي المستند على مخطط أو مرفقات) toggle_sidebar_notification2.title=بدّل ظهور الشريط الجانبي (يحتوي المستند على مخطط أو مرفقات أو طبقات) toggle_sidebar_label=بدّل ظهور الشريط الجانبي document_outline.title=اعرض فهرس المستند (نقر مزدوج لتمديد أو تقليص كل العناصر) document_outline_label=مخطط المستند attachments.title=اعرض المرفقات attachments_label=المُرفقات layers.title=اعرض الطبقات (انقر مرتين لتصفير كل الطبقات إلى الحالة المبدئية) layers_label=‏‏الطبقات thumbs.title=اعرض مُصغرات thumbs_label=مُصغّرات findbar.title=ابحث في المستند findbar_label=ابحث additional_layers=الطبقات الإضافية # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=صفحة {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=صفحة {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=مصغّرة صفحة {{page}} # Find panel button title and messages find_input.title=ابحث find_input.placeholder=ابحث في المستند… find_previous.title=ابحث عن التّواجد السّابق للعبارة find_previous_label=السابق find_next.title=ابحث عن التّواجد التّالي للعبارة find_next_label=التالي find_highlight=أبرِز الكل find_match_case_label=طابق حالة الأحرف find_entire_word_label=كلمات كاملة find_reached_top=تابعت من الأسفل بعدما وصلت إلى بداية المستند find_reached_bottom=تابعت من الأعلى بعدما وصلت إلى نهاية المستند # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} من أصل مطابقة واحدة find_match_count[two]={{current}} من أصل مطابقتين find_match_count[few]={{current}} من أصل {{total}} مطابقات find_match_count[many]={{current}} من أصل {{total}} مطابقة find_match_count[other]={{current}} من أصل {{total}} مطابقة # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=فقط find_match_count_limit[one]=أكثر من مطابقة واحدة find_match_count_limit[two]=أكثر من مطابقتين find_match_count_limit[few]=أكثر من {{limit}} مطابقات find_match_count_limit[many]=أكثر من {{limit}} مطابقة find_match_count_limit[other]=أكثر من {{limit}} مطابقة find_not_found=لا وجود للعبارة # Error panel labels error_more_info=معلومات أكثر error_less_info=معلومات أقل error_close=أغلق # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=‏PDF.js ن{{version}} ‏(بناء: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=الرسالة: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=الرصّة: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=الملف: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=السطر: {{line}} rendering_error=حدث خطأ أثناء عرض الصفحة. # Predefined zoom values page_scale_width=عرض الصفحة page_scale_fit=ملائمة الصفحة page_scale_auto=تقريب تلقائي page_scale_actual=الحجم الفعلي # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}٪ # Loading indicator messages loading_error_indicator=عطل loading_error=حدث عطل أثناء تحميل ملف PDF. invalid_file_error=ملف PDF تالف أو غير صحيح. missing_file_error=ملف PDF غير موجود. unexpected_response_error=استجابة خادوم غير متوقعة. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}، {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[تعليق {{type}}] password_label=أدخل لكلمة السر لفتح هذا الملف. password_invalid=كلمة سر خطأ. من فضلك أعد المحاولة. password_ok=حسنا password_cancel=ألغِ printing_not_supported=تحذير: لا يدعم هذا المتصفح الطباعة بشكل كامل. printing_not_ready=تحذير: ملف PDF لم يُحمّل كاملًا للطباعة. web_fonts_disabled=خطوط الوب مُعطّلة: تعذّر استخدام خطوط PDF المُضمّنة. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ast/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Páxina anterior previous_label=Anterior next.title=Páxina siguiente next_label=Siguiente # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Páxina # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=de {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} de {{pagesCount}}) zoom_out.title=Reducir zoom_out_label=Reducir zoom_in.title=Aumentar zoom_in_label=Aumentar zoom.title=Tamañu open_file.title=Abrir ficheru open_file_label=Abrir print.title=Imprentar print_label=Imprentar download.title=Descargar download_label=Descargar bookmark.title=Vista actual (copiar o abrir nuna nueva ventana) bookmark_label=Vista actual # Secondary toolbar and context menu tools.title=Ferramientes tools_label=Ferramientes first_page.title=Dir a la primer páxina first_page.label=Dir a la primer páxina first_page_label=Dir a la primer páxina last_page.title=Dir a la postrer páxina last_page.label=Dir a la cabera páxina last_page_label=Dir a la postrer páxina page_rotate_cw.title=Xirar en sen horariu page_rotate_cw_label=Xirar en sen horariu page_rotate_ccw.title=Xirar en sen antihorariu page_rotate_ccw_label=Xirar en sen antihorariu scroll_vertical_label=Desplazamientu vertical scroll_horizontal_label=Desplazamientu horizontal # Document properties dialog box document_properties.title=Propiedaes del documentu… document_properties_label=Propiedaes del documentu… document_properties_file_name=Nome de ficheru: document_properties_file_size=Tamañu de ficheru: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Títulu: document_properties_author=Autor: document_properties_subject=Asuntu: document_properties_keywords=Pallabres clave: document_properties_creation_date=Data de creación: document_properties_modification_date=Data de modificación: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Creador: document_properties_producer=Productor PDF: document_properties_version=Versión PDF: document_properties_page_count=Númberu de páxines: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized_yes=Sí document_properties_linearized_no=Non document_properties_close=Zarrar print_progress_message=Tresnando documentu pa imprentar… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Encaboxar # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Camudar barra llateral toggle_sidebar_label=Camudar barra llateral document_outline.title=Amosar esquema del documentu (duble clic pa espander/contrayer tolos elementos) document_outline_label=Esquema del documentu attachments.title=Amosar axuntos attachments_label=Axuntos thumbs.title=Amosar miniatures thumbs_label=Miniatures findbar.title=Guetar nel documentu findbar_label=Guetar # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Páxina {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Miniatura de la páxina {{page}} # Find panel button title and messages find_input.title=Guetar find_input.placeholder=Guetar nel documentu… find_previous.title=Alcontrar l'anterior apaición de la fras find_previous_label=Anterior find_next.title=Alcontrar la siguiente apaición d'esta fras find_next_label=Siguiente find_highlight=Remarcar toos find_match_case_label=Coincidencia de mayús./minús. find_entire_word_label=Pallabres enteres find_reached_top=Algamóse'l principiu del documentu, siguir dende'l final find_reached_bottom=Algamóse'l final del documentu, siguir dende'l principiu # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_not_found=Frase non atopada # Error panel labels error_more_info=Más información error_less_info=Menos información error_close=Zarrar # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Mensaxe: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Pila: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Ficheru: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Llinia: {{line}} rendering_error=Hebo un fallu al renderizar la páxina. # Predefined zoom values page_scale_width=Anchor de la páxina page_scale_fit=Axuste de la páxina page_scale_auto=Tamañu automáticu page_scale_actual=Tamañu actual # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Fallu loading_error=Hebo un fallu al cargar el PDF. invalid_file_error=Ficheru PDF inválidu o corruptu. missing_file_error=Nun hai ficheru PDF. unexpected_response_error=Rempuesta inesperada del sirvidor. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Anotación {{type}}] password_label=Introduz la contraseña p'abrir esti ficheru PDF password_invalid=Contraseña non válida. Vuelvi a intentalo. password_ok=Aceutar password_cancel=Encaboxar printing_not_supported=Alvertencia: La imprentación entá nun ta sofitada dafechu nesti restolador. printing_not_ready=Avisu: Esti PDF nun se cargó completamente pa poder imprentase. web_fonts_disabled=Les fontes web tán desactivaes: ye imposible usar les fontes PDF embebíes. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/az/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Əvvəlki səhifə previous_label=Əvvəlkini tap next.title=Növbəti səhifə next_label=İrəli # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Səhifə # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=/ {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} / {{pagesCount}}) zoom_out.title=Uzaqlaş zoom_out_label=Uzaqlaş zoom_in.title=Yaxınlaş zoom_in_label=Yaxınlaş zoom.title=Yaxınlaşdırma presentation_mode.title=Təqdimat Rejiminə Keç presentation_mode_label=Təqdimat Rejimi open_file.title=Fayl Aç open_file_label=Aç print.title=Yazdır print_label=Yazdır download.title=Endir download_label=Endir bookmark.title=Hazırkı görünüş (köçür və ya yeni pəncərədə aç) bookmark_label=Hazırkı görünüş # Secondary toolbar and context menu tools.title=Alətlər tools_label=Alətlər first_page.title=İlk Səhifəyə get first_page.label=İlk Səhifəyə get first_page_label=İlk Səhifəyə get last_page.title=Son Səhifəyə get last_page.label=Son Səhifəyə get last_page_label=Son Səhifəyə get page_rotate_cw.title=Saat İstiqamətində Fırlat page_rotate_cw.label=Saat İstiqamətində Fırlat page_rotate_cw_label=Saat İstiqamətində Fırlat page_rotate_ccw.title=Saat İstiqamətinin Əksinə Fırlat page_rotate_ccw.label=Saat İstiqamətinin Əksinə Fırlat page_rotate_ccw_label=Saat İstiqamətinin Əksinə Fırlat cursor_text_select_tool.title=Yazı seçmə alətini aktivləşdir cursor_text_select_tool_label=Yazı seçmə aləti cursor_hand_tool.title=Əl alətini aktivləşdir cursor_hand_tool_label=Əl aləti scroll_vertical.title=Şaquli sürüşdürmə işlət scroll_vertical_label=Şaquli sürüşdürmə scroll_horizontal.title=Üfüqi sürüşdürmə işlət scroll_horizontal_label=Üfüqi sürüşdürmə scroll_wrapped.title=Bükülü sürüşdürmə işlət scroll_wrapped_label=Bükülü sürüşdürmə spread_none.title=Yan-yana birləşdirilmiş səhifələri işlətmə spread_none_label=Birləşdirmə spread_odd.title=Yan-yana birləşdirilmiş səhifələri tək nömrəli səhifələrdən başlat spread_odd_label=Tək nömrəli spread_even.title=Yan-yana birləşdirilmiş səhifələri cüt nömrəli səhifələrdən başlat spread_even_label=Cüt nömrəli # Document properties dialog box document_properties.title=Sənəd xüsusiyyətləri… document_properties_label=Sənəd xüsusiyyətləri… document_properties_file_name=Fayl adı: document_properties_file_size=Fayl ölçüsü: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bayt) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bayt) document_properties_title=Başlık: document_properties_author=Müəllif: document_properties_subject=Mövzu: document_properties_keywords=Açar sözlər: document_properties_creation_date=Yaradılış Tarixi : document_properties_modification_date=Dəyişdirilmə Tarixi : # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Yaradan: document_properties_producer=PDF yaradıcısı: document_properties_version=PDF versiyası: document_properties_page_count=Səhifə sayı: document_properties_page_size=Səhifə Ölçüsü: document_properties_page_size_unit_inches=inç document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=portret document_properties_page_size_orientation_landscape=albom document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Məktub document_properties_page_size_name_legal=Hüquqi # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Fast Web View: document_properties_linearized_yes=Bəli document_properties_linearized_no=Xeyr document_properties_close=Qapat print_progress_message=Sənəd çap üçün hazırlanır… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Ləğv et # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Yan Paneli Aç/Bağla toggle_sidebar_notification.title=Yan paneli çevir (sənəddə icmal/bağlama var) toggle_sidebar_notification2.title=Yan paneli çevir (sənəddə icmal/bağlamalar/laylar mövcuddur) toggle_sidebar_label=Yan Paneli Aç/Bağla document_outline.title=Sənədin eskizini göstər (bütün bəndləri açmaq/yığmaq üçün iki dəfə klikləyin) document_outline_label=Sənəd strukturu attachments.title=Bağlamaları göstər attachments_label=Bağlamalar layers.title=Layları göstər (bütün layları ilkin halına sıfırlamaq üçün iki dəfə klikləyin) layers_label=Laylar thumbs.title=Kiçik şəkilləri göstər thumbs_label=Kiçik şəkillər findbar.title=Sənəddə Tap findbar_label=Tap additional_layers=Əlavə laylar # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Səhifə {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Səhifə{{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas={{page}} səhifəsinin kiçik vəziyyəti # Find panel button title and messages find_input.title=Tap find_input.placeholder=Sənəddə tap… find_previous.title=Bir öncəki uyğun gələn sözü tapır find_previous_label=Geri find_next.title=Bir sonrakı uyğun gələn sözü tapır find_next_label=İrəli find_highlight=İşarələ find_match_case_label=Böyük/kiçik hərfə həssaslıq find_entire_word_label=Tam sözlər find_reached_top=Sənədin yuxarısına çatdı, aşağıdan davam edir find_reached_bottom=Sənədin sonuna çatdı, yuxarıdan davam edir # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} / {{total}} uyğunluq find_match_count[two]={{current}} / {{total}} uyğunluq find_match_count[few]={{current}} / {{total}} uyğunluq find_match_count[many]={{current}} / {{total}} uyğunluq find_match_count[other]={{current}} / {{total}} uyğunluq # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]={{limit}}-dan çox uyğunluq find_match_count_limit[one]={{limit}}-dən çox uyğunluq find_match_count_limit[two]={{limit}}-dən çox uyğunluq find_match_count_limit[few]={{limit}} uyğunluqdan daha çox find_match_count_limit[many]={{limit}} uyğunluqdan daha çox find_match_count_limit[other]={{limit}} uyğunluqdan daha çox find_not_found=Uyğunlaşma tapılmadı # Error panel labels error_more_info=Daha çox məlumati error_less_info=Daha az məlumat error_close=Qapat # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (yığma: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=İsmarıc: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stek: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Fayl: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Sətir: {{line}} rendering_error=Səhifə göstərilərkən səhv yarandı. # Predefined zoom values page_scale_width=Səhifə genişliyi page_scale_fit=Səhifəni sığdır page_scale_auto=Avtomatik yaxınlaşdır page_scale_actual=Hazırkı Həcm # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Səhv loading_error=PDF yüklenərkən bir səhv yarandı. invalid_file_error=Səhv və ya zədələnmiş olmuş PDF fayl. missing_file_error=PDF fayl yoxdur. unexpected_response_error=Gözlənilməz server cavabı. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Annotasiyası] password_label=Bu PDF faylı açmaq üçün parolu daxil edin. password_invalid=Parol səhvdir. Bir daha yoxlayın. password_ok=Tamam password_cancel=Ləğv et printing_not_supported=Xəbərdarlıq: Çap bu səyyah tərəfindən tam olaraq dəstəklənmir. printing_not_ready=Xəbərdarlıq: PDF çap üçün tam yüklənməyib. web_fonts_disabled=Web Şriftlər söndürülüb: yerləşdirilmiş PDF şriftlərini istifadə etmək mümkün deyil. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/be/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Папярэдняя старонка previous_label=Папярэдняя next.title=Наступная старонка next_label=Наступная # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Старонка # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=з {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} з {{pagesCount}}) zoom_out.title=Паменшыць zoom_out_label=Паменшыць zoom_in.title=Павялічыць zoom_in_label=Павялічыць zoom.title=Павялічэнне тэксту presentation_mode.title=Пераключыцца ў рэжым паказу presentation_mode_label=Рэжым паказу open_file.title=Адкрыць файл open_file_label=Адкрыць print.title=Друкаваць print_label=Друкаваць download.title=Сцягнуць download_label=Сцягнуць bookmark.title=Цяперашняя праява (скапіяваць або адчыніць у новым акне) bookmark_label=Цяперашняя праява # Secondary toolbar and context menu tools.title=Прылады tools_label=Прылады first_page.title=Перайсці на першую старонку first_page.label=Перайсці на першую старонку first_page_label=Перайсці на першую старонку last_page.title=Перайсці на апошнюю старонку last_page.label=Перайсці на апошнюю старонку last_page_label=Перайсці на апошнюю старонку page_rotate_cw.title=Павярнуць па сонцу page_rotate_cw.label=Павярнуць па сонцу page_rotate_cw_label=Павярнуць па сонцу page_rotate_ccw.title=Павярнуць супраць сонца page_rotate_ccw.label=Павярнуць супраць сонца page_rotate_ccw_label=Павярнуць супраць сонца cursor_text_select_tool.title=Уключыць прыладу выбару тэксту cursor_text_select_tool_label=Прылада выбару тэксту cursor_hand_tool.title=Уключыць ручную прыладу cursor_hand_tool_label=Ручная прылада scroll_vertical.title=Ужываць вертыкальную пракрутку scroll_vertical_label=Вертыкальная пракрутка scroll_horizontal.title=Ужываць гарызантальную пракрутку scroll_horizontal_label=Гарызантальная пракрутка scroll_wrapped.title=Ужываць маштабавальную пракрутку scroll_wrapped_label=Маштабавальная пракрутка spread_none.title=Не выкарыстоўваць разгорнутыя старонкі spread_none_label=Без разгорнутых старонак spread_odd.title=Разгорнутыя старонкі пачынаючы з няцотных нумароў spread_odd_label=Няцотныя старонкі злева spread_even.title=Разгорнутыя старонкі пачынаючы з цотных нумароў spread_even_label=Цотныя старонкі злева # Document properties dialog box document_properties.title=Уласцівасці дакумента… document_properties_label=Уласцівасці дакумента… document_properties_file_name=Назва файла: document_properties_file_size=Памер файла: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} КБ ({{size_b}} байт) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} МБ ({{size_b}} байт) document_properties_title=Загаловак: document_properties_author=Аўтар: document_properties_subject=Тэма: document_properties_keywords=Ключавыя словы: document_properties_creation_date=Дата стварэння: document_properties_modification_date=Дата змянення: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Стваральнік: document_properties_producer=Вырабнік PDF: document_properties_version=Версія PDF: document_properties_page_count=Колькасць старонак: document_properties_page_size=Памер старонкі: document_properties_page_size_unit_inches=цаляў document_properties_page_size_unit_millimeters=мм document_properties_page_size_orientation_portrait=кніжная document_properties_page_size_orientation_landscape=альбомная document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Хуткі прагляд у Інтэрнэце: document_properties_linearized_yes=Так document_properties_linearized_no=Не document_properties_close=Закрыць print_progress_message=Падрыхтоўка дакумента да друку… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Скасаваць # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Паказаць/схаваць бакавую панэль toggle_sidebar_notification.title=Паказаць/схаваць бакавую панэль (дакумент мае змест/укладанні) toggle_sidebar_notification2.title=Паказаць/схаваць бакавую панэль (дакумент мае змест/укладанні/пласты) toggle_sidebar_label=Паказаць/схаваць бакавую панэль document_outline.title=Паказаць структуру дакумента (двайная пстрычка, каб разгарнуць /згарнуць усе элементы) document_outline_label=Структура дакумента attachments.title=Паказаць далучэнні attachments_label=Далучэнні layers.title=Паказаць пласты (двойчы пстрыкніце, каб скінуць усе пласты да прадвызначанага стану) layers_label=Пласты thumbs.title=Паказ мініяцюр thumbs_label=Мініяцюры findbar.title=Пошук у дакуменце findbar_label=Знайсці additional_layers=Дадатковыя пласты # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Старонка {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Старонка {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Мініяцюра старонкі {{page}} # Find panel button title and messages find_input.title=Шукаць find_input.placeholder=Шукаць у дакуменце… find_previous.title=Знайсці папярэдні выпадак выразу find_previous_label=Папярэдні find_next.title=Знайсці наступны выпадак выразу find_next_label=Наступны find_highlight=Падфарбаваць усе find_match_case_label=Адрозніваць вялікія/малыя літары find_entire_word_label=Словы цалкам find_reached_top=Дасягнуты пачатак дакумента, працяг з канца find_reached_bottom=Дасягнуты канец дакумента, працяг з пачатку # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} з {{total}} супадзення find_match_count[two]={{current}} з {{total}} супадзенняў find_match_count[few]={{current}} з {{total}} супадзенняў find_match_count[many]={{current}} з {{total}} супадзенняў find_match_count[other]={{current}} з {{total}} супадзенняў # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Больш за {{limit}} супадзенняў find_match_count_limit[one]=Больш за {{limit}} супадзенне find_match_count_limit[two]=Больш за {{limit}} супадзенняў find_match_count_limit[few]=Больш за {{limit}} супадзенняў find_match_count_limit[many]=Больш за {{limit}} супадзенняў find_match_count_limit[other]=Больш за {{limit}} супадзенняў find_not_found=Выраз не знойдзены # Error panel labels error_more_info=Падрабязней error_less_info=Сцісла error_close=Закрыць # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js в{{version}} (зборка: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Паведамленне: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Стос: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Файл: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Радок: {{line}} rendering_error=Здарылася памылка падчас адлюстравання старонкі. # Predefined zoom values page_scale_width=Шырыня старонкі page_scale_fit=Уцісненне старонкі page_scale_auto=Аўтаматычнае павелічэнне page_scale_actual=Сапраўдны памер # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Памылка loading_error=Здарылася памылка падчас загрузкі PDF. invalid_file_error=Няспраўны або пашкоджаны файл PDF. missing_file_error=Адсутны файл PDF. unexpected_response_error=Нечаканы адказ сервера. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Annotation] password_label=Увядзіце пароль, каб адкрыць гэты файл PDF. password_invalid=Нядзейсны пароль. Паспрабуйце зноў. password_ok=Добра password_cancel=Скасаваць printing_not_supported=Папярэджанне: друк не падтрымліваецца цалкам гэтым браўзерам. printing_not_ready=Увага: PDF не сцягнуты цалкам для друкавання. web_fonts_disabled=Шрыфты Сеціва забаронены: немагчыма ўжываць укладзеныя шрыфты PDF. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/bg/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Предишна страница previous_label=Предишна next.title=Следваща страница next_label=Следваща # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Страница # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=от {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} от {{pagesCount}}) zoom_out.title=Намаляване zoom_out_label=Намаляване zoom_in.title=Увеличаване zoom_in_label=Увеличаване zoom.title=Мащабиране presentation_mode.title=Превключване към режим на представяне presentation_mode_label=Режим на представяне open_file.title=Отваряне на файл open_file_label=Отваряне print.title=Отпечатване print_label=Отпечатване download.title=Изтегляне download_label=Изтегляне bookmark.title=Текущ изглед (копиране или отваряне в нов прозорец) bookmark_label=Текущ изглед # Secondary toolbar and context menu tools.title=Инструменти tools_label=Инструменти first_page.title=Към първата страница first_page.label=Към първата страница first_page_label=Към първата страница last_page.title=Към последната страница last_page.label=Към последната страница last_page_label=Към последната страница page_rotate_cw.title=Завъртане по час. стрелка page_rotate_cw.label=Завъртане по часовниковата стрелка page_rotate_cw_label=Завъртане по часовниковата стрелка page_rotate_ccw.title=Завъртане обратно на час. стрелка page_rotate_ccw.label=Завъртане обратно на часовниковата стрелка page_rotate_ccw_label=Завъртане обратно на часовниковата стрелка cursor_text_select_tool.title=Включване на инструмента за избор на текст cursor_text_select_tool_label=Инструмент за избор на текст cursor_hand_tool.title=Включване на инструмента ръка cursor_hand_tool_label=Инструмент ръка scroll_vertical.title=Използване на вертикално плъзгане scroll_vertical_label=Вертикално плъзгане scroll_horizontal.title=Използване на хоризонтално scroll_horizontal_label=Хоризонтално плъзгане scroll_wrapped.title=Използване на мащабируемо плъзгане scroll_wrapped_label=Мащабируемо плъзгане spread_none.title=Режимът на сдвояване е изключен spread_none_label=Без сдвояване spread_odd.title=Сдвояване, започвайки от нечетните страници spread_odd_label=Нечетните отляво spread_even.title=Сдвояване, започвайки от четните страници spread_even_label=Четните отляво # Document properties dialog box document_properties.title=Свойства на документа… document_properties_label=Свойства на документа… document_properties_file_name=Име на файл: document_properties_file_size=Големина на файл: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} КБ ({{size_b}} байта) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} МБ ({{size_b}} байта) document_properties_title=Заглавие: document_properties_author=Автор: document_properties_subject=Тема: document_properties_keywords=Ключови думи: document_properties_creation_date=Дата на създаване: document_properties_modification_date=Дата на промяна: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Създател: document_properties_producer=PDF произведен от: document_properties_version=Издание на PDF: document_properties_page_count=Брой страници: document_properties_page_size=Размер на страницата: document_properties_page_size_unit_inches=инч document_properties_page_size_unit_millimeters=мм document_properties_page_size_orientation_portrait=портрет document_properties_page_size_orientation_landscape=пейзаж document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Правни въпроси # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Бърз преглед: document_properties_linearized_yes=Да document_properties_linearized_no=Не document_properties_close=Затваряне print_progress_message=Подготвяне на документа за отпечатване… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Отказ # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Превключване на страничната лента toggle_sidebar_notification.title=Превключване на страничната лента (документи със структура/прикачени файлове) toggle_sidebar_label=Превключване на страничната лента document_outline.title=Показване на структурата на документа (двукратно щракване за свиване/разгъване на всичко) document_outline_label=Структура на документа attachments.title=Показване на притурките attachments_label=Притурки thumbs.title=Показване на миниатюрите thumbs_label=Миниатюри findbar.title=Намиране в документа findbar_label=Търсене # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Страница {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Миниатюра на страница {{page}} # Find panel button title and messages find_input.title=Търсене find_input.placeholder=Търсене в документа… find_previous.title=Намиране на предишно съвпадение на фразата find_previous_label=Предишна find_next.title=Намиране на следващо съвпадение на фразата find_next_label=Следваща find_highlight=Открояване на всички find_match_case_label=Съвпадение на регистъра find_entire_word_label=Цели думи find_reached_top=Достигнато е началото на документа, продължаване от края find_reached_bottom=Достигнат е краят на документа, продължаване от началото # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} от {{total}} съвпадение find_match_count[two]={{current}} от {{total}} съвпадения find_match_count[few]={{current}} от {{total}} съвпадения find_match_count[many]={{current}} от {{total}} съвпадения find_match_count[other]={{current}} от {{total}} съвпадения # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Повече от {{limit}} съвпадения find_match_count_limit[one]=Повече от {{limit}} съвпадение find_match_count_limit[two]=Повече от {{limit}} съвпадения find_match_count_limit[few]=Повече от {{limit}} съвпадения find_match_count_limit[many]=Повече от {{limit}} съвпадения find_match_count_limit[other]=Повече от {{limit}} съвпадения find_not_found=Фразата не е намерена # Error panel labels error_more_info=Повече информация error_less_info=По-малко информация error_close=Затваряне # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=Издание на PDF.js {{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Съобщение: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Стек: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Файл: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Ред: {{line}} rendering_error=Грешка при изчертаване на страницата. # Predefined zoom values page_scale_width=Ширина на страницата page_scale_fit=Вместване в страницата page_scale_auto=Автоматично мащабиране page_scale_actual=Действителен размер # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Грешка loading_error=Получи се грешка при зареждане на PDF-а. invalid_file_error=Невалиден или повреден PDF файл. missing_file_error=Липсващ PDF файл. unexpected_response_error=Неочакван отговор от сървъра. # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Анотация {{type}}] password_label=Въведете парола за отваряне на този PDF файл. password_invalid=Невалидна парола. Моля, опитайте отново. password_ok=Добре password_cancel=Отказ printing_not_supported=Внимание: Този четец няма пълна поддръжка на отпечатване. printing_not_ready=Внимание: Този PDF файл не е напълно зареден за печат. web_fonts_disabled=Уеб-шрифтовете са забранени: разрешаване на използването на вградените PDF шрифтове. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/bn/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=পূর্ববর্তী পাতা previous_label=পূর্ববর্তী next.title=পরবর্তী পাতা next_label=পরবর্তী # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=পাতা # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages={{pagesCount}} এর # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pagesCount}} এর {{pageNumber}}) zoom_out.title=ছোট আকারে প্রদর্শন zoom_out_label=ছোট আকারে প্রদর্শন zoom_in.title=বড় আকারে প্রদর্শন zoom_in_label=বড় আকারে প্রদর্শন zoom.title=বড় আকারে প্রদর্শন presentation_mode.title=উপস্থাপনা মোডে স্যুইচ করুন presentation_mode_label=উপস্থাপনা মোড open_file.title=ফাইল খুলুন open_file_label=খুলুন print.title=মুদ্রণ print_label=মুদ্রণ download.title=ডাউনলোড download_label=ডাউনলোড bookmark.title=বর্তমান অবস্থা (অনুলিপি অথবা নতুন উইন্ডো তে খুলুন) bookmark_label=বর্তমান অবস্থা # Secondary toolbar and context menu tools.title=টুল tools_label=টুল first_page.title=প্রথম পাতায় যাও first_page.label=প্রথম পাতায় যাও first_page_label=প্রথম পাতায় যাও last_page.title=শেষ পাতায় যাও last_page.label=শেষ পাতায় যাও last_page_label=শেষ পাতায় যাও page_rotate_cw.title=ঘড়ির কাঁটার দিকে ঘোরাও page_rotate_cw.label=ঘড়ির কাঁটার দিকে ঘোরাও page_rotate_cw_label=ঘড়ির কাঁটার দিকে ঘোরাও page_rotate_ccw.title=ঘড়ির কাঁটার বিপরীতে ঘোরাও page_rotate_ccw.label=ঘড়ির কাঁটার বিপরীতে ঘোরাও page_rotate_ccw_label=ঘড়ির কাঁটার বিপরীতে ঘোরাও cursor_text_select_tool.title=লেখা নির্বাচক টুল সক্রিয় করুন cursor_text_select_tool_label=লেখা নির্বাচক টুল cursor_hand_tool.title=হ্যান্ড টুল সক্রিয় করুন cursor_hand_tool_label=হ্যান্ড টুল scroll_vertical.title=উলম্ব স্ক্রলিং ব্যবহার করুন scroll_vertical_label=উলম্ব স্ক্রলিং scroll_horizontal.title=অনুভূমিক স্ক্রলিং ব্যবহার করুন scroll_horizontal_label=অনুভূমিক স্ক্রলিং scroll_wrapped.title=Wrapped স্ক্রোলিং ব্যবহার করুন scroll_wrapped_label=Wrapped স্ক্রোলিং spread_none.title=পেজ স্প্রেডগুলোতে যোগদান করবেন না spread_none_label=Spreads নেই spread_odd_label=বিজোড় Spreads spread_even_label=জোড় Spreads # Document properties dialog box document_properties.title=নথি বৈশিষ্ট্য… document_properties_label=নথি বৈশিষ্ট্য… document_properties_file_name=ফাইলের নাম: document_properties_file_size=ফাইলের আকার: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} কেবি ({{size_b}} বাইট) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} এমবি ({{size_b}} বাইট) document_properties_title=শিরোনাম: document_properties_author=লেখক: document_properties_subject=বিষয়: document_properties_keywords=কীওয়ার্ড: document_properties_creation_date=তৈরির তারিখ: document_properties_modification_date=পরিবর্তনের তারিখ: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=প্রস্তুতকারক: document_properties_producer=পিডিএফ প্রস্তুতকারক: document_properties_version=পিডিএফ সংষ্করণ: document_properties_page_count=মোট পাতা: document_properties_page_size=পাতার সাইজ: document_properties_page_size_unit_inches=এর মধ্যে document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=উলম্ব document_properties_page_size_orientation_landscape=অনুভূমিক document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=লেটার document_properties_page_size_name_legal=লীগাল # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Fast Web View: document_properties_linearized_yes=হ্যাঁ document_properties_linearized_no=না document_properties_close=বন্ধ print_progress_message=মুদ্রণের জন্য নথি প্রস্তুত করা হচ্ছে… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=বাতিল # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=সাইডবার টগল করুন toggle_sidebar_notification.title=সাইডবার টগল (নথিতে আউটলাইন/এটাচমেন্ট রয়েছে) toggle_sidebar_label=সাইডবার টগল করুন document_outline.title=নথির আউটলাইন দেখাও (সব আইটেম প্রসারিত/সঙ্কুচিত করতে ডবল ক্লিক করুন) document_outline_label=নথির রূপরেখা attachments.title=সংযুক্তি দেখাও attachments_label=সংযুক্তি thumbs.title=থাম্বনেইল সমূহ প্রদর্শন করুন thumbs_label=থাম্বনেইল সমূহ findbar.title=নথির মধ্যে খুঁজুন findbar_label=খুঁজুন # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=পাতা {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=পাতা {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas={{page}} পাতার থাম্বনেইল # Find panel button title and messages find_input.title=খুঁজুন find_input.placeholder=নথির মধ্যে খুঁজুন… find_previous.title=বাক্যাংশের পূর্ববর্তী উপস্থিতি অনুসন্ধান find_previous_label=পূর্ববর্তী find_next.title=বাক্যাংশের পরবর্তী উপস্থিতি অনুসন্ধান find_next_label=পরবর্তী find_highlight=সব হাইলাইট করা হবে find_match_case_label=অক্ষরের ছাঁদ মেলানো find_entire_word_label=সম্পূর্ণ শব্দ find_reached_top=পাতার শুরুতে পৌছে গেছে, নীচ থেকে আরম্ভ করা হয়েছে find_reached_bottom=পাতার শেষে পৌছে গেছে, উপর থেকে আরম্ভ করা হয়েছে # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{total}} এর {{current}} মিল find_match_count[two]={{total}} এর {{current}} মিল find_match_count[few]={{total}} এর {{current}} মিল find_match_count[many]={{total}} এর {{current}} মিল find_match_count[other]={{total}} এর {{current}} মিল # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]={{limit}} এর বেশি মিল find_match_count_limit[one]={{limit}} এর বেশি মিল find_match_count_limit[two]={{limit}} এর বেশি মিল find_match_count_limit[few]={{limit}} এর বেশি মিল find_match_count_limit[many]={{limit}} এর বেশি মিল find_match_count_limit[other]={{limit}} এর বেশি মিল find_not_found=বাক্যাংশ পাওয়া যায়নি # Error panel labels error_more_info=আরও তথ্য error_less_info=কম তথ্য error_close=বন্ধ # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=বার্তা: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stack: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=নথি: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=লাইন: {{line}} rendering_error=পাতা উপস্থাপনার সময় ত্রুটি দেখা দিয়েছে। # Predefined zoom values page_scale_width=পাতার প্রস্থ page_scale_fit=পাতা ফিট করুন page_scale_auto=স্বয়ংক্রিয় জুম page_scale_actual=প্রকৃত আকার # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=ত্রুটি loading_error=পিডিএফ লোড করার সময় ত্রুটি দেখা দিয়েছে। invalid_file_error=অকার্যকর অথবা ক্ষতিগ্রস্ত পিডিএফ ফাইল। missing_file_error=নিখোঁজ PDF ফাইল। unexpected_response_error=অপ্রত্যাশীত সার্ভার প্রতিক্রিয়া। # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} টীকা] password_label=পিডিএফ ফাইলটি ওপেন করতে পাসওয়ার্ড দিন। password_invalid=ভুল পাসওয়ার্ড। অনুগ্রহ করে আবার চেষ্টা করুন। password_ok=ঠিক আছে password_cancel=বাতিল printing_not_supported=সতর্কতা: এই ব্রাউজারে মুদ্রণ সম্পূর্ণভাবে সমর্থিত নয়। printing_not_ready=সতর্কীকরণ: পিডিএফটি মুদ্রণের জন্য সম্পূর্ণ লোড হয়নি। web_fonts_disabled=ওয়েব ফন্ট নিষ্ক্রিয়: সংযুক্ত পিডিএফ ফন্ট ব্যবহার করা যাচ্ছে না। ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/bo/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=དྲ་ངོས་སྔོན་མ previous_label=སྔོན་མ next.title=དྲ་ངོས་རྗེས་མ next_label=རྗེས་མ # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=ཤོག་ངོས # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=of {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} of {{pagesCount}}) zoom_out.title=Zoom Out zoom_out_label=Zoom Out zoom_in.title=Zoom In zoom_in_label=Zoom In zoom.title=Zoom presentation_mode.title=Switch to Presentation Mode presentation_mode_label=Presentation Mode open_file.title=Open File open_file_label=Open print.title=Print print_label=Print download.title=Download download_label=Download bookmark.title=Current view (copy or open in new window) bookmark_label=Current View # Secondary toolbar and context menu tools.title=Tools tools_label=Tools first_page.title=Go to First Page first_page.label=Go to First Page first_page_label=Go to First Page last_page.title=Go to Last Page last_page.label=Go to Last Page last_page_label=Go to Last Page page_rotate_cw.title=Rotate Clockwise page_rotate_cw.label=Rotate Clockwise page_rotate_cw_label=Rotate Clockwise page_rotate_ccw.title=Rotate Counterclockwise page_rotate_ccw.label=Rotate Counterclockwise page_rotate_ccw_label=Rotate Counterclockwise cursor_text_select_tool.title=Enable Text Selection Tool cursor_text_select_tool_label=Text Selection Tool cursor_hand_tool.title=Enable Hand Tool cursor_hand_tool_label=Hand Tool scroll_vertical.title=Use Vertical Scrolling scroll_vertical_label=Vertical Scrolling scroll_horizontal.title=Use Horizontal Scrolling scroll_horizontal_label=Horizontal Scrolling scroll_wrapped.title=Use Wrapped Scrolling scroll_wrapped_label=Wrapped Scrolling spread_none.title=Do not join page spreads spread_none_label=No Spreads spread_odd.title=Join page spreads starting with odd-numbered pages spread_odd_label=Odd Spreads spread_even.title=Join page spreads starting with even-numbered pages spread_even_label=Even Spreads # Document properties dialog box document_properties.title=Document Properties… document_properties_label=Document Properties… document_properties_file_name=File name: document_properties_file_size=File size: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Title: document_properties_author=Author: document_properties_subject=Subject: document_properties_keywords=Keywords: document_properties_creation_date=Creation Date: document_properties_modification_date=Modification Date: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Creator: document_properties_producer=PDF Producer: document_properties_version=PDF Version: document_properties_page_count=Page Count: document_properties_page_size=Page Size: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=portrait document_properties_page_size_orientation_landscape=landscape document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Fast Web View: document_properties_linearized_yes=Yes document_properties_linearized_no=No document_properties_close=Close print_progress_message=Preparing document for printing… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Cancel # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Toggle Sidebar toggle_sidebar_notification.title=Toggle Sidebar (document contains outline/attachments) toggle_sidebar_label=Toggle Sidebar document_outline.title=Show Document Outline (double-click to expand/collapse all items) document_outline_label=Document Outline attachments.title=Show Attachments attachments_label=Attachments thumbs.title=Show Thumbnails thumbs_label=Thumbnails findbar.title=Find in Document findbar_label=Find # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Page {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Thumbnail of Page {{page}} # Find panel button title and messages find_input.title=Find find_input.placeholder=Find in document… find_previous.title=Find the previous occurrence of the phrase find_previous_label=Previous find_next.title=Find the next occurrence of the phrase find_next_label=Next find_highlight=Highlight all find_match_case_label=Match case find_entire_word_label=Whole words find_reached_top=Reached top of document, continued from bottom find_reached_bottom=Reached end of document, continued from top # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} of {{total}} match find_match_count[two]={{current}} of {{total}} matches find_match_count[few]={{current}} of {{total}} matches find_match_count[many]={{current}} of {{total}} matches find_match_count[other]={{current}} of {{total}} matches # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=More than {{limit}} matches find_match_count_limit[one]=More than {{limit}} match find_match_count_limit[two]=More than {{limit}} matches find_match_count_limit[few]=More than {{limit}} matches find_match_count_limit[many]=More than {{limit}} matches find_match_count_limit[other]=More than {{limit}} matches find_not_found=Phrase not found # Error panel labels error_more_info=More Information error_less_info=Less Information error_close=Close # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Message: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stack: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=File: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Line: {{line}} rendering_error=An error occurred while rendering the page. # Predefined zoom values page_scale_width=Page Width page_scale_fit=Page Fit page_scale_auto=Automatic Zoom page_scale_actual=Actual Size # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Error loading_error=An error occurred while loading the PDF. invalid_file_error=Invalid or corrupted PDF file. missing_file_error=Missing PDF file. unexpected_response_error=Unexpected server response. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Annotation] password_label=Enter the password to open this PDF file. password_invalid=Invalid password. Please try again. password_ok=OK password_cancel=Cancel printing_not_supported=Warning: Printing is not fully supported by this browser. printing_not_ready=Warning: The PDF is not fully loaded for printing. web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/br/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Pajenn a-raok previous_label=A-raok next.title=Pajenn war-lerc'h next_label=War-lerc'h # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Pajenn # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=eus {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} war {{pagesCount}}) zoom_out.title=Zoum bihanaat zoom_out_label=Zoum bihanaat zoom_in.title=Zoum brasaat zoom_in_label=Zoum brasaat zoom.title=Zoum presentation_mode.title=Trec'haoliñ etrezek ar mod kinnigadenn presentation_mode_label=Mod kinnigadenn open_file.title=Digeriñ ur restr open_file_label=Digeriñ ur restr print.title=Moullañ print_label=Moullañ download.title=Pellgargañ download_label=Pellgargañ bookmark.title=Gwel bremanel (eilañ pe zigeriñ e-barzh ur prenestr nevez) bookmark_label=Gwel bremanel # Secondary toolbar and context menu tools.title=Ostilhoù tools_label=Ostilhoù first_page.title=Mont d'ar bajenn gentañ first_page.label=Mont d'ar bajenn gentañ first_page_label=Mont d'ar bajenn gentañ last_page.title=Mont d'ar bajenn diwezhañ last_page.label=Mont d'ar bajenn diwezhañ last_page_label=Mont d'ar bajenn diwezhañ page_rotate_cw.title=C'hwelañ gant roud ar bizied page_rotate_cw.label=C'hwelañ gant roud ar bizied page_rotate_cw_label=C'hwelañ gant roud ar bizied page_rotate_ccw.title=C'hwelañ gant roud gin ar bizied page_rotate_ccw.label=C'hwelañ gant roud gin ar bizied page_rotate_ccw_label=C'hwelañ gant roud gin ar bizied cursor_text_select_tool.title=Gweredekaat an ostilh diuzañ testenn cursor_text_select_tool_label=Ostilh diuzañ testenn cursor_hand_tool.title=Gweredekaat an ostilh dorn cursor_hand_tool_label=Ostilh dorn scroll_vertical.title=Arverañ an dibunañ a-blom scroll_vertical_label=Dibunañ a-serzh scroll_horizontal.title=Arverañ an dibunañ a-blaen scroll_horizontal_label=Dibunañ a-blaen scroll_wrapped.title=Arverañ an dibunañ paket scroll_wrapped_label=Dibunañ paket spread_none.title=Chom hep stagañ ar skignadurioù spread_none_label=Skignadenn ebet spread_odd.title=Lakaat ar pajennadoù en ur gregiñ gant ar pajennoù ampar spread_odd_label=Pajennoù ampar spread_even.title=Lakaat ar pajennadoù en ur gregiñ gant ar pajennoù par spread_even_label=Pajennoù par # Document properties dialog box document_properties.title=Perzhioù an teul… document_properties_label=Perzhioù an teul… document_properties_file_name=Anv restr: document_properties_file_size=Ment ar restr: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} Ke ({{size_b}} eizhbit) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} Me ({{size_b}} eizhbit) document_properties_title=Titl: document_properties_author=Aozer: document_properties_subject=Danvez: document_properties_keywords=Gerioù-alc'hwez: document_properties_creation_date=Deiziad krouiñ: document_properties_modification_date=Deiziad kemmañ: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Krouer: document_properties_producer=Kenderc'her PDF: document_properties_version=Handelv PDF: document_properties_page_count=Niver a bajennoù: document_properties_page_size=Ment ar bajenn: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=poltred document_properties_page_size_orientation_landscape=gweledva document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Lizher document_properties_page_size_name_legal=Lezennel # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Gwel Web Herrek: document_properties_linearized_yes=Ya document_properties_linearized_no=Ket document_properties_close=Serriñ print_progress_message=O prientiñ an teul evit moullañ... # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Nullañ # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Diskouez/kuzhat ar varrenn gostez toggle_sidebar_notification.title=Trec'haoliñ ar verrenn-gostez (ur steuñv pe stagadennoù a zo en teul) toggle_sidebar_notification2.title=Trec'haoliñ ar varrenn-gostez (ur steuñv pe stagadennoù a zo en teul) toggle_sidebar_label=Diskouez/kuzhat ar varrenn gostez document_outline.title=Diskouez steuñv an teul (daouglikit evit brasaat/bihanaat an holl elfennoù) document_outline_label=Sinedoù an teuliad attachments.title=Diskouez ar c'henstagadurioù attachments_label=Kenstagadurioù layers_label=Gwiskadoù thumbs.title=Diskouez ar melvennoù thumbs_label=Melvennoù findbar.title=Klask e-barzh an teuliad findbar_label=Klask # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Pajenn {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Pajenn {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Melvenn ar bajenn {{page}} # Find panel button title and messages find_input.title=Klask find_input.placeholder=Klask e-barzh an teuliad find_previous.title=Kavout an tamm frazenn kent o klotañ ganti find_previous_label=Kent find_next.title=Kavout an tamm frazenn war-lerc'h o klotañ ganti find_next_label=War-lerc'h find_highlight=Usskediñ pep tra find_match_case_label=Teurel evezh ouzh ar pennlizherennoù find_entire_word_label=Gerioù a-bezh find_reached_top=Tizhet eo bet derou ar bajenn, kenderc'hel diouzh an diaz find_reached_bottom=Tizhet eo bet dibenn ar bajenn, kenderc'hel diouzh ar c'hrec'h # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]=Klotadenn {{current}} war {{total}} find_match_count[two]=Klotadenn {{current}} war {{total}} find_match_count[few]=Klotadenn {{current}} war {{total}} find_match_count[many]=Klotadenn {{current}} war {{total}} find_match_count[other]=Klotadenn {{current}} war {{total}} # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Muioc'h eget {{limit}} a glotadennoù find_match_count_limit[one]=Muioc'h eget {{limit}} a glotadennoù find_match_count_limit[two]=Muioc'h eget {{limit}} a glotadennoù find_match_count_limit[few]=Muioc'h eget {{limit}} a glotadennoù find_match_count_limit[many]=Muioc'h eget {{limit}} a glotadennoù find_match_count_limit[other]=Muioc'h eget {{limit}} a glotadennoù find_not_found=N'haller ket kavout ar frazenn # Error panel labels error_more_info=Muioc'h a ditouroù error_less_info=Nebeutoc'h a ditouroù error_close=Serriñ # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js handelv {{version}} (kempunadur: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Kemennadenn: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Torn: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Restr: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Linenn: {{line}} rendering_error=Degouezhet ez eus bet ur fazi e-pad skrammañ ar bajennad. # Predefined zoom values page_scale_width=Led ar bajenn page_scale_fit=Pajenn a-bezh page_scale_auto=Zoum emgefreek page_scale_actual=Ment wir # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Fazi loading_error=Degouezhet ez eus bet ur fazi e-pad kargañ ar PDF. invalid_file_error=Restr PDF didalvoudek pe kontronet. missing_file_error=Restr PDF o vankout. unexpected_response_error=Respont dic'hortoz a-berzh an dafariad # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Notennañ] password_label=Enankit ar ger-tremen evit digeriñ ar restr PDF-mañ. password_invalid=Ger-tremen didalvoudek. Klaskit en-dro mar plij. password_ok=Mat eo password_cancel=Nullañ printing_not_supported=Kemenn: N'eo ket skoret penn-da-benn ar moullañ gant ar merdeer-mañ. printing_not_ready=Kemenn: N'hall ket bezañ moullet ar restr PDF rak n'eo ket karget penn-da-benn. web_fonts_disabled=Diweredekaet eo an nodrezhoù web: n'haller ket arverañ an nodrezhoù PDF enframmet. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/brx/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=आगोलनि बिलाइ previous_label=आगोलनि next.title=उननि बिलाइ next_label=उननि # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=बिलाइ # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages={{pagesCount}} नि # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pagesCount}} नि {{pageNumber}}) zoom_out.title=फिसायै जुम खालाम zoom_out_label=फिसायै जुम खालाम zoom_in.title=गेदेरै जुम खालाम zoom_in_label=गेदेरै जुम खालाम zoom.title=जुम खालाम presentation_mode.title=दिन्थिफुंनाय म'डआव थां presentation_mode_label=दिन्थिफुंनाय म'ड open_file.title=फाइलखौ खेव open_file_label=खेव print.title=साफाय print_label=साफाय download.title=डाउनल'ड खालाम download_label=डाउनल'ड खालाम bookmark.title=दानि नुथाय (गोदान उइन्ड'आव कपि खालाम एबा खेव) bookmark_label=दानि नुथाय # Secondary toolbar and context menu tools.title=टुल tools_label=टुल first_page.title=गिबि बिलाइआव थां first_page.label=गिबि बिलाइआव थां first_page_label=गिबि बिलाइआव थां last_page.title=जोबथा बिलाइआव थां last_page.label=जोबथा बिलाइआव थां last_page_label=जोबथा बिलाइआव थां page_rotate_cw.title=घरि गिदिंनाय फार्से फिदिं page_rotate_cw.label=घरि गिदिंनाय फार्से फिदिं page_rotate_cw_label=घरि गिदिंनाय फार्से फिदिं page_rotate_ccw.title=घरि गिदिंनाय उल्था फार्से फिदिं page_rotate_ccw.label=घरि गिदिंनाय उल्था फार्से फिदिं page_rotate_ccw_label=घरि गिदिंनाय उल्था फार्से फिदिं # Document properties dialog box document_properties.title=फोरमान बिलाइनि आखुथाय... document_properties_label=फोरमान बिलाइनि आखुथाय... document_properties_file_name=फाइलनि मुं: document_properties_file_size=फाइलनि महर: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} बाइट) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} बाइट) document_properties_title=बिमुं: document_properties_author=लिरगिरि: document_properties_subject=आयदा: document_properties_keywords=गाहाय सोदोब: document_properties_creation_date=सोरजिनाय अक्ट': document_properties_modification_date=सुद्रायनाय अक्ट': # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=सोरजिग्रा: document_properties_producer=PDF दिहुनग्रा: document_properties_version=PDF बिसान: document_properties_page_count=बिलाइनि हिसाब: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=प'र्ट्रेट document_properties_page_size_orientation_landscape=लेण्डस्केप document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=लायजाम # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized_yes=नंगौ document_properties_linearized_no=नङा document_properties_close=बन्द खालाम # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=नेवसि # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=टग्गल साइडबार toggle_sidebar_label=टग्गल साइडबार document_outline_label=फोरमान बिलाइ सिमा हांखो attachments.title=नांजाब होनायखौ दिन्थि attachments_label=नांजाब होनाय thumbs.title=थामनेइलखौ दिन्थि thumbs_label=थामनेइल findbar.title=फोरमान बिलाइआव नागिरना दिहुन findbar_label=नायगिरना दिहुन # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=बिलाइ {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=बिलाइ {{page}} नि थामनेइल # Find panel button title and messages find_input.title=नायगिरना दिहुन find_input.placeholder=फोरमान बिलाइआव नागिरना दिहुन... find_previous.title=बाथ्रा खोन्दोबनि सिगांनि नुजाथिनायखौ नागिर find_previous_label=आगोलनि find_next.title=बाथ्रा खोन्दोबनि उननि नुजाथिनायखौ नागिर find_next_label=उननि find_highlight=गासैखौबो हाइलाइट खालाम find_match_case_label=गोरोबनाय केस find_reached_top=थालो निफ्राय जागायनानै फोरमान बिलाइनि बिजौआव सौहैबाय find_reached_bottom=बिजौ निफ्राय जागायनानै फोरमान बिलाइनि बिजौआव सौहैबाय # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_not_found=बाथ्रा खोन्दोब मोनाखै # Error panel labels error_more_info=गोबां फोरमायथिहोग्रा error_less_info=खम फोरमायथिहोग्रा error_close=बन्द खालाम # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=खौरां: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=स्टेक: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=फाइल: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=सारि: {{line}} rendering_error=बिलाइखौ राव सोलायनाय समाव मोनसे गोरोन्थि जादों। # Predefined zoom values page_scale_width=बिलाइनि गुवार page_scale_fit=बिलाइ गोरोबनाय page_scale_auto=गावनोगाव जुम page_scale_actual=थार महर # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=गोरोन्थि loading_error=PDF ल'ड खालामनाय समाव मोनसे गोरोन्थि जाबाय। invalid_file_error=बाहायजायै एबा गाज्रि जानाय PDF फाइल missing_file_error=गोमानाय PDF फाइल unexpected_response_error=मिजिंथियै सार्भार फिननाय। # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} सोदोब बेखेवनाय] password_label=बे PDF फाइलखौ खेवनो पासवार्ड हाबहो। password_invalid=बाहायजायै पासवार्ड। अननानै फिन नाजा। password_ok=OK password_cancel=नेवसि printing_not_supported=सांग्रांथि: साफायनाया बे ब्राउजारजों आबुङै हेफाजाब होजाया। printing_not_ready=सांग्रांथि: PDF खौ साफायनायनि थाखाय फुरायै ल'ड खालामाखै। web_fonts_disabled=वेब फन्टखौ लोरबां खालामबाय: अरजाबहोनाय PDF फन्टखौ बाहायनो हायाखै। ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/bs/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Prethodna strana previous_label=Prethodna next.title=Sljedeća strna next_label=Sljedeća # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Strana # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=od {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} od {{pagesCount}}) zoom_out.title=Umanji zoom_out_label=Umanji zoom_in.title=Uvećaj zoom_in_label=Uvećaj zoom.title=Uvećanje presentation_mode.title=Prebaci se u prezentacijski režim presentation_mode_label=Prezentacijski režim open_file.title=Otvori fajl open_file_label=Otvori print.title=Štampaj print_label=Štampaj download.title=Preuzmi download_label=Preuzmi bookmark.title=Trenutni prikaz (kopiraj ili otvori u novom prozoru) bookmark_label=Trenutni prikaz # Secondary toolbar and context menu tools.title=Alati tools_label=Alati first_page.title=Idi na prvu stranu first_page.label=Idi na prvu stranu first_page_label=Idi na prvu stranu last_page.title=Idi na zadnju stranu last_page.label=Idi na zadnju stranu last_page_label=Idi na zadnju stranu page_rotate_cw.title=Rotiraj u smjeru kazaljke na satu page_rotate_cw.label=Rotiraj u smjeru kazaljke na satu page_rotate_cw_label=Rotiraj u smjeru kazaljke na satu page_rotate_ccw.title=Rotiraj suprotno smjeru kazaljke na satu page_rotate_ccw.label=Rotiraj suprotno smjeru kazaljke na satu page_rotate_ccw_label=Rotiraj suprotno smjeru kazaljke na satu cursor_text_select_tool.title=Omogući alat za označavanje teksta cursor_text_select_tool_label=Alat za označavanje teksta cursor_hand_tool.title=Omogući ručni alat cursor_hand_tool_label=Ručni alat # Document properties dialog box document_properties.title=Svojstva dokumenta... document_properties_label=Svojstva dokumenta... document_properties_file_name=Naziv fajla: document_properties_file_size=Veličina fajla: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bajta) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bajta) document_properties_title=Naslov: document_properties_author=Autor: document_properties_subject=Predmet: document_properties_keywords=Ključne riječi: document_properties_creation_date=Datum kreiranja: document_properties_modification_date=Datum promjene: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Kreator: document_properties_producer=PDF stvaratelj: document_properties_version=PDF verzija: document_properties_page_count=Broj stranica: document_properties_page_size=Veličina stranice: document_properties_page_size_unit_inches=u document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=uspravno document_properties_page_size_orientation_landscape=vodoravno document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Pismo document_properties_page_size_name_legal=Pravni # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) document_properties_close=Zatvori print_progress_message=Pripremam dokument za štampu… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Otkaži # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Uključi/isključi bočnu traku toggle_sidebar_notification.title=Uključi/isključi sidebar (dokument sadrži outline/priloge) toggle_sidebar_label=Uključi/isključi bočnu traku document_outline.title=Prikaži outline dokumenta (dvoklik za skupljanje/širenje svih stavki) document_outline_label=Konture dokumenta attachments.title=Prikaži priloge attachments_label=Prilozi thumbs.title=Prikaži thumbnailove thumbs_label=Thumbnailovi findbar.title=Pronađi u dokumentu findbar_label=Pronađi # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Strana {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Thumbnail strane {{page}} # Find panel button title and messages find_input.title=Pronađi find_input.placeholder=Pronađi u dokumentu… find_previous.title=Pronađi prethodno pojavljivanje fraze find_previous_label=Prethodno find_next.title=Pronađi sljedeće pojavljivanje fraze find_next_label=Sljedeće find_highlight=Označi sve find_match_case_label=Osjetljivost na karaktere find_reached_top=Dostigao sam vrh dokumenta, nastavljam sa dna find_reached_bottom=Dostigao sam kraj dokumenta, nastavljam sa vrha find_not_found=Fraza nije pronađena # Error panel labels error_more_info=Više informacija error_less_info=Manje informacija error_close=Zatvori # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Poruka: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stack: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Fajl: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Linija: {{line}} rendering_error=Došlo je do greške prilikom renderiranja strane. # Predefined zoom values page_scale_width=Širina strane page_scale_fit=Uklopi stranu page_scale_auto=Automatsko uvećanje page_scale_actual=Stvarna veličina # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Greška loading_error=Došlo je do greške prilikom učitavanja PDF-a. invalid_file_error=Neispravan ili oštećen PDF fajl. missing_file_error=Nedostaje PDF fajl. unexpected_response_error=Neočekivani odgovor servera. # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} pribilješka] password_label=Upišite lozinku da biste otvorili ovaj PDF fajl. password_invalid=Pogrešna lozinka. Pokušajte ponovo. password_ok=OK password_cancel=Otkaži printing_not_supported=Upozorenje: Štampanje nije u potpunosti podržano u ovom browseru. printing_not_ready=Upozorenje: PDF nije u potpunosti učitan za štampanje. web_fonts_disabled=Web fontovi su onemogućeni: nemoguće koristiti ubačene PDF fontove. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ca/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Pàgina anterior previous_label=Anterior next.title=Pàgina següent next_label=Següent # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Pàgina # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=de {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} de {{pagesCount}}) zoom_out.title=Redueix zoom_out_label=Redueix zoom_in.title=Amplia zoom_in_label=Amplia zoom.title=Escala presentation_mode.title=Canvia al mode de presentació presentation_mode_label=Mode de presentació open_file.title=Obre el fitxer open_file_label=Obre print.title=Imprimeix print_label=Imprimeix download.title=Baixa download_label=Baixa bookmark.title=Vista actual (copia o obre en una finestra nova) bookmark_label=Vista actual # Secondary toolbar and context menu tools.title=Eines tools_label=Eines first_page.title=Vés a la primera pàgina first_page.label=Vés a la primera pàgina first_page_label=Vés a la primera pàgina last_page.title=Vés a l'última pàgina last_page.label=Vés a l'última pàgina last_page_label=Vés a l'última pàgina page_rotate_cw.title=Gira cap a la dreta page_rotate_cw.label=Gira cap a la dreta page_rotate_cw_label=Gira cap a la dreta page_rotate_ccw.title=Gira cap a l'esquerra page_rotate_ccw.label=Gira cap a l'esquerra page_rotate_ccw_label=Gira cap a l'esquerra cursor_text_select_tool.title=Habilita l'eina de selecció de text cursor_text_select_tool_label=Eina de selecció de text cursor_hand_tool.title=Habilita l'eina de mà cursor_hand_tool_label=Eina de mà scroll_vertical.title=Utilitza el desplaçament vertical scroll_vertical_label=Desplaçament vertical scroll_horizontal.title=Utilitza el desplaçament horitzontal scroll_horizontal_label=Desplaçament horitzontal scroll_wrapped.title=Activa el desplaçament continu scroll_wrapped_label=Desplaçament continu spread_none.title=No agrupis les pàgines de dues en dues spread_none_label=Una sola pàgina spread_odd.title=Mostra dues pàgines començant per les pàgines de numeració senar spread_odd_label=Doble pàgina (senar) spread_even.title=Mostra dues pàgines començant per les pàgines de numeració parell spread_even_label=Doble pàgina (parell) # Document properties dialog box document_properties.title=Propietats del document… document_properties_label=Propietats del document… document_properties_file_name=Nom del fitxer: document_properties_file_size=Mida del fitxer: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Títol: document_properties_author=Autor: document_properties_subject=Assumpte: document_properties_keywords=Paraules clau: document_properties_creation_date=Data de creació: document_properties_modification_date=Data de modificació: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Creador: document_properties_producer=Generador de PDF: document_properties_version=Versió de PDF: document_properties_page_count=Nombre de pàgines: document_properties_page_size=Mida de la pàgina: document_properties_page_size_unit_inches=polzades document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=vertical document_properties_page_size_orientation_landscape=apaïsat document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Carta document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Vista web ràpida: document_properties_linearized_yes=Sí document_properties_linearized_no=No document_properties_close=Tanca print_progress_message=S'està preparant la impressió del document… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Cancel·la # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Mostra/amaga la barra lateral toggle_sidebar_notification.title=Mostra/amaga la barra lateral (el document conté un esquema o adjuncions) toggle_sidebar_label=Mostra/amaga la barra lateral document_outline.title=Mostra l'esquema del document (doble clic per ampliar/reduir tots els elements) document_outline_label=Contorn del document attachments.title=Mostra les adjuncions attachments_label=Adjuncions thumbs.title=Mostra les miniatures thumbs_label=Miniatures findbar.title=Cerca al document findbar_label=Cerca # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Pàgina {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Pàgina {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Miniatura de la pàgina {{page}} # Find panel button title and messages find_input.title=Cerca find_input.placeholder=Cerca al document… find_previous.title=Cerca l'anterior coincidència de l'expressió find_previous_label=Anterior find_next.title=Cerca la següent coincidència de l'expressió find_next_label=Següent find_highlight=Ressalta-ho tot find_match_case_label=Distingeix entre majúscules i minúscules find_entire_word_label=Paraules senceres find_reached_top=S'ha arribat al principi del document, es continua pel final find_reached_bottom=S'ha arribat al final del document, es continua pel principi # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} de {{total}} coincidència find_match_count[two]={{current}} de {{total}} coincidències find_match_count[few]={{current}} de {{total}} coincidències find_match_count[many]={{current}} de {{total}} coincidències find_match_count[other]={{current}} de {{total}} coincidències # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Més de {{limit}} coincidències find_match_count_limit[one]=Més d'{{limit}} coincidència find_match_count_limit[two]=Més de {{limit}} coincidències find_match_count_limit[few]=Més de {{limit}} coincidències find_match_count_limit[many]=Més de {{limit}} coincidències find_match_count_limit[other]=Més de {{limit}} coincidències find_not_found=No s'ha trobat l'expressió # Error panel labels error_more_info=Més informació error_less_info=Menys informació error_close=Tanca # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (muntatge: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Missatge: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Pila: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Fitxer: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Línia: {{line}} rendering_error=S'ha produït un error mentre es renderitzava la pàgina. # Predefined zoom values page_scale_width=Amplada de la pàgina page_scale_fit=Ajusta la pàgina page_scale_auto=Zoom automàtic page_scale_actual=Mida real # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Error loading_error=S'ha produït un error en carregar el PDF. invalid_file_error=El fitxer PDF no és vàlid o està malmès. missing_file_error=Falta el fitxer PDF. unexpected_response_error=Resposta inesperada del servidor. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Anotació {{type}}] password_label=Introduïu la contrasenya per obrir aquest fitxer PDF. password_invalid=La contrasenya no és vàlida. Torneu-ho a provar. password_ok=D'acord password_cancel=Cancel·la printing_not_supported=Avís: la impressió no és plenament funcional en aquest navegador. printing_not_ready=Atenció: el PDF no s'ha acabat de carregar per imprimir-lo. web_fonts_disabled=Els tipus de lletra web estan desactivats: no es poden utilitzar els tipus de lletra incrustats al PDF. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/cak/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Jun kan ruxaq previous_label=Jun kan next.title=Jun chik ruxaq next_label=Jun chik # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Ruxaq # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=richin {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} richin {{pagesCount}}) zoom_out.title=Tich'utinirisäx zoom_out_label=Tich'utinirisäx zoom_in.title=Tinimirisäx zoom_in_label=Tinimirisäx zoom.title=Sum presentation_mode.title=Tijal ri rub'anikil niwachin presentation_mode_label=Pa rub'eyal niwachin open_file.title=Tijaq Yakb'äl open_file_label=Tijaq print.title=Titz'ajb'äx print_label=Titz'ajb'äx download.title=Tiqasäx download_label=Tiqasäx bookmark.title=Rutz'etik wakami (tiwachib'ëx o tijaq pa jun k'ak'a' tzuwäch) bookmark_label=Rutzub'al wakami # Secondary toolbar and context menu tools.title=Samajib'äl tools_label=Samajib'äl first_page.title=Tib'e pa nab'ey ruxaq first_page.label=Tib'e pa nab'ey ruxaq first_page_label=Tib'e pa nab'ey ruxaq last_page.title=Tib'e pa ruk'isib'äl ruxaq last_page.label=Tib'e pa ruk'isib'äl ruxaq last_page_label=Tib'e pa ruk'isib'äl ruxaq page_rotate_cw.title=Tisutïx pan ajkiq'a' page_rotate_cw.label=Tisutïx pan ajkiq'a' page_rotate_cw_label=Tisutïx pan ajkiq'a' page_rotate_ccw.title=Tisutïx pan ajxokon page_rotate_ccw.label=Tisutïx pan ajxokon page_rotate_ccw_label=Tisutïx pan ajxokon cursor_text_select_tool.title=Titzij ri rusamajib'al Rucha'ik Rucholajem Tzij cursor_text_select_tool_label=Rusamajib'al Rucha'ik Rucholajem Tzij cursor_hand_tool.title=Titzij ri q'ab'aj samajib'äl cursor_hand_tool_label=Q'ab'aj Samajib'äl scroll_vertical.title=Tokisäx Pa'äl Q'axanem scroll_vertical_label=Pa'äl Q'axanem scroll_horizontal.title=Tokisäx Kotz'öl Q'axanem scroll_horizontal_label=Kotz'öl Q'axanem scroll_wrapped.title=Tokisäx Tzub'aj Q'axanem scroll_wrapped_label=Tzub'aj Q'axanem spread_none.title=Man ketun taq ruxaq pa rub'eyal wuj spread_none_label=Majun Rub'eyal spread_odd.title=Ke'atunu' ri taq ruxaq rik'in natikirisaj rik'in jun man k'ulaj ta rajilab'al spread_odd_label=Man K'ulaj Ta Rub'eyal spread_even.title=Ke'atunu' ri taq ruxaq rik'in natikirisaj rik'in jun k'ulaj rajilab'al spread_even_label=K'ulaj Rub'eyal # Document properties dialog box document_properties.title=Taq richinil wuj… document_properties_label=Taq richinil wuj… document_properties_file_name=Rub'i' yakb'äl: document_properties_file_size=Runimilem yakb'äl: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=B'i'aj: document_properties_author=B'anel: document_properties_subject=Taqikil: document_properties_keywords=Kixe'el taq tzij: document_properties_creation_date=Ruq'ijul xtz'uk: document_properties_modification_date=Ruq'ijul xjalwachïx: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Q'inonel: document_properties_producer=PDF b'anöy: document_properties_version=PDF ruwäch: document_properties_page_count=Jarupe' ruxaq: document_properties_page_size=Runimilem ri Ruxaq: document_properties_page_size_unit_inches=pa document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=rupalem document_properties_page_size_orientation_landscape=rukotz'olem document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Loman wuj document_properties_page_size_name_legal=Taqanel tzijol # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Anin Rutz'etik Ajk'amaya'l: document_properties_linearized_yes=Ja' document_properties_linearized_no=Mani document_properties_close=Titz'apïx print_progress_message=Ruchojmirisaxik wuj richin nitz'ajb'äx… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Tiq'at # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Tijal ri ajxikin kajtz'ik toggle_sidebar_notification.title=Tik'ex ri ajxikin yuqkajtz'ik (ri wuj eruk'wan taq ruchi'/taqoj taq yakb'äl) toggle_sidebar_notification2.title=Tik'ex ri ajxikin yuqkajtz'ik (ri wuj eruk'wan taq ruchi'/taqo/kuchuj) toggle_sidebar_label=Tijal ri ajxikin kajtz'ik document_outline.title=Tik'ut pe ruch'akulal wuj (kamul-pitz'oj richin nirik'/nich'utinirisäx ronojel ruch'akulal) document_outline_label=Ruch'akulal wuj attachments.title=Kek'ut pe ri taq taqoj attachments_label=Taq taqoj layers.title=Kek'ut taq Kuchuj (ka'i'-pitz' richin yetzolïx ronojel ri taq kuchuj e k'o wi) layers_label=Taq kuchuj thumbs.title=Kek'ut pe taq ch'utiq thumbs_label=Koköj findbar.title=Tikanöx chupam ri wuj findbar_label=Tikanöx additional_layers=Tz'aqat ta Kuchuj # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Ruxaq {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Ruxaq {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Ruch'utinirisaxik ruxaq {{page}} # Find panel button title and messages find_input.title=Tikanöx find_input.placeholder=Tikanöx pa wuj… find_previous.title=Tib'an b'enam pa ri jun kan q'aptzij xilitäj find_previous_label=Jun kan find_next.title=Tib'e pa ri jun chik pajtzij xilitäj find_next_label=Jun chik find_highlight=Tiya' retal ronojel find_match_case_label=Tuk'äm ri' kik'in taq nimatz'ib' chuqa' taq ch'utitz'ib' find_entire_word_label=Tz'aqät taq tzij find_reached_top=Xb'eq'i' ri rutikirib'al wuj, xtikanöx k'a pa ruk'isib'äl find_reached_bottom=Xb'eq'i' ri ruk'isib'äl wuj, xtikanöx pa rutikirib'al # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} richin {{total}} nuk'äm ri' find_match_count[two]={{current}} richin {{total}} nikik'äm ki' find_match_count[few]={{current}} richin {{total}} nikik'äm ki' find_match_count[many]={{current}} richin {{total}} nikik'äm ki' find_match_count[other]={{current}} richin {{total}} nikik'äm ki' # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=K'ïy chi re {{limit}} nikik'äm ki' find_match_count_limit[one]=K'ïy chi re {{limit}} nuk'äm ri' find_match_count_limit[two]=K'ïy chi re {{limit}} nikik'äm ki' find_match_count_limit[few]=K'ïy chi re {{limit}} nikik'äm ki' find_match_count_limit[many]=K'ïy chi re {{limit}} nikik'äm ki' find_match_count_limit[other]=K'ïy chi re {{limit}} nikik'äm ki' find_not_found=Man xilitäj ta ri pajtzij # Error panel labels error_more_info=Ch'aqa' chik rutzijol error_less_info=Jub'a' ok rutzijol error_close=Titz'apïx # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Uqxa'n: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Tzub'aj: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Yakb'äl: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=B'ey: {{line}} rendering_error=Xk'ulwachitäj jun sachoj toq ninuk'wachij ri ruxaq. # Predefined zoom values page_scale_width=Ruwa ruxaq page_scale_fit=Tinuk' ruxaq page_scale_auto=Yonil chi nimilem page_scale_actual=Runimilem Wakami # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Sachoj loading_error=\u0020Xk'ulwachitäj jun sach'oj toq xnuk'ux ri PDF . invalid_file_error=Man oke ta o yujtajinäq ri PDF yakb'äl. missing_file_error=Man xilitäj ta ri PDF yakb'äl. unexpected_response_error=Man oyob'en ta tz'olin rutzij ruk'u'x samaj. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Tz'ib'anïk] password_label=Tatz'ib'aj ri ewan tzij richin najäq re yakb'äl re' pa PDF. password_invalid=Man okel ta ri ewan tzij: Tatojtob'ej chik. password_ok=Ütz password_cancel=Tiq'at printing_not_supported=Rutzijol k'ayewal: Ri rutz'ajb'axik man koch'el ta ronojel pa re okik'amaya'l re'. printing_not_ready=Rutzijol k'ayewal: Ri PDF man xusamajij ta ronojel richin nitz'ajb'äx. web_fonts_disabled=E chupül ri taq ajk'amaya'l tz'ib': man tikirel ta nokisäx ri taq tz'ib' PDF pa ch'ikenïk ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ckb/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=پەڕەی پێشوو previous_label=پێشوو next.title=پەڕەی دوواتر next_label=دوواتر # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=پەرە # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=لە {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} لە {{pagesCount}}) zoom_out.title=ڕۆچوونی zoom_out_label=ڕۆچوونی zoom_in.title=هێنانەپێش zoom_in_label=هێنانەپێش zoom.title=زووم open_file.title=پەڕگە بکەرەوە open_file_label=کردنەوە print.title=چاپکردن print_label=چاپکردن download.title=داگرتن download_label=داگرتن # Secondary toolbar and context menu tools.title=ئامرازەکان tools_label=ئامرازەکان first_page.title=برۆ بۆ یەکەم پەڕە first_page.label=بڕۆ بۆ یەکەم پەڕە first_page_label=بڕۆ بۆ یەکەم پەڕە last_page.title=بڕۆ بۆ کۆتا پەڕە last_page.label=بڕۆ بۆ کۆتا پەڕە last_page_label=بڕۆ بۆ کۆتا پەڕە page_rotate_cw.title=ئاڕاستەی میلی کاتژمێر page_rotate_cw.label=ئاڕاستەی میلی کاتژمێر page_rotate_cw_label=ئاڕاستەی میلی کاتژمێر page_rotate_ccw.title=پێچەوانەی میلی کاتژمێر page_rotate_ccw.label=پێچەوانەی میلی کاتژمێر page_rotate_ccw_label=پێچەوانەی میلی کاتژمێر cursor_text_select_tool.title=توڵامرازی نیشانکەری دەق چالاک بکە cursor_text_select_tool_label=توڵامرازی نیشانکەری دەق cursor_hand_tool.title=توڵامرازی دەستی چالاک بکە cursor_hand_tool_label=توڵامرازی دەستی scroll_vertical.title=ناردنی ئەستوونی بەکاربێنە scroll_vertical_label=ناردنی ئەستوونی scroll_horizontal.title=ناردنی ئاسۆیی بەکاربێنە scroll_horizontal_label=ناردنی ئاسۆیی scroll_wrapped.title=ناردنی لوولکراو بەکاربێنە scroll_wrapped_label=ناردنی لوولکراو # Document properties dialog box document_properties_file_name=ناوی پەڕگە: document_properties_file_size=قەبارەی پەڕگە: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} کب ({{size_b}} بایت) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} مب ({{size_b}} بایت) document_properties_title=سەردێڕ: document_properties_author=نووسەر document_properties_subject=بابەت: document_properties_keywords=کلیلەوشە: document_properties_creation_date=بەرواری درووستکردن: document_properties_modification_date=بەرواری دەستکاریکردن: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=درووستکەر: document_properties_producer=بەرهەمهێنەری PDF: document_properties_version=وەشانی PDF: document_properties_page_count=ژمارەی پەرەکان: document_properties_page_size=قەبارەی پەڕە: document_properties_page_size_unit_inches=ئینچ document_properties_page_size_unit_millimeters=ملم document_properties_page_size_orientation_portrait=پۆرترەیت(درێژ) document_properties_page_size_orientation_landscape=پانیی document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=نامە document_properties_page_size_name_legal=یاسایی # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=پیشاندانی وێبی خێرا: document_properties_linearized_yes=بەڵێ document_properties_linearized_no=نەخێر document_properties_close=داخستن print_progress_message=بەڵگەنامە ئامادەدەکرێت بۆ چاپکردن... # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=پاشگەزبوونەوە # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=لاتەنیشت پیشاندان/شاردنەوە toggle_sidebar_label=لاتەنیشت پیشاندان/شاردنەوە document_outline_label=سنووری چوارچێوە attachments.title=پاشکۆکان پیشان بدە attachments_label=پاشکۆکان layers_label=چینەکان thumbs.title=وێنۆچکە پیشان بدە thumbs_label=وێنۆچکە findbar.title=لە بەڵگەنامە بگەرێ findbar_label=دۆزینەوە additional_layers=چینی زیاتر # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=پەڕەی {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=پەڕەی {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=وێنۆچکەی پەڕەی {{page}} # Find panel button title and messages find_input.title=دۆزینەوە find_input.placeholder=لە بەڵگەنامە بگەرێ... find_previous.title=هەبوونی پێشوو بدۆزرەوە لە ڕستەکەدا find_previous_label=پێشوو find_next.title=هەبوونی داهاتوو بدۆزەرەوە لە ڕستەکەدا find_next_label=دوواتر find_highlight=هەمووی نیشانە بکە find_match_case_label=دۆخی لەیەکچوون find_entire_word_label=هەموو وشەکان find_reached_top=گەشتیتە سەرەوەی بەڵگەنامە، لە خوارەوە دەستت پێکرد find_reached_bottom=گەشتیتە کۆتایی بەڵگەنامە. لەسەرەوە دەستت پێکرد # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} لە کۆی {{total}} لەیەکچوو find_match_count[two]={{current}} لە کۆی {{total}} لەیەکچوو find_match_count[few]={{current}} لە کۆی {{total}} لەیەکچوو find_match_count[many]={{current}} لە کۆی {{total}} لەیەکچوو find_match_count[other]={{current}} لە کۆی {{total}} لەیەکچوو # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=زیاتر لە {{limit}} لەیەکچوو find_match_count_limit[one]=زیاتر لە {{limit}} لەیەکچوو find_match_count_limit[two]=زیاتر لە {{limit}} لەیەکچوو find_match_count_limit[few]=زیاتر لە {{limit}} لەیەکچوو find_match_count_limit[many]=زیاتر لە {{limit}} لەیەکچوو find_match_count_limit[other]=زیاتر لە {{limit}} لەیەکچوو find_not_found=نووسین نەدۆزرایەوە # Error panel labels error_more_info=زانیاری زیاتر error_less_info=زانیاری کەمتر error_close=داخستن # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=پەیام: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=لەسەریەک: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=پەڕگە: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=هێڵ: {{line}} rendering_error=هەڵەیەک ڕوویدا لە کاتی پوختەکردنی (ڕێندەر) پەڕە. # Predefined zoom values page_scale_width=پانی پەڕە page_scale_fit=پڕبوونی پەڕە page_scale_auto=زوومی خۆکار page_scale_actual=قەبارەی ڕاستی # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=هەڵە loading_error=هەڵەیەک ڕوویدا لە کاتی بارکردنی PDF. invalid_file_error=پەڕگەی pdf تێکچووە یان نەگونجاوە. missing_file_error=پەڕگەی pdf بوونی نیە. unexpected_response_error=وەڵامی ڕاژەخوازی نەخوازراو. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} سەرنج] password_label=وشەی تێپەڕ بنووسە بۆ کردنەوەی پەڕگەی pdf. password_invalid=وشەی تێپەڕ هەڵەیە. تکایە دووبارە هەوڵ بدەرەوە. password_ok=باشە password_cancel=پاشگەزبوونەوە printing_not_supported=ئاگاداربە: چاپکردن بە تەواوی پشتگیر ناکرێت لەم وێبگەڕە. printing_not_ready=ئاگاداربە: PDF بە تەواوی بارنەبووە بۆ چاپکردن. web_fonts_disabled=جۆرەپیتی وێب ناچالاکە: نەتوانی جۆرەپیتی تێخراوی ناو pdfـەکە بەکاربێت. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/cs/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Přejde na předchozí stránku previous_label=Předchozí next.title=Přejde na následující stránku next_label=Další # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Stránka # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=z {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} z {{pagesCount}}) zoom_out.title=Zmenší velikost zoom_out_label=Zmenšit zoom_in.title=Zvětší velikost zoom_in_label=Zvětšit zoom.title=Nastaví velikost presentation_mode.title=Přepne do režimu prezentace presentation_mode_label=Režim prezentace open_file.title=Otevře soubor open_file_label=Otevřít print.title=Vytiskne dokument print_label=Vytisknout download.title=Stáhne dokument download_label=Stáhnout bookmark.title=Současný pohled (kopírovat nebo otevřít v novém okně) bookmark_label=Současný pohled # Secondary toolbar and context menu tools.title=Nástroje tools_label=Nástroje first_page.title=Přejde na první stránku first_page.label=Přejít na první stránku first_page_label=Přejít na první stránku last_page.title=Přejde na poslední stránku last_page.label=Přejít na poslední stránku last_page_label=Přejít na poslední stránku page_rotate_cw.title=Otočí po směru hodin page_rotate_cw.label=Otočit po směru hodin page_rotate_cw_label=Otočit po směru hodin page_rotate_ccw.title=Otočí proti směru hodin page_rotate_ccw.label=Otočit proti směru hodin page_rotate_ccw_label=Otočit proti směru hodin cursor_text_select_tool.title=Povolí výběr textu cursor_text_select_tool_label=Výběr textu cursor_hand_tool.title=Povolí nástroj ručička cursor_hand_tool_label=Nástroj ručička scroll_vertical.title=Použít svislé posouvání scroll_vertical_label=Svislé posouvání scroll_horizontal.title=Použít vodorovné posouvání scroll_horizontal_label=Vodorovné posouvání scroll_wrapped.title=Použít postupné posouvání scroll_wrapped_label=Postupné posouvání spread_none.title=Nesdružovat stránky spread_none_label=Žádné sdružení spread_odd.title=Sdruží stránky s umístěním lichých vlevo spread_odd_label=Sdružení stránek (liché vlevo) spread_even.title=Sdruží stránky s umístěním sudých vlevo spread_even_label=Sdružení stránek (sudé vlevo) # Document properties dialog box document_properties.title=Vlastnosti dokumentu… document_properties_label=Vlastnosti dokumentu… document_properties_file_name=Název souboru: document_properties_file_size=Velikost souboru: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bajtů) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bajtů) document_properties_title=Název stránky: document_properties_author=Autor: document_properties_subject=Předmět: document_properties_keywords=Klíčová slova: document_properties_creation_date=Datum vytvoření: document_properties_modification_date=Datum úpravy: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Vytvořil: document_properties_producer=Tvůrce PDF: document_properties_version=Verze PDF: document_properties_page_count=Počet stránek: document_properties_page_size=Velikost stránky: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=na výšku document_properties_page_size_orientation_landscape=na šířku document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Dopis document_properties_page_size_name_legal=Právní dokument # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Rychlé zobrazování z webu: document_properties_linearized_yes=Ano document_properties_linearized_no=Ne document_properties_close=Zavřít print_progress_message=Příprava dokumentu pro tisk… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}} % print_progress_close=Zrušit # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Postranní lišta toggle_sidebar_notification.title=Přepne postranní lištu (dokument obsahuje osnovu/přílohy) toggle_sidebar_notification2.title=Přepnout postranní lištu (dokument obsahuje osnovu/přílohy/vrstvy) toggle_sidebar_label=Postranní lišta document_outline.title=Zobrazí osnovu dokumentu (dvojité klepnutí rozbalí/sbalí všechny položky) document_outline_label=Osnova dokumentu attachments.title=Zobrazí přílohy attachments_label=Přílohy layers.title=Zobrazit vrstvy (poklepáním obnovíte všechny vrstvy do výchozího stavu) layers_label=Vrstvy thumbs.title=Zobrazí náhledy thumbs_label=Náhledy current_outline_item.title=Najít aktuální položku v osnově current_outline_item_label=Aktuální položka v osnově findbar.title=Najde v dokumentu findbar_label=Najít additional_layers=Další vrstvy # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Strana {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Strana {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Náhled strany {{page}} # Find panel button title and messages find_input.title=Najít find_input.placeholder=Najít v dokumentu… find_previous.title=Najde předchozí výskyt hledaného textu find_previous_label=Předchozí find_next.title=Najde další výskyt hledaného textu find_next_label=Další find_highlight=Zvýraznit find_match_case_label=Rozlišovat velikost find_entire_word_label=Celá slova find_reached_top=Dosažen začátek dokumentu, pokračuje se od konce find_reached_bottom=Dosažen konec dokumentu, pokračuje se od začátku # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}}. z {{total}} výskytu find_match_count[two]={{current}}. z {{total}} výskytů find_match_count[few]={{current}}. z {{total}} výskytů find_match_count[many]={{current}}. z {{total}} výskytů find_match_count[other]={{current}}. z {{total}} výskytů # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Více než {{limit}} výskytů find_match_count_limit[one]=Více než {{limit}} výskyt find_match_count_limit[two]=Více než {{limit}} výskyty find_match_count_limit[few]=Více než {{limit}} výskyty find_match_count_limit[many]=Více než {{limit}} výskytů find_match_count_limit[other]=Více než {{limit}} výskytů find_not_found=Hledaný text nenalezen # Error panel labels error_more_info=Více informací error_less_info=Méně informací error_close=Zavřít # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (sestavení: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Zpráva: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Zásobník: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Soubor: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Řádek: {{line}} rendering_error=Při vykreslování stránky nastala chyba. # Predefined zoom values page_scale_width=Podle šířky page_scale_fit=Podle výšky page_scale_auto=Automatická velikost page_scale_actual=Skutečná velikost # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}} % # Loading indicator messages loading_error_indicator=Chyba loading_error=Při nahrávání PDF nastala chyba. invalid_file_error=Neplatný nebo chybný soubor PDF. missing_file_error=Chybí soubor PDF. unexpected_response_error=Neočekávaná odpověď serveru. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Anotace typu {{type}}] password_label=Pro otevření PDF souboru vložte heslo. password_invalid=Neplatné heslo. Zkuste to znovu. password_ok=OK password_cancel=Zrušit printing_not_supported=Upozornění: Tisk není v tomto prohlížeči plně podporován. printing_not_ready=Upozornění: Dokument PDF není kompletně načten. web_fonts_disabled=Webová písma jsou zakázána, proto není možné použít vložená písma PDF. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/cy/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Tudalen Flaenorol previous_label=Blaenorol next.title=Tudalen Nesaf next_label=Nesaf # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Tudalen # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=o {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} o {{pagesCount}}) zoom_out.title=Chwyddo Allan zoom_out_label=Chwyddo Allan zoom_in.title=Chwyddo Mewn zoom_in_label=Chwyddo Mewn zoom.title=Chwyddo presentation_mode.title=Newid i'r Modd Cyflwyno presentation_mode_label=Modd Cyflwyno open_file.title=Agor Ffeil open_file_label=Agor print.title=Argraffu print_label=Argraffu download.title=Llwyth download_label=Llwytho i Lawr bookmark.title=Golwg cyfredol (copïo neu agor ffenestr newydd) bookmark_label=Golwg Gyfredol # Secondary toolbar and context menu tools.title=Offer tools_label=Offer first_page.title=Mynd i'r Dudalen Gyntaf first_page.label=Mynd i'r Dudalen Gyntaf first_page_label=Mynd i'r Dudalen Gyntaf last_page.title=Mynd i'r Dudalen Olaf last_page.label=Mynd i'r Dudalen Olaf last_page_label=Mynd i'r Dudalen Olaf page_rotate_cw.title=Cylchdroi Clocwedd page_rotate_cw.label=Cylchdroi Clocwedd page_rotate_cw_label=Cylchdroi Clocwedd page_rotate_ccw.title=Cylchdroi Gwrthglocwedd page_rotate_ccw.label=Cylchdroi Gwrthglocwedd page_rotate_ccw_label=Cylchdroi Gwrthglocwedd cursor_text_select_tool.title=Galluogi Dewis Offeryn Testun cursor_text_select_tool_label=Offeryn Dewis Testun cursor_hand_tool.title=Galluogi Offeryn Llaw cursor_hand_tool_label=Offeryn Llaw scroll_vertical.title=Defnyddio Sgrolio Fertigol scroll_vertical_label=Sgrolio Fertigol scroll_horizontal.title=Defnyddio Sgrolio Fertigol scroll_horizontal_label=Sgrolio Fertigol scroll_wrapped.title=Defnyddio Sgrolio Amlapio scroll_wrapped_label=Sgrolio Amlapio spread_none.title=Peidio uno taeniadau canol spread_none_label=Dim Taeniadau spread_odd.title=Uno taeniadau tudalen yn cychwyn gyda thudalennau odrif spread_odd_label=Taeniadau Odrifau spread_even.title=Uno taeniadau tudalen yn cychwyn gyda thudalennau eilrif spread_even_label=Taeniadau Eilrif # Document properties dialog box document_properties.title=Priodweddau Dogfen… document_properties_label=Priodweddau Dogfen… document_properties_file_name=Enw ffeil: document_properties_file_size=Maint ffeil: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} beit) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} beit) document_properties_title=Teitl: document_properties_author=Awdur: document_properties_subject=Pwnc: document_properties_keywords=Allweddair: document_properties_creation_date=Dyddiad Creu: document_properties_modification_date=Dyddiad Addasu: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Crewr: document_properties_producer=Cynhyrchydd PDF: document_properties_version=Fersiwn PDF: document_properties_page_count=Cyfrif Tudalen: document_properties_page_size=Maint Tudalen: document_properties_page_size_unit_inches=o fewn document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=portread document_properties_page_size_orientation_landscape=tirlun document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Llythyr document_properties_page_size_name_legal=Cyfreithiol # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Golwg Gwe Cyflym: document_properties_linearized_yes=Iawn document_properties_linearized_no=Na document_properties_close=Cau print_progress_message=Paratoi dogfen ar gyfer ei hargraffu… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Diddymu # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Toglo'r Bar Ochr toggle_sidebar_notification.title=Toglo'r Bar Ochr (mae'r ddogfen yn cynnwys outline/attachments) toggle_sidebar_notification2.title=Toglo'r Bar Ochr (mae'r ddogfen yn cynnwys amlinelliadau/atodiadau/haenau) toggle_sidebar_label=Toglo'r Bar Ochr document_outline.title=Dangos Amlinell Dogfen (clic dwbl i ymestyn/cau pob eitem) document_outline_label=Amlinelliad Dogfen attachments.title=Dangos Atodiadau attachments_label=Atodiadau layers.title=Dangos Haenau (cliciwch ddwywaith i ailosod yr holl haenau i'r cyflwr rhagosodedig) layers_label=Haenau thumbs.title=Dangos Lluniau Bach thumbs_label=Lluniau Bach current_outline_item.title=Canfod yr Eitem Amlinellol Gyfredol current_outline_item_label=Yr Eitem Amlinellol Gyfredol findbar.title=Canfod yn y Ddogfen findbar_label=Canfod additional_layers=Haenau Ychwanegol # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Tudalen {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Tudalen {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Llun Bach Tudalen {{page}} # Find panel button title and messages find_input.title=Canfod find_input.placeholder=Canfod yn y ddogfen… find_previous.title=Canfod enghraifft flaenorol o'r ymadrodd find_previous_label=Blaenorol find_next.title=Canfod enghraifft nesaf yr ymadrodd find_next_label=Nesaf find_highlight=Amlygu popeth find_match_case_label=Cydweddu maint find_entire_word_label=Geiriau cyfan find_reached_top=Wedi cyrraedd brig y dudalen, parhau o'r gwaelod find_reached_bottom=Wedi cyrraedd diwedd y dudalen, parhau o'r brig # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} o {{total}} cydweddiad find_match_count[two]={{current}} o {{total}} cydweddiad find_match_count[few]={{current}} o {{total}} cydweddiad find_match_count[many]={{current}} o {{total}} cydweddiad find_match_count[other]={{current}} o {{total}} cydweddiad # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Mwy na {{limit}} cydweddiad find_match_count_limit[one]=Mwy na {{limit}} cydweddiad find_match_count_limit[two]=Mwy na {{limit}} cydweddiad find_match_count_limit[few]=Mwy na {{limit}} cydweddiad find_match_count_limit[many]=Mwy na {{limit}} cydweddiad find_match_count_limit[other]=Mwy na {{limit}} cydweddiad find_not_found=Heb ganfod ymadrodd # Error panel labels error_more_info=Rhagor o Wybodaeth error_less_info=Llai o wybodaeth error_close=Cau # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Neges: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stac: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Ffeil: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Llinell: {{line}} rendering_error=Digwyddodd gwall wrth adeiladu'r dudalen. # Predefined zoom values page_scale_width=Lled Tudalen page_scale_fit=Ffit Tudalen page_scale_auto=Chwyddo Awtomatig page_scale_actual=Maint Gwirioneddol # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Gwall loading_error=Digwyddodd gwall wrth lwytho'r PDF. invalid_file_error=Ffeil PDF annilys neu llwgr. missing_file_error=Ffeil PDF coll. unexpected_response_error=Ymateb annisgwyl gan y gweinydd. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Anodiad {{type}} ] password_label=Rhowch gyfrinair i agor y PDF. password_invalid=Cyfrinair annilys. Ceisiwch eto. password_ok=Iawn password_cancel=Diddymu printing_not_supported=Rhybudd: Nid yw argraffu yn cael ei gynnal yn llawn gan y porwr. printing_not_ready=Rhybudd: Nid yw'r PDF wedi ei lwytho'n llawn ar gyfer argraffu. web_fonts_disabled=Ffontiau gwe wedi eu hanalluogi: methu defnyddio ffontiau PDF mewnblanedig. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/da/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Forrige side previous_label=Forrige next.title=Næste side next_label=Næste # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Side # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=af {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} af {{pagesCount}}) zoom_out.title=Zoom ud zoom_out_label=Zoom ud zoom_in.title=Zoom ind zoom_in_label=Zoom ind zoom.title=Zoom presentation_mode.title=Skift til fuldskærmsvisning presentation_mode_label=Fuldskærmsvisning open_file.title=Åbn fil open_file_label=Åbn print.title=Udskriv print_label=Udskriv download.title=Hent download_label=Hent bookmark.title=Aktuel visning (kopier eller åbn i et nyt vindue) bookmark_label=Aktuel visning # Secondary toolbar and context menu tools.title=Funktioner tools_label=Funktioner first_page.title=Gå til første side first_page.label=Gå til første side first_page_label=Gå til første side last_page.title=Gå til sidste side last_page.label=Gå til sidste side last_page_label=Gå til sidste side page_rotate_cw.title=Roter med uret page_rotate_cw.label=Roter med uret page_rotate_cw_label=Roter med uret page_rotate_ccw.title=Roter mod uret page_rotate_ccw.label=Roter mod uret page_rotate_ccw_label=Roter mod uret cursor_text_select_tool.title=Aktiver markeringsværktøj cursor_text_select_tool_label=Markeringsværktøj cursor_hand_tool.title=Aktiver håndværktøj cursor_hand_tool_label=Håndværktøj scroll_vertical.title=Brug vertikal scrolling scroll_vertical_label=Vertikal scrolling scroll_horizontal.title=Brug horisontal scrolling scroll_horizontal_label=Horisontal scrolling scroll_wrapped.title=Brug ombrudt scrolling scroll_wrapped_label=Ombrudt scrolling spread_none.title=Vis enkeltsider spread_none_label=Enkeltsider spread_odd.title=Vis opslag med ulige sidenumre til venstre spread_odd_label=Opslag med forside spread_even.title=Vis opslag med lige sidenumre til venstre spread_even_label=Opslag uden forside # Document properties dialog box document_properties.title=Dokumentegenskaber… document_properties_label=Dokumentegenskaber… document_properties_file_name=Filnavn: document_properties_file_size=Filstørrelse: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Titel: document_properties_author=Forfatter: document_properties_subject=Emne: document_properties_keywords=Nøgleord: document_properties_creation_date=Oprettet: document_properties_modification_date=Redigeret: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Program: document_properties_producer=PDF-producent: document_properties_version=PDF-version: document_properties_page_count=Antal sider: document_properties_page_size=Sidestørrelse: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=stående document_properties_page_size_orientation_landscape=liggende document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Hurtig web-visning: document_properties_linearized_yes=Ja document_properties_linearized_no=Nej document_properties_close=Luk print_progress_message=Forbereder dokument til udskrivning… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Annuller # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Slå sidepanel til eller fra toggle_sidebar_notification.title=Slå sidepanel til eller fra (dokumentet indeholder disposition/vedhæftede filer) toggle_sidebar_notification2.title=Slå sidepanel til eller fra (dokumentet indeholder disposition/vedhæftede filer/lag) toggle_sidebar_label=Slå sidepanel til eller fra document_outline.title=Vis dokumentets disposition (dobbeltklik for at vise/skjule alle elementer) document_outline_label=Dokument-disposition attachments.title=Vis vedhæftede filer attachments_label=Vedhæftede filer layers.title=Vis lag (dobbeltklik for at nulstille alle lag til standard-tilstanden) layers_label=Lag thumbs.title=Vis miniaturer thumbs_label=Miniaturer current_outline_item.title=Find det aktuelle dispositions-element current_outline_item_label=Aktuelt dispositions-element findbar.title=Find i dokument findbar_label=Find additional_layers=Yderligere lag # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Side {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Side {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Miniature af side {{page}} # Find panel button title and messages find_input.title=Find find_input.placeholder=Find i dokument… find_previous.title=Find den forrige forekomst find_previous_label=Forrige find_next.title=Find den næste forekomst find_next_label=Næste find_highlight=Fremhæv alle find_match_case_label=Forskel på store og små bogstaver find_entire_word_label=Hele ord find_reached_top=Toppen af siden blev nået, fortsatte fra bunden find_reached_bottom=Bunden af siden blev nået, fortsatte fra toppen # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} af {{total}} forekomst find_match_count[two]={{current}} af {{total}} forekomster find_match_count[few]={{current}} af {{total}} forekomster find_match_count[many]={{current}} af {{total}} forekomster find_match_count[other]={{current}} af {{total}} forekomster # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Mere end {{limit}} forekomster find_match_count_limit[one]=Mere end {{limit}} forekomst find_match_count_limit[two]=Mere end {{limit}} forekomster find_match_count_limit[few]=Mere end {{limit}} forekomster find_match_count_limit[many]=Mere end {{limit}} forekomster find_match_count_limit[other]=Mere end {{limit}} forekomster find_not_found=Der blev ikke fundet noget # Error panel labels error_more_info=Mere information error_less_info=Mindre information error_close=Luk # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Fejlmeddelelse: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stack: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Fil: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Linje: {{line}} rendering_error=Der opstod en fejl ved generering af siden. # Predefined zoom values page_scale_width=Sidebredde page_scale_fit=Tilpas til side page_scale_auto=Automatisk zoom page_scale_actual=Faktisk størrelse # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Fejl loading_error=Der opstod en fejl ved indlæsning af PDF-filen. invalid_file_error=PDF-filen er ugyldig eller ødelagt. missing_file_error=Manglende PDF-fil. unexpected_response_error=Uventet svar fra serveren. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}}kommentar] password_label=Angiv adgangskode til at åbne denne PDF-fil. password_invalid=Ugyldig adgangskode. Prøv igen. password_ok=OK password_cancel=Fortryd printing_not_supported=Advarsel: Udskrivning er ikke fuldt understøttet af browseren. printing_not_ready=Advarsel: PDF-filen er ikke fuldt indlæst til udskrivning. web_fonts_disabled=Webskrifttyper er deaktiverede. De indlejrede skrifttyper i PDF-filen kan ikke anvendes. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/de/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Eine Seite zurück previous_label=Zurück next.title=Eine Seite vor next_label=Vor # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Seite # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=von {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} von {{pagesCount}}) zoom_out.title=Verkleinern zoom_out_label=Verkleinern zoom_in.title=Vergrößern zoom_in_label=Vergrößern zoom.title=Zoom presentation_mode.title=In Präsentationsmodus wechseln presentation_mode_label=Präsentationsmodus open_file.title=Datei öffnen open_file_label=Öffnen print.title=Drucken print_label=Drucken download.title=Dokument speichern download_label=Speichern bookmark.title=Aktuelle Ansicht (zum Kopieren oder Öffnen in einem neuen Fenster) bookmark_label=Aktuelle Ansicht # Secondary toolbar and context menu tools.title=Werkzeuge tools_label=Werkzeuge first_page.title=Erste Seite anzeigen first_page.label=Erste Seite anzeigen first_page_label=Erste Seite anzeigen last_page.title=Letzte Seite anzeigen last_page.label=Letzte Seite anzeigen last_page_label=Letzte Seite anzeigen page_rotate_cw.title=Im Uhrzeigersinn drehen page_rotate_cw.label=Im Uhrzeigersinn drehen page_rotate_cw_label=Im Uhrzeigersinn drehen page_rotate_ccw.title=Gegen Uhrzeigersinn drehen page_rotate_ccw.label=Gegen Uhrzeigersinn drehen page_rotate_ccw_label=Gegen Uhrzeigersinn drehen cursor_text_select_tool.title=Textauswahl-Werkzeug aktivieren cursor_text_select_tool_label=Textauswahl-Werkzeug cursor_hand_tool.title=Hand-Werkzeug aktivieren cursor_hand_tool_label=Hand-Werkzeug scroll_vertical.title=Seiten übereinander anordnen scroll_vertical_label=Vertikale Seitenanordnung scroll_horizontal.title=Seiten nebeneinander anordnen scroll_horizontal_label=Horizontale Seitenanordnung scroll_wrapped.title=Seiten neben- und übereinander anordnen, anhängig vom Platz scroll_wrapped_label=Kombinierte Seitenanordnung spread_none.title=Seiten nicht nebeneinander anzeigen spread_none_label=Einzelne Seiten spread_odd.title=Jeweils eine ungerade und eine gerade Seite nebeneinander anzeigen spread_odd_label=Ungerade + gerade Seite spread_even.title=Jeweils eine gerade und eine ungerade Seite nebeneinander anzeigen spread_even_label=Gerade + ungerade Seite # Document properties dialog box document_properties.title=Dokumenteigenschaften document_properties_label=Dokumenteigenschaften… document_properties_file_name=Dateiname: document_properties_file_size=Dateigröße: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} Bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} Bytes) document_properties_title=Titel: document_properties_author=Autor: document_properties_subject=Thema: document_properties_keywords=Stichwörter: document_properties_creation_date=Erstelldatum: document_properties_modification_date=Bearbeitungsdatum: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}} {{time}} document_properties_creator=Anwendung: document_properties_producer=PDF erstellt mit: document_properties_version=PDF-Version: document_properties_page_count=Seitenzahl: document_properties_page_size=Seitengröße: document_properties_page_size_unit_inches=Zoll document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=Hochformat document_properties_page_size_orientation_landscape=Querformat document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Schnelle Webanzeige: document_properties_linearized_yes=Ja document_properties_linearized_no=Nein document_properties_close=Schließen print_progress_message=Dokument wird für Drucken vorbereitet… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}} % print_progress_close=Abbrechen # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Sidebar umschalten toggle_sidebar_notification.title=Sidebar umschalten (Dokument enthält Dokumentstruktur/Anhänge) toggle_sidebar_notification2.title=Sidebar umschalten (Dokument enthält Dokumentstruktur/Anhänge/Ebenen) toggle_sidebar_label=Sidebar umschalten document_outline.title=Dokumentstruktur anzeigen (Doppelklicken, um alle Einträge aus- bzw. einzuklappen) document_outline_label=Dokumentstruktur attachments.title=Anhänge anzeigen attachments_label=Anhänge layers.title=Ebenen anzeigen (Doppelklicken, um alle Ebenen auf den Standardzustand zurückzusetzen) layers_label=Ebenen thumbs.title=Miniaturansichten anzeigen thumbs_label=Miniaturansichten current_outline_item.title=Aktuelles Struktur-Element suchen current_outline_item_label=Aktuelles Struktur-Element findbar.title=Dokument durchsuchen findbar_label=Suchen additional_layers=Zusätzliche Ebenen # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Seite {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Seite {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Miniaturansicht von Seite {{page}} # Find panel button title and messages find_input.title=Suchen find_input.placeholder=Im Dokument suchen… find_previous.title=Vorheriges Vorkommen des Suchbegriffs finden find_previous_label=Zurück find_next.title=Nächstes Vorkommen des Suchbegriffs finden find_next_label=Weiter find_highlight=Alle hervorheben find_match_case_label=Groß-/Kleinschreibung beachten find_entire_word_label=Ganze Wörter find_reached_top=Anfang des Dokuments erreicht, fahre am Ende fort find_reached_bottom=Ende des Dokuments erreicht, fahre am Anfang fort # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} von {{total}} Übereinstimmung find_match_count[two]={{current}} von {{total}} Übereinstimmungen find_match_count[few]={{current}} von {{total}} Übereinstimmungen find_match_count[many]={{current}} von {{total}} Übereinstimmungen find_match_count[other]={{current}} von {{total}} Übereinstimmungen # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Mehr als {{limit}} Übereinstimmungen find_match_count_limit[one]=Mehr als {{limit}} Übereinstimmung find_match_count_limit[two]=Mehr als {{limit}} Übereinstimmungen find_match_count_limit[few]=Mehr als {{limit}} Übereinstimmungen find_match_count_limit[many]=Mehr als {{limit}} Übereinstimmungen find_match_count_limit[other]=Mehr als {{limit}} Übereinstimmungen find_not_found=Suchbegriff nicht gefunden # Error panel labels error_more_info=Mehr Informationen error_less_info=Weniger Informationen error_close=Schließen # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js Version {{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Nachricht: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Aufrufliste: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Datei: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Zeile: {{line}} rendering_error=Beim Darstellen der Seite trat ein Fehler auf. # Predefined zoom values page_scale_width=Seitenbreite page_scale_fit=Seitengröße page_scale_auto=Automatischer Zoom page_scale_actual=Originalgröße # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}} % # Loading indicator messages loading_error_indicator=Fehler loading_error=Beim Laden der PDF-Datei trat ein Fehler auf. invalid_file_error=Ungültige oder beschädigte PDF-Datei missing_file_error=Fehlende PDF-Datei unexpected_response_error=Unerwartete Antwort des Servers # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Anlage: {{type}}] password_label=Geben Sie zum Öffnen der PDF-Datei deren Passwort ein. password_invalid=Falsches Passwort. Bitte versuchen Sie es erneut. password_ok=OK password_cancel=Abbrechen printing_not_supported=Warnung: Die Drucken-Funktion wird durch diesen Browser nicht vollständig unterstützt. printing_not_ready=Warnung: Die PDF-Datei ist nicht vollständig geladen, dies ist für das Drucken aber empfohlen. web_fonts_disabled=Web-Schriftarten sind deaktiviert: Eingebettete PDF-Schriftarten konnten nicht geladen werden. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/dsb/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Pjerwjejšny bok previous_label=Slědk next.title=Pśiducy bok next_label=Dalej # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Bok # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=z {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} z {{pagesCount}}) zoom_out.title=Pómjeńšyś zoom_out_label=Pómjeńšyś zoom_in.title=Pówětšyś zoom_in_label=Pówětšyś zoom.title=Skalěrowanje presentation_mode.title=Do prezentaciskego modusa pśejś presentation_mode_label=Prezentaciski modus open_file.title=Dataju wócyniś open_file_label=Wócyniś print.title=Śišćaś print_label=Śišćaś download.title=Ześěgnuś download_label=Ześěgnuś bookmark.title=Aktualny naglěd (kopěrowaś abo w nowem woknje wócyniś) bookmark_label=Aktualny naglěd # Secondary toolbar and context menu tools.title=Rědy tools_label=Rědy first_page.title=K prědnemu bokoju first_page.label=K prědnemu bokoju first_page_label=K prědnemu bokoju last_page.title=K slědnemu bokoju last_page.label=K slědnemu bokoju last_page_label=K slědnemu bokoju page_rotate_cw.title=Wobwjertnuś ako špěra źo page_rotate_cw.label=Wobwjertnuś ako špěra źo page_rotate_cw_label=Wobwjertnuś ako špěra źo page_rotate_ccw.title=Wobwjertnuś nawopaki ako špěra źo page_rotate_ccw.label=Wobwjertnuś nawopaki ako špěra źo page_rotate_ccw_label=Wobwjertnuś nawopaki ako špěra źo cursor_text_select_tool.title=Rěd za wuběranje teksta zmóžniś cursor_text_select_tool_label=Rěd za wuběranje teksta cursor_hand_tool.title=Rucny rěd zmóžniś cursor_hand_tool_label=Rucny rěd scroll_vertical.title=Wertikalne suwanje wužywaś scroll_vertical_label=Wertikalnje suwanje scroll_horizontal.title=Horicontalne suwanje wužywaś scroll_horizontal_label=Horicontalne suwanje scroll_wrapped.title=Pózlažke suwanje wužywaś scroll_wrapped_label=Pózlažke suwanje spread_none.title=Boki njezwězaś spread_none_label=Žeden dwójny bok spread_odd.title=Boki zachopinajucy z njerownymi bokami zwězaś spread_odd_label=Njerowne boki spread_even.title=Boki zachopinajucy z rownymi bokami zwězaś spread_even_label=Rowne boki # Document properties dialog box document_properties.title=Dokumentowe kakosći… document_properties_label=Dokumentowe kakosći… document_properties_file_name=Mě dataje: document_properties_file_size=Wjelikosć dataje: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bajtow) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bajtow) document_properties_title=Titel: document_properties_author=Awtor: document_properties_subject=Tema: document_properties_keywords=Klucowe słowa: document_properties_creation_date=Datum napóranja: document_properties_modification_date=Datum změny: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Awtor: document_properties_producer=PDF-gótowaŕ: document_properties_version=PDF-wersija: document_properties_page_count=Licba bokow: document_properties_page_size=Wjelikosć boka: document_properties_page_size_unit_inches=col document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=wusoki format document_properties_page_size_orientation_landscape=prěcny format document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Fast Web View: document_properties_linearized_yes=Jo document_properties_linearized_no=Ně document_properties_close=Zacyniś print_progress_message=Dokument pśigótujo se za śišćanje… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Pśetergnuś # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Bócnicu pokazaś/schowaś toggle_sidebar_notification.title=Bocnicu pśešaltowaś (dokument wopśimujo pśeglěd/pśipiski) toggle_sidebar_notification2.title=Bocnicu pśešaltowaś (dokument rozrědowanje/pśipiski/warstwy wopśimujo) toggle_sidebar_label=Bócnicu pokazaś/schowaś document_outline.title=Dokumentowe naraźenje pokazaś (dwójne kliknjenje, aby se wšykne zapiski pokazali/schowali) document_outline_label=Dokumentowa struktura attachments.title=Pśidanki pokazaś attachments_label=Pśidanki layers.title=Warstwy pokazaś (klikniśo dwójcy, aby wšykne warstwy na standardny staw slědk stajił) layers_label=Warstwy thumbs.title=Miniatury pokazaś thumbs_label=Miniatury current_outline_item.title=Aktualny rozrědowański zapisk pytaś current_outline_item_label=Aktualny rozrědowański zapisk findbar.title=W dokumenśe pytaś findbar_label=Pytaś additional_layers=Dalšne warstwy # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Bok {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Bok {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Miniatura boka {{page}} # Find panel button title and messages find_input.title=Pytaś find_input.placeholder=W dokumenśe pytaś… find_previous.title=Pjerwjejšne wustupowanje pytańskego wuraza pytaś find_previous_label=Slědk find_next.title=Pśidujuce wustupowanje pytańskego wuraza pytaś find_next_label=Dalej find_highlight=Wšykne wuzwignuś find_match_case_label=Na wjelikopisanje źiwaś find_entire_word_label=Cełe słowa find_reached_top=Zachopjeńk dokumenta dostany, pókšacujo se z kóńcom find_reached_bottom=Kóńc dokumenta dostany, pókšacujo se ze zachopjeńkom # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} z {{total}} wótpowědnika find_match_count[two]={{current}} z {{total}} wótpowědnikowu find_match_count[few]={{current}} z {{total}} wótpowědnikow find_match_count[many]={{current}} z {{total}} wótpowědnikow find_match_count[other]={{current}} z {{total}} wótpowědnikow # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Wěcej ako {{limit}} wótpowědnikow find_match_count_limit[one]=Wěcej ako {{limit}} wótpowědnik find_match_count_limit[two]=Wěcej ako {{limit}} wótpowědnika find_match_count_limit[few]=Wěcej ako {{limit}} wótpowědniki find_match_count_limit[many]=Wěcej ako {{limit}} wótpowědnikow find_match_count_limit[other]=Wěcej ako {{limit}} wótpowědnikow find_not_found=Pytański wuraz njejo se namakał # Error panel labels error_more_info=Wěcej informacijow error_less_info=Mjenjej informacijow error_close=Zacyniś # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Powěźenka: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Lisćina zawołanjow: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Dataja: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Smužka: {{line}} rendering_error=Pśi zwobraznjanju boka jo zmólka nastała. # Predefined zoom values page_scale_width=Šyrokosć boka page_scale_fit=Wjelikosć boka page_scale_auto=Awtomatiske skalěrowanje page_scale_actual=Aktualna wjelikosć # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Zmólka loading_error=Pśi zacytowanju PDF jo zmólka nastała. invalid_file_error=Njepłaśiwa abo wobškóźona PDF-dataja. missing_file_error=Felujuca PDF-dataja. unexpected_response_error=Njewócakane serwerowe wótegrono. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Typ pśipiskow: {{type}}] password_label=Zapódajśo gronidło, aby PDF-dataju wócynił. password_invalid=Njepłaśiwe gronidło. Pšosym wopytajśo hyšći raz. password_ok=W pórěźe password_cancel=Pśetergnuś printing_not_supported=Warnowanje: Śišćanje njepódpěra se połnje pśez toś ten wobglědowak. printing_not_ready=Warnowanje: PDF njejo se za śišćanje dopołnje zacytał. web_fonts_disabled=Webpisma su znjemóžnjone: njejo móžno, zasajźone PDF-pisma wužywaś. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/el/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Προηγούμενη σελίδα previous_label=Προηγούμενη next.title=Επόμενη σελίδα next_label=Επόμενη # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Σελίδα # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=από {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} από {{pagesCount}}) zoom_out.title=Σμίκρυνση zoom_out_label=Σμίκρυνση zoom_in.title=Μεγέθυνση zoom_in_label=Μεγέθυνση zoom.title=Ζουμ presentation_mode.title=Εναλλαγή σε λειτουργία παρουσίασης presentation_mode_label=Λειτουργία παρουσίασης open_file.title=Άνοιγμα αρχείου open_file_label=Άνοιγμα print.title=Εκτύπωση print_label=Εκτύπωση download.title=Λήψη download_label=Λήψη bookmark.title=Τρέχουσα προβολή (αντιγραφή ή άνοιγμα σε νέο παράθυρο) bookmark_label=Τρέχουσα προβολή # Secondary toolbar and context menu tools.title=Εργαλεία tools_label=Εργαλεία first_page.title=Μετάβαση στην πρώτη σελίδα first_page.label=Μετάβαση στην πρώτη σελίδα first_page_label=Μετάβαση στην πρώτη σελίδα last_page.title=Μετάβαση στην τελευταία σελίδα last_page.label=Μετάβαση στην τελευταία σελίδα last_page_label=Μετάβαση στην τελευταία σελίδα page_rotate_cw.title=Δεξιόστροφη περιστροφή page_rotate_cw.label=Δεξιόστροφη περιστροφή page_rotate_cw_label=Δεξιόστροφη περιστροφή page_rotate_ccw.title=Αριστερόστροφη περιστροφή page_rotate_ccw.label=Αριστερόστροφη περιστροφή page_rotate_ccw_label=Αριστερόστροφη περιστροφή cursor_text_select_tool.title=Ενεργοποίηση εργαλείου επιλογής κειμένου cursor_text_select_tool_label=Εργαλείο επιλογής κειμένου cursor_hand_tool.title=Ενεργοποίηση εργαλείου χεριού cursor_hand_tool_label=Εργαλείο χεριού scroll_vertical.title=Χρήση κάθετης κύλισης scroll_vertical_label=Κάθετη κύλιση scroll_horizontal.title=Χρήση οριζόντιας κύλισης scroll_horizontal_label=Οριζόντια κύλιση scroll_wrapped.title=Χρήση κυκλικής κύλισης scroll_wrapped_label=Κυκλική κύλιση spread_none.title=Να μην γίνει σύνδεση επεκτάσεων σελίδων spread_none_label=Χωρίς επεκτάσεις spread_odd.title=Σύνδεση επεκτάσεων σελίδων ξεκινώντας από τις μονές σελίδες spread_odd_label=Μονές επεκτάσεις spread_even.title=Σύνδεση επεκτάσεων σελίδων ξεκινώντας από τις ζυγές σελίδες spread_even_label=Ζυγές επεκτάσεις # Document properties dialog box document_properties.title=Ιδιότητες εγγράφου… document_properties_label=Ιδιότητες εγγράφου… document_properties_file_name=Όνομα αρχείου: document_properties_file_size=Μέγεθος αρχείου: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Τίτλος: document_properties_author=Συγγραφέας: document_properties_subject=Θέμα: document_properties_keywords=Λέξεις κλειδιά: document_properties_creation_date=Ημερομηνία δημιουργίας: document_properties_modification_date=Ημερομηνία τροποποίησης: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Δημιουργός: document_properties_producer=Παραγωγός PDF: document_properties_version=Έκδοση PDF: document_properties_page_count=Αριθμός σελίδων: document_properties_page_size=Μέγεθος σελίδας: document_properties_page_size_unit_inches=ίντσες document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=κατακόρυφα document_properties_page_size_orientation_landscape=οριζόντια document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Επιστολή document_properties_page_size_name_legal=Τύπου Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Ταχεία προβολή ιστού: document_properties_linearized_yes=Ναι document_properties_linearized_no=Όχι document_properties_close=Κλείσιμο print_progress_message=Προετοιμασία του εγγράφου για εκτύπωση… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Ακύρωση # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=(Απ)ενεργοποίηση πλευρικής στήλης toggle_sidebar_notification.title=(Απ)ενεργοποίηση πλευρικής στήλης (το έγγραφο περιέχει περίγραμμα/συνημμένα) toggle_sidebar_notification2.title=(Απ)ενεργοποίηση πλευρικής στήλης (το έγγραφο περιέχει περίγραμμα/συνημμένα/επίπεδα) toggle_sidebar_label=(Απ)ενεργοποίηση πλευρικής στήλης document_outline.title=Εμφάνιση διάρθρωσης εγγράφου (διπλό κλικ για ανάπτυξη/σύμπτυξη όλων των στοιχείων) document_outline_label=Διάρθρωση εγγράφου attachments.title=Προβολή συνημμένων attachments_label=Συνημμένα layers.title=Εμφάνιση επιπέδων (διπλό κλικ για επαναφορά όλων των επιπέδων στην προεπιλεγμένη κατάσταση) layers_label=Επίπεδα thumbs.title=Προβολή μικρογραφιών thumbs_label=Μικρογραφίες current_outline_item.title=Εύρεση τρέχοντος στοιχείου διάρθρωσης current_outline_item_label=Τρέχον στοιχείο διάρθρωσης findbar.title=Εύρεση στο έγγραφο findbar_label=Εύρεση additional_layers=Επιπρόσθετα επίπεδα # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Σελίδα {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Σελίδα {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Μικρογραφία της σελίδας {{page}} # Find panel button title and messages find_input.title=Εύρεση find_input.placeholder=Εύρεση στο έγγραφο… find_previous.title=Εύρεση της προηγούμενης εμφάνισης της φράσης find_previous_label=Προηγούμενο find_next.title=Εύρεση της επόμενης εμφάνισης της φράσης find_next_label=Επόμενο find_highlight=Επισήμανση όλων find_match_case_label=Ταίριασμα χαρακτήρα find_entire_word_label=Ολόκληρες λέξεις find_reached_top=Έλευση στην αρχή του εγγράφου, συνέχεια από το τέλος find_reached_bottom=Έλευση στο τέλος του εγγράφου, συνέχεια από την αρχή # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} από {{total}} αντιστοιχία find_match_count[two]={{current}} από {{total}} αντιστοιχίες find_match_count[few]={{current}} από {{total}} αντιστοιχίες find_match_count[many]={{current}} από {{total}} αντιστοιχίες find_match_count[other]={{current}} από {{total}} αντιστοιχίες # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Περισσότερες από {{limit}} αντιστοιχίες find_match_count_limit[one]=Περισσότερες από {{limit}} αντιστοιχία find_match_count_limit[two]=Περισσότερες από {{limit}} αντιστοιχίες find_match_count_limit[few]=Περισσότερες από {{limit}} αντιστοιχίες find_match_count_limit[many]=Περισσότερες από {{limit}} αντιστοιχίες find_match_count_limit[other]=Περισσότερες από {{limit}} αντιστοιχίες find_not_found=Η φράση δεν βρέθηκε # Error panel labels error_more_info=Περισσότερες πληροφορίες error_less_info=Λιγότερες πληροφορίες error_close=Κλείσιμο # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Μήνυμα: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Στοίβα: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Αρχείο: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Γραμμή: {{line}} rendering_error=Προέκυψε σφάλμα κατά την ανάλυση της σελίδας. # Predefined zoom values page_scale_width=Πλάτος σελίδας page_scale_fit=Μέγεθος σελίδας page_scale_auto=Αυτόματο ζουμ page_scale_actual=Πραγματικό μέγεθος # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Σφάλμα loading_error=Προέκυψε ένα σφάλμα κατά τη φόρτωση του PDF. invalid_file_error=Μη έγκυρο ή κατεστραμμένο αρχείο PDF. missing_file_error=Λείπει αρχείο PDF. unexpected_response_error=Μη αναμενόμενη απόκριση από το διακομιστή. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Σχόλιο] password_label=Εισαγωγή κωδικού για το άνοιγμα του PDF αρχείου. password_invalid=Μη έγκυρος κωδικός. Προσπαθείστε ξανά. password_ok=OK password_cancel=Ακύρωση printing_not_supported=Προειδοποίηση: Η εκτύπωση δεν υποστηρίζεται πλήρως από αυτόν τον περιηγητή. printing_not_ready=Προειδοποίηση: Το PDF δεν φορτώθηκε πλήρως για εκτύπωση. web_fonts_disabled=Οι γραμματοσειρές Web απενεργοποιημένες: αδυναμία χρήσης των ενσωματωμένων γραμματοσειρών PDF. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/en-CA/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Previous Page previous_label=Previous next.title=Next Page next_label=Next # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Page # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=of {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} of {{pagesCount}}) zoom_out.title=Zoom Out zoom_out_label=Zoom Out zoom_in.title=Zoom In zoom_in_label=Zoom In zoom.title=Zoom presentation_mode.title=Switch to Presentation Mode presentation_mode_label=Presentation Mode open_file.title=Open File open_file_label=Open print.title=Print print_label=Print download.title=Download download_label=Download bookmark.title=Current view (copy or open in new window) bookmark_label=Current View # Secondary toolbar and context menu tools.title=Tools tools_label=Tools first_page.title=Go to First Page first_page.label=Go to First Page first_page_label=Go to First Page last_page.title=Go to Last Page last_page.label=Go to Last Page last_page_label=Go to Last Page page_rotate_cw.title=Rotate Clockwise page_rotate_cw.label=Rotate Clockwise page_rotate_cw_label=Rotate Clockwise page_rotate_ccw.title=Rotate Counterclockwise page_rotate_ccw.label=Rotate Counterclockwise page_rotate_ccw_label=Rotate Counterclockwise cursor_text_select_tool.title=Enable Text Selection Tool cursor_text_select_tool_label=Text Selection Tool cursor_hand_tool.title=Enable Hand Tool cursor_hand_tool_label=Hand Tool scroll_vertical.title=Use Vertical Scrolling scroll_vertical_label=Vertical Scrolling scroll_horizontal.title=Use Horizontal Scrolling scroll_horizontal_label=Horizontal Scrolling scroll_wrapped.title=Use Wrapped Scrolling scroll_wrapped_label=Wrapped Scrolling spread_none.title=Do not join page spreads spread_none_label=No Spreads spread_odd.title=Join page spreads starting with odd-numbered pages spread_odd_label=Odd Spreads spread_even.title=Join page spreads starting with even-numbered pages spread_even_label=Even Spreads # Document properties dialog box document_properties.title=Document Properties… document_properties_label=Document Properties… document_properties_file_name=File name: document_properties_file_size=File size: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} kB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Title: document_properties_author=Author: document_properties_subject=Subject: document_properties_keywords=Keywords: document_properties_creation_date=Creation Date: document_properties_modification_date=Modification Date: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Creator: document_properties_producer=PDF Producer: document_properties_version=PDF Version: document_properties_page_count=Page Count: document_properties_page_size=Page Size: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=portrait document_properties_page_size_orientation_landscape=landscape document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Fast Web View: document_properties_linearized_yes=Yes document_properties_linearized_no=No document_properties_close=Close print_progress_message=Preparing document for printing… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Cancel # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Toggle Sidebar toggle_sidebar_notification.title=Toggle Sidebar (document contains outline/attachments) toggle_sidebar_notification2.title=Toggle Sidebar (document contains outline/attachments/layers) toggle_sidebar_label=Toggle Sidebar document_outline.title=Show Document Outline (double-click to expand/collapse all items) document_outline_label=Document Outline attachments.title=Show Attachments attachments_label=Attachments layers.title=Show Layers (double-click to reset all layers to the default state) layers_label=Layers thumbs.title=Show Thumbnails thumbs_label=Thumbnails current_outline_item.title=Find Current Outline Item current_outline_item_label=Current Outline Item findbar.title=Find in Document findbar_label=Find additional_layers=Additional Layers # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Page {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Page {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Thumbnail of Page {{page}} # Find panel button title and messages find_input.title=Find find_input.placeholder=Find in document… find_previous.title=Find the previous occurrence of the phrase find_previous_label=Previous find_next.title=Find the next occurrence of the phrase find_next_label=Next find_highlight=Highlight all find_match_case_label=Match case find_entire_word_label=Whole words find_reached_top=Reached top of document, continued from bottom find_reached_bottom=Reached end of document, continued from top # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} of {{total}} match find_match_count[two]={{current}} of {{total}} matches find_match_count[few]={{current}} of {{total}} matches find_match_count[many]={{current}} of {{total}} matches find_match_count[other]={{current}} of {{total}} matches # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=More than {{limit}} matches find_match_count_limit[one]=More than {{limit}} match find_match_count_limit[two]=More than {{limit}} matches find_match_count_limit[few]=More than {{limit}} matches find_match_count_limit[many]=More than {{limit}} matches find_match_count_limit[other]=More than {{limit}} matches find_not_found=Phrase not found # Error panel labels error_more_info=More Information error_less_info=Less Information error_close=Close # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Message: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stack: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=File: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Line: {{line}} rendering_error=An error occurred while rendering the page. # Predefined zoom values page_scale_width=Page Width page_scale_fit=Page Fit page_scale_auto=Automatic Zoom page_scale_actual=Actual Size # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Error loading_error=An error occurred while loading the PDF. invalid_file_error=Invalid or corrupted PDF file. missing_file_error=Missing PDF file. unexpected_response_error=Unexpected server response. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Annotation] password_label=Enter the password to open this PDF file. password_invalid=Invalid password. Please try again. password_ok=OK password_cancel=Cancel printing_not_supported=Warning: Printing is not fully supported by this browser. printing_not_ready=Warning: The PDF is not fully loaded for printing. web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/en-GB/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Previous Page previous_label=Previous next.title=Next Page next_label=Next # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Page # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=of {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} of {{pagesCount}}) zoom_out.title=Zoom Out zoom_out_label=Zoom Out zoom_in.title=Zoom In zoom_in_label=Zoom In zoom.title=Zoom presentation_mode.title=Switch to Presentation Mode presentation_mode_label=Presentation Mode open_file.title=Open File open_file_label=Open print.title=Print print_label=Print download.title=Download download_label=Download bookmark.title=Current view (copy or open in new window) bookmark_label=Current View # Secondary toolbar and context menu tools.title=Tools tools_label=Tools first_page.title=Go to First Page first_page.label=Go to First Page first_page_label=Go to First Page last_page.title=Go to Last Page last_page.label=Go to Last Page last_page_label=Go to Last Page page_rotate_cw.title=Rotate Clockwise page_rotate_cw.label=Rotate Clockwise page_rotate_cw_label=Rotate Clockwise page_rotate_ccw.title=Rotate Anti-Clockwise page_rotate_ccw.label=Rotate Anti-Clockwise page_rotate_ccw_label=Rotate Anti-Clockwise cursor_text_select_tool.title=Enable Text Selection Tool cursor_text_select_tool_label=Text Selection Tool cursor_hand_tool.title=Enable Hand Tool cursor_hand_tool_label=Hand Tool scroll_vertical.title=Use Vertical Scrolling scroll_vertical_label=Vertical Scrolling scroll_horizontal.title=Use Horizontal Scrolling scroll_horizontal_label=Horizontal Scrolling scroll_wrapped.title=Use Wrapped Scrolling scroll_wrapped_label=Wrapped Scrolling spread_none.title=Do not join page spreads spread_none_label=No Spreads spread_odd.title=Join page spreads starting with odd-numbered pages spread_odd_label=Odd Spreads spread_even.title=Join page spreads starting with even-numbered pages spread_even_label=Even Spreads # Document properties dialog box document_properties.title=Document Properties… document_properties_label=Document Properties… document_properties_file_name=File name: document_properties_file_size=File size: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} kB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Title: document_properties_author=Author: document_properties_subject=Subject: document_properties_keywords=Keywords: document_properties_creation_date=Creation Date: document_properties_modification_date=Modification Date: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Creator: document_properties_producer=PDF Producer: document_properties_version=PDF Version: document_properties_page_count=Page Count: document_properties_page_size=Page Size: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=portrait document_properties_page_size_orientation_landscape=landscape document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Fast Web View: document_properties_linearized_yes=Yes document_properties_linearized_no=No document_properties_close=Close print_progress_message=Preparing document for printing… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Cancel # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Toggle Sidebar toggle_sidebar_notification.title=Toggle Sidebar (document contains outline/attachments) toggle_sidebar_notification2.title=Toggle Sidebar (document contains outline/attachments/layers) toggle_sidebar_label=Toggle Sidebar document_outline.title=Show Document Outline (double-click to expand/collapse all items) document_outline_label=Document Outline attachments.title=Show Attachments attachments_label=Attachments layers.title=Show Layers (double-click to reset all layers to the default state) layers_label=Layers thumbs.title=Show Thumbnails thumbs_label=Thumbnails current_outline_item.title=Find Current Outline Item current_outline_item_label=Current Outline Item findbar.title=Find in Document findbar_label=Find additional_layers=Additional Layers # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Page {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Page {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Thumbnail of Page {{page}} # Find panel button title and messages find_input.title=Find find_input.placeholder=Find in document… find_previous.title=Find the previous occurrence of the phrase find_previous_label=Previous find_next.title=Find the next occurrence of the phrase find_next_label=Next find_highlight=Highlight all find_match_case_label=Match case find_entire_word_label=Whole words find_reached_top=Reached top of document, continued from bottom find_reached_bottom=Reached end of document, continued from top # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} of {{total}} match find_match_count[two]={{current}} of {{total}} matches find_match_count[few]={{current}} of {{total}} matches find_match_count[many]={{current}} of {{total}} matches find_match_count[other]={{current}} of {{total}} matches # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=More than {{limit}} matches find_match_count_limit[one]=More than {{limit}} match find_match_count_limit[two]=More than {{limit}} matches find_match_count_limit[few]=More than {{limit}} matches find_match_count_limit[many]=More than {{limit}} matches find_match_count_limit[other]=More than {{limit}} matches find_not_found=Phrase not found # Error panel labels error_more_info=More Information error_less_info=Less Information error_close=Close # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Message: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stack: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=File: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Line: {{line}} rendering_error=An error occurred while rendering the page. # Predefined zoom values page_scale_width=Page Width page_scale_fit=Page Fit page_scale_auto=Automatic Zoom page_scale_actual=Actual Size # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Error loading_error=An error occurred while loading the PDF. invalid_file_error=Invalid or corrupted PDF file. missing_file_error=Missing PDF file. unexpected_response_error=Unexpected server response. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Annotation] password_label=Enter the password to open this PDF file. password_invalid=Invalid password. Please try again. password_ok=OK password_cancel=Cancel printing_not_supported=Warning: Printing is not fully supported by this browser. printing_not_ready=Warning: The PDF is not fully loaded for printing. web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/en-US/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Previous Page previous_label=Previous next.title=Next Page next_label=Next # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Page # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=of {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} of {{pagesCount}}) zoom_out.title=Zoom Out zoom_out_label=Zoom Out zoom_in.title=Zoom In zoom_in_label=Zoom In zoom.title=Zoom presentation_mode.title=Switch to Presentation Mode presentation_mode_label=Presentation Mode open_file.title=Open File open_file_label=Open print.title=Print print_label=Print download.title=Download download_label=Download bookmark.title=Current view (copy or open in new window) bookmark_label=Current View # Secondary toolbar and context menu tools.title=Tools tools_label=Tools first_page.title=Go to First Page first_page.label=Go to First Page first_page_label=Go to First Page last_page.title=Go to Last Page last_page.label=Go to Last Page last_page_label=Go to Last Page page_rotate_cw.title=Rotate Clockwise page_rotate_cw.label=Rotate Clockwise page_rotate_cw_label=Rotate Clockwise page_rotate_ccw.title=Rotate Counterclockwise page_rotate_ccw.label=Rotate Counterclockwise page_rotate_ccw_label=Rotate Counterclockwise cursor_text_select_tool.title=Enable Text Selection Tool cursor_text_select_tool_label=Text Selection Tool cursor_hand_tool.title=Enable Hand Tool cursor_hand_tool_label=Hand Tool scroll_vertical.title=Use Vertical Scrolling scroll_vertical_label=Vertical Scrolling scroll_horizontal.title=Use Horizontal Scrolling scroll_horizontal_label=Horizontal Scrolling scroll_wrapped.title=Use Wrapped Scrolling scroll_wrapped_label=Wrapped Scrolling spread_none.title=Do not join page spreads spread_none_label=No Spreads spread_odd.title=Join page spreads starting with odd-numbered pages spread_odd_label=Odd Spreads spread_even.title=Join page spreads starting with even-numbered pages spread_even_label=Even Spreads # Document properties dialog box document_properties.title=Document Properties… document_properties_label=Document Properties… document_properties_file_name=File name: document_properties_file_size=File size: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Title: document_properties_author=Author: document_properties_subject=Subject: document_properties_keywords=Keywords: document_properties_creation_date=Creation Date: document_properties_modification_date=Modification Date: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Creator: document_properties_producer=PDF Producer: document_properties_version=PDF Version: document_properties_page_count=Page Count: document_properties_page_size=Page Size: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=portrait document_properties_page_size_orientation_landscape=landscape document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Fast Web View: document_properties_linearized_yes=Yes document_properties_linearized_no=No document_properties_close=Close print_progress_message=Preparing document for printing… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Cancel # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Toggle Sidebar toggle_sidebar_notification2.title=Toggle Sidebar (document contains outline/attachments/layers) toggle_sidebar_label=Toggle Sidebar document_outline.title=Show Document Outline (double-click to expand/collapse all items) document_outline_label=Document Outline attachments.title=Show Attachments attachments_label=Attachments layers.title=Show Layers (double-click to reset all layers to the default state) layers_label=Layers thumbs.title=Show Thumbnails thumbs_label=Thumbnails current_outline_item.title=Find Current Outline Item current_outline_item_label=Current Outline Item findbar.title=Find in Document findbar_label=Find additional_layers=Additional Layers # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Page {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Page {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Thumbnail of Page {{page}} # Find panel button title and messages find_input.title=Find find_input.placeholder=Find in document… find_previous.title=Find the previous occurrence of the phrase find_previous_label=Previous find_next.title=Find the next occurrence of the phrase find_next_label=Next find_highlight=Highlight all find_match_case_label=Match case find_entire_word_label=Whole words find_reached_top=Reached top of document, continued from bottom find_reached_bottom=Reached end of document, continued from top # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} of {{total}} match find_match_count[two]={{current}} of {{total}} matches find_match_count[few]={{current}} of {{total}} matches find_match_count[many]={{current}} of {{total}} matches find_match_count[other]={{current}} of {{total}} matches # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=More than {{limit}} matches find_match_count_limit[one]=More than {{limit}} match find_match_count_limit[two]=More than {{limit}} matches find_match_count_limit[few]=More than {{limit}} matches find_match_count_limit[many]=More than {{limit}} matches find_match_count_limit[other]=More than {{limit}} matches find_not_found=Phrase not found # Error panel labels error_more_info=More Information error_less_info=Less Information error_close=Close # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Message: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stack: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=File: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Line: {{line}} rendering_error=An error occurred while rendering the page. # Predefined zoom values page_scale_width=Page Width page_scale_fit=Page Fit page_scale_auto=Automatic Zoom page_scale_actual=Actual Size # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Error loading_error=An error occurred while loading the PDF. invalid_file_error=Invalid or corrupted PDF file. missing_file_error=Missing PDF file. unexpected_response_error=Unexpected server response. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Annotation] password_label=Enter the password to open this PDF file. password_invalid=Invalid password. Please try again. password_ok=OK password_cancel=Cancel printing_not_supported=Warning: Printing is not fully supported by this browser. printing_not_ready=Warning: The PDF is not fully loaded for printing. web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/eo/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Antaŭa paĝo previous_label=Malantaŭen next.title=Venonta paĝo next_label=Antaŭen # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Paĝo # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=el {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} el {{pagesCount}}) zoom_out.title=Malpligrandigi zoom_out_label=Malpligrandigi zoom_in.title=Pligrandigi zoom_in_label=Pligrandigi zoom.title=Pligrandigilo presentation_mode.title=Iri al prezenta reĝimo presentation_mode_label=Prezenta reĝimo open_file.title=Malfermi dosieron open_file_label=Malfermi print.title=Presi print_label=Presi download.title=Elŝuti download_label=Elŝuti bookmark.title=Nuna vido (kopii aŭ malfermi en nova fenestro) bookmark_label=Nuna vido # Secondary toolbar and context menu tools.title=Iloj tools_label=Iloj first_page.title=Iri al la unua paĝo first_page.label=Iri al la unua paĝo first_page_label=Iri al la unua paĝo last_page.title=Iri al la lasta paĝo last_page.label=Iri al la lasta paĝo last_page_label=Iri al la lasta paĝo page_rotate_cw.title=Rotaciigi dekstrume page_rotate_cw.label=Rotaciigi dekstrume page_rotate_cw_label=Rotaciigi dekstrume page_rotate_ccw.title=Rotaciigi maldekstrume page_rotate_ccw.label=Rotaciigi maldekstrume page_rotate_ccw_label=Rotaciigi maldekstrume cursor_text_select_tool.title=Aktivigi tekstan elektilon cursor_text_select_tool_label=Teksta elektilo cursor_hand_tool.title=Aktivigi ilon de mano cursor_hand_tool_label=Ilo de mano scroll_vertical.title=Uzi vertikalan ŝovadon scroll_vertical_label=Vertikala ŝovado scroll_horizontal.title=Uzi horizontalan ŝovadon scroll_horizontal_label=Horizontala ŝovado scroll_wrapped.title=Uzi ambaŭdirektan ŝovadon scroll_wrapped_label=Ambaŭdirekta ŝovado spread_none.title=Ne montri paĝojn po du spread_none_label=Unupaĝa vido spread_odd.title=Kunigi paĝojn komencante per nepara paĝo spread_odd_label=Po du paĝoj, neparaj maldekstre spread_even.title=Kunigi paĝojn komencante per para paĝo spread_even_label=Po du paĝoj, paraj maldekstre # Document properties dialog box document_properties.title=Atributoj de dokumento… document_properties_label=Atributoj de dokumento… document_properties_file_name=Nomo de dosiero: document_properties_file_size=Grando de dosiero: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KO ({{size_b}} oktetoj) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MO ({{size_b}} oktetoj) document_properties_title=Titolo: document_properties_author=Aŭtoro: document_properties_subject=Temo: document_properties_keywords=Ŝlosilvorto: document_properties_creation_date=Dato de kreado: document_properties_modification_date=Dato de modifo: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Kreinto: document_properties_producer=Produktinto de PDF: document_properties_version=Versio de PDF: document_properties_page_count=Nombro de paĝoj: document_properties_page_size=Grando de paĝo: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=vertikala document_properties_page_size_orientation_landscape=horizontala document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letera document_properties_page_size_name_legal=Jura # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Rapida tekstaĵa vido: document_properties_linearized_yes=Jes document_properties_linearized_no=Ne document_properties_close=Fermi print_progress_message=Preparo de dokumento por presi ĝin … # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Nuligi # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Montri/kaŝi flankan strion toggle_sidebar_notification.title=Montri/kaŝi flankan strion (la dokumento enhavas konturon/aneksaĵojn) toggle_sidebar_notification2.title=Montri/kaŝi flankan strion (la dokumento enhavas konturon/kunsendaĵojn/tavolojn) toggle_sidebar_label=Montri/kaŝi flankan strion document_outline.title=Montri la konturon de dokumento (alklaku duoble por faldi/malfaldi ĉiujn elementojn) document_outline_label=Konturo de dokumento attachments.title=Montri kunsendaĵojn attachments_label=Kunsendaĵojn layers.title=Montri tavolojn (duoble alklaku por remeti ĉiujn tavolojn en la norman staton) layers_label=Tavoloj thumbs.title=Montri miniaturojn thumbs_label=Miniaturoj findbar.title=Serĉi en dokumento findbar_label=Serĉi additional_layers=Aldonaj tavoloj # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Paĝo {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Paĝo {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Miniaturo de paĝo {{page}} # Find panel button title and messages find_input.title=Serĉi find_input.placeholder=Serĉi en dokumento… find_previous.title=Serĉi la antaŭan aperon de la frazo find_previous_label=Malantaŭen find_next.title=Serĉi la venontan aperon de la frazo find_next_label=Antaŭen find_highlight=Elstarigi ĉiujn find_match_case_label=Distingi inter majuskloj kaj minuskloj find_entire_word_label=Tutaj vortoj find_reached_top=Komenco de la dokumento atingita, daŭrigado ekde la fino find_reached_bottom=Fino de la dokumento atingita, daŭrigado ekde la komenco # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} el {{total}} kongruo find_match_count[two]={{current}} el {{total}} kongruoj find_match_count[few]={{current}} el {{total}} kongruoj find_match_count[many]={{current}} el {{total}} kongruoj find_match_count[other]={{current}} el {{total}} kongruoj # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Pli ol {{limit}} kongruoj find_match_count_limit[one]=Pli ol {{limit}} kongruo find_match_count_limit[two]=Pli ol {{limit}} kongruoj find_match_count_limit[few]=Pli ol {{limit}} kongruoj find_match_count_limit[many]=Pli ol {{limit}} kongruoj find_match_count_limit[other]=Pli ol {{limit}} kongruoj find_not_found=Frazo ne trovita # Error panel labels error_more_info=Pli da informo error_less_info=Malpli da informo error_close=Fermi # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Mesaĝo: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stako: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Dosiero: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Linio: {{line}} rendering_error=Okazis eraro dum la montro de la paĝo. # Predefined zoom values page_scale_width=Larĝo de paĝo page_scale_fit=Adapti paĝon page_scale_auto=Aŭtomata skalo page_scale_actual=Reala grando # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Eraro loading_error=Okazis eraro dum la ŝargado de la PDF dosiero. invalid_file_error=Nevalida aŭ difektita PDF dosiero. missing_file_error=Mankas dosiero PDF. unexpected_response_error=Neatendita respondo de servilo. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Prinoto: {{type}}] password_label=Tajpu pasvorton por malfermi tiun ĉi dosieron PDF. password_invalid=Nevalida pasvorto. Bonvolu provi denove. password_ok=Akcepti password_cancel=Nuligi printing_not_supported=Averto: tiu ĉi retumilo ne plene subtenas presadon. printing_not_ready=Averto: la PDF dosiero ne estas plene ŝargita por presado. web_fonts_disabled=Neaktivaj teksaĵaj tiparoj: ne elbas uzi enmetitajn tiparojn de PDF. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/es-AR/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Página anterior previous_label=Anterior next.title=Página siguiente next_label=Siguiente # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Página # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=de {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=( {{pageNumber}} de {{pagesCount}} ) zoom_out.title=Alejar zoom_out_label=Alejar zoom_in.title=Acercar zoom_in_label=Acercar zoom.title=Zoom presentation_mode.title=Cambiar a modo presentación presentation_mode_label=Modo presentación open_file.title=Abrir archivo open_file_label=Abrir print.title=Imprimir print_label=Imprimir download.title=Descargar download_label=Descargar bookmark.title=Vista actual (copiar o abrir en nueva ventana) bookmark_label=Vista actual # Secondary toolbar and context menu tools.title=Herramientas tools_label=Herramientas first_page.title=Ir a primera página first_page.label=Ir a primera página first_page_label=Ir a primera página last_page.title=Ir a última página last_page.label=Ir a última página last_page_label=Ir a última página page_rotate_cw.title=Rotar horario page_rotate_cw.label=Rotar horario page_rotate_cw_label=Rotar horario page_rotate_ccw.title=Rotar antihorario page_rotate_ccw.label=Rotar antihorario page_rotate_ccw_label=Rotar antihorario cursor_text_select_tool.title=Habilitar herramienta de selección de texto cursor_text_select_tool_label=Herramienta de selección de texto cursor_hand_tool.title=Habilitar herramienta mano cursor_hand_tool_label=Herramienta mano scroll_vertical.title=Usar desplazamiento vertical scroll_vertical_label=Desplazamiento vertical scroll_horizontal.title=Usar desplazamiento vertical scroll_horizontal_label=Desplazamiento horizontal scroll_wrapped.title=Usar desplazamiento encapsulado scroll_wrapped_label=Desplazamiento encapsulado spread_none.title=No unir páginas dobles spread_none_label=Sin dobles spread_odd.title=Unir páginas dobles comenzando con las impares spread_odd_label=Dobles impares spread_even.title=Unir páginas dobles comenzando con las pares spread_even_label=Dobles pares # Document properties dialog box document_properties.title=Propiedades del documento… document_properties_label=Propiedades del documento… document_properties_file_name=Nombre de archivo: document_properties_file_size=Tamaño de archovo: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Título: document_properties_author=Autor: document_properties_subject=Asunto: document_properties_keywords=Palabras clave: document_properties_creation_date=Fecha de creación: document_properties_modification_date=Fecha de modificación: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Creador: document_properties_producer=PDF Productor: document_properties_version=Versión de PDF: document_properties_page_count=Cantidad de páginas: document_properties_page_size=Tamaño de página: document_properties_page_size_unit_inches=en document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=normal document_properties_page_size_orientation_landscape=apaisado document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Carta document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Vista rápida de la Web: document_properties_linearized_yes=Sí document_properties_linearized_no=No document_properties_close=Cerrar print_progress_message=Preparando documento para imprimir… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Cancelar # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Alternar barra lateral toggle_sidebar_notification.title=Intercambiar barra lateral (el documento contiene esquema/adjuntos) toggle_sidebar_notification2.title=Alternar barra lateral (el documento contiene esquemas/adjuntos/capas) toggle_sidebar_label=Alternar barra lateral document_outline.title=Mostrar esquema del documento (doble clic para expandir/colapsar todos los ítems) document_outline_label=Esquema del documento attachments.title=Mostrar adjuntos attachments_label=Adjuntos layers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado) layers_label=Capas thumbs.title=Mostrar miniaturas thumbs_label=Miniaturas current_outline_item.title=Buscar elemento de esquema actual current_outline_item_label=Elemento de esquema actual findbar.title=Buscar en documento findbar_label=Buscar additional_layers=Capas adicionales # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Página {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Página {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Miniatura de página {{page}} # Find panel button title and messages find_input.title=Buscar find_input.placeholder=Buscar en documento… find_previous.title=Buscar la aparición anterior de la frase find_previous_label=Anterior find_next.title=Buscar la siguiente aparición de la frase find_next_label=Siguiente find_highlight=Resaltar todo find_match_case_label=Coincidir mayúsculas find_entire_word_label=Palabras completas find_reached_top=Inicio de documento alcanzado, continuando desde abajo find_reached_bottom=Fin de documento alcanzando, continuando desde arriba # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} de {{total}} coincidencias find_match_count[two]={{current}} de {{total}} coincidencias find_match_count[few]={{current}} de {{total}} coincidencias find_match_count[many]={{current}} de {{total}} coincidencias find_match_count[other]={{current}} de {{total}} coincidencias # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Más de {{limit}} coincidencias find_match_count_limit[one]=Más de {{limit}} coinciden find_match_count_limit[two]=Más de {{limit}} coincidencias find_match_count_limit[few]=Más de {{limit}} coincidencias find_match_count_limit[many]=Más de {{limit}} coincidencias find_match_count_limit[other]=Más de {{limit}} coincidencias find_not_found=Frase no encontrada # Error panel labels error_more_info=Más información error_less_info=Menos información error_close=Cerrar # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Mensaje: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Pila: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Archivo: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Línea: {{line}} rendering_error=Ocurrió un error al dibujar la página. # Predefined zoom values page_scale_width=Ancho de página page_scale_fit=Ajustar página page_scale_auto=Zoom automático page_scale_actual=Tamaño real # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Error loading_error=Ocurrió un error al cargar el PDF. invalid_file_error=Archivo PDF no válido o cocrrupto. missing_file_error=Archivo PDF faltante. unexpected_response_error=Respuesta del servidor inesperada. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Anotación] password_label=Ingrese la contraseña para abrir este archivo PDF password_invalid=Contraseña inválida. Intente nuevamente. password_ok=Aceptar password_cancel=Cancelar printing_not_supported=Advertencia: La impresión no está totalmente soportada por este navegador. printing_not_ready=Advertencia: El PDF no está completamente cargado para impresión. web_fonts_disabled=Tipografía web deshabilitada: no se pueden usar tipos incrustados en PDF. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/es-CL/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Página anterior previous_label=Anterior next.title=Página siguiente next_label=Siguiente # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Página # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=de {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} de {{pagesCount}}) zoom_out.title=Alejar zoom_out_label=Alejar zoom_in.title=Acercar zoom_in_label=Acercar zoom.title=Ampliación presentation_mode.title=Cambiar al modo de presentación presentation_mode_label=Modo de presentación open_file.title=Abrir archivo open_file_label=Abrir print.title=Imprimir print_label=Imprimir download.title=Descargar download_label=Descargar bookmark.title=Vista actual (copiar o abrir en nueva ventana) bookmark_label=Vista actual # Secondary toolbar and context menu tools.title=Herramientas tools_label=Herramientas first_page.title=Ir a la primera página first_page.label=Ir a la primera página first_page_label=Ir a la primera página last_page.title=Ir a la última página last_page.label=Ir a la última página last_page_label=Ir a la última página page_rotate_cw.title=Girar a la derecha page_rotate_cw.label=Girar a la derecha page_rotate_cw_label=Girar a la derecha page_rotate_ccw.title=Girar a la izquierda page_rotate_ccw.label=Girar a la izquierda page_rotate_ccw_label=Girar a la izquierda cursor_text_select_tool.title=Activar la herramienta de selección de texto cursor_text_select_tool_label=Herramienta de selección de texto cursor_hand_tool.title=Activar la herramienta de mano cursor_hand_tool_label=Herramienta de mano scroll_vertical.title=Usar desplazamiento vertical scroll_vertical_label=Desplazamiento vertical scroll_horizontal.title=Usar desplazamiento horizontal scroll_horizontal_label=Desplazamiento horizontal scroll_wrapped.title=Usar desplazamiento en bloque scroll_wrapped_label=Desplazamiento en bloque spread_none.title=No juntar páginas a modo de libro spread_none_label=Vista de una página spread_odd.title=Junta las páginas partiendo con una de número impar spread_odd_label=Vista de libro impar spread_even.title=Junta las páginas partiendo con una de número par spread_even_label=Vista de libro par # Document properties dialog box document_properties.title=Propiedades del documento… document_properties_label=Propiedades del documento… document_properties_file_name=Nombre de archivo: document_properties_file_size=Tamaño del archivo: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Título: document_properties_author=Autor: document_properties_subject=Asunto: document_properties_keywords=Palabras clave: document_properties_creation_date=Fecha de creación: document_properties_modification_date=Fecha de modificación: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Creador: document_properties_producer=Productor del PDF: document_properties_version=Versión de PDF: document_properties_page_count=Cantidad de páginas: document_properties_page_size=Tamaño de la página: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=vertical document_properties_page_size_orientation_landscape=horizontal document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Carta document_properties_page_size_name_legal=Oficio # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Vista rápida en Web: document_properties_linearized_yes=Sí document_properties_linearized_no=No document_properties_close=Cerrar print_progress_message=Preparando documento para impresión… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Cancelar # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Barra lateral toggle_sidebar_notification.title=Cambiar barra lateral (índice de contenidos del documento/adjuntos) toggle_sidebar_notification2.title=Cambiar barra lateral (índice de contenidos del documento/adjuntos/capas) toggle_sidebar_label=Mostrar u ocultar la barra lateral document_outline.title=Mostrar esquema del documento (doble clic para expandir/contraer todos los elementos) document_outline_label=Esquema del documento attachments.title=Mostrar adjuntos attachments_label=Adjuntos layers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado) layers_label=Capas thumbs.title=Mostrar miniaturas thumbs_label=Miniaturas current_outline_item.title=Buscar elemento de esquema actual current_outline_item_label=Elemento de esquema actual findbar.title=Buscar en el documento findbar_label=Buscar additional_layers=Capas adicionales # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Página {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Página {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Miniatura de la página {{page}} # Find panel button title and messages find_input.title=Encontrar find_input.placeholder=Encontrar en el documento… find_previous.title=Buscar la aparición anterior de la frase find_previous_label=Previo find_next.title=Buscar la siguiente aparición de la frase find_next_label=Siguiente find_highlight=Destacar todos find_match_case_label=Coincidir mayús./minús. find_entire_word_label=Palabras completas find_reached_top=Se alcanzó el inicio del documento, continuando desde el final find_reached_bottom=Se alcanzó el final del documento, continuando desde el inicio # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} de {{total}} coincidencia find_match_count[two]={{current}} de {{total}} coincidencias find_match_count[few]={{current}} de {{total}} coincidencias find_match_count[many]={{current}} de {{total}} coincidencias find_match_count[other]={{current}} de {{total}} coincidencias # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Más de {{limit}} coincidencias find_match_count_limit[one]=Más de {{limit}} coincidencia find_match_count_limit[two]=Más de {{limit}} coincidencias find_match_count_limit[few]=Más de {{limit}} coincidencias find_match_count_limit[many]=Más de {{limit}} coincidencias find_match_count_limit[other]=Más de {{limit}} coincidencias find_not_found=Frase no encontrada # Error panel labels error_more_info=Más información error_less_info=Menos información error_close=Cerrar # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (compilación: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Mensaje: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Pila: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Archivo: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Línea: {{line}} rendering_error=Ocurrió un error al renderizar la página. # Predefined zoom values page_scale_width=Ancho de página page_scale_fit=Ajuste de página page_scale_auto=Aumento automático page_scale_actual=Tamaño actual # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Error loading_error=Ocurrió un error al cargar el PDF. invalid_file_error=Archivo PDF inválido o corrupto. missing_file_error=Falta el archivo PDF. unexpected_response_error=Respuesta del servidor inesperada. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Anotación] password_label=Ingrese la contraseña para abrir este archivo PDF. password_invalid=Contraseña inválida. Por favor, vuelve a intentarlo. password_ok=Aceptar password_cancel=Cancelar printing_not_supported=Advertencia: Imprimir no está soportado completamente por este navegador. printing_not_ready=Advertencia: El PDF no está completamente cargado para ser impreso. web_fonts_disabled=Las tipografías web están desactivadas: imposible usar las fuentes PDF embebidas. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/es-ES/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Página anterior previous_label=Anterior next.title=Página siguiente next_label=Siguiente # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Página # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=de {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} de {{pagesCount}}) zoom_out.title=Reducir zoom_out_label=Reducir zoom_in.title=Aumentar zoom_in_label=Aumentar zoom.title=Tamaño presentation_mode.title=Cambiar al modo presentación presentation_mode_label=Modo presentación open_file.title=Abrir archivo open_file_label=Abrir print.title=Imprimir print_label=Imprimir download.title=Descargar download_label=Descargar bookmark.title=Vista actual (copiar o abrir en una nueva ventana) bookmark_label=Vista actual # Secondary toolbar and context menu tools.title=Herramientas tools_label=Herramientas first_page.title=Ir a la primera página first_page.label=Ir a la primera página first_page_label=Ir a la primera página last_page.title=Ir a la última página last_page.label=Ir a la última página last_page_label=Ir a la última página page_rotate_cw.title=Rotar en sentido horario page_rotate_cw.label=Rotar en sentido horario page_rotate_cw_label=Rotar en sentido horario page_rotate_ccw.title=Rotar en sentido antihorario page_rotate_ccw.label=Rotar en sentido antihorario page_rotate_ccw_label=Rotar en sentido antihorario cursor_text_select_tool.title=Activar herramienta de selección de texto cursor_text_select_tool_label=Herramienta de selección de texto cursor_hand_tool.title=Activar herramienta de mano cursor_hand_tool_label=Herramienta de mano scroll_vertical.title=Usar desplazamiento vertical scroll_vertical_label=Desplazamiento vertical scroll_horizontal.title=Usar desplazamiento horizontal scroll_horizontal_label=Desplazamiento horizontal scroll_wrapped.title=Usar desplazamiento en bloque scroll_wrapped_label=Desplazamiento en bloque spread_none.title=No juntar páginas en vista de libro spread_none_label=Vista de libro spread_odd.title=Juntar las páginas partiendo de una con número impar spread_odd_label=Vista de libro impar spread_even.title=Juntar las páginas partiendo de una con número par spread_even_label=Vista de libro par # Document properties dialog box document_properties.title=Propiedades del documento… document_properties_label=Propiedades del documento… document_properties_file_name=Nombre de archivo: document_properties_file_size=Tamaño de archivo: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Título: document_properties_author=Autor: document_properties_subject=Asunto: document_properties_keywords=Palabras clave: document_properties_creation_date=Fecha de creación: document_properties_modification_date=Fecha de modificación: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Creador: document_properties_producer=Productor PDF: document_properties_version=Versión PDF: document_properties_page_count=Número de páginas: document_properties_page_size=Tamaño de la página: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=vertical document_properties_page_size_orientation_landscape=horizontal document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Carta document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Vista rápida de la web: document_properties_linearized_yes=Sí document_properties_linearized_no=No document_properties_close=Cerrar print_progress_message=Preparando documento para impresión… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Cancelar # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Cambiar barra lateral toggle_sidebar_notification.title=Alternar panel lateral (el documento contiene un esquema o adjuntos) toggle_sidebar_notification2.title=Alternar barra lateral (el documento contiene esquemas/adjuntos/capas) toggle_sidebar_label=Cambiar barra lateral document_outline.title=Mostrar resumen del documento (doble clic para expandir/contraer todos los elementos) document_outline_label=Resumen de documento attachments.title=Mostrar adjuntos attachments_label=Adjuntos layers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado) layers_label=Capas thumbs.title=Mostrar miniaturas thumbs_label=Miniaturas findbar.title=Buscar en el documento findbar_label=Buscar additional_layers=Capas adicionales # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Página {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Página {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Miniatura de la página {{page}} # Find panel button title and messages find_input.title=Buscar find_input.placeholder=Buscar en el documento… find_previous.title=Encontrar la anterior aparición de la frase find_previous_label=Anterior find_next.title=Encontrar la siguiente aparición de esta frase find_next_label=Siguiente find_highlight=Resaltar todos find_match_case_label=Coincidencia de mayús./minús. find_entire_word_label=Palabras completas find_reached_top=Se alcanzó el inicio del documento, se continúa desde el final find_reached_bottom=Se alcanzó el final del documento, se continúa desde el inicio # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} de {{total}} coincidencia find_match_count[two]={{current}} de {{total}} coincidencias find_match_count[few]={{current}} de {{total}} coincidencias find_match_count[many]={{current}} de {{total}} coincidencias find_match_count[other]={{current}} de {{total}} coincidencias # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Más de {{limit}} coincidencias find_match_count_limit[one]=Más de {{limit}} coincidencia find_match_count_limit[two]=Más de {{limit}} coincidencias find_match_count_limit[few]=Más de {{limit}} coincidencias find_match_count_limit[many]=Más de {{limit}} coincidencias find_match_count_limit[other]=Más de {{limit}} coincidencias find_not_found=Frase no encontrada # Error panel labels error_more_info=Más información error_less_info=Menos información error_close=Cerrar # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Mensaje: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Pila: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Archivo: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Línea: {{line}} rendering_error=Ocurrió un error al renderizar la página. # Predefined zoom values page_scale_width=Anchura de la página page_scale_fit=Ajuste de la página page_scale_auto=Tamaño automático page_scale_actual=Tamaño real # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Error loading_error=Ocurrió un error al cargar el PDF. invalid_file_error=Fichero PDF no válido o corrupto. missing_file_error=No hay fichero PDF. unexpected_response_error=Respuesta inesperada del servidor. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Anotación {{type}}] password_label=Introduzca la contraseña para abrir este archivo PDF. password_invalid=Contraseña no válida. Vuelva a intentarlo. password_ok=Aceptar password_cancel=Cancelar printing_not_supported=Advertencia: Imprimir no está totalmente soportado por este navegador. printing_not_ready=Advertencia: Este PDF no se ha cargado completamente para poder imprimirse. web_fonts_disabled=Las tipografías web están desactivadas: es imposible usar las tipografías PDF embebidas. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/es-MX/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Página anterior previous_label=Anterior next.title=Página siguiente next_label=Siguiente # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Página # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=de {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} de {{pagesCount}}) zoom_out.title=Reducir zoom_out_label=Reducir zoom_in.title=Aumentar zoom_in_label=Aumentar zoom.title=Zoom presentation_mode.title=Cambiar al modo presentación presentation_mode_label=Modo presentación open_file.title=Abrir archivo open_file_label=Abrir print.title=Imprimir print_label=Imprimir download.title=Descargar download_label=Descargar bookmark.title=Vista actual (copiar o abrir en una nueva ventana) bookmark_label=Vista actual # Secondary toolbar and context menu tools.title=Herramientas tools_label=Herramientas first_page.title=Ir a la primera página first_page.label=Ir a la primera página first_page_label=Ir a la primera página last_page.title=Ir a la última página last_page.label=Ir a la última página last_page_label=Ir a la última página page_rotate_cw.title=Girar a la derecha page_rotate_cw.label=Girar a la derecha page_rotate_cw_label=Girar a la derecha page_rotate_ccw.title=Girar a la izquierda page_rotate_ccw.label=Girar a la izquierda page_rotate_ccw_label=Girar a la izquierda cursor_text_select_tool.title=Activar la herramienta de selección de texto cursor_text_select_tool_label=Herramienta de selección de texto cursor_hand_tool.title=Activar la herramienta de mano cursor_hand_tool_label=Herramienta de mano scroll_vertical.title=Usar desplazamiento vertical scroll_vertical_label=Desplazamiento vertical scroll_horizontal.title=Usar desplazamiento horizontal scroll_horizontal_label=Desplazamiento horizontal scroll_wrapped.title=Usar desplazamiento encapsulado scroll_wrapped_label=Desplazamiento encapsulado spread_none.title=No unir páginas separadas spread_none_label=Vista de una página spread_odd.title=Unir las páginas partiendo con una de número impar spread_odd_label=Vista de libro impar spread_even.title=Juntar las páginas partiendo con una de número par spread_even_label=Vista de libro par # Document properties dialog box document_properties.title=Propiedades del documento… document_properties_label=Propiedades del documento… document_properties_file_name=Nombre del archivo: document_properties_file_size=Tamaño del archivo: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Título: document_properties_author=Autor: document_properties_subject=Asunto: document_properties_keywords=Palabras claves: document_properties_creation_date=Fecha de creación: document_properties_modification_date=Fecha de modificación: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Creador: document_properties_producer=Productor PDF: document_properties_version=Versión PDF: document_properties_page_count=Número de páginas: document_properties_page_size=Tamaño de la página: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=vertical document_properties_page_size_orientation_landscape=horizontal document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Carta document_properties_page_size_name_legal=Oficio # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Vista rápida de la web: document_properties_linearized_yes=Sí document_properties_linearized_no=No document_properties_close=Cerrar print_progress_message=Preparando documento para impresión… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Cancelar # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Cambiar barra lateral toggle_sidebar_notification.title=Cambiar barra lateral (índice de contenidos del documento/adjuntos) toggle_sidebar_notification2.title=Alternar barra lateral (el documento contiene esquemas/adjuntos/capas) toggle_sidebar_label=Cambiar barra lateral document_outline.title=Mostrar esquema del documento (doble clic para expandir/contraer todos los elementos) document_outline_label=Esquema del documento attachments.title=Mostrar adjuntos attachments_label=Adjuntos layers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado) layers_label=Capas thumbs.title=Mostrar miniaturas thumbs_label=Miniaturas findbar.title=Buscar en el documento findbar_label=Buscar additional_layers=Capas adicionales # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Página {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Página {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Miniatura de la página {{page}} # Find panel button title and messages find_input.title=Buscar find_input.placeholder=Buscar en el documento… find_previous.title=Ir a la anterior frase encontrada find_previous_label=Anterior find_next.title=Ir a la siguiente frase encontrada find_next_label=Siguiente find_highlight=Resaltar todo find_match_case_label=Coincidir con mayúsculas y minúsculas find_entire_word_label=Palabras completas find_reached_top=Se alcanzó el inicio del documento, se buscará al final find_reached_bottom=Se alcanzó el final del documento, se buscará al inicio # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} de {{total}} coincidencia find_match_count[two]={{current}} de {{total}} coincidencias find_match_count[few]={{current}} de {{total}} coincidencias find_match_count[many]={{current}} de {{total}} coincidencias find_match_count[other]={{current}} de {{total}} coincidencias # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Más de {{limit}} coincidencias find_match_count_limit[one]=Más de {{limit}} coinciden find_match_count_limit[two]=Más de {{limit}} coincidencias find_match_count_limit[few]=Más de {{limit}} coincidencias find_match_count_limit[many]=Más de {{limit}} coincidencias find_match_count_limit[other]=Más de {{limit}} coincidencias find_not_found=No se encontró la frase # Error panel labels error_more_info=Más información error_less_info=Menos información error_close=Cerrar # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Mensaje: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Pila: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Archivo: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Línea: {{line}} rendering_error=Un error ocurrió al renderizar la página. # Predefined zoom values page_scale_width=Ancho de página page_scale_fit=Ajustar página page_scale_auto=Zoom automático page_scale_actual=Tamaño real # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Error loading_error=Un error ocurrió al cargar el PDF. invalid_file_error=Archivo PDF invalido o dañado. missing_file_error=Archivo PDF no encontrado. unexpected_response_error=Respuesta inesperada del servidor. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} anotación] password_label=Ingresa la contraseña para abrir este archivo PDF. password_invalid=Contraseña inválida. Por favor intenta de nuevo. password_ok=Aceptar password_cancel=Cancelar printing_not_supported=Advertencia: La impresión no esta completamente soportada por este navegador. printing_not_ready=Advertencia: El PDF no cargo completamente para impresión. web_fonts_disabled=Las fuentes web están desactivadas: es imposible usar las fuentes PDF embebidas. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/et/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Eelmine lehekülg previous_label=Eelmine next.title=Järgmine lehekülg next_label=Järgmine # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Leht # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=/ {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}}/{{pagesCount}}) zoom_out.title=Vähenda zoom_out_label=Vähenda zoom_in.title=Suurenda zoom_in_label=Suurenda zoom.title=Suurendamine presentation_mode.title=Lülitu esitlusrežiimi presentation_mode_label=Esitlusrežiim open_file.title=Ava fail open_file_label=Ava print.title=Prindi print_label=Prindi download.title=Laadi alla download_label=Laadi alla bookmark.title=Praegune vaade (kopeeri või ava uues aknas) bookmark_label=Praegune vaade # Secondary toolbar and context menu tools.title=Tööriistad tools_label=Tööriistad first_page.title=Mine esimesele leheküljele first_page.label=Mine esimesele leheküljele first_page_label=Mine esimesele leheküljele last_page.title=Mine viimasele leheküljele last_page.label=Mine viimasele leheküljele last_page_label=Mine viimasele leheküljele page_rotate_cw.title=Pööra päripäeva page_rotate_cw.label=Pööra päripäeva page_rotate_cw_label=Pööra päripäeva page_rotate_ccw.title=Pööra vastupäeva page_rotate_ccw.label=Pööra vastupäeva page_rotate_ccw_label=Pööra vastupäeva cursor_text_select_tool.title=Luba teksti valimise tööriist cursor_text_select_tool_label=Teksti valimise tööriist cursor_hand_tool.title=Luba sirvimistööriist cursor_hand_tool_label=Sirvimistööriist scroll_vertical.title=Kasuta vertikaalset kerimist scroll_vertical_label=Vertikaalne kerimine scroll_horizontal.title=Kasuta horisontaalset kerimist scroll_horizontal_label=Horisontaalne kerimine scroll_wrapped.title=Kasuta rohkem mahutavat kerimist scroll_wrapped_label=Rohkem mahutav kerimine spread_none.title=Ära kõrvuta lehekülgi spread_none_label=Lehtede kõrvutamine puudub spread_odd.title=Kõrvuta leheküljed, alustades paaritute numbritega lehekülgedega spread_odd_label=Kõrvutamine paaritute numbritega alustades spread_even.title=Kõrvuta leheküljed, alustades paarisnumbritega lehekülgedega spread_even_label=Kõrvutamine paarisnumbritega alustades # Document properties dialog box document_properties.title=Dokumendi omadused… document_properties_label=Dokumendi omadused… document_properties_file_name=Faili nimi: document_properties_file_size=Faili suurus: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KiB ({{size_b}} baiti) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MiB ({{size_b}} baiti) document_properties_title=Pealkiri: document_properties_author=Autor: document_properties_subject=Teema: document_properties_keywords=Märksõnad: document_properties_creation_date=Loodud: document_properties_modification_date=Muudetud: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}} {{time}} document_properties_creator=Looja: document_properties_producer=Generaator: document_properties_version=Generaatori versioon: document_properties_page_count=Lehekülgi: document_properties_page_size=Lehe suurus: document_properties_page_size_unit_inches=tolli document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=vertikaalpaigutus document_properties_page_size_orientation_landscape=rõhtpaigutus document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized="Fast Web View" tugi: document_properties_linearized_yes=Jah document_properties_linearized_no=Ei document_properties_close=Sulge print_progress_message=Dokumendi ettevalmistamine printimiseks… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Loobu # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Näita külgriba toggle_sidebar_notification.title=Näita külgriba (dokument sisaldab sisukorda/manuseid) toggle_sidebar_label=Näita külgriba document_outline.title=Näita sisukorda (kõigi punktide laiendamiseks/ahendamiseks topeltklõpsa) document_outline_label=Näita sisukorda attachments.title=Näita manuseid attachments_label=Manused thumbs.title=Näita pisipilte thumbs_label=Pisipildid findbar.title=Otsi dokumendist findbar_label=Otsi # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title={{page}}. lehekülg # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas={{page}}. lehekülje pisipilt # Find panel button title and messages find_input.title=Otsi find_input.placeholder=Otsi dokumendist… find_previous.title=Otsi fraasi eelmine esinemiskoht find_previous_label=Eelmine find_next.title=Otsi fraasi järgmine esinemiskoht find_next_label=Järgmine find_highlight=Too kõik esile find_match_case_label=Tõstutundlik find_entire_word_label=Täissõnad find_reached_top=Jõuti dokumendi algusesse, jätkati lõpust find_reached_bottom=Jõuti dokumendi lõppu, jätkati algusest # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]=vaste {{current}}/{{total}} find_match_count[two]=vaste {{current}}/{{total}} find_match_count[few]=vaste {{current}}/{{total}} find_match_count[many]=vaste {{current}}/{{total}} find_match_count[other]=vaste {{current}}/{{total}} # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Rohkem kui {{limit}} vastet find_match_count_limit[one]=Rohkem kui {{limit}} vaste find_match_count_limit[two]=Rohkem kui {{limit}} vastet find_match_count_limit[few]=Rohkem kui {{limit}} vastet find_match_count_limit[many]=Rohkem kui {{limit}} vastet find_match_count_limit[other]=Rohkem kui {{limit}} vastet find_not_found=Fraasi ei leitud # Error panel labels error_more_info=Rohkem teavet error_less_info=Vähem teavet error_close=Sulge # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Teade: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stack: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Fail: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Rida: {{line}} rendering_error=Lehe renderdamisel esines viga. # Predefined zoom values page_scale_width=Mahuta laiusele page_scale_fit=Mahuta leheküljele page_scale_auto=Automaatne suurendamine page_scale_actual=Tegelik suurus # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Viga loading_error=PDFi laadimisel esines viga. invalid_file_error=Vigane või rikutud PDF-fail. missing_file_error=PDF-fail puudub. unexpected_response_error=Ootamatu vastus serverilt. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}} {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Annotation] password_label=PDF-faili avamiseks sisesta parool. password_invalid=Vigane parool. Palun proovi uuesti. password_ok=Sobib password_cancel=Loobu printing_not_supported=Hoiatus: printimine pole selle brauseri poolt täielikult toetatud. printing_not_ready=Hoiatus: PDF pole printimiseks täielikult laaditud. web_fonts_disabled=Veebifondid on keelatud: PDFiga kaasatud fonte pole võimalik kasutada. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/eu/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Aurreko orria previous_label=Aurrekoa next.title=Hurrengo orria next_label=Hurrengoa # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Orria # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=/ {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages={{pagesCount}}/{{pageNumber}} zoom_out.title=Urrundu zooma zoom_out_label=Urrundu zooma zoom_in.title=Gerturatu zooma zoom_in_label=Gerturatu zooma zoom.title=Zooma presentation_mode.title=Aldatu aurkezpen modura presentation_mode_label=Arkezpen modua open_file.title=Ireki fitxategia open_file_label=Ireki print.title=Inprimatu print_label=Inprimatu download.title=Deskargatu download_label=Deskargatu bookmark.title=Uneko ikuspegia (kopiatu edo ireki leiho berrian) bookmark_label=Uneko ikuspegia # Secondary toolbar and context menu tools.title=Tresnak tools_label=Tresnak first_page.title=Joan lehen orrira first_page.label=Joan lehen orrira first_page_label=Joan lehen orrira last_page.title=Joan azken orrira last_page.label=Joan azken orrira last_page_label=Joan azken orrira page_rotate_cw.title=Biratu erlojuaren norantzan page_rotate_cw.label=Biratu erlojuaren norantzan page_rotate_cw_label=Biratu erlojuaren norantzan page_rotate_ccw.title=Biratu erlojuaren aurkako norantzan page_rotate_ccw.label=Biratu erlojuaren aurkako norantzan page_rotate_ccw_label=Biratu erlojuaren aurkako norantzan cursor_text_select_tool.title=Gaitu testuaren hautapen tresna cursor_text_select_tool_label=Testuaren hautapen tresna cursor_hand_tool.title=Gaitu eskuaren tresna cursor_hand_tool_label=Eskuaren tresna scroll_vertical.title=Erabili korritze bertikala scroll_vertical_label=Korritze bertikala scroll_horizontal.title=Erabili korritze horizontala scroll_horizontal_label=Korritze horizontala scroll_wrapped.title=Erabili korritze egokitua scroll_wrapped_label=Korritze egokitua spread_none.title=Ez elkartu barreiatutako orriak spread_none_label=Barreiatzerik ez spread_odd.title=Elkartu barreiatutako orriak bakoiti zenbakidunekin hasita spread_odd_label=Barreiatze bakoitia spread_even.title=Elkartu barreiatutako orriak bikoiti zenbakidunekin hasita spread_even_label=Barreiatze bikoitia # Document properties dialog box document_properties.title=Dokumentuaren propietateak… document_properties_label=Dokumentuaren propietateak… document_properties_file_name=Fitxategi-izena: document_properties_file_size=Fitxategiaren tamaina: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} byte) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} byte) document_properties_title=Izenburua: document_properties_author=Egilea: document_properties_subject=Gaia: document_properties_keywords=Gako-hitzak: document_properties_creation_date=Sortze-data: document_properties_modification_date=Aldatze-data: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Sortzailea: document_properties_producer=PDFaren ekoizlea: document_properties_version=PDF bertsioa: document_properties_page_count=Orrialde kopurua: document_properties_page_size=Orriaren tamaina: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=bertikala document_properties_page_size_orientation_landscape=horizontala document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Gutuna document_properties_page_size_name_legal=Legala # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Webeko ikuspegi bizkorra: document_properties_linearized_yes=Bai document_properties_linearized_no=Ez document_properties_close=Itxi print_progress_message=Dokumentua inprimatzeko prestatzen… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent=%{{progress}} print_progress_close=Utzi # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Txandakatu alboko barra toggle_sidebar_notification.title=Txandakatu alboko barra (dokumentuak eskema/eranskinak ditu) toggle_sidebar_label=Txandakatu alboko barra document_outline.title=Erakutsi dokumentuaren eskema (klik bikoitza elementu guztiak zabaltzeko/tolesteko) document_outline_label=Dokumentuaren eskema attachments.title=Erakutsi eranskinak attachments_label=Eranskinak layers_label=Geruzak thumbs.title=Erakutsi koadro txikiak thumbs_label=Koadro txikiak findbar.title=Bilatu dokumentuan findbar_label=Bilatu additional_layers=Geruza gehigarriak # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas={{page}}. orria # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title={{page}}. orria # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas={{page}}. orriaren koadro txikia # Find panel button title and messages find_input.title=Bilatu find_input.placeholder=Bilatu dokumentuan… find_previous.title=Bilatu esaldiaren aurreko parekatzea find_previous_label=Aurrekoa find_next.title=Bilatu esaldiaren hurrengo parekatzea find_next_label=Hurrengoa find_highlight=Nabarmendu guztia find_match_case_label=Bat etorri maiuskulekin/minuskulekin find_entire_word_label=Hitz osoak find_reached_top=Dokumentuaren hasierara heldu da, bukaeratik jarraitzen find_reached_bottom=Dokumentuaren bukaerara heldu da, hasieratik jarraitzen # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{total}}/{{current}}. bat etortzea find_match_count[two]={{total}}/{{current}}. bat etortzea find_match_count[few]={{total}}/{{current}}. bat etortzea find_match_count[many]={{total}}/{{current}}. bat etortzea find_match_count[other]={{total}}/{{current}}. bat etortzea # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]={{limit}} bat-etortze baino gehiago find_match_count_limit[one]=Bat-etortze {{limit}} baino gehiago find_match_count_limit[two]={{limit}} bat-etortze baino gehiago find_match_count_limit[few]={{limit}} bat-etortze baino gehiago find_match_count_limit[many]={{limit}} bat-etortze baino gehiago find_match_count_limit[other]={{limit}} bat-etortze baino gehiago find_not_found=Esaldia ez da aurkitu # Error panel labels error_more_info=Informazio gehiago error_less_info=Informazio gutxiago error_close=Itxi # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (eraikuntza: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Mezua: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Pila: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Fitxategia: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Lerroa: {{line}} rendering_error=Errorea gertatu da orria errendatzean. # Predefined zoom values page_scale_width=Orriaren zabalera page_scale_fit=Doitu orrira page_scale_auto=Zoom automatikoa page_scale_actual=Benetako tamaina # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent=%{{scale}} # Loading indicator messages loading_error_indicator=Errorea loading_error=Errorea gertatu da PDFa kargatzean. invalid_file_error=PDF fitxategi baliogabe edo hondatua. missing_file_error=PDF fitxategia falta da. unexpected_response_error=Espero gabeko zerbitzariaren erantzuna. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} ohartarazpena] password_label=Idatzi PDF fitxategi hau irekitzeko pasahitza. password_invalid=Pasahitz baliogabea. Saiatu berriro mesedez. password_ok=Ados password_cancel=Utzi printing_not_supported=Abisua: inprimatzeko euskarria ez da erabatekoa nabigatzaile honetan. printing_not_ready=Abisua: PDFa ez dago erabat kargatuta inprimatzeko. web_fonts_disabled=Webeko letra-tipoak desgaituta daude: ezin dira kapsulatutako PDF letra-tipoak erabili. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/fa/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=صفحهٔ قبلی previous_label=قبلی next.title=صفحهٔ بعدی next_label=بعدی # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=صفحه # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=از {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}}از {{pagesCount}}) zoom_out.title=کوچک‌نمایی zoom_out_label=کوچک‌نمایی zoom_in.title=بزرگ‌نمایی zoom_in_label=بزرگ‌نمایی zoom.title=زوم presentation_mode.title=تغییر به حالت ارائه presentation_mode_label=حالت ارائه open_file.title=باز کردن پرونده open_file_label=باز کردن print.title=چاپ print_label=چاپ download.title=بارگیری download_label=بارگیری bookmark.title=نمای فعلی (رونوشت و یا نشان دادن در پنجره جدید) bookmark_label=نمای فعلی # Secondary toolbar and context menu tools.title=ابزارها tools_label=ابزارها first_page.title=برو به اولین صفحه first_page.label=برو یه اولین صفحه first_page_label=برو به اولین صفحه last_page.title=برو به آخرین صفحه last_page.label=برو به آخرین صفحه last_page_label=برو به آخرین صفحه page_rotate_cw.title=چرخش ساعتگرد page_rotate_cw.label=چرخش ساعتگرد page_rotate_cw_label=چرخش ساعتگرد page_rotate_ccw.title=چرخش پاد ساعتگرد page_rotate_ccw.label=چرخش پاد ساعتگرد page_rotate_ccw_label=چرخش پاد ساعتگرد cursor_text_select_tool.title=فعال کردن ابزارِ انتخابِ متن cursor_text_select_tool_label=ابزارِ انتخابِ متن cursor_hand_tool.title=فعال کردن ابزارِ دست cursor_hand_tool_label=ابزار دست scroll_vertical.title=استفاده از پیمایش عمودی scroll_vertical_label=پیمایش عمودی scroll_horizontal.title=استفاده از پیمایش افقی scroll_horizontal_label=پیمایش افقی # Document properties dialog box document_properties.title=خصوصیات سند... document_properties_label=خصوصیات سند... document_properties_file_name=نام فایل: document_properties_file_size=حجم پرونده: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} کیلوبایت ({{size_b}} بایت) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} مگابایت ({{size_b}} بایت) document_properties_title=عنوان: document_properties_author=نویسنده: document_properties_subject=موضوع: document_properties_keywords=کلیدواژه‌ها: document_properties_creation_date=تاریخ ایجاد: document_properties_modification_date=تاریخ ویرایش: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}، {{time}} document_properties_creator=ایجاد کننده: document_properties_producer=ایجاد کننده PDF: document_properties_version=نسخه PDF: document_properties_page_count=تعداد صفحات: document_properties_page_size=اندازه صفحه: document_properties_page_size_unit_inches=اینچ document_properties_page_size_unit_millimeters=میلی‌متر document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=نامه document_properties_page_size_name_legal=حقوقی # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized_yes=بله document_properties_linearized_no=خیر document_properties_close=بستن print_progress_message=آماده سازی مدارک برای چاپ کردن… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=لغو # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=باز و بسته کردن نوار کناری toggle_sidebar_notification.title=تغییر وضعیت نوار کناری (سند حاوی طرح/پیوست است) toggle_sidebar_label=تغییرحالت نوارکناری document_outline.title=نمایش رئوس مطالب مدارک(برای بازشدن/جمع شدن همه موارد دوبار کلیک کنید) document_outline_label=طرح نوشتار attachments.title=نمایش پیوست‌ها attachments_label=پیوست‌ها thumbs.title=نمایش تصاویر بندانگشتی thumbs_label=تصاویر بندانگشتی findbar.title=جستجو در سند findbar_label=پیدا کردن # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=صفحه {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=تصویر بند‌ انگشتی صفحه {{page}} # Find panel button title and messages find_input.title=پیدا کردن find_input.placeholder=پیدا کردن در سند… find_previous.title=پیدا کردن رخداد قبلی عبارت find_previous_label=قبلی find_next.title=پیدا کردن رخداد بعدی عبارت find_next_label=بعدی find_highlight=برجسته و هایلایت کردن همه موارد find_match_case_label=تطبیق کوچکی و بزرگی حروف find_entire_word_label=تمام کلمه‌ها find_reached_top=به بالای صفحه رسیدیم، از پایین ادامه می‌دهیم find_reached_bottom=به آخر صفحه رسیدیم، از بالا ادامه می‌دهیم # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count[one]={{current}} از {{total}} مطابقت دارد find_match_count[two]={{current}} از {{total}} مطابقت دارد find_match_count[few]={{current}} از {{total}} مطابقت دارد find_match_count[many]={{current}} از {{total}} مطابقت دارد find_match_count[other]={{current}} از {{total}} مطابقت دارد # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_not_found=عبارت پیدا نشد # Error panel labels error_more_info=اطلاعات بیشتر error_less_info=اطلاعات کمتر error_close=بستن # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=‏PDF.js ورژن{{version}} ‏(ساخت: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=پیام: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=توده: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=پرونده: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=سطر: {{line}} rendering_error=هنگام بارگیری صفحه خطایی رخ داد. # Predefined zoom values page_scale_width=عرض صفحه page_scale_fit=اندازه کردن صفحه page_scale_auto=بزرگنمایی خودکار page_scale_actual=اندازه واقعی‌ # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=خطا loading_error=هنگام بارگیری پرونده PDF خطایی رخ داد. invalid_file_error=پرونده PDF نامعتبر یامعیوب می‌باشد. missing_file_error=پرونده PDF یافت نشد. unexpected_response_error=پاسخ پیش بینی نشده سرور # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Annotation] password_label=جهت باز کردن پرونده PDF گذرواژه را وارد نمائید. password_invalid=گذرواژه نامعتبر. لطفا مجددا تلاش کنید. password_ok=تأیید password_cancel=لغو printing_not_supported=هشدار: قابلیت چاپ به‌طور کامل در این مرورگر پشتیبانی نمی‌شود. printing_not_ready=اخطار: پرونده PDF بطور کامل بارگیری نشده و امکان چاپ وجود ندارد. web_fonts_disabled=فونت های تحت وب غیر فعال شده اند: امکان استفاده از نمایش دهنده داخلی PDF وجود ندارد. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ff/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Hello Ɓennungo previous_label=Ɓennuɗo next.title=Hello faango next_label=Yeeso # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Hello # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=e nder {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} of {{pagesCount}}) zoom_out.title=Lonngo Woɗɗa zoom_out_label=Lonngo Woɗɗa zoom_in.title=Lonngo Ara zoom_in_label=Lonngo Ara zoom.title=Lonngo presentation_mode.title=Faytu to Presentation Mode presentation_mode_label=Presentation Mode open_file.title=Uddit Fiilde open_file_label=Uddit print.title=Winndito print_label=Winndito download.title=Aawto download_label=Aawto bookmark.title=Jiytol gonangol (natto walla uddit e henorde) bookmark_label=Jiytol Gonangol # Secondary toolbar and context menu tools.title=Kuutorɗe tools_label=Kuutorɗe first_page.title=Yah to hello adanngo first_page.label=Yah to hello adanngo first_page_label=Yah to hello adanngo last_page.title=Yah to hello wattindiingo last_page.label=Yah to hello wattindiingo last_page_label=Yah to hello wattindiingo page_rotate_cw.title=Yiiltu Faya Ñaamo page_rotate_cw.label=Yiiltu Faya Ñaamo page_rotate_cw_label=Yiiltu Faya Ñaamo page_rotate_ccw.title=Yiiltu Faya Nano page_rotate_ccw.label=Yiiltu Faya Nano page_rotate_ccw_label=Yiiltu Faya Nano cursor_text_select_tool.title=Gollin kaɓirgel cuɓirgel binndi cursor_text_select_tool_label=Kaɓirgel cuɓirgel binndi cursor_hand_tool.title=Hurmin kuutorgal junngo cursor_hand_tool_label=Kaɓirgel junngo scroll_vertical.title=Huutoro gorwitol daringol scroll_vertical_label=Gorwitol daringol scroll_horizontal.title=Huutoro gorwitol lelingol scroll_horizontal_label=Gorwitol daringol scroll_wrapped.title=Huutoro gorwitol coomingol scroll_wrapped_label=Gorwitol coomingol spread_none.title=Hoto tawtu kelle kelle spread_none_label=Alaa Spreads spread_odd.title=Tawtu kelle puɗɗortooɗe kelle teelɗe spread_odd_label=Kelle teelɗe spread_even.title=Tawtu ɗereeji kelle puɗɗoriiɗi kelle teeltuɗe spread_even_label=Kelle teeltuɗe # Document properties dialog box document_properties.title=Keeroraaɗi Winndannde… document_properties_label=Keeroraaɗi Winndannde… document_properties_file_name=Innde fiilde: document_properties_file_size=Ɓetol fiilde: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bite) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bite) document_properties_title=Tiitoonde: document_properties_author=Binnduɗo: document_properties_subject=Toɓɓere: document_properties_keywords=Kelmekele jiytirɗe: document_properties_creation_date=Ñalnde Sosaa: document_properties_modification_date=Ñalnde Waylaa: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Cosɗo: document_properties_producer=Paggiiɗo PDF: document_properties_version=Yamre PDF: document_properties_page_count=Limoore Kelle: document_properties_page_size=Ɓeto Hello: document_properties_page_size_unit_inches=nder document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=dariingo document_properties_page_size_orientation_landscape=wertiingo document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Ɓataake document_properties_page_size_name_legal=Laawol # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Ɗisngo geese yaawngo: document_properties_linearized_yes=Eey document_properties_linearized_no=Alaa document_properties_close=Uddu print_progress_message=Nana heboo winnditaade fiilannde… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Haaytu # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Toggilo Palal Sawndo toggle_sidebar_notification.title=Palal sawndo (dokimaa oo ina waɗi taarngo/cinnde) toggle_sidebar_label=Toggilo Palal Sawndo document_outline.title=Hollu Ƴiyal Fiilannde (dobdobo ngam wertude/taggude teme fof) document_outline_label=Toɓɓe Fiilannde attachments.title=Hollu Ɗisanɗe attachments_label=Ɗisanɗe thumbs.title=Hollu Dooɓe thumbs_label=Dooɓe findbar.title=Yiylo e fiilannde findbar_label=Yiytu # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Hello {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Dooɓre Hello {{page}} # Find panel button title and messages find_input.title=Yiytu find_input.placeholder=Yiylo nder dokimaa find_previous.title=Yiylo cilol ɓennugol konngol ngol find_previous_label=Ɓennuɗo find_next.title=Yiylo cilol garowol konngol ngol find_next_label=Yeeso find_highlight=Jalbin fof find_match_case_label=Jaaɓnu darnde find_entire_word_label=Kelme timmuɗe tan find_reached_top=Heɓii fuɗɗorde fiilannde, jokku faya les find_reached_bottom=Heɓii hoore fiilannde, jokku faya les # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} wonande laabi {{total}} find_match_count[two]={{current}} wonande laabi {{total}} find_match_count[few]={{current}} wonande laabi {{total}} find_match_count[many]={{current}} wonande laabi {{total}} find_match_count[other]={{current}} wonande laabi {{total}} # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Ko ɓuri laabi {{limit}} find_match_count_limit[one]=Ko ɓuri laani {{limit}} find_match_count_limit[two]=Ko ɓuri laabi {{limit}} find_match_count_limit[few]=Ko ɓuri laabi {{limit}} find_match_count_limit[many]=Ko ɓuri laabi {{limit}} find_match_count_limit[other]=Ko ɓuri laabi {{limit}} find_not_found=Konngi njiyataa # Error panel labels error_more_info=Ɓeydu Humpito error_less_info=Ustu Humpito error_close=Uddu # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Ɓatakuure: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stack: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Fiilde: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Gorol: {{line}} rendering_error=Juumre waɗii tuma nde yoŋkittoo hello. # Predefined zoom values page_scale_width=Njaajeendi Hello page_scale_fit=Keƴeendi Hello page_scale_auto=Loongorde Jaajol page_scale_actual=Ɓetol Jaati # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Juumre loading_error=Juumre waɗii tuma nde loowata PDF oo. invalid_file_error=Fiilde PDF moƴƴaani walla jiibii. missing_file_error=Fiilde PDF ena ŋakki. unexpected_response_error=Jaabtol sarworde tijjinooka. # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Siiftannde] password_label=Naatu finnde ngam uddite ndee fiilde PDF. password_invalid=Finnde moƴƴaani. Tiiɗno eto kadi. password_ok=OK password_cancel=Haaytu printing_not_supported=Reentino: Winnditagol tammbitaaka no feewi e ndee wanngorde. printing_not_ready=Reentino: PDF oo loowaaki haa timmi ngam winnditagol. web_fonts_disabled=Ponte geese ko daaƴaaɗe: horiima huutoraade ponte PDF coomtoraaɗe. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/fi/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Edellinen sivu previous_label=Edellinen next.title=Seuraava sivu next_label=Seuraava # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Sivu # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=/ {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} / {{pagesCount}}) zoom_out.title=Loitonna zoom_out_label=Loitonna zoom_in.title=Lähennä zoom_in_label=Lähennä zoom.title=Suurennus presentation_mode.title=Siirry esitystilaan presentation_mode_label=Esitystila open_file.title=Avaa tiedosto open_file_label=Avaa print.title=Tulosta print_label=Tulosta download.title=Lataa download_label=Lataa bookmark.title=Avoin ikkuna (kopioi tai avaa uuteen ikkunaan) bookmark_label=Avoin ikkuna # Secondary toolbar and context menu tools.title=Tools tools_label=Tools first_page.title=Siirry ensimmäiselle sivulle first_page.label=Siirry ensimmäiselle sivulle first_page_label=Siirry ensimmäiselle sivulle last_page.title=Siirry viimeiselle sivulle last_page.label=Siirry viimeiselle sivulle last_page_label=Siirry viimeiselle sivulle page_rotate_cw.title=Kierrä oikealle page_rotate_cw.label=Kierrä oikealle page_rotate_cw_label=Kierrä oikealle page_rotate_ccw.title=Kierrä vasemmalle page_rotate_ccw.label=Kierrä vasemmalle page_rotate_ccw_label=Kierrä vasemmalle cursor_text_select_tool.title=Käytä tekstinvalintatyökalua cursor_text_select_tool_label=Tekstinvalintatyökalu cursor_hand_tool.title=Käytä käsityökalua cursor_hand_tool_label=Käsityökalu scroll_vertical.title=Käytä pystysuuntaista vieritystä scroll_vertical_label=Pystysuuntainen vieritys scroll_horizontal.title=Käytä vaakasuuntaista vieritystä scroll_horizontal_label=Vaakasuuntainen vieritys scroll_wrapped.title=Käytä rivittyvää vieritystä scroll_wrapped_label=Rivittyvä vieritys spread_none.title=Älä yhdistä sivuja aukeamiksi spread_none_label=Ei aukeamia spread_odd.title=Yhdistä sivut aukeamiksi alkaen parittomalta sivulta spread_odd_label=Parittomalta alkavat aukeamat spread_even.title=Yhdistä sivut aukeamiksi alkaen parilliselta sivulta spread_even_label=Parilliselta alkavat aukeamat # Document properties dialog box document_properties.title=Dokumentin ominaisuudet… document_properties_label=Dokumentin ominaisuudet… document_properties_file_name=Tiedostonimi: document_properties_file_size=Tiedoston koko: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} kt ({{size_b}} tavua) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} Mt ({{size_b}} tavua) document_properties_title=Otsikko: document_properties_author=Tekijä: document_properties_subject=Aihe: document_properties_keywords=Avainsanat: document_properties_creation_date=Luomispäivämäärä: document_properties_modification_date=Muokkauspäivämäärä: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Luoja: document_properties_producer=PDF-tuottaja: document_properties_version=PDF-versio: document_properties_page_count=Sivujen määrä: document_properties_page_size=Sivun koko: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=pysty document_properties_page_size_orientation_landscape=vaaka document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Nopea web-katselu: document_properties_linearized_yes=Kyllä document_properties_linearized_no=Ei document_properties_close=Sulje print_progress_message=Valmistellaan dokumenttia tulostamista varten… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}} % print_progress_close=Peruuta # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Näytä/piilota sivupaneeli toggle_sidebar_notification.title=Näytä/piilota sivupaneeli (dokumentissa on sisällys tai liitteitä) toggle_sidebar_notification2.title=Näytä/piilota sivupaneeli (dokumentissa on sisällys/liitteitä/tasoja) toggle_sidebar_label=Näytä/piilota sivupaneeli document_outline.title=Näytä dokumentin sisällys (laajenna tai kutista kohdat kaksoisnapsauttamalla) document_outline_label=Dokumentin sisällys attachments.title=Näytä liitteet attachments_label=Liitteet layers.title=Näytä tasot (kaksoisnapsauta palauttaaksesi kaikki tasot oletustilaan) layers_label=Tasot thumbs.title=Näytä pienoiskuvat thumbs_label=Pienoiskuvat findbar.title=Etsi dokumentista findbar_label=Etsi additional_layers=Lisätasot # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Sivu {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Sivu {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Pienoiskuva sivusta {{page}} # Find panel button title and messages find_input.title=Etsi find_input.placeholder=Etsi dokumentista… find_previous.title=Etsi hakusanan edellinen osuma find_previous_label=Edellinen find_next.title=Etsi hakusanan seuraava osuma find_next_label=Seuraava find_highlight=Korosta kaikki find_match_case_label=Huomioi kirjainkoko find_entire_word_label=Kokonaiset sanat find_reached_top=Päästiin dokumentin alkuun, jatketaan lopusta find_reached_bottom=Päästiin dokumentin loppuun, jatketaan alusta # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} / {{total}} osuma find_match_count[two]={{current}} / {{total}} osumaa find_match_count[few]={{current}} / {{total}} osumaa find_match_count[many]={{current}} / {{total}} osumaa find_match_count[other]={{current}} / {{total}} osumaa # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Enemmän kuin {{limit}} osumaa find_match_count_limit[one]=Enemmän kuin {{limit}} osuma find_match_count_limit[two]=Enemmän kuin {{limit}} osumaa find_match_count_limit[few]=Enemmän kuin {{limit}} osumaa find_match_count_limit[many]=Enemmän kuin {{limit}} osumaa find_match_count_limit[other]=Enemmän kuin {{limit}} osumaa find_not_found=Hakusanaa ei löytynyt # Error panel labels error_more_info=Lisätietoja error_less_info=Lisätietoja error_close=Sulje # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (kooste: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Virheilmoitus: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Pino: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Tiedosto: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Rivi: {{line}} rendering_error=Tapahtui virhe piirrettäessä sivua. # Predefined zoom values page_scale_width=Sivun leveys page_scale_fit=Koko sivu page_scale_auto=Automaattinen suurennus page_scale_actual=Todellinen koko # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}} % # Loading indicator messages loading_error_indicator=Virhe loading_error=Tapahtui virhe ladattaessa PDF-tiedostoa. invalid_file_error=Virheellinen tai vioittunut PDF-tiedosto. missing_file_error=Puuttuva PDF-tiedosto. unexpected_response_error=Odottamaton vastaus palvelimelta. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Annotation] password_label=Kirjoita PDF-tiedoston salasana. password_invalid=Virheellinen salasana. Yritä uudestaan. password_ok=OK password_cancel=Peruuta printing_not_supported=Varoitus: Selain ei tue kaikkia tulostustapoja. printing_not_ready=Varoitus: PDF-tiedosto ei ole vielä latautunut kokonaan, eikä sitä voi vielä tulostaa. web_fonts_disabled=Verkkosivujen omat kirjasinlajit on estetty: ei voida käyttää upotettuja PDF-kirjasinlajeja. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/fr/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Page précédente previous_label=Précédent next.title=Page suivante next_label=Suivant # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Page # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=sur {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} sur {{pagesCount}}) zoom_out.title=Zoom arrière zoom_out_label=Zoom arrière zoom_in.title=Zoom avant zoom_in_label=Zoom avant zoom.title=Zoom presentation_mode.title=Basculer en mode présentation presentation_mode_label=Mode présentation open_file.title=Ouvrir le fichier open_file_label=Ouvrir le fichier print.title=Imprimer print_label=Imprimer download.title=Télécharger download_label=Télécharger bookmark.title=Affichage courant (copier ou ouvrir dans une nouvelle fenêtre) bookmark_label=Affichage actuel # Secondary toolbar and context menu tools.title=Outils tools_label=Outils first_page.title=Aller à la première page first_page.label=Aller à la première page first_page_label=Aller à la première page last_page.title=Aller à la dernière page last_page.label=Aller à la dernière page last_page_label=Aller à la dernière page page_rotate_cw.title=Rotation horaire page_rotate_cw.label=Rotation horaire page_rotate_cw_label=Rotation horaire page_rotate_ccw.title=Rotation antihoraire page_rotate_ccw.label=Rotation antihoraire page_rotate_ccw_label=Rotation antihoraire cursor_text_select_tool.title=Activer l’outil de sélection de texte cursor_text_select_tool_label=Outil de sélection de texte cursor_hand_tool.title=Activer l’outil main cursor_hand_tool_label=Outil main scroll_vertical.title=Utiliser le défilement vertical scroll_vertical_label=Défilement vertical scroll_horizontal.title=Utiliser le défilement horizontal scroll_horizontal_label=Défilement horizontal scroll_wrapped.title=Utiliser le défilement par bloc scroll_wrapped_label=Défilement par bloc spread_none.title=Ne pas afficher les pages deux à deux spread_none_label=Pas de double affichage spread_odd.title=Afficher les pages par deux, impaires à gauche spread_odd_label=Doubles pages, impaires à gauche spread_even.title=Afficher les pages par deux, paires à gauche spread_even_label=Doubles pages, paires à gauche # Document properties dialog box document_properties.title=Propriétés du document… document_properties_label=Propriétés du document… document_properties_file_name=Nom du fichier : document_properties_file_size=Taille du fichier : # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} Ko ({{size_b}} octets) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} Mo ({{size_b}} octets) document_properties_title=Titre : document_properties_author=Auteur : document_properties_subject=Sujet : document_properties_keywords=Mots-clés : document_properties_creation_date=Date de création : document_properties_modification_date=Modifié le : # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}} à {{time}} document_properties_creator=Créé par : document_properties_producer=Outil de conversion PDF : document_properties_version=Version PDF : document_properties_page_count=Nombre de pages : document_properties_page_size=Taille de la page : document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=portrait document_properties_page_size_orientation_landscape=paysage document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=lettre document_properties_page_size_name_legal=document juridique # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Affichage rapide des pages web : document_properties_linearized_yes=Oui document_properties_linearized_no=Non document_properties_close=Fermer print_progress_message=Préparation du document pour l’impression… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}} % print_progress_close=Annuler # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Afficher/Masquer le panneau latéral toggle_sidebar_notification.title=Afficher/Masquer le panneau latéral (le document contient des signets/pièces jointes) toggle_sidebar_notification2.title=Afficher/Masquer le panneau latéral (le document contient des signets/pièces jointes/calques) toggle_sidebar_label=Afficher/Masquer le panneau latéral document_outline.title=Afficher les signets du document (double-cliquer pour développer/réduire tous les éléments) document_outline_label=Signets du document attachments.title=Afficher les pièces jointes attachments_label=Pièces jointes layers.title=Afficher les calques (double-cliquer pour réinitialiser tous les calques à l’état par défaut) layers_label=Calques thumbs.title=Afficher les vignettes thumbs_label=Vignettes current_outline_item.title=Trouver l’élément de plan actuel current_outline_item_label=Élément de plan actuel findbar.title=Rechercher dans le document findbar_label=Rechercher additional_layers=Calques additionnels # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Page {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Page {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Vignette de la page {{page}} # Find panel button title and messages find_input.title=Rechercher find_input.placeholder=Rechercher dans le document… find_previous.title=Trouver l’occurrence précédente de l’expression find_previous_label=Précédent find_next.title=Trouver la prochaine occurrence de l’expression find_next_label=Suivant find_highlight=Tout surligner find_match_case_label=Respecter la casse find_entire_word_label=Mots entiers find_reached_top=Haut de la page atteint, poursuite depuis la fin find_reached_bottom=Bas de la page atteint, poursuite au début # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]=Occurrence {{current}} sur {{total}} find_match_count[two]=Occurrence {{current}} sur {{total}} find_match_count[few]=Occurrence {{current}} sur {{total}} find_match_count[many]=Occurrence {{current}} sur {{total}} find_match_count[other]=Occurrence {{current}} sur {{total}} # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Plus de {{limit}} correspondances find_match_count_limit[one]=Plus de {{limit}} correspondance find_match_count_limit[two]=Plus de {{limit}} correspondances find_match_count_limit[few]=Plus de {{limit}} correspondances find_match_count_limit[many]=Plus de {{limit}} correspondances find_match_count_limit[other]=Plus de {{limit}} correspondances find_not_found=Expression non trouvée # Error panel labels error_more_info=Plus d’informations error_less_info=Moins d’informations error_close=Fermer # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (identifiant de compilation : {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Message : {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Pile : {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Fichier : {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Ligne : {{line}} rendering_error=Une erreur s’est produite lors de l’affichage de la page. # Predefined zoom values page_scale_width=Pleine largeur page_scale_fit=Page entière page_scale_auto=Zoom automatique page_scale_actual=Taille réelle # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}} % # Loading indicator messages loading_error_indicator=Erreur loading_error=Une erreur s’est produite lors du chargement du fichier PDF. invalid_file_error=Fichier PDF invalide ou corrompu. missing_file_error=Fichier PDF manquant. unexpected_response_error=Réponse inattendue du serveur. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}} à {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Annotation {{type}}] password_label=Veuillez saisir le mot de passe pour ouvrir ce fichier PDF. password_invalid=Mot de passe incorrect. Veuillez réessayer. password_ok=OK password_cancel=Annuler printing_not_supported=Attention : l’impression n’est pas totalement prise en charge par ce navigateur. printing_not_ready=Attention : le PDF n’est pas entièrement chargé pour pouvoir l’imprimer. web_fonts_disabled=Les polices web sont désactivées : impossible d’utiliser les polices intégrées au PDF. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/fy-NL/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Foarige side previous_label=Foarige next.title=Folgjende side next_label=Folgjende # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Side # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=fan {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} fan {{pagesCount}}) zoom_out.title=Utzoome zoom_out_label=Utzoome zoom_in.title=Ynzoome zoom_in_label=Ynzoome zoom.title=Zoome presentation_mode.title=Wikselje nei presintaasjemodus presentation_mode_label=Presintaasjemodus open_file.title=Bestân iepenje open_file_label=Iepenje print.title=Ofdrukke print_label=Ofdrukke download.title=Downloade download_label=Downloade bookmark.title=Aktuele finster (kopiearje of iepenje yn nij finster) bookmark_label=Aktuele finster # Secondary toolbar and context menu tools.title=Ark tools_label=Ark first_page.title=Gean nei earste side first_page.label=Nei earste side gean first_page_label=Gean nei earste side last_page.title=Gean nei lêste side last_page.label=Nei lêste side gean last_page_label=Gean nei lêste side page_rotate_cw.title=Rjochtsom draaie page_rotate_cw.label=Rjochtsom draaie page_rotate_cw_label=Rjochtsom draaie page_rotate_ccw.title=Loftsom draaie page_rotate_ccw.label=Loftsom draaie page_rotate_ccw_label=Loftsom draaie cursor_text_select_tool.title=Tekstseleksjehelpmiddel ynskeakelje cursor_text_select_tool_label=Tekstseleksjehelpmiddel cursor_hand_tool.title=Hânhelpmiddel ynskeakelje cursor_hand_tool_label=Hânhelpmiddel scroll_vertical.title=Fertikaal skowe brûke scroll_vertical_label=Fertikaal skowe scroll_horizontal.title=Horizontaal skowe brûke scroll_horizontal_label=Horizontaal skowe scroll_wrapped.title=Skowe mei oersjoch brûke scroll_wrapped_label=Skowe mei oersjoch spread_none.title=Sidesprieding net gearfetsje spread_none_label=Gjin sprieding spread_odd.title=Sidesprieding gearfetsje te starten mei ûneven nûmers spread_odd_label=Uneven sprieding spread_even.title=Sidesprieding gearfetsje te starten mei even nûmers spread_even_label=Even sprieding # Document properties dialog box document_properties.title=Dokuminteigenskippen… document_properties_label=Dokuminteigenskippen… document_properties_file_name=Bestânsnamme: document_properties_file_size=Bestânsgrutte: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Titel: document_properties_author=Auteur: document_properties_subject=Underwerp: document_properties_keywords=Kaaiwurden: document_properties_creation_date=Oanmaakdatum: document_properties_modification_date=Bewurkingsdatum: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Makker: document_properties_producer=PDF-makker: document_properties_version=PDF-ferzje: document_properties_page_count=Siden: document_properties_page_size=Sideformaat: document_properties_page_size_unit_inches=yn document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=steand document_properties_page_size_orientation_landscape=lizzend document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Juridysk # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Flugge webwerjefte: document_properties_linearized_yes=Ja document_properties_linearized_no=Nee document_properties_close=Slute print_progress_message=Dokumint tariede oar ôfdrukken… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Annulearje # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Sidebalke yn-/útskeakelje toggle_sidebar_notification.title=Sidebalke yn-/útskeakelje (dokumint befettet outline/bylagen) toggle_sidebar_notification2.title=Sidebalke yn-/útskeakelje (dokumint befettet oersjoch/bylagen/lagen) toggle_sidebar_label=Sidebalke yn-/útskeakelje document_outline.title=Dokumintoersjoch toane (dûbelklik om alle items út/yn te klappen) document_outline_label=Dokumintoersjoch attachments.title=Bylagen toane attachments_label=Bylagen layers.title=Lagen toane (dûbelklik om alle lagen nei de standertsteat werom te setten) layers_label=Lagen thumbs.title=Foarbylden toane thumbs_label=Foarbylden current_outline_item.title=Aktueel item yn ynhâldsopjefte sykje current_outline_item_label=Aktueel item yn ynhâldsopjefte findbar.title=Sykje yn dokumint findbar_label=Sykje additional_layers=Oanfoljende lagen # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Side {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Side {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Foarbyld fan side {{page}} # Find panel button title and messages find_input.title=Sykje find_input.placeholder=Sykje yn dokumint… find_previous.title=It foarige foarkommen fan de tekst sykje find_previous_label=Foarige find_next.title=It folgjende foarkommen fan de tekst sykje find_next_label=Folgjende find_highlight=Alles markearje find_match_case_label=Haadlettergefoelich find_entire_word_label=Hiele wurden find_reached_top=Boppekant fan dokumint berikt, trochgien fan ûnder ôf find_reached_bottom=Ein fan dokumint berikt, trochgien fan boppe ôf # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} fan {{total}} oerienkomst find_match_count[two]={{current}} fan {{total}} oerienkomsten find_match_count[few]={{current}} fan {{total}} oerienkomsten find_match_count[many]={{current}} fan {{total}} oerienkomsten find_match_count[other]={{current}} fan {{total}} oerienkomsten # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Mear as {{limit}} oerienkomsten find_match_count_limit[one]=Mear as {{limit}} oerienkomst find_match_count_limit[two]=Mear as {{limit}} oerienkomsten find_match_count_limit[few]=Mear as {{limit}} oerienkomsten find_match_count_limit[many]=Mear as {{limit}} oerienkomsten find_match_count_limit[other]=Mear as {{limit}} oerienkomsten find_not_found=Tekst net fûn # Error panel labels error_more_info=Mear ynformaasje error_less_info=Minder ynformaasje error_close=Slute # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js f{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Berjocht: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stack: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Bestân: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Rigel: {{line}} rendering_error=Der is in flater bard by it renderjen fan de side. # Predefined zoom values page_scale_width=Sidebreedte page_scale_fit=Hiele side page_scale_auto=Automatysk zoome page_scale_actual=Werklike grutte # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Flater loading_error=Der is in flater bard by it laden fan de PDF. invalid_file_error=Ynfalide of korruptearre PDF-bestân. missing_file_error=PDF-bestân ûntbrekt. unexpected_response_error=Unferwacht serverantwurd. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}}-annotaasje] password_label=Jou it wachtwurd om dit PDF-bestân te iepenjen. password_invalid=Ferkeard wachtwurd. Probearje opnij. password_ok=OK password_cancel=Annulearje printing_not_supported=Warning: Printen is net folslein stipe troch dizze browser. printing_not_ready=Warning: PDF is net folslein laden om ôf te drukken. web_fonts_disabled=Weblettertypen binne útskeakele: gebrûk fan ynsluten PDF-lettertypen is net mooglik. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ga-IE/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=An Leathanach Roimhe Seo previous_label=Roimhe Seo next.title=An Chéad Leathanach Eile next_label=Ar Aghaidh # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Leathanach # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=as {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} as {{pagesCount}}) zoom_out.title=Súmáil Amach zoom_out_label=Súmáil Amach zoom_in.title=Súmáil Isteach zoom_in_label=Súmáil Isteach zoom.title=Súmáil presentation_mode.title=Úsáid an Mód Láithreoireachta presentation_mode_label=Mód Láithreoireachta open_file.title=Oscail Comhad open_file_label=Oscail print.title=Priontáil print_label=Priontáil download.title=Íoslódáil download_label=Íoslódáil bookmark.title=An t-amharc reatha (cóipeáil nó oscail i bhfuinneog nua) bookmark_label=An tAmharc Reatha # Secondary toolbar and context menu tools.title=Uirlisí tools_label=Uirlisí first_page.title=Go dtí an chéad leathanach first_page.label=Go dtí an chéad leathanach first_page_label=Go dtí an chéad leathanach last_page.title=Go dtí an leathanach deiridh last_page.label=Go dtí an leathanach deiridh last_page_label=Go dtí an leathanach deiridh page_rotate_cw.title=Rothlaigh ar deiseal page_rotate_cw.label=Rothlaigh ar deiseal page_rotate_cw_label=Rothlaigh ar deiseal page_rotate_ccw.title=Rothlaigh ar tuathal page_rotate_ccw.label=Rothlaigh ar tuathal page_rotate_ccw_label=Rothlaigh ar tuathal cursor_text_select_tool.title=Cumasaigh an Uirlis Roghnaithe Téacs cursor_text_select_tool_label=Uirlis Roghnaithe Téacs cursor_hand_tool.title=Cumasaigh an Uirlis Láimhe cursor_hand_tool_label=Uirlis Láimhe # Document properties dialog box document_properties.title=Airíonna na Cáipéise… document_properties_label=Airíonna na Cáipéise… document_properties_file_name=Ainm an chomhaid: document_properties_file_size=Méid an chomhaid: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} kB ({{size_b}} beart) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} beart) document_properties_title=Teideal: document_properties_author=Údar: document_properties_subject=Ábhar: document_properties_keywords=Eochairfhocail: document_properties_creation_date=Dáta Cruthaithe: document_properties_modification_date=Dáta Athraithe: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Cruthaitheoir: document_properties_producer=Cruthaitheoir an PDF: document_properties_version=Leagan PDF: document_properties_page_count=Líon Leathanach: document_properties_close=Dún print_progress_message=Cáipéis á hullmhú le priontáil… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Cealaigh # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Scoránaigh an Barra Taoibh toggle_sidebar_notification.title=Scoránaigh an Barra Taoibh (achoimre/iatáin sa cháipéis) toggle_sidebar_label=Scoránaigh an Barra Taoibh document_outline.title=Taispeáin Imlíne na Cáipéise (déchliceáil chun chuile rud a leathnú nó a laghdú) document_outline_label=Creatlach na Cáipéise attachments.title=Taispeáin Iatáin attachments_label=Iatáin thumbs.title=Taispeáin Mionsamhlacha thumbs_label=Mionsamhlacha findbar.title=Aimsigh sa Cháipéis findbar_label=Aimsigh # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Leathanach {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Mionsamhail Leathanaigh {{page}} # Find panel button title and messages find_input.title=Aimsigh find_input.placeholder=Aimsigh sa cháipéis… find_previous.title=Aimsigh an sampla roimhe seo den nath seo find_previous_label=Roimhe seo find_next.title=Aimsigh an chéad sampla eile den nath sin find_next_label=Ar aghaidh find_highlight=Aibhsigh uile find_match_case_label=Cásíogair find_reached_top=Ag barr na cáipéise, ag leanúint ón mbun find_reached_bottom=Ag bun na cáipéise, ag leanúint ón mbarr find_not_found=Frása gan aimsiú # Error panel labels error_more_info=Tuilleadh Eolais error_less_info=Níos Lú Eolais error_close=Dún # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Teachtaireacht: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Cruach: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Comhad: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Líne: {{line}} rendering_error=Tharla earráid agus an leathanach á leagan amach. # Predefined zoom values page_scale_width=Leithead Leathanaigh page_scale_fit=Laghdaigh go dtí an Leathanach page_scale_auto=Súmáil Uathoibríoch page_scale_actual=Fíormhéid # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Earráid loading_error=Tharla earráid agus an cháipéis PDF á lódáil. invalid_file_error=Comhad neamhbhailí nó truaillithe PDF. missing_file_error=Comhad PDF ar iarraidh. unexpected_response_error=Freagra ón bhfreastalaí nach rabhthas ag súil leis. # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Anótáil {{type}}] password_label=Cuir an focal faire isteach chun an comhad PDF seo a oscailt. password_invalid=Focal faire mícheart. Déan iarracht eile. password_ok=OK password_cancel=Cealaigh printing_not_supported=Rabhadh: Ní thacaíonn an brabhsálaí le priontáil go hiomlán. printing_not_ready=Rabhadh: Ní féidir an PDF a phriontáil go dtí go mbeidh an cháipéis iomlán lódáilte. web_fonts_disabled=Tá clófhoirne Gréasáin díchumasaithe: ní féidir clófhoirne leabaithe PDF a úsáid. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/gd/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=An duilleag roimhe previous_label=Air ais next.title=An ath-dhuilleag next_label=Air adhart # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Duilleag # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=à {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} à {{pagesCount}}) zoom_out.title=Sùm a-mach zoom_out_label=Sùm a-mach zoom_in.title=Sùm a-steach zoom_in_label=Sùm a-steach zoom.title=Sùm presentation_mode.title=Gearr leum dhan mhodh taisbeanaidh presentation_mode_label=Am modh taisbeanaidh open_file.title=Fosgail faidhle open_file_label=Fosgail print.title=Clò-bhuail print_label=Clò-bhuail download.title=Luchdaich a-nuas download_label=Luchdaich a-nuas bookmark.title=An sealladh làithreach (dèan lethbhreac no fosgail e ann an uinneag ùr) bookmark_label=An sealladh làithreach # Secondary toolbar and context menu tools.title=Innealan tools_label=Innealan first_page.title=Rach gun chiad duilleag first_page.label=Rach gun chiad duilleag first_page_label=Rach gun chiad duilleag last_page.title=Rach gun duilleag mu dheireadh last_page.label=Rach gun duilleag mu dheireadh last_page_label=Rach gun duilleag mu dheireadh page_rotate_cw.title=Cuairtich gu deiseil page_rotate_cw.label=Cuairtich gu deiseil page_rotate_cw_label=Cuairtich gu deiseil page_rotate_ccw.title=Cuairtich gu tuathail page_rotate_ccw.label=Cuairtich gu tuathail page_rotate_ccw_label=Cuairtich gu tuathail cursor_text_select_tool.title=Cuir an comas inneal taghadh an teacsa cursor_text_select_tool_label=Inneal taghadh an teacsa cursor_hand_tool.title=Cuir inneal na làimhe an comas cursor_hand_tool_label=Inneal na làimhe scroll_vertical.title=Cleachd sgroladh inghearach scroll_vertical_label=Sgroladh inghearach scroll_horizontal.title=Cleachd sgroladh còmhnard scroll_horizontal_label=Sgroladh còmhnard scroll_wrapped.title=Cleachd sgroladh paisgte scroll_wrapped_label=Sgroladh paisgte spread_none.title=Na cuir còmhla sgoileadh dhuilleagan spread_none_label=Gun sgaoileadh dhuilleagan spread_odd.title=Cuir còmhla duilleagan sgaoilte a thòisicheas le duilleagan aig a bheil àireamh chorr spread_odd_label=Sgaoileadh dhuilleagan corra spread_even.title=Cuir còmhla duilleagan sgaoilte a thòisicheas le duilleagan aig a bheil àireamh chothrom spread_even_label=Sgaoileadh dhuilleagan cothrom # Document properties dialog box document_properties.title=Roghainnean na sgrìobhainne… document_properties_label=Roghainnean na sgrìobhainne… document_properties_file_name=Ainm an fhaidhle: document_properties_file_size=Meud an fhaidhle: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Tiotal: document_properties_author=Ùghdar: document_properties_subject=Cuspair: document_properties_keywords=Faclan-luirg: document_properties_creation_date=Latha a chruthachaidh: document_properties_modification_date=Latha atharrachaidh: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Cruthadair: document_properties_producer=Saothraiche a' PDF: document_properties_version=Tionndadh a' PDF: document_properties_page_count=Àireamh de dhuilleagan: document_properties_page_size=Meud na duilleige: document_properties_page_size_unit_inches=ann an document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=portraid document_properties_page_size_orientation_landscape=dreach-tìre document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Litir document_properties_page_size_name_legal=Laghail # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Grad shealladh-lìn: document_properties_linearized_yes=Tha document_properties_linearized_no=Chan eil document_properties_close=Dùin print_progress_message=Ag ullachadh na sgrìobhainn airson clò-bhualadh… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Sguir dheth # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Toglaich am bàr-taoibh toggle_sidebar_notification.title=Toglaich am bàr-taoibh (tha oir-loidhne/ceanglachain aig an sgrìobhainn) toggle_sidebar_label=Toglaich am bàr-taoibh document_outline.title=Seall oir-loidhne na sgrìobhainn (dèan briogadh dùbailte airson a h-uile nì a leudachadh/a cho-theannadh) document_outline_label=Oir-loidhne na sgrìobhainne attachments.title=Seall na ceanglachain attachments_label=Ceanglachain thumbs.title=Seall na dealbhagan thumbs_label=Dealbhagan findbar.title=Lorg san sgrìobhainn findbar_label=Lorg # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Duilleag a {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Dealbhag duilleag a {{page}} # Find panel button title and messages find_input.title=Lorg find_input.placeholder=Lorg san sgrìobhainn... find_previous.title=Lorg làthair roimhe na h-abairt seo find_previous_label=Air ais find_next.title=Lorg ath-làthair na h-abairt seo find_next_label=Air adhart find_highlight=Soillsich a h-uile find_match_case_label=Aire do litrichean mòra is beaga find_entire_word_label=Faclan-slàna find_reached_top=Ràinig sinn barr na duilleige, a' leantainn air adhart o bhonn na duilleige find_reached_bottom=Ràinig sinn bonn na duilleige, a' leantainn air adhart o bharr na duilleige # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} à {{total}} mhaids find_match_count[two]={{current}} à {{total}} mhaids find_match_count[few]={{current}} à {{total}} maidsichean find_match_count[many]={{current}} à {{total}} maids find_match_count[other]={{current}} à {{total}} maids # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Barrachd air {{limit}} maids find_match_count_limit[one]=Barrachd air {{limit}} mhaids find_match_count_limit[two]=Barrachd air {{limit}} mhaids find_match_count_limit[few]=Barrachd air {{limit}} maidsichean find_match_count_limit[many]=Barrachd air {{limit}} maids find_match_count_limit[other]=Barrachd air {{limit}} maids find_not_found=Cha deach an abairt a lorg # Error panel labels error_more_info=Barrachd fiosrachaidh error_less_info=Nas lugha de dh'fhiosrachadh error_close=Dùin # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Teachdaireachd: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stac: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Faidhle: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Loidhne: {{line}} rendering_error=Thachair mearachd rè reandaradh na duilleige. # Predefined zoom values page_scale_width=Leud na duilleige page_scale_fit=Freagair ri meud na duilleige page_scale_auto=Sùm fèin-obrachail page_scale_actual=Am fìor-mheud # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Mearachd loading_error=Thachair mearachd rè luchdadh a' PDF. invalid_file_error=Faidhle PDF a tha mì-dhligheach no coirbte. missing_file_error=Faidhle PDF a tha a dhìth. unexpected_response_error=Freagairt on fhrithealaiche ris nach robh dùil. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Nòtachadh {{type}}] password_label=Cuir a-steach am facal-faire gus am faidhle PDF seo fhosgladh. password_invalid=Tha am facal-faire cearr. Nach fheuch thu ris a-rithist? password_ok=Ceart ma-thà password_cancel=Sguir dheth printing_not_supported=Rabhadh: Chan eil am brabhsair seo a' cur làn-taic ri clò-bhualadh. printing_not_ready=Rabhadh: Cha deach am PDF a luchdadh gu tur airson clò-bhualadh. web_fonts_disabled=Tha cruthan-clò lìn à comas: Chan urrainn dhuinn cruthan-clò PDF leabaichte a chleachdadh. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/gl/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Páxina anterior previous_label=Anterior next.title=Seguinte páxina next_label=Seguinte # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Páxina # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=de {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} de {{pagesCount}}) zoom_out.title=Reducir zoom_out_label=Reducir zoom_in.title=Ampliar zoom_in_label=Ampliar zoom.title=Zoom presentation_mode.title=Cambiar ao modo presentación presentation_mode_label=Modo presentación open_file.title=Abrir ficheiro open_file_label=Abrir print.title=Imprimir print_label=Imprimir download.title=Descargar download_label=Descargar bookmark.title=Vista actual (copiar ou abrir nunha nova xanela) bookmark_label=Vista actual # Secondary toolbar and context menu tools.title=Ferramentas tools_label=Ferramentas first_page.title=Ir á primeira páxina first_page.label=Ir á primeira páxina first_page_label=Ir á primeira páxina last_page.title=Ir á última páxina last_page.label=Ir á última páxina last_page_label=Ir á última páxina page_rotate_cw.title=Rotar no sentido das agullas do reloxo page_rotate_cw.label=Rotar no sentido das agullas do reloxo page_rotate_cw_label=Rotar no sentido das agullas do reloxo page_rotate_ccw.title=Rotar no sentido contrario ás agullas do reloxo page_rotate_ccw.label=Rotar no sentido contrario ás agullas do reloxo page_rotate_ccw_label=Rotar no sentido contrario ás agullas do reloxo cursor_text_select_tool.title=Activar a ferramenta de selección de texto cursor_text_select_tool_label=Ferramenta de selección de texto cursor_hand_tool.title=Activar a ferramenta man cursor_hand_tool_label=Ferramenta man scroll_vertical.title=Usar o desprazamento vertical scroll_vertical_label=Desprazamento vertical scroll_horizontal.title=Usar o desprazamento horizontal scroll_horizontal_label=Desprazamento horizontal scroll_wrapped.title=Usar desprazamento en bloque scroll_wrapped_label=Desprazamento en bloque spread_none.title=Non agrupar páxinas spread_none_label=Ningún agrupamento spread_odd.title=Crea grupo de páxinas que comezan con números de páxina impares spread_odd_label=Agrupamento impar spread_even.title=Crea grupo de páxinas que comezan con números de páxina pares spread_even_label=Agrupamento par # Document properties dialog box document_properties.title=Propiedades do documento… document_properties_label=Propiedades do documento… document_properties_file_name=Nome do ficheiro: document_properties_file_size=Tamaño do ficheiro: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Título: document_properties_author=Autor: document_properties_subject=Asunto: document_properties_keywords=Palabras clave: document_properties_creation_date=Data de creación: document_properties_modification_date=Data de modificación: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Creado por: document_properties_producer=Xenerador do PDF: document_properties_version=Versión de PDF: document_properties_page_count=Número de páxinas: document_properties_page_size=Tamaño da páxina: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=Vertical document_properties_page_size_orientation_landscape=Horizontal document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Carta document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Visualización rápida das páxinas web: document_properties_linearized_yes=Si document_properties_linearized_no=Non document_properties_close=Pechar print_progress_message=Preparando documento para imprimir… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Cancelar # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Amosar/agochar a barra lateral toggle_sidebar_notification.title=Amosar/agochar a barra lateral (o documento contén un esquema ou anexos) toggle_sidebar_notification2.title=Alternar barra lateral (o documento contén esquema/anexos/capas) toggle_sidebar_label=Amosar/agochar a barra lateral document_outline.title=Amosar o esquema do documento (prema dúas veces para expandir/contraer todos os elementos) document_outline_label=Esquema do documento attachments.title=Amosar anexos attachments_label=Anexos layers.title=Mostrar capas (prema dúas veces para restaurar todas as capas o estado predeterminado) layers_label=Capas thumbs.title=Amosar miniaturas thumbs_label=Miniaturas current_outline_item.title=Atopar o elemento delimitado actualmente current_outline_item_label=Elemento delimitado actualmente findbar.title=Atopar no documento findbar_label=Atopar additional_layers=Capas adicionais # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Páxina {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Páxina {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Miniatura da páxina {{page}} # Find panel button title and messages find_input.title=Atopar find_input.placeholder=Atopar no documento… find_previous.title=Atopar a anterior aparición da frase find_previous_label=Anterior find_next.title=Atopar a seguinte aparición da frase find_next_label=Seguinte find_highlight=Realzar todo find_match_case_label=Diferenciar maiúsculas de minúsculas find_entire_word_label=Palabras completas find_reached_top=Chegouse ao inicio do documento, continuar desde o final find_reached_bottom=Chegouse ao final do documento, continuar desde o inicio # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} de {{total}} coincidencia find_match_count[two]={{current}} de {{total}} coincidencias find_match_count[few]={{current}} de {{total}} coincidencias find_match_count[many]={{current}} de {{total}} coincidencias find_match_count[other]={{current}} de {{total}} coincidencias # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Máis de {{limit}} coincidencias find_match_count_limit[one]=Máis de {{limit}} coincidencia find_match_count_limit[two]=Máis de {{limit}} coincidencias find_match_count_limit[few]=Máis de {{limit}} coincidencias find_match_count_limit[many]=Máis de {{limit}} coincidencias find_match_count_limit[other]=Máis de {{limit}} coincidencias find_not_found=Non se atopou a frase # Error panel labels error_more_info=Máis información error_less_info=Menos información error_close=Pechar # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (Identificador da compilación: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Mensaxe: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Pila: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Ficheiro: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Liña: {{line}} rendering_error=Produciuse un erro ao representar a páxina. # Predefined zoom values page_scale_width=Largura da páxina page_scale_fit=Axuste de páxina page_scale_auto=Zoom automático page_scale_actual=Tamaño actual # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Erro loading_error=Produciuse un erro ao cargar o PDF. invalid_file_error=Ficheiro PDF danado ou non válido. missing_file_error=Falta o ficheiro PDF. unexpected_response_error=Resposta inesperada do servidor. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Anotación {{type}}] password_label=Escriba o contrasinal para abrir este ficheiro PDF. password_invalid=Contrasinal incorrecto. Tente de novo. password_ok=Aceptar password_cancel=Cancelar printing_not_supported=Aviso: A impresión non é compatíbel de todo con este navegador. printing_not_ready=Aviso: O PDF non se cargou completamente para imprimirse. web_fonts_disabled=Desactiváronse as fontes web: foi imposíbel usar as fontes incrustadas no PDF. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/gn/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Kuatiarogue mboyvegua previous_label=Mboyvegua next.title=Kuatiarogue upeigua next_label=Upeigua # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Kuatiarogue # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages={{pagesCount}} gui # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} of {{pagesCount}}) zoom_out.title=Momichĩ zoom_out_label=Momichĩ zoom_in.title=Mbotuicha zoom_in_label=Mbotuicha zoom.title=Tuichakue presentation_mode.title=Jehechauka reko moambue presentation_mode_label=Jehechauka reko open_file.title=Marandurendápe jeike open_file_label=Jeike print.title=Monguatia print_label=Monguatia download.title=Mboguejy download_label=Mboguejy bookmark.title=Ag̃agua jehecha (mbohasarã térã eike peteĩ ovetã pyahúpe) bookmark_label=Ag̃agua jehecha # Secondary toolbar and context menu tools.title=Tembipuru tools_label=Tembipuru first_page.title=Kuatiarogue ñepyrũme jeho first_page.label=Kuatiarogue ñepyrũme jeho first_page_label=Kuatiarogue ñepyrũme jeho last_page.title=Kuatiarogue pahápe jeho last_page.label=Kuatiarogue pahápe jeho last_page_label=Kuatiarogue pahápe jeho page_rotate_cw.title=Aravóicha mbojere page_rotate_cw.label=Aravóicha mbojere page_rotate_cw_label=Aravóicha mbojere page_rotate_ccw.title=Aravo rapykue gotyo mbojere page_rotate_ccw.label=Aravo rapykue gotyo mbojere page_rotate_ccw_label=Aravo rapykue gotyo mbojere cursor_text_select_tool.title=Emyandy moñe’ẽrã jeporavo rembipuru cursor_text_select_tool_label=Moñe’ẽrã jeporavo rembipuru cursor_hand_tool.title=Tembipuru po pegua myandy cursor_hand_tool_label=Tembipuru po pegua scroll_vertical.title=Eipuru jeku’e ykeguáva scroll_vertical_label=Jeku’e ykeguáva scroll_horizontal.title=Eipuru jeku’e yvate gotyo scroll_horizontal_label=Jeku’e yvate gotyo scroll_wrapped.title=Eipuru jeku’e mbohyrupyre scroll_wrapped_label=Jeku’e mbohyrupyre spread_none.title=Ani ejuaju spreads kuatiarogue ndive spread_none_label=Spreads ỹre spread_odd.title=Embojuaju kuatiarogue jepysokue eñepyrũvo kuatiarogue impar-vagui spread_odd_label=Spreads impar spread_even.title=Embojuaju kuatiarogue jepysokue eñepyrũvo kuatiarogue par-vagui spread_even_label=Ipukuve uvei # Document properties dialog box document_properties.title=Kuatia mba’etee… document_properties_label=Kuatia mba’etee… document_properties_file_name=Marandurenda réra: document_properties_file_size=Marandurenda tuichakue: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Teratee: document_properties_author=Apohára: document_properties_subject=Mba’egua: document_properties_keywords=Jehero: document_properties_creation_date=Teñoihague arange: document_properties_modification_date=Iñambue hague arange: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Apo’ypyha: document_properties_producer=PDF mbosako’iha: document_properties_version=PDF mbojuehegua: document_properties_page_count=Kuatiarogue papapy: document_properties_page_size=Kuatiarogue tuichakue: document_properties_page_size_unit_inches=Amo document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=Oĩháicha document_properties_page_size_orientation_landscape=apaisado document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Kuatiañe’ẽ document_properties_page_size_name_legal=Tee # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Ñanduti jahecha pya’e: document_properties_linearized_yes=Añete document_properties_linearized_no=Ahániri document_properties_close=Mboty print_progress_message=Embosako’i kuatia emonguatia hag̃ua… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Heja # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Tenda yke moambue toggle_sidebar_notification.title=Embojopyru tenda ykegua (kuatia oguereko kora/marandurenda moirũha) toggle_sidebar_notification2.title=Embojopyru tenda ykegua (kuatia oguereko kuaakaha/moirũha/ñuãha) toggle_sidebar_label=Tenda yke moambue document_outline.title=Ehechauka kuatia rape (eikutu mokõi jey embotuicha/emomichĩ hag̃ua opavavete mba’epuru) document_outline_label=Kuatia apopyre attachments.title=Moirũha jehechauka attachments_label=Moirũha layers.title=Ehechauka ñuãha (eikutu jo’a emomba’apo hag̃ua opaite ñuãha tekoypýpe) layers_label=Ñuãha thumbs.title=Mba’emirĩ jehechauka thumbs_label=Mba’emirĩ current_outline_item.title=Eheka mba’epuru ag̃aguaitéva current_outline_item_label=Mba’epuru ag̃aguaitéva findbar.title=Kuatiápe jeheka findbar_label=Juhu additional_layers=Ñuãha moirũguáva # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Kuatiarogue {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Kuatiarogue {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Kuatiarogue mba’emirĩ {{page}} # Find panel button title and messages find_input.title=Juhu find_input.placeholder=Kuatiápe jejuhu… find_previous.title=Ejuhu ñe’ẽrysýi osẽ’ypy hague find_previous_label=Mboyvegua find_next.title=Eho ñe’ẽ juhupyre upeiguávape find_next_label=Upeigua find_highlight=Embojekuaavepa find_match_case_label=Ejesareko taiguasu/taimichĩre find_entire_word_label=Ñe’ẽ oĩmbáva find_reached_top=Ojehupyty kuatia ñepyrũ, oku’ejeýta kuatia paha guive find_reached_bottom=Ojehupyty kuatia paha, oku’ejeýta kuatia ñepyrũ guive # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} {{total}} ojojoguáva find_match_count[two]={{current}} {{total}} ojojoguáva find_match_count[few]={{current}} {{total}} ojojoguáva find_match_count[many]={{current}} {{total}} ojojoguáva find_match_count[other]={{current}} {{total}} ojojoguáva # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Hetave {{limit}} ojojoguáva find_match_count_limit[one]=Hetave {{limit}} ojojogua find_match_count_limit[two]=Hetave {{limit}} ojojoguáva find_match_count_limit[few]=Hetave {{limit}} ojojoguáva find_match_count_limit[many]=Hetave {{limit}} ojojoguáva find_match_count_limit[other]=Hetave {{limit}} ojojoguáva find_not_found=Ñe’ẽrysýi ojejuhu’ỹva # Error panel labels error_more_info=Maranduve error_less_info=Sa’ive marandu error_close=Mboty # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Ñe’ẽmondo: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Mbojo’apy: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Marandurenda: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Tairenda: {{line}} rendering_error=Oiko jejavy ehechaukasévo kuatiarogue. # Predefined zoom values page_scale_width=Kuatiarogue pekue page_scale_fit=Kuatiarogue ñemoĩporã page_scale_auto=Tuichakue ijeheguíva page_scale_actual=Tuichakue ag̃agua # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Oĩvaíva loading_error=Oiko jejavy PDF oñemyeñyhẽnguévo. invalid_file_error=PDF marandurenda ndoikóiva térã ivaipyréva. missing_file_error=Ndaipóri PDF marandurenda unexpected_response_error=Mohendahavusu mbohovái ñeha’arõ’ỹva. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Jehaipy {{type}}] password_label=Emoinge ñe’ẽñemi eipe’a hag̃ua ko marandurenda PDF. password_invalid=Ñe’ẽñemi ndoikóiva. Eha’ã jey. password_ok=MONEĨ password_cancel=Heja printing_not_supported=Kyhyjerã: Ñembokuatia ndojokupytypái ko kundahára ndive. printing_not_ready=Kyhyjerã: Ko PDF nahenyhẽmbái oñembokuatia hag̃uáicha. web_fonts_disabled=Ñanduti taity oñemongéma: ndaikatumo’ãi eipuru PDF jehai’íva taity. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/gu-IN/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=પહેલાનુ પાનું previous_label=પહેલાનુ next.title=આગળનુ પાનું next_label=આગળનું # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=પાનું # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=નો {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} નો {{pagesCount}}) zoom_out.title=મોટુ કરો zoom_out_label=મોટુ કરો zoom_in.title=નાનું કરો zoom_in_label=નાનું કરો zoom.title=નાનું મોટુ કરો presentation_mode.title=રજૂઆત સ્થિતિમાં જાવ presentation_mode_label=રજૂઆત સ્થિતિ open_file.title=ફાઇલ ખોલો open_file_label=ખોલો print.title=છાપો print_label=છારો download.title=ડાઉનલોડ download_label=ડાઉનલોડ bookmark.title=વર્તમાન દૃશ્ય (નવી વિન્ડોમાં નકલ કરો અથવા ખોલો) bookmark_label=વર્તમાન દૃશ્ય # Secondary toolbar and context menu tools.title=સાધનો tools_label=સાધનો first_page.title=પહેલાં પાનામાં જાવ first_page.label=પહેલાં પાનામાં જાવ first_page_label=પ્રથમ પાનાં પર જાવ last_page.title=છેલ્લા પાનાં પર જાવ last_page.label=છેલ્લા પાનામાં જાવ last_page_label=છેલ્લા પાનાં પર જાવ page_rotate_cw.title=ઘડિયાળનાં કાંટા તરફ ફેરવો page_rotate_cw.label=ઘડિયાળનાં કાંટાની જેમ ફેરવો page_rotate_cw_label=ઘડિયાળનાં કાંટા તરફ ફેરવો page_rotate_ccw.title=ઘડિયાળનાં કાંટાની ઉલટી દિશામાં ફેરવો page_rotate_ccw.label=ઘડિયાળનાં કાંટાની ઉલટી દિશામાં ફેરવો page_rotate_ccw_label=ઘડિયાળનાં કાંટાની વિરુદ્દ ફેરવો cursor_text_select_tool.title=ટેક્સ્ટ પસંદગી ટૂલ સક્ષમ કરો cursor_text_select_tool_label=ટેક્સ્ટ પસંદગી ટૂલ cursor_hand_tool.title=હાથનાં સાધનને સક્રિય કરો cursor_hand_tool_label=હેન્ડ ટૂલ scroll_vertical.title=ઊભી સ્ક્રોલિંગનો ઉપયોગ કરો scroll_vertical_label=ઊભી સ્ક્રોલિંગ scroll_horizontal.title=આડી સ્ક્રોલિંગનો ઉપયોગ કરો scroll_horizontal_label=આડી સ્ક્રોલિંગ scroll_wrapped.title=આવરિત સ્ક્રોલિંગનો ઉપયોગ કરો scroll_wrapped_label=આવરિત સ્ક્રોલિંગ spread_none.title=પૃષ્ઠ સ્પ્રેડમાં જોડાવશો નહીં spread_none_label=કોઈ સ્પ્રેડ નથી spread_odd.title=એકી-ક્રમાંકિત પૃષ્ઠો સાથે પ્રારંભ થતાં પૃષ્ઠ સ્પ્રેડમાં જોડાઓ spread_odd_label=એકી સ્પ્રેડ્સ spread_even.title=નંબર-ક્રમાંકિત પૃષ્ઠોથી શરૂ થતાં પૃષ્ઠ સ્પ્રેડમાં જોડાઓ spread_even_label=સરખું ફેલાવવું # Document properties dialog box document_properties.title=દસ્તાવેજ ગુણધર્મો… document_properties_label=દસ્તાવેજ ગુણધર્મો… document_properties_file_name=ફાઇલ નામ: document_properties_file_size=ફાઇલ માપ: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} બાઇટ) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} બાઇટ) document_properties_title=શીર્ષક: document_properties_author=લેખક: document_properties_subject=વિષય: document_properties_keywords=કિવર્ડ: document_properties_creation_date=નિર્માણ તારીખ: document_properties_modification_date=ફેરફાર તારીખ: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=નિર્માતા: document_properties_producer=PDF નિર્માતા: document_properties_version=PDF આવૃત્તિ: document_properties_page_count=પાનાં ગણતરી: document_properties_page_size=પૃષ્ઠનું કદ: document_properties_page_size_unit_inches=ઇંચ document_properties_page_size_unit_millimeters=મીમી document_properties_page_size_orientation_portrait=ઉભું document_properties_page_size_orientation_landscape=આડુ document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=પત્ર document_properties_page_size_name_legal=કાયદાકીય # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=ઝડપી વૅબ દૃશ્ય: document_properties_linearized_yes=હા document_properties_linearized_no=ના document_properties_close=બંધ કરો print_progress_message=છાપકામ માટે દસ્તાવેજ તૈયાર કરી રહ્યા છે… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=રદ કરો # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=ટૉગલ બાજુપટ્ટી toggle_sidebar_notification.title=સાઇડબારને ટૉગલ કરો(દસ્તાવેજની રૂપરેખા/જોડાણો શામેલ છે) toggle_sidebar_label=ટૉગલ બાજુપટ્ટી document_outline.title=દસ્તાવેજની રૂપરેખા બતાવો(બધી આઇટમ્સને વિસ્તૃત/સંકુચિત કરવા માટે ડબલ-ક્લિક કરો) document_outline_label=દસ્તાવેજ રૂપરેખા attachments.title=જોડાણોને બતાવો attachments_label=જોડાણો thumbs.title=થંબનેલ્સ બતાવો thumbs_label=થંબનેલ્સ findbar.title=દસ્તાવેજમાં શોધો findbar_label=શોધો # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=પાનું {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=પાનાં {{page}} નું થંબનેલ્સ # Find panel button title and messages find_input.title=શોધો find_input.placeholder=દસ્તાવેજમાં શોધો… find_previous.title=શબ્દસમૂહની પાછલી ઘટનાને શોધો find_previous_label=પહેલાંનુ find_next.title=શબ્દસમૂહની આગળની ઘટનાને શોધો find_next_label=આગળનું find_highlight=બધુ પ્રકાશિત કરો find_match_case_label=કેસ બંધબેસાડો find_entire_word_label=સંપૂર્ણ શબ્દો find_reached_top=દસ્તાવેજનાં ટોચે પહોંચી ગયા, તળિયેથી ચાલુ કરેલ હતુ find_reached_bottom=દસ્તાવેજનાં અંતે પહોંચી ગયા, ઉપરથી ચાલુ કરેલ હતુ # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{total}} માંથી {{current}} સરખું મળ્યું find_match_count[two]={{total}} માંથી {{current}} સરખા મળ્યાં find_match_count[few]={{total}} માંથી {{current}} સરખા મળ્યાં find_match_count[many]={{total}} માંથી {{current}} સરખા મળ્યાં find_match_count[other]={{total}} માંથી {{current}} સરખા મળ્યાં # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]={{limit}} કરતાં વધુ સરખા મળ્યાં find_match_count_limit[one]={{limit}} કરતાં વધુ સરખું મળ્યું find_match_count_limit[two]={{limit}} કરતાં વધુ સરખા મળ્યાં find_match_count_limit[few]={{limit}} કરતાં વધુ સરખા મળ્યાં find_match_count_limit[many]={{limit}} કરતાં વધુ સરખા મળ્યાં find_match_count_limit[other]={{limit}} કરતાં વધુ સરખા મળ્યાં find_not_found=શબ્દસમૂહ મળ્યુ નથી # Error panel labels error_more_info=વધારે જાણકારી error_less_info=ઓછી જાણકારી error_close=બંધ કરો # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=સંદેશો: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=સ્ટેક: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=ફાઇલ: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=વાક્ય: {{line}} rendering_error=ભૂલ ઉદ્ભવી જ્યારે પાનાંનુ રેન્ડ કરી રહ્યા હોય. # Predefined zoom values page_scale_width=પાનાની પહોળાઇ page_scale_fit=પાનું બંધબેસતુ page_scale_auto=આપમેળે નાનુંમોટુ કરો page_scale_actual=ચોક્કસ માપ # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=ભૂલ loading_error=ભૂલ ઉદ્ભવી જ્યારે PDF ને લાવી રહ્યા હોય. invalid_file_error=અયોગ્ય અથવા ભાંગેલ PDF ફાઇલ. missing_file_error=ગુમ થયેલ PDF ફાઇલ. unexpected_response_error=અનપેક્ષિત સર્વર પ્રતિસાદ. # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Annotation] password_label=આ PDF ફાઇલને ખોલવા પાસવર્ડને દાખલ કરો. password_invalid=અયોગ્ય પાસવર્ડ. મહેરબાની કરીને ફરી પ્રયત્ન કરો. password_ok=બરાબર password_cancel=રદ કરો printing_not_supported=ચેતવણી: છાપવાનું આ બ્રાઉઝર દ્દારા સંપૂર્ણપણે આધારભૂત નથી. printing_not_ready=Warning: PDF એ છાપવા માટે સંપૂર્ણપણે લાવેલ છે. web_fonts_disabled=વેબ ફોન્ટ નિષ્ક્રિય થયેલ છે: ઍમ્બેડ થયેલ PDF ફોન્ટને વાપરવાનું અસમર્થ. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/he/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=דף קודם previous_label=קודם next.title=דף הבא next_label=הבא # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=דף # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=מתוך {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} מתוך {{pagesCount}}) zoom_out.title=התרחקות zoom_out_label=התרחקות zoom_in.title=התקרבות zoom_in_label=התקרבות zoom.title=מרחק מתצוגה presentation_mode.title=מעבר למצב מצגת presentation_mode_label=מצב מצגת open_file.title=פתיחת קובץ open_file_label=פתיחה print.title=הדפסה print_label=הדפסה download.title=הורדה download_label=הורדה bookmark.title=תצוגה נוכחית (העתקה או פתיחה בחלון חדש) bookmark_label=תצוגה נוכחית # Secondary toolbar and context menu tools.title=כלים tools_label=כלים first_page.title=מעבר לעמוד הראשון first_page.label=מעבר לעמוד הראשון first_page_label=מעבר לעמוד הראשון last_page.title=מעבר לעמוד האחרון last_page.label=מעבר לעמוד האחרון last_page_label=מעבר לעמוד האחרון page_rotate_cw.title=הטיה עם כיוון השעון page_rotate_cw.label=הטיה עם כיוון השעון page_rotate_cw_label=הטיה עם כיוון השעון page_rotate_ccw.title=הטיה כנגד כיוון השעון page_rotate_ccw.label=הטיה כנגד כיוון השעון page_rotate_ccw_label=הטיה כנגד כיוון השעון cursor_text_select_tool.title=הפעלת כלי בחירת טקסט cursor_text_select_tool_label=כלי בחירת טקסט cursor_hand_tool.title=הפעלת כלי היד cursor_hand_tool_label=כלי יד scroll_vertical.title=שימוש בגלילה אנכית scroll_vertical_label=גלילה אנכית scroll_horizontal.title=שימוש בגלילה אופקית scroll_horizontal_label=גלילה אופקית scroll_wrapped.title=שימוש בגלילה רציפה scroll_wrapped_label=גלילה רציפה spread_none.title=לא לצרף מפתחי עמודים spread_none_label=ללא מפתחים spread_odd.title=צירוף מפתחי עמודים שמתחילים בדפים עם מספרים אי־זוגיים spread_odd_label=מפתחים אי־זוגיים spread_even.title=צירוף מפתחי עמודים שמתחילים בדפים עם מספרים זוגיים spread_even_label=מפתחים זוגיים # Document properties dialog box document_properties.title=מאפייני מסמך… document_properties_label=מאפייני מסמך… document_properties_file_name=שם קובץ: document_properties_file_size=גודל הקובץ: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} ק״ב ({{size_b}} בתים) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} מ״ב ({{size_b}} בתים) document_properties_title=כותרת: document_properties_author=מחבר: document_properties_subject=נושא: document_properties_keywords=מילות מפתח: document_properties_creation_date=תאריך יצירה: document_properties_modification_date=תאריך שינוי: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=יוצר: document_properties_producer=יצרן PDF: document_properties_version=גרסת PDF: document_properties_page_count=מספר דפים: document_properties_page_size=גודל העמוד: document_properties_page_size_unit_inches=אינ׳ document_properties_page_size_unit_millimeters=מ״מ document_properties_page_size_orientation_portrait=לאורך document_properties_page_size_orientation_landscape=לרוחב document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=מכתב document_properties_page_size_name_legal=דף משפטי # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=תצוגת דף מהירה: document_properties_linearized_yes=כן document_properties_linearized_no=לא document_properties_close=סגירה print_progress_message=מסמך בהכנה להדפסה… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=ביטול # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=הצגה/הסתרה של סרגל הצד toggle_sidebar_notification.title=החלפת תצוגת סרגל צד (מסמך שמכיל תוכן עניינים/קבצים מצורפים) toggle_sidebar_notification2.title=החלפת תצוגת סרגל צד (מסמך שמכיל תוכן עניינים/קבצים מצורפים/שכבות) toggle_sidebar_label=הצגה/הסתרה של סרגל הצד document_outline.title=הצגת תוכן העניינים של המסמך (לחיצה כפולה כדי להרחיב או לצמצם את כל הפריטים) document_outline_label=תוכן העניינים של המסמך attachments.title=הצגת צרופות attachments_label=צרופות layers.title=הצגת שכבות (יש ללחוץ לחיצה כפולה כדי לאפס את כל השכבות למצב ברירת המחדל) layers_label=שכבות thumbs.title=הצגת תצוגה מקדימה thumbs_label=תצוגה מקדימה current_outline_item.title=מציאת פריט תוכן העניינים הנוכחי current_outline_item_label=פריט תוכן העניינים הנוכחי findbar.title=חיפוש במסמך findbar_label=חיפוש additional_layers=שכבות נוספות # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=עמוד {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=עמוד {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=תצוגה מקדימה של עמוד {{page}} # Find panel button title and messages find_input.title=חיפוש find_input.placeholder=חיפוש במסמך… find_previous.title=מציאת המופע הקודם של הביטוי find_previous_label=קודם find_next.title=מציאת המופע הבא של הביטוי find_next_label=הבא find_highlight=הדגשת הכול find_match_case_label=התאמת אותיות find_entire_word_label=מילים שלמות find_reached_top=הגיע לראש הדף, ממשיך מלמטה find_reached_bottom=הגיע לסוף הדף, ממשיך מלמעלה # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]=תוצאה {{current}} מתוך {{total}} find_match_count[two]={{current}} מתוך {{total}} תוצאות find_match_count[few]={{current}} מתוך {{total}} תוצאות find_match_count[many]={{current}} מתוך {{total}} תוצאות find_match_count[other]={{current}} מתוך {{total}} תוצאות # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=יותר מ־{{limit}} תוצאות find_match_count_limit[one]=יותר מתוצאה אחת find_match_count_limit[two]=יותר מ־{{limit}} תוצאות find_match_count_limit[few]=יותר מ־{{limit}} תוצאות find_match_count_limit[many]=יותר מ־{{limit}} תוצאות find_match_count_limit[other]=יותר מ־{{limit}} תוצאות find_not_found=הביטוי לא נמצא # Error panel labels error_more_info=מידע נוסף error_less_info=פחות מידע error_close=סגירה # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js גרסה {{version}} (בנייה: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=הודעה: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=תוכן מחסנית: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=קובץ: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=שורה: {{line}} rendering_error=אירעה שגיאה בעת עיבוד הדף. # Predefined zoom values page_scale_width=רוחב העמוד page_scale_fit=התאמה לעמוד page_scale_auto=מרחק מתצוגה אוטומטי page_scale_actual=גודל אמיתי # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=שגיאה loading_error=אירעה שגיאה בעת טעינת ה־PDF. invalid_file_error=קובץ PDF פגום או לא תקין. missing_file_error=קובץ PDF חסר. unexpected_response_error=תגובת שרת לא צפויה. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[הערת {{type}}] password_label=נא להכניס את הססמה לפתיחת קובץ PDF זה. password_invalid=ססמה שגויה. נא לנסות שנית. password_ok=אישור password_cancel=ביטול printing_not_supported=אזהרה: הדפסה אינה נתמכת במלואה בדפדפן זה. printing_not_ready=אזהרה: מסמך ה־PDF לא נטען לחלוטין עד מצב שמאפשר הדפסה. web_fonts_disabled=גופני רשת מנוטרלים: לא ניתן להשתמש בגופני PDF מוטבעים. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/hi-IN/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=पिछला पृष्ठ previous_label=पिछला next.title=अगला पृष्ठ next_label=आगे # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=पृष्ठ: # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages={{pagesCount}} का # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} of {{pagesCount}}) zoom_out.title=\u0020छोटा करें zoom_out_label=\u0020छोटा करें zoom_in.title=बड़ा करें zoom_in_label=बड़ा करें zoom.title=बड़ा-छोटा करें presentation_mode.title=प्रस्तुति अवस्था में जाएँ presentation_mode_label=\u0020प्रस्तुति अवस्था open_file.title=फ़ाइल खोलें open_file_label=\u0020खोलें print.title=छापें print_label=\u0020छापें download.title=डाउनलोड download_label=डाउनलोड bookmark.title=मौजूदा दृश्य (नए विंडो में नक़ल लें या खोलें) bookmark_label=\u0020मौजूदा दृश्य # Secondary toolbar and context menu tools.title=औज़ार tools_label=औज़ार first_page.title=प्रथम पृष्ठ पर जाएँ first_page.label=\u0020प्रथम पृष्ठ पर जाएँ first_page_label=प्रथम पृष्ठ पर जाएँ last_page.title=अंतिम पृष्ठ पर जाएँ last_page.label=\u0020अंतिम पृष्ठ पर जाएँ last_page_label=\u0020अंतिम पृष्ठ पर जाएँ page_rotate_cw.title=घड़ी की दिशा में घुमाएँ page_rotate_cw.label=घड़ी की दिशा में घुमाएँ page_rotate_cw_label=घड़ी की दिशा में घुमाएँ page_rotate_ccw.title=घड़ी की दिशा से उल्टा घुमाएँ page_rotate_ccw.label=घड़ी की दिशा से उल्टा घुमाएँ page_rotate_ccw_label=\u0020घड़ी की दिशा से उल्टा घुमाएँ cursor_text_select_tool.title=पाठ चयन उपकरण सक्षम करें cursor_text_select_tool_label=पाठ चयन उपकरण cursor_hand_tool.title=हस्त उपकरण सक्षम करें cursor_hand_tool_label=हस्त उपकरण scroll_vertical.title=लंबवत स्क्रॉलिंग का उपयोग करें scroll_vertical_label=लंबवत स्क्रॉलिंग scroll_horizontal.title=क्षितिजिय स्क्रॉलिंग का उपयोग करें scroll_horizontal_label=क्षितिजिय स्क्रॉलिंग scroll_wrapped.title=व्राप्पेड स्क्रॉलिंग का उपयोग करें spread_none_label=कोई स्प्रेड उपलब्ध नहीं spread_odd.title=विषम-क्रमांकित पृष्ठों से प्रारंभ होने वाले पृष्ठ स्प्रेड में शामिल हों spread_odd_label=विषम फैलाव # Document properties dialog box document_properties.title=दस्तावेज़ विशेषता... document_properties_label=दस्तावेज़ विशेषता... document_properties_file_name=फ़ाइल नाम: document_properties_file_size=फाइल आकारः # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=शीर्षक: document_properties_author=लेखकः document_properties_subject=विषय: document_properties_keywords=कुंजी-शब्द: document_properties_creation_date=निर्माण दिनांक: document_properties_modification_date=संशोधन दिनांक: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=निर्माता: document_properties_producer=PDF उत्पादक: document_properties_version=PDF संस्करण: document_properties_page_count=पृष्ठ गिनती: document_properties_page_size=पृष्ठ आकार: document_properties_page_size_unit_inches=इंच document_properties_page_size_unit_millimeters=मिमी document_properties_page_size_orientation_portrait=पोर्ट्रेट document_properties_page_size_orientation_landscape=लैंडस्केप document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=पत्र document_properties_page_size_name_legal=क़ानूनी # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=तीव्र वेब व्यू: document_properties_linearized_yes=हाँ document_properties_linearized_no=नहीं document_properties_close=बंद करें print_progress_message=छपाई के लिए दस्तावेज़ को तैयार किया जा रहा है... # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=रद्द करें # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=\u0020स्लाइडर टॉगल करें toggle_sidebar_notification.title=साइडबार टॉगल करें (दस्तावेज़ में रूपरेखा शामिल है/attachments) toggle_sidebar_label=स्लाइडर टॉगल करें document_outline.title=दस्तावेज़ की रूपरेखा दिखाइए (सारी वस्तुओं को फलने अथवा समेटने के लिए दो बार क्लिक करें) document_outline_label=दस्तावेज़ आउटलाइन attachments.title=संलग्नक दिखायें attachments_label=संलग्नक thumbs.title=लघुछवियाँ दिखाएँ thumbs_label=लघु छवि findbar.title=\u0020दस्तावेज़ में ढूँढ़ें findbar_label=ढूँढें # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=पृष्ठ {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=पृष्ठ {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=पृष्ठ {{page}} की लघु-छवि # Find panel button title and messages find_input.title=ढूँढें find_input.placeholder=दस्तावेज़ में खोजें... find_previous.title=वाक्यांश की पिछली उपस्थिति ढूँढ़ें find_previous_label=पिछला find_next.title=वाक्यांश की अगली उपस्थिति ढूँढ़ें find_next_label=अगला find_highlight=\u0020सभी आलोकित करें find_match_case_label=मिलान स्थिति find_entire_word_label=संपूर्ण शब्द find_reached_top=पृष्ठ के ऊपर पहुंच गया, नीचे से जारी रखें find_reached_bottom=पृष्ठ के नीचे में जा पहुँचा, ऊपर से जारी # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{total}} में {{current}} मेल find_match_count[two]={{total}} में {{current}} मेल find_match_count[few]={{total}} में {{current}} मेल find_match_count[many]={{total}} में {{current}} मेल find_match_count[other]={{total}} में {{current}} मेल # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]={{limit}} से अधिक मेल find_match_count_limit[one]={{limit}} से अधिक मेल find_match_count_limit[two]={{limit}} से अधिक मेल find_match_count_limit[few]={{limit}} से अधिक मेल find_match_count_limit[many]={{limit}} से अधिक मेल find_match_count_limit[other]={{limit}} से अधिक मेल find_not_found=वाक्यांश नहीं मिला # Error panel labels error_more_info=अधिक सूचना error_less_info=कम सूचना error_close=बंद करें # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=\u0020संदेश: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=स्टैक: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=फ़ाइल: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=पंक्ति: {{line}} rendering_error=पृष्ठ रेंडरिंग के दौरान त्रुटि आई. # Predefined zoom values page_scale_width=\u0020पृष्ठ चौड़ाई page_scale_fit=पृष्ठ फिट page_scale_auto=स्वचालित जूम page_scale_actual=वास्तविक आकार # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=त्रुटि loading_error=PDF लोड करते समय एक त्रुटि हुई. invalid_file_error=अमान्य या भ्रष्ट PDF फ़ाइल. missing_file_error=\u0020अनुपस्थित PDF फ़ाइल. unexpected_response_error=अप्रत्याशित सर्वर प्रतिक्रिया. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=\u0020[{{type}} Annotation] password_label=इस PDF फ़ाइल को खोलने के लिए कृपया कूटशब्द भरें. password_invalid=अवैध कूटशब्द, कृपया फिर कोशिश करें. password_ok=OK password_cancel=रद्द करें printing_not_supported=चेतावनी: इस ब्राउज़र पर छपाई पूरी तरह से समर्थित नहीं है. printing_not_ready=चेतावनी: PDF छपाई के लिए पूरी तरह से लोड नहीं है. web_fonts_disabled=वेब फॉन्ट्स निष्क्रिय हैं: अंतःस्थापित PDF फॉन्टस के उपयोग में असमर्थ. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/hr/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Prethodna stranica previous_label=Prethodna next.title=Sljedeća stranica next_label=Sljedeća # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Stranica # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=od {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} od {{pagesCount}}) zoom_out.title=Umanji zoom_out_label=Umanji zoom_in.title=Uvećaj zoom_in_label=Uvećaj zoom.title=Zumiranje presentation_mode.title=Prebaci u prezentacijski način rada presentation_mode_label=Prezentacijski način rada open_file.title=Otvori datoteku open_file_label=Otvori print.title=Ispiši print_label=Ispiši download.title=Preuzmi download_label=Preuzmi bookmark.title=Trenutačni prikaz (kopiraj ili otvori u novom prozoru) bookmark_label=Trenutačni prikaz # Secondary toolbar and context menu tools.title=Alati tools_label=Alati first_page.title=Idi na prvu stranicu first_page.label=Idi na prvu stranicu first_page_label=Idi na prvu stranicu last_page.title=Idi na posljednju stranicu last_page.label=Idi na posljednju stranicu last_page_label=Idi na posljednju stranicu page_rotate_cw.title=Rotiraj u smjeru kazaljke na satu page_rotate_cw.label=Rotiraj u smjeru kazaljke na satu page_rotate_cw_label=Rotiraj u smjeru kazaljke na satu page_rotate_ccw.title=Rotiraj obrnutno od smjera kazaljke na satu page_rotate_ccw.label=Rotiraj obrnutno od smjera kazaljke na satu page_rotate_ccw_label=Rotiraj obrnutno od smjera kazaljke na satu cursor_text_select_tool.title=Omogući alat za označavanje teksta cursor_text_select_tool_label=Alat za označavanje teksta cursor_hand_tool.title=Omogući ručni alat cursor_hand_tool_label=Ručni alat scroll_vertical.title=Koristi okomito pomicanje scroll_vertical_label=Okomito pomicanje scroll_horizontal.title=Koristi vodoravno pomicanje scroll_horizontal_label=Vodoravno pomicanje scroll_wrapped.title=Koristi kontinuirani raspored stranica scroll_wrapped_label=Kontinuirani raspored stranica spread_none.title=Ne izrađuj duplerice spread_none_label=Pojedinačne stranice spread_odd.title=Izradi duplerice koje počinju s neparnim stranicama spread_odd_label=Neparne duplerice spread_even.title=Izradi duplerice koje počinju s parnim stranicama spread_even_label=Parne duplerice # Document properties dialog box document_properties.title=Svojstva dokumenta... document_properties_label=Svojstva dokumenta... document_properties_file_name=Naziv datoteke: document_properties_file_size=Veličina datoteke: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bajtova) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bajtova) document_properties_title=Naslov: document_properties_author=Autor: document_properties_subject=Predmet: document_properties_keywords=Ključne riječi: document_properties_creation_date=Datum stvaranja: document_properties_modification_date=Datum promjene: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Stvaratelj: document_properties_producer=PDF stvaratelj: document_properties_version=PDF verzija: document_properties_page_count=Broj stranica: document_properties_page_size=Dimenzije stranice: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=uspravno document_properties_page_size_orientation_landscape=položeno document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Brzi web pregled: document_properties_linearized_yes=Da document_properties_linearized_no=Ne document_properties_close=Zatvori print_progress_message=Pripremanje dokumenta za ispis… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Odustani # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Prikaži/sakrij bočnu traku toggle_sidebar_notification.title=Prikazivanje i sklanjanje bočne trake (dokument sadrži strukturu/privitke) toggle_sidebar_notification2.title=Prikazivanje i sklanjanje bočne trake (dokument sadrži strukturu/privitke/slojeve) toggle_sidebar_label=Prikaži/sakrij bočnu traku document_outline.title=Prikaži strukturu dokumenta (dvostruki klik za rasklapanje/sklapanje svih stavki) document_outline_label=Struktura dokumenta attachments.title=Prikaži privitke attachments_label=Privitci layers.title=Prikaži slojeve (dvoklik za vraćanje svih slojeva u zadano stanje) layers_label=Slojevi thumbs.title=Prikaži minijature thumbs_label=Minijature current_outline_item.title=Pronađi trenutačni element strukture current_outline_item_label=Trenutačni element strukture findbar.title=Pronađi u dokumentu findbar_label=Pronađi additional_layers=Dodatni slojevi # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Stranica br. {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Stranica {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Minijatura stranice {{page}} # Find panel button title and messages find_input.title=Pronađi find_input.placeholder=Pronađi u dokumentu … find_previous.title=Pronađi prethodno pojavljivanje ovog izraza find_previous_label=Prethodno find_next.title=Pronađi sljedeće pojavljivanje ovog izraza find_next_label=Sljedeće find_highlight=Istankni sve find_match_case_label=Razlikovanje velikih i malih slova find_entire_word_label=Cijele riječi find_reached_top=Dosegnut početak dokumenta, nastavak s kraja find_reached_bottom=Dosegnut kraj dokumenta, nastavak s početka # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} od {{total}} se podudara find_match_count[two]={{current}} od {{total}} se podudara find_match_count[few]={{current}} od {{total}} se podudara find_match_count[many]={{current}} od {{total}} se podudara find_match_count[other]={{current}} od {{total}} se podudara # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Više od {{limit}} podudaranja find_match_count_limit[one]=Više od {{limit}} podudaranja find_match_count_limit[two]=Više od {{limit}} podudaranja find_match_count_limit[few]=Više od {{limit}} podudaranja find_match_count_limit[many]=Više od {{limit}} podudaranja find_match_count_limit[other]=Više od {{limit}} podudaranja find_not_found=Izraz nije pronađen # Error panel labels error_more_info=Više informacija error_less_info=Manje informacija error_close=Zatvori # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Poruka: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stog: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Datoteka: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Redak: {{line}} rendering_error=Došlo je do greške prilikom iscrtavanja stranice. # Predefined zoom values page_scale_width=Prilagodi širini prozora page_scale_fit=Prilagodi veličini prozora page_scale_auto=Automatsko zumiranje page_scale_actual=Stvarna veličina # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}} % # Loading indicator messages loading_error_indicator=Greška loading_error=Došlo je do greške pri učitavanju PDF-a. invalid_file_error=Neispravna ili oštećena PDF datoteka. missing_file_error=Nedostaje PDF datoteka. unexpected_response_error=Neočekivani odgovor poslužitelja. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Bilješka] password_label=Za otvoranje ove PDF datoteku upiši lozinku. password_invalid=Neispravna lozinka. Pokušaj ponovo. password_ok=U redu password_cancel=Odustani printing_not_supported=Upozorenje: Ovaj preglednik ne podržava u potpunosti ispisivanje. printing_not_ready=Upozorenje: PDF nije u potpunosti učitan za ispis. web_fonts_disabled=Web fontovi su deaktivirani: nije moguće koristiti ugrađene PDF fontove. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/hsb/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Předchadna strona previous_label=Wróćo next.title=Přichodna strona next_label=Dale # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Strona # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=z {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} z {{pagesCount}}) zoom_out.title=Pomjeńšić zoom_out_label=Pomjeńšić zoom_in.title=Powjetšić zoom_in_label=Powjetšić zoom.title=Skalowanje presentation_mode.title=Do prezentaciskeho modusa přeńć presentation_mode_label=Prezentaciski modus open_file.title=Dataju wočinić open_file_label=Wočinić print.title=Ćišćeć print_label=Ćišćeć download.title=Sćahnyć download_label=Sćahnyć bookmark.title=Aktualny napohlad (kopěrować abo w nowym woknje wočinić) bookmark_label=Aktualny napohlad # Secondary toolbar and context menu tools.title=Nastroje tools_label=Nastroje first_page.title=K prěnjej stronje first_page.label=K prěnjej stronje first_page_label=K prěnjej stronje last_page.title=K poslednjej stronje last_page.label=K poslednjej stronje last_page_label=K poslednjej stronje page_rotate_cw.title=K směrej časnika wjerćeć page_rotate_cw.label=K směrej časnika wjerćeć page_rotate_cw_label=K směrej časnika wjerćeć page_rotate_ccw.title=Přećiwo směrej časnika wjerćeć page_rotate_ccw.label=Přećiwo směrej časnika wjerćeć page_rotate_ccw_label=Přećiwo směrej časnika wjerćeć cursor_text_select_tool.title=Nastroj za wuběranje teksta zmóžnić cursor_text_select_tool_label=Nastroj za wuběranje teksta cursor_hand_tool.title=Ručny nastroj zmóžnić cursor_hand_tool_label=Ručny nastroj scroll_vertical.title=Wertikalne suwanje wužiwać scroll_vertical_label=Wertikalnje suwanje scroll_horizontal.title=Horicontalne suwanje wužiwać scroll_horizontal_label=Horicontalne suwanje scroll_wrapped.title=Postupne suwanje wužiwać scroll_wrapped_label=Postupne suwanje spread_none.title=Strony njezwjazać spread_none_label=Žana dwójna strona spread_odd.title=Strony započinajo z njerunymi stronami zwjazać spread_odd_label=Njerune strony spread_even.title=Strony započinajo z runymi stronami zwjazać spread_even_label=Rune strony # Document properties dialog box document_properties.title=Dokumentowe kajkosće… document_properties_label=Dokumentowe kajkosće… document_properties_file_name=Mjeno dataje: document_properties_file_size=Wulkosć dataje: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bajtow) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bajtow) document_properties_title=Titul: document_properties_author=Awtor: document_properties_subject=Předmjet: document_properties_keywords=Klučowe słowa: document_properties_creation_date=Datum wutworjenja: document_properties_modification_date=Datum změny: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Awtor: document_properties_producer=PDF-zhotowjer: document_properties_version=PDF-wersija: document_properties_page_count=Ličba stronow: document_properties_page_size=Wulkosć strony: document_properties_page_size_unit_inches=cól document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=wysoki format document_properties_page_size_orientation_landscape=prěčny format document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Fast Web View: document_properties_linearized_yes=Haj document_properties_linearized_no=Ně document_properties_close=Začinić print_progress_message=Dokument so za ćišćenje přihotuje… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Přetorhnyć # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Bóčnicu pokazać/schować toggle_sidebar_notification.title=Bóčnicu přepinać (dokument wobsahuje wobrys/přiwěški) toggle_sidebar_notification2.title=Bóčnicu přepinać (dokument rozrjad/přiwěški/woršty wobsahuje) toggle_sidebar_label=Bóčnicu pokazać/schować document_outline.title=Dokumentowy naćisk pokazać (dwójne kliknjenje, zo bychu so wšě zapiski pokazali/schowali) document_outline_label=Dokumentowa struktura attachments.title=Přiwěški pokazać attachments_label=Přiwěški layers.title=Woršty pokazać (klikńće dwójce, zo byšće wšě woršty na standardny staw wróćo stajił) layers_label=Woršty thumbs.title=Miniatury pokazać thumbs_label=Miniatury current_outline_item.title=Aktualny rozrjadowy zapisk pytać current_outline_item_label=Aktualny rozrjadowy zapisk findbar.title=W dokumenće pytać findbar_label=Pytać additional_layers=Dalše woršty # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Strona {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Strona {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Miniatura strony {{page}} # Find panel button title and messages find_input.title=Pytać find_input.placeholder=W dokumenće pytać… find_previous.title=Předchadne wustupowanje pytanskeho wuraza pytać find_previous_label=Wróćo find_next.title=Přichodne wustupowanje pytanskeho wuraza pytać find_next_label=Dale find_highlight=Wšě wuzběhnyć find_match_case_label=Wulkopisanje wobkedźbować find_entire_word_label=Cyłe słowa find_reached_top=Spočatk dokumenta docpěty, pokročuje so z kóncom find_reached_bottom=Kónc dokument docpěty, pokročuje so ze spočatkom # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} z {{total}} wotpowědnika find_match_count[two]={{current}} z {{total}} wotpowědnikow find_match_count[few]={{current}} z {{total}} wotpowědnikow find_match_count[many]={{current}} z {{total}} wotpowědnikow find_match_count[other]={{current}} z {{total}} wotpowědnikow # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Wjace hač {{limit}} wotpowědnikow find_match_count_limit[one]=Wjace hač {{limit}} wotpowědnik find_match_count_limit[two]=Wjace hač {{limit}} wotpowědnikaj find_match_count_limit[few]=Wjace hač {{limit}} wotpowědniki find_match_count_limit[many]=Wjace hač {{limit}} wotpowědnikow find_match_count_limit[other]=Wjace hač {{limit}} wotpowědnikow find_not_found=Pytanski wuraz njeje so namakał # Error panel labels error_more_info=Wjace informacijow error_less_info=Mjenje informacijow error_close=Začinić # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Zdźělenka: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Lisćina zawołanjow: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Dataja: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Linka: {{line}} rendering_error=Při zwobraznjenju strony je zmylk wustupił. # Predefined zoom values page_scale_width=Šěrokosć strony page_scale_fit=Wulkosć strony page_scale_auto=Awtomatiske skalowanje page_scale_actual=Aktualna wulkosć # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Zmylk loading_error=Při začitowanju PDF je zmylk wustupił. invalid_file_error=Njepłaćiwa abo wobškodźena PDF-dataja. missing_file_error=Falowaca PDF-dataja. unexpected_response_error=Njewočakowana serwerowa wotmołwa. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Typ přispomnjenki: {{type}}] password_label=Zapodajće hesło, zo byšće PDF-dataju wočinił. password_invalid=Njepłaćiwe hesło. Prošu spytajće hišće raz. password_ok=W porjadku password_cancel=Přetorhnyć printing_not_supported=Warnowanje: Ćišćenje so přez tutón wobhladowak połnje njepodpěruje. printing_not_ready=Warnowanje: PDF njeje so za ćišćenje dospołnje začitał. web_fonts_disabled=Webpisma su znjemóžnjene: njeje móžno, zasadźene PDF-pisma wužiwać. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/hu/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Előző oldal previous_label=Előző next.title=Következő oldal next_label=Tovább # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Oldal # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=összesen: {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} / {{pagesCount}}) zoom_out.title=Kicsinyítés zoom_out_label=Kicsinyítés zoom_in.title=Nagyítás zoom_in_label=Nagyítás zoom.title=Nagyítás presentation_mode.title=Váltás bemutató módba presentation_mode_label=Bemutató mód open_file.title=Fájl megnyitása open_file_label=Megnyitás print.title=Nyomtatás print_label=Nyomtatás download.title=Letöltés download_label=Letöltés bookmark.title=Jelenlegi nézet (másolás vagy megnyitás új ablakban) bookmark_label=Aktuális nézet # Secondary toolbar and context menu tools.title=Eszközök tools_label=Eszközök first_page.title=Ugrás az első oldalra first_page.label=Ugrás az első oldalra first_page_label=Ugrás az első oldalra last_page.title=Ugrás az utolsó oldalra last_page.label=Ugrás az utolsó oldalra last_page_label=Ugrás az utolsó oldalra page_rotate_cw.title=Forgatás az óramutató járásával egyezően page_rotate_cw.label=Forgatás az óramutató járásával egyezően page_rotate_cw_label=Forgatás az óramutató járásával egyezően page_rotate_ccw.title=Forgatás az óramutató járásával ellentétesen page_rotate_ccw.label=Forgatás az óramutató járásával ellentétesen page_rotate_ccw_label=Forgatás az óramutató járásával ellentétesen cursor_text_select_tool.title=Szövegkijelölő eszköz bekapcsolása cursor_text_select_tool_label=Szövegkijelölő eszköz cursor_hand_tool.title=Kéz eszköz bekapcsolása cursor_hand_tool_label=Kéz eszköz scroll_vertical.title=Függőleges görgetés használata scroll_vertical_label=Függőleges görgetés scroll_horizontal.title=Vízszintes görgetés használata scroll_horizontal_label=Vízszintes görgetés scroll_wrapped.title=Rácsos elrendezés használata scroll_wrapped_label=Rácsos elrendezés spread_none.title=Ne tapassza össze az oldalakat spread_none_label=Nincs összetapasztás spread_odd.title=Lapok összetapasztása, a páratlan számú oldalakkal kezdve spread_odd_label=Összetapasztás: páratlan spread_even.title=Lapok összetapasztása, a páros számú oldalakkal kezdve spread_even_label=Összetapasztás: páros # Document properties dialog box document_properties.title=Dokumentum tulajdonságai… document_properties_label=Dokumentum tulajdonságai… document_properties_file_name=Fájlnév: document_properties_file_size=Fájlméret: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bájt) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bájt) document_properties_title=Cím: document_properties_author=Szerző: document_properties_subject=Tárgy: document_properties_keywords=Kulcsszavak: document_properties_creation_date=Létrehozás dátuma: document_properties_modification_date=Módosítás dátuma: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Létrehozta: document_properties_producer=PDF előállító: document_properties_version=PDF verzió: document_properties_page_count=Oldalszám: document_properties_page_size=Lapméret: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=álló document_properties_page_size_orientation_landscape=fekvő document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Jogi információk # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Gyors webes nézet: document_properties_linearized_yes=Igen document_properties_linearized_no=Nem document_properties_close=Bezárás print_progress_message=Dokumentum előkészítése nyomtatáshoz… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Mégse # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Oldalsáv be/ki toggle_sidebar_notification.title=Oldalsáv be/ki (a dokumentum vázlatot/mellékleteket tartalmaz) toggle_sidebar_notification2.title=Oldalsáv be/ki (a dokumentum vázlatot/mellékleteket/rétegeket tartalmaz) toggle_sidebar_label=Oldalsáv be/ki document_outline.title=Dokumentum megjelenítése online (dupla kattintás minden elem kinyitásához/összecsukásához) document_outline_label=Dokumentumvázlat attachments.title=Mellékletek megjelenítése attachments_label=Van melléklet layers.title=Rétegek megjelenítése (dupla kattintás az összes réteg alapértelmezett állapotra visszaállításához) layers_label=Rétegek thumbs.title=Bélyegképek megjelenítése thumbs_label=Bélyegképek current_outline_item.title=Jelenlegi vázlatelem megkeresése current_outline_item_label=Jelenlegi vázlatelem findbar.title=Keresés a dokumentumban findbar_label=Keresés additional_layers=További rétegek # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas={{page}}. oldal # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title={{page}}. oldal # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas={{page}}. oldal bélyegképe # Find panel button title and messages find_input.title=Keresés find_input.placeholder=Keresés a dokumentumban… find_previous.title=A kifejezés előző előfordulásának keresése find_previous_label=Előző find_next.title=A kifejezés következő előfordulásának keresése find_next_label=Tovább find_highlight=Összes kiemelése find_match_case_label=Kis- és nagybetűk megkülönböztetése find_entire_word_label=Teljes szavak find_reached_top=A dokumentum eleje elérve, folytatás a végétől find_reached_bottom=A dokumentum vége elérve, folytatás az elejétől # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} / {{total}} találat find_match_count[two]={{current}} / {{total}} találat find_match_count[few]={{current}} / {{total}} találat find_match_count[many]={{current}} / {{total}} találat find_match_count[other]={{current}} / {{total}} találat # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Több mint {{limit}} találat find_match_count_limit[one]=Több mint {{limit}} találat find_match_count_limit[two]=Több mint {{limit}} találat find_match_count_limit[few]=Több mint {{limit}} találat find_match_count_limit[many]=Több mint {{limit}} találat find_match_count_limit[other]=Több mint {{limit}} találat find_not_found=A kifejezés nem található # Error panel labels error_more_info=További tudnivalók error_less_info=Kevesebb információ error_close=Bezárás # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Üzenet: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Verem: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Fájl: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Sor: {{line}} rendering_error=Hiba történt az oldal feldolgozása közben. # Predefined zoom values page_scale_width=Oldalszélesség page_scale_fit=Teljes oldal page_scale_auto=Automatikus nagyítás page_scale_actual=Valódi méret # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Hiba loading_error=Hiba történt a PDF betöltésekor. invalid_file_error=Érvénytelen vagy sérült PDF fájl. missing_file_error=Hiányzó PDF fájl. unexpected_response_error=Váratlan kiszolgálóválasz. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} megjegyzés] password_label=Adja meg a jelszót a PDF fájl megnyitásához. password_invalid=Helytelen jelszó. Próbálja újra. password_ok=OK password_cancel=Mégse printing_not_supported=Figyelmeztetés: Ez a böngésző nem teljesen támogatja a nyomtatást. printing_not_ready=Figyelmeztetés: A PDF nincs teljesen betöltve a nyomtatáshoz. web_fonts_disabled=Webes betűkészletek letiltva: nem használhatók a beágyazott PDF betűkészletek. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/hy-AM/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Նախորդ էջը previous_label=Նախորդը next.title=Հաջորդ էջը next_label=Հաջորդը # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Էջ. # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages={{pagesCount}}-ից\u0020 # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}}-ը {{pagesCount}})-ից zoom_out.title=Փոքրացնել zoom_out_label=Փոքրացնել zoom_in.title=Խոշորացնել zoom_in_label=Խոշորացնել zoom.title=Մասշտաբը\u0020 presentation_mode.title=Անցնել Ներկայացման եղանակին presentation_mode_label=Ներկայացման եղանակ open_file.title=Բացել նիշք open_file_label=Բացել print.title=Տպել print_label=Տպել download.title=Բեռնել download_label=Բեռնել bookmark.title=Ընթացիկ տեսքով (պատճենել կամ բացել նոր պատուհանում) bookmark_label=Ընթացիկ տեսքը # Secondary toolbar and context menu tools.title=Գործիքներ tools_label=Գործիքներ first_page.title=Անցնել առաջին էջին first_page.label=Անցնել առաջին էջին first_page_label=Անցնել առաջին էջին last_page.title=Անցնել վերջին էջին last_page.label=Անցնել վերջին էջին last_page_label=Անցնել վերջին էջին page_rotate_cw.title=Պտտել ըստ ժամացույցի սլաքի page_rotate_cw.label=Պտտել ըստ ժամացույցի սլաքի page_rotate_cw_label=Պտտել ըստ ժամացույցի սլաքի page_rotate_ccw.title=Պտտել հակառակ ժամացույցի սլաքի page_rotate_ccw.label=Պտտել հակառակ ժամացույցի սլաքի page_rotate_ccw_label=Պտտել հակառակ ժամացույցի սլաքի cursor_text_select_tool.title=Միացնել գրույթ ընտրելու գործիքը cursor_text_select_tool_label=Գրույթը ընտրելու գործիք cursor_hand_tool.title=Միացնել Ձեռքի գործիքը cursor_hand_tool_label=Ձեռքի գործիք scroll_vertical.title=Օգտագործել ուղղահայաց ոլորում scroll_vertical_label=Ուղղահայաց ոլորում scroll_horizontal.title=Օգտագործել հորիզոնական ոլորում scroll_horizontal_label=Հորիզոնական ոլորում scroll_wrapped.title=Օգտագործել փաթաթված ոլորում scroll_wrapped_label=Փաթաթված ոլորում spread_none.title=Մի միացեք էջի վերածածկերին spread_none_label=Չկա վերածածկեր spread_odd.title=Միացեք էջի վերածածկերին սկսելով՝ կենտ համարակալված էջերով spread_odd_label=Կենտ վերածածկեր spread_even.title=Միացեք էջի վերածածկերին սկսելով՝ զույգ համարակալված էջերով spread_even_label=Զույգ վերածածկեր # Document properties dialog box document_properties.title=Փաստաթղթի հատկությունները… document_properties_label=Փաստաթղթի հատկությունները… document_properties_file_name=Նիշքի անունը. document_properties_file_size=Նիշք չափը. # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} ԿԲ ({{size_b}} բայթ) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} ՄԲ ({{size_b}} բայթ) document_properties_title=Վերնագիր. document_properties_author=Հեղինակ․ document_properties_subject=Վերնագիր. document_properties_keywords=Հիմնաբառ. document_properties_creation_date=Ստեղծելու ամսաթիվը. document_properties_modification_date=Փոփոխելու ամսաթիվը. # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Ստեղծող. document_properties_producer=PDF-ի հեղինակը. document_properties_version=PDF-ի տարբերակը. document_properties_page_count=Էջերի քանակը. document_properties_page_size=Էջի չափը. document_properties_page_size_unit_inches=ում document_properties_page_size_unit_millimeters=մմ document_properties_page_size_orientation_portrait=ուղղաձիգ document_properties_page_size_orientation_landscape=հորիզոնական document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Նամակ document_properties_page_size_name_legal=Օրինական # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Արագ վեբ դիտում․ document_properties_linearized_yes=Այո document_properties_linearized_no=Ոչ document_properties_close=Փակել print_progress_message=Նախապատրաստում է փաստաթուղթը տպելուն... # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Չեղարկել # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Բացել/Փակել Կողային վահանակը toggle_sidebar_notification.title=Փոխարկել Կողային փեղկը (փաստաթուղթը պարունակում է ուրվագիծ/կցորդներ) toggle_sidebar_label=Բացել/Փակել Կողային վահանակը document_outline.title=Ցուցադրել փաստաթղթի ուրվագիծը (կրկնակի սեղմեք՝ միավորները ընդարձակելու/կոծկելու համար) document_outline_label=Փաստաթղթի բովանդակությունը attachments.title=Ցուցադրել կցորդները attachments_label=Կցորդներ thumbs.title=Ցուցադրել Մանրապատկերը thumbs_label=Մանրապատկերը findbar.title=Գտնել փաստաթղթում findbar_label=Որոնում # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Էջ {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Էջը {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Էջի մանրապատկերը {{page}} # Find panel button title and messages find_input.title=Որոնում find_input.placeholder=Գտնել փաստաթղթում... find_previous.title=Գտնել անրահայտության նախորդ հանդիպումը find_previous_label=Նախորդը find_next.title=Գտիր արտահայտության հաջորդ հանդիպումը find_next_label=Հաջորդը find_highlight=Գունանշել բոլորը find_match_case_label=Մեծ(փոքր)ատառ հաշվի առնել find_entire_word_label=Ամբողջ բառերը find_reached_top=Հասել եք փաստաթղթի վերևին, կշարունակվի ներքևից find_reached_bottom=Հասել եք փաստաթղթի վերջին, կշարունակվի վերևից # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ հոգնակի(ընդհանուր) ]} find_match_count[one]={{current}} {{total}}-ի համընկնումից find_match_count[two]={{current}} {{total}}-ի համընկնումներից find_match_count[few]={{current}} {{total}}-ի համընկնումներից find_match_count[many]={{current}} {{total}}-ի համընկնումներից find_match_count[other]={{current}} {{total}}-ի համընկնումներից # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ հոգնակի (սահմանը) ]} find_match_count_limit[zero]=Ավելին քան {{limit}} համընկնումները find_match_count_limit[one]=Ավելին քան {{limit}} համընկնումը find_match_count_limit[two]=Ավելին քան {{limit}} համընկնումներներ find_match_count_limit[few]=Ավելին քան {{limit}} համընկնումներներ find_match_count_limit[many]=Ավելին քան {{limit}} համընկնումներներ find_match_count_limit[other]=Ավելին քան {{limit}} համընկնումներներ find_not_found=Արտահայտությունը չգտնվեց # Error panel labels error_more_info=Ավելի շատ տեղեկություն error_less_info=Քիչ տեղեկություն error_close=Փակել # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (կառուցումը. {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Գրությունը. {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Շեղջ. {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Ֆայլ. {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Տողը. {{line}} rendering_error=Սխալ՝ էջը ստեղծելիս: # Predefined zoom values page_scale_width=Էջի լայնքը page_scale_fit=Ձգել էջը page_scale_auto=Ինքնաշխատ page_scale_actual=Իրական չափը # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Սխալ loading_error=Սխալ՝ PDF ֆայլը բացելիս։ invalid_file_error=Սխալ կամ վնասված PDF ֆայլ: missing_file_error=PDF ֆայլը բացակայում է: unexpected_response_error=Սպասարկիչի անսպասելի պատասխան: # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Ծանոթություն] password_label=Մուտքագրեք PDF-ի գաղտնաբառը: password_invalid=Գաղտնաբառը սխալ է: Կրկին փորձեք: password_ok=Լավ password_cancel=Չեղարկել printing_not_supported=Զգուշացում. Տպելը ամբողջությամբ չի աջակցվում դիտարկիչի կողմից։ printing_not_ready=Զգուշացում. PDF-ը ամբողջությամբ չի բեռնավորվել տպելու համար: web_fonts_disabled=Վեբ-տառատեսակները անջատված են. հնարավոր չէ օգտագործել ներկառուցված PDF տառատեսակները: ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/hye/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Նախորդ էջ previous_label=Նախորդը next.title=Յաջորդ էջ next_label=Յաջորդը # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=էջ # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages={{pagesCount}}-ից\u0020 # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}}-ը {{pagesCount}})-ից zoom_out.title=Փոքրացնել zoom_out_label=Փոքրացնել zoom_in.title=Խոշորացնել zoom_in_label=Խոշորացնել zoom.title=Չափափոխում presentation_mode.title=Անցնել ներկայացման եղանակին presentation_mode_label=Ներկայացման եղանակ open_file.title=Բացել նիշքը open_file_label=Բացել print.title=Տպել print_label=Տպել download.title=Բեռնել download_label=Բեռնել bookmark.title=Ընթացիկ տեսքով (պատճէնել կամ բացել նոր պատուհանում) bookmark_label=Ընթացիկ տեսք # Secondary toolbar and context menu tools.title=Գործիքներ tools_label=Գործիքներ first_page.title=Գնալ դէպի առաջին էջ first_page.label=Գնալ դէպի առաջին էջ first_page_label=Գնալ դէպի առաջին էջ last_page.title=Գնալ դէպի վերջին էջ last_page.label=Գնալ դէպի վերջին էջ last_page_label=Գնալ դէպի վերջին էջ page_rotate_cw.title=Պտտել ժամացոյցի սլաքի ուղղութեամբ page_rotate_cw.label=Պտտել ժամացոյցի սլաքի ուղղութեամբ page_rotate_cw_label=Պտտել ժամացոյցի սլաքի ուղղութեամբ page_rotate_ccw.title=Պտտել ժամացոյցի սլաքի հակառակ ուղղութեամբ page_rotate_ccw.label=Պտտել ժամացոյցի սլաքի հակառակ ուղղութեամբ page_rotate_ccw_label=Պտտել ժամացոյցի սլաքի հակառակ ուղղութեամբ cursor_text_select_tool.title=Միացնել գրոյթ ընտրելու գործիքը cursor_text_select_tool_label=Գրուածք ընտրելու գործիք cursor_hand_tool.title=Միացնել ձեռքի գործիքը cursor_hand_tool_label=Ձեռքի գործիք scroll_vertical.title=Աւգտագործել ուղղահայեաց ոլորում scroll_vertical_label=Ուղղահայեաց ոլորում scroll_horizontal.title=Աւգտագործել հորիզոնական ոլորում scroll_horizontal_label=Հորիզոնական ոլորում scroll_wrapped.title=Աւգտագործել փաթաթուած ոլորում scroll_wrapped_label=Փաթաթուած ոլորում spread_none.title=Մի միացէք էջի կոնտեքստում spread_none_label=Չկայ կոնտեքստ spread_odd.title=Միացէք էջի կոնտեքստին սկսելով՝ կենտ համարակալուած էջերով spread_odd_label=Տարաւրինակ կոնտեքստ spread_even.title=Միացէք էջի կոնտեքստին սկսելով՝ զոյգ համարակալուած էջերով spread_even_label=Հաւասար վերածածկեր # Document properties dialog box document_properties.title=Փաստաթղթի հատկութիւնները… document_properties_label=Փաստաթղթի յատկութիւնները… document_properties_file_name=Նիշքի անունը․ document_properties_file_size=Նիշք չափը. # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} ԿԲ ({{size_b}} բայթ) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} ՄԲ ({{size_b}} բայթ) document_properties_title=Վերնագիր document_properties_author=Հեղինակ․ document_properties_subject=առարկայ document_properties_keywords=Հիմնաբառեր document_properties_creation_date=Ստեղծման ամսաթիւ document_properties_modification_date=Փոփոխութեան ամսաթիւ. # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Ստեղծող document_properties_producer=PDF-ի Արտադրողը. document_properties_version=PDF-ի տարբերակը. document_properties_page_count=Էջերի քանակը. document_properties_page_size=Էջի չափը. document_properties_page_size_unit_inches=ում document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=ուղղաձիգ document_properties_page_size_orientation_landscape=հորիզոնական document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Նամակ document_properties_page_size_name_legal=Աւրինական # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Արագ վեբ դիտում․ document_properties_linearized_yes=Այո document_properties_linearized_no=Ոչ document_properties_close=Փակել print_progress_message=Նախապատրաստում է փաստաթուղթը տպելուն… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Չեղարկել # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Փոխարկել կողային վահանակը toggle_sidebar_notification.title=Փոխարկել կողային վահանակը (փաստաթուղթը պարունակում է ուրուագիծ/կցորդ) toggle_sidebar_notification2.title=Փոխանջատել կողմնասիւնը (փաստաթուղթը պարունակում է ուրուագիծ/կցորդներ/շերտեր) toggle_sidebar_label=Փոխարկել կողային վահանակը document_outline.title=Ցուցադրել փաստաթղթի ուրուագիծը (կրկնակի սեղմէք՝ միաւորները ընդարձակելու/կոծկելու համար) document_outline_label=Փաստաթղթի ուրուագիծ attachments.title=Ցուցադրել կցորդները attachments_label=Կցորդներ layers.title=Ցուցադրել շերտերը (կրկնահպել վերակայելու բոլոր շերտերը սկզբնադիր վիճակի) layers_label=Շերտեր thumbs.title=Ցուցադրել մանրապատկերը thumbs_label=Մանրապատկեր current_outline_item.title=Գտէք ընթացիկ գծագրման տարրը current_outline_item_label=Ընթացիկ գծագրման տարր findbar.title=Գտնել փաստաթղթում findbar_label=Որոնում additional_layers=Լրացուցիչ շերտեր # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Էջ {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Էջը {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Էջի մանրապատկերը {{page}} # Find panel button title and messages find_input.title=Որոնում find_input.placeholder=Գտնել փաստաթղթում… find_previous.title=Գտնել արտայայտութեան նախորդ արտայայտութիւնը find_previous_label=Նախորդը find_next.title=Գտիր արտայայտութեան յաջորդ արտայայտութիւնը find_next_label=Հաջորդը find_highlight=Գունանշել բոլորը find_match_case_label=Հաշուի առնել հանգամանքը find_entire_word_label=Ամբողջ բառերը find_reached_top=Հասել եք փաստաթղթի վերեւին,շարունակել ներքեւից find_reached_bottom=Հասել էք փաստաթղթի վերջին, շարունակել վերեւից # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ հոգնակի(ընդհանուր) ]} find_match_count[one]={{current}} {{total}}-ի համընկնումից find_match_count[two]={{current}} {{total}}-ի համընկնումներից find_match_count[few]={{current}} {{total}}-ի համընկնումներից find_match_count[many]={{current}} {{total}}-ի համընկնումներից find_match_count[other]={{current}} {{total}}-ի համընկնումներից # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ հոգնակի (սահմանը) ]} find_match_count_limit[zero]=Աւելին քան {{limit}} համընկնումները find_match_count_limit[one]=Աւելին քան {{limit}} համընկնումը find_match_count_limit[two]=Աւելին քան {{limit}} համընկնումները find_match_count_limit[few]=Աւելին քան {{limit}} համընկնումները find_match_count_limit[many]=Աւելին քան {{limit}} համընկնումները find_match_count_limit[other]=Աւելին քան {{limit}} համընկնումները find_not_found=Արտայայտութիւնը չգտնուեց # Error panel labels error_more_info=Աւելի շատ տեղեկութիւն error_less_info=Քիչ տեղեկութիւն error_close=Փակել # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (կառուցումը. {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Գրութիւնը. {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Շեղջ. {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=նիշք․ {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Տողը. {{line}} rendering_error=Սխալ է տեղի ունեցել էջի մեկնաբանման ժամանակ # Predefined zoom values page_scale_width=Էջի լայնութիւն page_scale_fit=Հարմարեցնել էջը page_scale_auto=Ինքնաշխատ չափափոխում page_scale_actual=Իրական չափը # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Սխալ loading_error=PDF նիշքը բացելիս սխալ է տեղի ունեցել։ invalid_file_error=Սխալ կամ վնասուած PDF նիշք։ missing_file_error=PDF նիշքը բացակաիւմ է։ unexpected_response_error=Սպասարկիչի անսպասելի պատասխան։ # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Ծանոթութիւն] password_label=Մուտքագրէք գաղտնաբառը այս PDF նիշքը բացելու համար password_invalid=Գաղտնաբառը սխալ է: Կրկին փորձէք: password_ok=Լաւ password_cancel=Չեղարկել printing_not_supported=Զգուշացում. Տպելը ամբողջութեամբ չի աջակցուում զննարկիչի կողմից։ printing_not_ready=Զգուշացում. PDF֊ը ամբողջութեամբ չի բեռնաւորուել տպելու համար։ web_fonts_disabled=Վեբ-տառատեսակները անջատուած են. հնարաւոր չէ աւգտագործել ներկառուցուած PDF տառատեսակները։ ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ia/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Pagina previe previous_label=Previe next.title=Pagina sequente next_label=Sequente # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Pagina # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=de {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} de {{pagesCount}}) zoom_out.title=Distantiar zoom_out_label=Distantiar zoom_in.title=Approximar zoom_in_label=Approximar zoom.title=Zoom presentation_mode.title=Excambiar a modo presentation presentation_mode_label=Modo presentation open_file.title=Aperir le file open_file_label=Aperir print.title=Imprimer print_label=Imprimer download.title=Discargar download_label=Discargar bookmark.title=Vista actual (copiar o aperir in un nove fenestra) bookmark_label=Vista actual # Secondary toolbar and context menu tools.title=Instrumentos tools_label=Instrumentos first_page.title=Ir al prime pagina first_page.label=Ir al prime pagina first_page_label=Ir al prime pagina last_page.title=Ir al prime pagina last_page.label=Ir al prime pagina last_page_label=Ir al prime pagina page_rotate_cw.title=Rotar in senso horari page_rotate_cw.label=Rotar in senso horari page_rotate_cw_label=Rotar in senso horari page_rotate_ccw.title=Rotar in senso antihorari page_rotate_ccw.label=Rotar in senso antihorari page_rotate_ccw_label=Rotar in senso antihorari cursor_text_select_tool.title=Activar le instrumento de selection de texto cursor_text_select_tool_label=Instrumento de selection de texto cursor_hand_tool.title=Activar le instrumento mano cursor_hand_tool_label=Instrumento mano scroll_vertical.title=Usar rolamento vertical scroll_vertical_label=Rolamento vertical scroll_horizontal.title=Usar rolamento horizontal scroll_horizontal_label=Rolamento horizontal scroll_wrapped.title=Usar rolamento incapsulate scroll_wrapped_label=Rolamento incapsulate spread_none.title=Non junger paginas dual spread_none_label=Sin paginas dual spread_odd.title=Junger paginas dual a partir de paginas con numeros impar spread_odd_label=Paginas dual impar spread_even.title=Junger paginas dual a partir de paginas con numeros par spread_even_label=Paginas dual par # Document properties dialog box document_properties.title=Proprietates del documento… document_properties_label=Proprietates del documento… document_properties_file_name=Nomine del file: document_properties_file_size=Dimension de file: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Titulo: document_properties_author=Autor: document_properties_subject=Subjecto: document_properties_keywords=Parolas clave: document_properties_creation_date=Data de creation: document_properties_modification_date=Data de modification: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Creator: document_properties_producer=Productor PDF: document_properties_version=Version PDF: document_properties_page_count=Numero de paginas: document_properties_page_size=Dimension del pagina: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=vertical document_properties_page_size_orientation_landscape=horizontal document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Littera document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Vista web rapide: document_properties_linearized_yes=Si document_properties_linearized_no=No document_properties_close=Clauder print_progress_message=Preparation del documento pro le impression… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Cancellar # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Monstrar/celar le barra lateral toggle_sidebar_notification.title=Monstrar/celar le barra lateral (le documento contine structura/attachamentos) toggle_sidebar_notification2.title=Monstrar/celar le barra lateral (le documento contine structura/attachamentos/stratos) toggle_sidebar_label=Monstrar/celar le barra lateral document_outline.title=Monstrar le schema del documento (clic duple pro expander/contraher tote le elementos) document_outline_label=Schema del documento attachments.title=Monstrar le annexos attachments_label=Annexos layers.title=Monstrar stratos (clicca duple pro remontar tote le stratos al stato predefinite) layers_label=Stratos thumbs.title=Monstrar le vignettes thumbs_label=Vignettes current_outline_item.title=Trovar le elemento de structura actual current_outline_item_label=Elemento de structura actual findbar.title=Cercar in le documento findbar_label=Cercar additional_layers=Altere stratos # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Pagina {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Pagina {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Vignette del pagina {{page}} # Find panel button title and messages find_input.title=Cercar find_input.placeholder=Cercar in le documento… find_previous.title=Trovar le previe occurrentia del phrase find_previous_label=Previe find_next.title=Trovar le successive occurrentia del phrase find_next_label=Sequente find_highlight=Evidentiar toto find_match_case_label=Distinguer majusculas/minusculas find_entire_word_label=Parolas integre find_reached_top=Initio del documento attingite, continuation ab fin find_reached_bottom=Fin del documento attingite, continuation ab initio # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} de {{total}} concordantia find_match_count[two]={{current}} de {{total}} concordantias find_match_count[few]={{current}} de {{total}} concordantias find_match_count[many]={{current}} de {{total}} concordantias find_match_count[other]={{current}} de {{total}} concordantias # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Plus de {{limit}} concordantias find_match_count_limit[one]=Plus de {{limit}} concordantia find_match_count_limit[two]=Plus de {{limit}} concordantias find_match_count_limit[few]=Plus de {{limit}} concordantias find_match_count_limit[many]=Plus de {{limit}} correspondentias find_match_count_limit[other]=Plus de {{limit}} concordantias find_not_found=Phrase non trovate # Error panel labels error_more_info=Plus de informationes error_less_info=Minus de informationes error_close=Clauder # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Message: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Pila: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=File: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Linea: {{line}} rendering_error=Un error occurreva durante que on processava le pagina. # Predefined zoom values page_scale_width=Plen largor del pagina page_scale_fit=Pagina integre page_scale_auto=Zoom automatic page_scale_actual=Dimension actual # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Error loading_error=Un error occurreva durante que on cargava le file PDF. invalid_file_error=File PDF corrumpite o non valide. missing_file_error=File PDF mancante. unexpected_response_error=Responsa del servitor inexpectate. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Annotation] password_label=Insere le contrasigno pro aperir iste file PDF. password_invalid=Contrasigno invalide. Per favor retenta. password_ok=OK password_cancel=Cancellar printing_not_supported=Attention : le impression non es totalmente supportate per ce navigator. printing_not_ready=Attention: le file PDF non es integremente cargate pro lo poter imprimer. web_fonts_disabled=Le typos de litteras web es disactivate: impossibile usar le typos de litteras PDF incorporate. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/id/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Laman Sebelumnya previous_label=Sebelumnya next.title=Laman Selanjutnya next_label=Selanjutnya # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Halaman # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=dari {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} dari {{pagesCount}}) zoom_out.title=Perkecil zoom_out_label=Perkecil zoom_in.title=Perbesar zoom_in_label=Perbesar zoom.title=Perbesaran presentation_mode.title=Ganti ke Mode Presentasi presentation_mode_label=Mode Presentasi open_file.title=Buka Berkas open_file_label=Buka print.title=Cetak print_label=Cetak download.title=Unduh download_label=Unduh bookmark.title=Tampilan Sekarang (salin atau buka di jendela baru) bookmark_label=Tampilan Sekarang # Secondary toolbar and context menu tools.title=Alat tools_label=Alat first_page.title=Buka Halaman Pertama first_page.label=Ke Halaman Pertama first_page_label=Buka Halaman Pertama last_page.title=Buka Halaman Terakhir last_page.label=Ke Halaman Terakhir last_page_label=Buka Halaman Terakhir page_rotate_cw.title=Putar Searah Jarum Jam page_rotate_cw.label=Putar Searah Jarum Jam page_rotate_cw_label=Putar Searah Jarum Jam page_rotate_ccw.title=Putar Berlawanan Arah Jarum Jam page_rotate_ccw.label=Putar Berlawanan Arah Jarum Jam page_rotate_ccw_label=Putar Berlawanan Arah Jarum Jam cursor_text_select_tool.title=Aktifkan Alat Seleksi Teks cursor_text_select_tool_label=Alat Seleksi Teks cursor_hand_tool.title=Aktifkan Alat Tangan cursor_hand_tool_label=Alat Tangan scroll_vertical.title=Gunakan Penggeseran Vertikal scroll_vertical_label=Penggeseran Vertikal scroll_horizontal.title=Gunakan Penggeseran Horizontal scroll_horizontal_label=Penggeseran Horizontal scroll_wrapped.title=Gunakan Penggeseran Terapit scroll_wrapped_label=Penggeseran Terapit spread_none.title=Jangan gabungkan lembar halaman spread_none_label=Tidak Ada Lembaran spread_odd.title=Gabungkan lembar lamanan mulai dengan halaman ganjil spread_odd_label=Lembaran Ganjil spread_even.title=Gabungkan lembar halaman dimulai dengan halaman genap spread_even_label=Lembaran Genap # Document properties dialog box document_properties.title=Properti Dokumen… document_properties_label=Properti Dokumen… document_properties_file_name=Nama berkas: document_properties_file_size=Ukuran berkas: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} byte) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} byte) document_properties_title=Judul: document_properties_author=Penyusun: document_properties_subject=Subjek: document_properties_keywords=Kata Kunci: document_properties_creation_date=Tanggal Dibuat: document_properties_modification_date=Tanggal Dimodifikasi: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Pembuat: document_properties_producer=Pemroduksi PDF: document_properties_version=Versi PDF: document_properties_page_count=Jumlah Halaman: document_properties_page_size=Ukuran Laman: document_properties_page_size_unit_inches=inci document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=tegak document_properties_page_size_orientation_landscape=mendatar document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Tampilan Web Kilat: document_properties_linearized_yes=Ya document_properties_linearized_no=Tidak document_properties_close=Tutup print_progress_message=Menyiapkan dokumen untuk pencetakan… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Batalkan # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Aktif/Nonaktifkan Bilah Samping toggle_sidebar_notification.title=Aktif/Nonaktifkan Bilah Samping (dokumen berisi kerangka/lampiran) toggle_sidebar_notification2.title=Aktif/Nonaktifkan Bilah Samping (dokumen berisi kerangka/lampiran/lapisan) toggle_sidebar_label=Aktif/Nonaktifkan Bilah Samping document_outline.title=Tampilkan Kerangka Dokumen (klik ganda untuk membentangkan/menciutkan semua item) document_outline_label=Kerangka Dokumen attachments.title=Tampilkan Lampiran attachments_label=Lampiran layers.title=Tampilkan Lapisan (klik ganda untuk mengatur ulang semua lapisan ke keadaan baku) layers_label=Lapisan thumbs.title=Tampilkan Miniatur thumbs_label=Miniatur findbar.title=Temukan di Dokumen findbar_label=Temukan additional_layers=Lapisan Tambahan # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Laman {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Laman {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Miniatur Laman {{page}} # Find panel button title and messages find_input.title=Temukan find_input.placeholder=Temukan di dokumen… find_previous.title=Temukan kata sebelumnya find_previous_label=Sebelumnya find_next.title=Temukan lebih lanjut find_next_label=Selanjutnya find_highlight=Sorot semuanya find_match_case_label=Cocokkan BESAR/kecil find_entire_word_label=Seluruh teks find_reached_top=Sampai di awal dokumen, dilanjutkan dari bawah find_reached_bottom=Sampai di akhir dokumen, dilanjutkan dari atas # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} dari {{total}} hasil find_match_count[two]={{current}} dari {{total}} hasil find_match_count[few]={{current}} dari {{total}} hasil find_match_count[many]={{current}} dari {{total}} hasil find_match_count[other]={{current}} dari {{total}} hasil # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Ditemukan lebih dari {{limit}} find_match_count_limit[one]=Ditemukan lebih dari {{limit}} find_match_count_limit[two]=Ditemukan lebih dari {{limit}} find_match_count_limit[few]=Ditemukan lebih dari {{limit}} find_match_count_limit[many]=Ditemukan lebih dari {{limit}} find_match_count_limit[other]=Ditemukan lebih dari {{limit}} find_not_found=Frasa tidak ditemukan # Error panel labels error_more_info=Lebih Banyak Informasi error_less_info=Lebih Sedikit Informasi error_close=Tutup # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Pesan: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stack: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Berkas: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Baris: {{line}} rendering_error=Galat terjadi saat merender laman. # Predefined zoom values page_scale_width=Lebar Laman page_scale_fit=Muat Laman page_scale_auto=Perbesaran Otomatis page_scale_actual=Ukuran Asli # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Galat loading_error=Galat terjadi saat memuat PDF. invalid_file_error=Berkas PDF tidak valid atau rusak. missing_file_error=Berkas PDF tidak ada. unexpected_response_error=Balasan server yang tidak diharapkan. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Anotasi {{type}}] password_label=Masukkan sandi untuk membuka berkas PDF ini. password_invalid=Sandi tidak valid. Silakan coba lagi. password_ok=Oke password_cancel=Batal printing_not_supported=Peringatan: Pencetakan tidak didukung secara lengkap pada peramban ini. printing_not_ready=Peringatan: Berkas PDF masih belum dimuat secara lengkap untuk dapat dicetak. web_fonts_disabled=Font web dinonaktifkan: tidak dapat menggunakan font PDF yang tersemat. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/is/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Fyrri síða previous_label=Fyrri next.title=Næsta síða next_label=Næsti # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Síða # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=af {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} af {{pagesCount}}) zoom_out.title=Minnka zoom_out_label=Minnka zoom_in.title=Stækka zoom_in_label=Stækka zoom.title=Aðdráttur presentation_mode.title=Skipta yfir á kynningarham presentation_mode_label=Kynningarhamur open_file.title=Opna skrá open_file_label=Opna print.title=Prenta print_label=Prenta download.title=Hala niður download_label=Hala niður bookmark.title=Núverandi sýn (afritaðu eða opnaðu í nýjum glugga) bookmark_label=Núverandi sýn # Secondary toolbar and context menu tools.title=Verkfæri tools_label=Verkfæri first_page.title=Fara á fyrstu síðu first_page.label=Fara á fyrstu síðu first_page_label=Fara á fyrstu síðu last_page.title=Fara á síðustu síðu last_page.label=Fara á síðustu síðu last_page_label=Fara á síðustu síðu page_rotate_cw.title=Snúa réttsælis page_rotate_cw.label=Snúa réttsælis page_rotate_cw_label=Snúa réttsælis page_rotate_ccw.title=Snúa rangsælis page_rotate_ccw.label=Snúa rangsælis page_rotate_ccw_label=Snúa rangsælis cursor_text_select_tool.title=Virkja textavalsáhald cursor_text_select_tool_label=Textavalsáhald cursor_hand_tool.title=Virkja handarverkfæri cursor_hand_tool_label=Handarverkfæri scroll_vertical.title=Nota lóðrétt skrun scroll_vertical_label=Lóðrétt skrun scroll_horizontal.title=Nota lárétt skrun scroll_horizontal_label=Lárétt skrun spread_none.title=Ekki taka þátt í dreifingu síðna spread_none_label=Engin dreifing spread_odd.title=Taka þátt í dreifingu síðna með oddatölum spread_odd_label=Oddatöludreifing spread_even.title=Taktu þátt í dreifingu síðna með jöfnuntölum spread_even_label=Jafnatöludreifing # Document properties dialog box document_properties.title=Eiginleikar skjals… document_properties_label=Eiginleikar skjals… document_properties_file_name=Skráarnafn: document_properties_file_size=Skrárstærð: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Titill: document_properties_author=Hönnuður: document_properties_subject=Efni: document_properties_keywords=Stikkorð: document_properties_creation_date=Búið til: document_properties_modification_date=Dags breytingar: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Höfundur: document_properties_producer=PDF framleiðandi: document_properties_version=PDF útgáfa: document_properties_page_count=Blaðsíðufjöldi: document_properties_page_size=Stærð síðu: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=skammsnið document_properties_page_size_orientation_landscape=langsnið document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized_yes=Já document_properties_linearized_no=Nei document_properties_close=Loka print_progress_message=Undirbý skjal fyrir prentun… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Hætta við # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Víxla hliðslá toggle_sidebar_notification.title=Víxla hliðarslá (skjal inniheldur yfirlit/viðhengi) toggle_sidebar_label=Víxla hliðslá document_outline.title=Sýna yfirlit skjals (tvísmelltu til að opna/loka öllum hlutum) document_outline_label=Efnisskipan skjals attachments.title=Sýna viðhengi attachments_label=Viðhengi thumbs.title=Sýna smámyndir thumbs_label=Smámyndir findbar.title=Leita í skjali findbar_label=Leita # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Síða {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Smámynd af síðu {{page}} # Find panel button title and messages find_input.title=Leita find_input.placeholder=Leita í skjali… find_previous.title=Leita að fyrra tilfelli þessara orða find_previous_label=Fyrri find_next.title=Leita að næsta tilfelli þessara orða find_next_label=Næsti find_highlight=Lita allt find_match_case_label=Passa við stafstöðu find_entire_word_label=Heil orð find_reached_top=Náði efst í skjal, held áfram neðst find_reached_bottom=Náði enda skjals, held áfram efst # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} af {{total}} niðurstöðu find_match_count[two]={{current}} af {{total}} niðurstöðum find_match_count[few]={{current}} af {{total}} niðurstöðum find_match_count[many]={{current}} af {{total}} niðurstöðum find_match_count[other]={{current}} af {{total}} niðurstöðum # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Fleiri en {{limit}} niðurstöður find_match_count_limit[one]=Fleiri en {{limit}} niðurstaða find_match_count_limit[two]=Fleiri en {{limit}} niðurstöður find_match_count_limit[few]=Fleiri en {{limit}} niðurstöður find_match_count_limit[many]=Fleiri en {{limit}} niðurstöður find_match_count_limit[other]=Fleiri en {{limit}} niðurstöður find_not_found=Fann ekki orðið # Error panel labels error_more_info=Meiri upplýsingar error_less_info=Minni upplýsingar error_close=Loka # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Skilaboð: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stafli: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Skrá: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Lína: {{line}} rendering_error=Upp kom villa við að birta síðuna. # Predefined zoom values page_scale_width=Síðubreidd page_scale_fit=Passa á síðu page_scale_auto=Sjálfvirkur aðdráttur page_scale_actual=Raunstærð # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Villa loading_error=Villa kom upp við að hlaða inn PDF. invalid_file_error=Ógild eða skemmd PDF skrá. missing_file_error=Vantar PDF skrá. unexpected_response_error=Óvænt svar frá netþjóni. # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Skýring] password_label=Sláðu inn lykilorð til að opna þessa PDF skrá. password_invalid=Ógilt lykilorð. Reyndu aftur. password_ok=Í lagi password_cancel=Hætta við printing_not_supported=Aðvörun: Prentun er ekki með fyllilegan stuðning á þessum vafra. printing_not_ready=Aðvörun: Ekki er búið að hlaða inn allri PDF skránni fyrir prentun. web_fonts_disabled=Vef leturgerðir eru óvirkar: get ekki notað innbyggðar PDF leturgerðir. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/it/viewer.properties ================================================ # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. previous.title = Pagina precedente previous_label = Precedente next.title = Pagina successiva next_label = Successiva page.title = Pagina of_pages = di {{pagesCount}} page_of_pages = ({{pageNumber}} di {{pagesCount}}) zoom_out.title = Riduci zoom zoom_out_label = Riduci zoom zoom_in.title = Aumenta zoom zoom_in_label = Aumenta zoom zoom.title = Zoom presentation_mode.title = Passa alla modalità presentazione presentation_mode_label = Modalità presentazione open_file.title = Apri file open_file_label = Apri print.title = Stampa print_label = Stampa download.title = Scarica questo documento download_label = Download bookmark.title = Visualizzazione corrente (copia o apri in una nuova finestra) bookmark_label = Visualizzazione corrente tools.title = Strumenti tools_label = Strumenti first_page.title = Vai alla prima pagina first_page.label = Vai alla prima pagina first_page_label = Vai alla prima pagina last_page.title = Vai all’ultima pagina last_page.label = Vai all’ultima pagina last_page_label = Vai all’ultima pagina page_rotate_cw.title = Ruota in senso orario page_rotate_cw.label = Ruota in senso orario page_rotate_cw_label = Ruota in senso orario page_rotate_ccw.title = Ruota in senso antiorario page_rotate_ccw.label = Ruota in senso antiorario page_rotate_ccw_label = Ruota in senso antiorario cursor_text_select_tool.title = Attiva strumento di selezione testo cursor_text_select_tool_label = Strumento di selezione testo cursor_hand_tool.title = Attiva strumento mano cursor_hand_tool_label = Strumento mano scroll_vertical.title = Scorri le pagine in verticale scroll_vertical_label = Scorrimento verticale scroll_horizontal.title = Scorri le pagine in orizzontale scroll_horizontal_label = Scorrimento orizzontale scroll_wrapped.title = Scorri le pagine in verticale, disponendole da sinistra a destra e andando a capo automaticamente scroll_wrapped_label = Scorrimento con a capo automatico spread_none.title = Non raggruppare pagine spread_none_label = Nessun raggruppamento spread_odd.title = Crea gruppi di pagine che iniziano con numeri di pagina dispari spread_odd_label = Raggruppamento dispari spread_even.title = Crea gruppi di pagine che iniziano con numeri di pagina pari spread_even_label = Raggruppamento pari document_properties.title = Proprietà del documento… document_properties_label = Proprietà del documento… document_properties_file_name = Nome file: document_properties_file_size = Dimensione file: document_properties_kb = {{size_kb}} kB ({{size_b}} byte) document_properties_mb = {{size_mb}} MB ({{size_b}} byte) document_properties_title = Titolo: document_properties_author = Autore: document_properties_subject = Oggetto: document_properties_keywords = Parole chiave: document_properties_creation_date = Data creazione: document_properties_modification_date = Data modifica: document_properties_date_string = {{date}}, {{time}} document_properties_creator = Autore originale: document_properties_producer = Produttore PDF: document_properties_version = Versione PDF: document_properties_page_count = Conteggio pagine: document_properties_page_size = Dimensioni pagina: document_properties_page_size_unit_inches = in document_properties_page_size_unit_millimeters = mm document_properties_page_size_orientation_portrait = verticale document_properties_page_size_orientation_landscape = orizzontale document_properties_page_size_name_a3 = A3 document_properties_page_size_name_a4 = A4 document_properties_page_size_name_letter = Lettera document_properties_page_size_name_legal = Legale document_properties_page_size_dimension_string = {{width}} × {{height}} {{unit}} ({{orientation}}) document_properties_page_size_dimension_name_string = {{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) document_properties_linearized = Visualizzazione web veloce: document_properties_linearized_yes = Sì document_properties_linearized_no = No document_properties_close = Chiudi print_progress_message = Preparazione documento per la stampa… print_progress_percent = {{progress}}% print_progress_close = Annulla toggle_sidebar.title = Attiva/disattiva barra laterale toggle_sidebar_notification.title = Attiva/disattiva barra laterale (il documento contiene struttura/allegati) toggle_sidebar_notification2.title = Attiva/disattiva barra laterale (il documento contiene struttura/allegati/livelli) toggle_sidebar_label = Attiva/disattiva barra laterale document_outline.title = Visualizza la struttura del documento (doppio clic per visualizzare/comprimere tutti gli elementi) document_outline_label = Struttura documento attachments.title = Visualizza allegati attachments_label = Allegati layers.title = Visualizza livelli (doppio clic per ripristinare tutti i livelli allo stato predefinito) layers_label = Livelli thumbs.title = Mostra le miniature thumbs_label = Miniature current_outline_item.title = Trova elemento struttura corrente current_outline_item_label = Elemento struttura corrente findbar.title = Trova nel documento findbar_label = Trova additional_layers = Livelli aggiuntivi page_canvas = Pagina {{page}} thumb_page_title = Pagina {{page}} thumb_page_canvas = Miniatura della pagina {{page}} find_input.title = Trova find_input.placeholder = Trova nel documento… find_previous.title = Trova l’occorrenza precedente del testo da cercare find_previous_label = Precedente find_next.title = Trova l’occorrenza successiva del testo da cercare find_next_label = Successivo find_highlight = Evidenzia find_match_case_label = Maiuscole/minuscole find_entire_word_label = Parole intere find_reached_top = Raggiunto l’inizio della pagina, continua dalla fine find_reached_bottom = Raggiunta la fine della pagina, continua dall’inizio find_match_count = {[ plural(total) ]} find_match_count[one] = {{current}} di {{total}} corrispondenza find_match_count[two] = {{current}} di {{total}} corrispondenze find_match_count[few] = {{current}} di {{total}} corrispondenze find_match_count[many] = {{current}} di {{total}} corrispondenze find_match_count[other] = {{current}} di {{total}} corrispondenze find_match_count_limit = {[ plural(limit) ]} find_match_count_limit[zero] = Più di {{limit}} corrispondenze find_match_count_limit[one] = Più di {{limit}} corrispondenza find_match_count_limit[two] = Più di {{limit}} corrispondenze find_match_count_limit[few] = Più di {{limit}} corrispondenze find_match_count_limit[many] = Più di {{limit}} corrispondenze find_match_count_limit[other] = Più di {{limit}} corrispondenze find_not_found = Testo non trovato error_more_info = Ulteriori informazioni error_less_info = Nascondi dettagli error_close = Chiudi error_version_info = PDF.js v{{version}} (build: {{build}}) error_message = Messaggio: {{message}} error_stack = Stack: {{stack}} error_file = File: {{file}} error_line = Riga: {{line}} rendering_error = Si è verificato un errore durante il rendering della pagina. page_scale_width = Larghezza pagina page_scale_fit = Adatta a una pagina page_scale_auto = Zoom automatico page_scale_actual = Dimensioni effettive page_scale_percent = {{scale}}% loading_error_indicator = Errore loading_error = Si è verificato un errore durante il caricamento del PDF. invalid_file_error = File PDF non valido o danneggiato. missing_file_error = File PDF non disponibile. unexpected_response_error = Risposta imprevista del server annotation_date_string = {{date}}, {{time}} text_annotation_type.alt = [Annotazione: {{type}}] password_label = Inserire la password per aprire questo file PDF. password_invalid = Password non corretta. Riprovare. password_ok = OK password_cancel = Annulla printing_not_supported = Attenzione: la stampa non è completamente supportata da questo browser. printing_not_ready = Attenzione: il PDF non è ancora stato caricato completamente per la stampa. web_fonts_disabled = I web font risultano disattivati: impossibile utilizzare i caratteri incorporati nel PDF. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ja/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=前のページへ戻ります previous_label=前へ next.title=次のページへ進みます next_label=次へ # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=ページ # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=/ {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} / {{pagesCount}}) zoom_out.title=表示を縮小します zoom_out_label=縮小 zoom_in.title=表示を拡大します zoom_in_label=拡大 zoom.title=拡大/縮小 presentation_mode.title=プレゼンテーションモードに切り替えます presentation_mode_label=プレゼンテーションモード open_file.title=ファイルを開きます open_file_label=開く print.title=印刷します print_label=印刷 download.title=ダウンロードします download_label=ダウンロード bookmark.title=現在のビューの URL です (コピーまたは新しいウィンドウに開く) bookmark_label=現在のビュー # Secondary toolbar and context menu tools.title=ツール tools_label=ツール first_page.title=最初のページへ移動します first_page.label=最初のページへ移動 first_page_label=最初のページへ移動 last_page.title=最後のページへ移動します last_page.label=最後のページへ移動 last_page_label=最後のページへ移動 page_rotate_cw.title=ページを右へ回転します page_rotate_cw.label=右回転 page_rotate_cw_label=右回転 page_rotate_ccw.title=ページを左へ回転します page_rotate_ccw.label=左回転 page_rotate_ccw_label=左回転 cursor_text_select_tool.title=テキスト選択ツールを有効にする cursor_text_select_tool_label=テキスト選択ツール cursor_hand_tool.title=手のひらツールを有効にする cursor_hand_tool_label=手のひらツール scroll_vertical.title=縦スクロールにする scroll_vertical_label=縦スクロール scroll_horizontal.title=横スクロールにする scroll_horizontal_label=横スクロール scroll_wrapped.title=折り返しスクロールにする scroll_wrapped_label=折り返しスクロール spread_none.title=見開きにしない spread_none_label=見開きにしない spread_odd.title=奇数ページ開始で見開きにする spread_odd_label=奇数ページ見開き spread_even.title=偶数ページ開始で見開きにする spread_even_label=偶数ページ見開き # Document properties dialog box document_properties.title=文書のプロパティ... document_properties_label=文書のプロパティ... document_properties_file_name=ファイル名: document_properties_file_size=ファイルサイズ: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=タイトル: document_properties_author=作成者: document_properties_subject=件名: document_properties_keywords=キーワード: document_properties_creation_date=作成日: document_properties_modification_date=更新日: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=アプリケーション: document_properties_producer=PDF 作成: document_properties_version=PDF のバージョン: document_properties_page_count=ページ数: document_properties_page_size=ページサイズ: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=縦 document_properties_page_size_orientation_landscape=横 document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=レター document_properties_page_size_name_legal=リーガル # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=ウェブ表示用に最適化: document_properties_linearized_yes=はい document_properties_linearized_no=いいえ document_properties_close=閉じる print_progress_message=文書の印刷を準備しています... # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=キャンセル # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=サイドバー表示を切り替えます toggle_sidebar_notification.title=サイドバー表示を切り替えます (文書に含まれるアウトライン / 添付) toggle_sidebar_notification2.title=サイドバー表示を切り替えます (文書に含まれるアウトライン / 添付 / レイヤー) toggle_sidebar_label=サイドバーの切り替え document_outline.title=文書の目次を表示します (ダブルクリックで項目を開閉します) document_outline_label=文書の目次 attachments.title=添付ファイルを表示します attachments_label=添付ファイル layers.title=レイヤーを表示します (ダブルクリックですべてのレイヤーが初期状態に戻ります) layers_label=レイヤー thumbs.title=縮小版を表示します thumbs_label=縮小版 current_outline_item.title=現在のアウトライン項目を検索 current_outline_item_label=現在のアウトライン項目 findbar.title=文書内を検索します findbar_label=検索 additional_layers=追加レイヤー # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas={{page}} ページ # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title={{page}} ページ # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas={{page}} ページの縮小版 # Find panel button title and messages find_input.title=検索 find_input.placeholder=文書内を検索... find_previous.title=現在より前の位置で指定文字列が現れる部分を検索します find_previous_label=前へ find_next.title=現在より後の位置で指定文字列が現れる部分を検索します find_next_label=次へ find_highlight=すべて強調表示 find_match_case_label=大文字/小文字を区別 find_entire_word_label=単語一致 find_reached_top=文書先頭に到達したので末尾から続けて検索します find_reached_bottom=文書末尾に到達したので先頭から続けて検索します # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{total}} 件中 {{current}} 件目 find_match_count[two]={{total}} 件中 {{current}} 件目 find_match_count[few]={{total}} 件中 {{current}} 件目 find_match_count[many]={{total}} 件中 {{current}} 件目 find_match_count[other]={{total}} 件中 {{current}} 件目 # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]={{limit}} 件以上一致 find_match_count_limit[one]={{limit}} 件以上一致 find_match_count_limit[two]={{limit}} 件以上一致 find_match_count_limit[few]={{limit}} 件以上一致 find_match_count_limit[many]={{limit}} 件以上一致 find_match_count_limit[other]={{limit}} 件以上一致 find_not_found=見つかりませんでした # Error panel labels error_more_info=詳細情報 error_less_info=詳細情報を隠す error_close=閉じる # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (ビルド: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=メッセージ: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=スタック: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=ファイル: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=行: {{line}} rendering_error=ページのレンダリング中にエラーが発生しました。 # Predefined zoom values page_scale_width=幅に合わせる page_scale_fit=ページのサイズに合わせる page_scale_auto=自動ズーム page_scale_actual=実際のサイズ # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=エラー loading_error=PDF の読み込み中にエラーが発生しました。 invalid_file_error=無効または破損した PDF ファイル。 missing_file_error=PDF ファイルが見つかりません。 unexpected_response_error=サーバーから予期せぬ応答がありました。 # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} 注釈] password_label=この PDF ファイルを開くためのパスワードを入力してください。 password_invalid=無効なパスワードです。もう一度やり直してください。 password_ok=OK password_cancel=キャンセル printing_not_supported=警告: このブラウザーでは印刷が完全にサポートされていません。 printing_not_ready=警告: PDF を印刷するための読み込みが終了していません。 web_fonts_disabled=ウェブフォントが無効になっています: 埋め込まれた PDF のフォントを使用できません。 ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ka/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=წინა გვერდი previous_label=წინა next.title=შემდეგი გვერდი next_label=შემდეგი # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=გვერდი # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages={{pagesCount}}-დან # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} {{pagesCount}}-დან) zoom_out.title=ზომის შემცირება zoom_out_label=დაშორება zoom_in.title=ზომის გაზრდა zoom_in_label=მოახლოება zoom.title=ზომა presentation_mode.title=ჩვენების რეჟიმზე გადართვა presentation_mode_label=ჩვენების რეჟიმი open_file.title=ფაილის გახსნა open_file_label=გახსნა print.title=ამობეჭდვა print_label=ამობეჭდვა download.title=ჩამოტვირთვა download_label=ჩამოტვირთვა bookmark.title=მიმდინარე ხედი (ასლის აღება ან გახსნა ახალ ფანჯარაში) bookmark_label=მიმდინარე ხედი # Secondary toolbar and context menu tools.title=ხელსაწყოები tools_label=ხელსაწყოები first_page.title=პირველ გვერდზე გადასვლა first_page.label=პირველ გვერდზე გადასვლა first_page_label=პირველ გვერდზე გადასვლა last_page.title=ბოლო გვერდზე გადასვლა last_page.label=ბოლო გვერდზე გადასვლა last_page_label=ბოლო გვერდზე გადასვლა page_rotate_cw.title=საათის ისრის მიმართულებით შებრუნება page_rotate_cw.label=მარჯვნივ გადაბრუნება page_rotate_cw_label=მარჯვნივ გადაბრუნება page_rotate_ccw.title=საათის ისრის საპირისპიროდ შებრუნება page_rotate_ccw.label=მარცხნივ გადაბრუნება page_rotate_ccw_label=მარცხნივ გადაბრუნება cursor_text_select_tool.title=მოსანიშნი მაჩვენებლის გამოყენება cursor_text_select_tool_label=მოსანიშნი მაჩვენებელი cursor_hand_tool.title=გადასაადგილებელი მაჩვენებლის გამოყენება cursor_hand_tool_label=გადასაადგილებელი scroll_vertical.title=გვერდების შვეულად ჩვენება scroll_vertical_label=შვეული გადაადგილება scroll_horizontal.title=გვერდების თარაზულად ჩვენება scroll_horizontal_label=განივი გადაადგილება scroll_wrapped.title=გვერდების ცხრილურად ჩვენება scroll_wrapped_label=ცხრილური გადაადგილება spread_none.title=ორ გვერდზე გაშლის გარეშე spread_none_label=ცალგვერდიანი ჩვენება spread_odd.title=ორ გვერდზე გაშლა, კენტი გვერდიდან დაწყებული spread_odd_label=ორ გვერდზე კენტიდან spread_even.title=ორ გვერდზე გაშლა, ლუწი გვერდიდან დაწყებული spread_even_label=ორ გვერდზე ლუწიდან # Document properties dialog box document_properties.title=დოკუმენტის შესახებ… document_properties_label=დოკუმენტის შესახებ… document_properties_file_name=ფაილის სახელი: document_properties_file_size=ფაილის მოცულობა: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} კბ ({{size_b}} ბაიტი) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} მბ ({{size_b}} ბაიტი) document_properties_title=სათაური: document_properties_author=შემქმნელი: document_properties_subject=თემა: document_properties_keywords=საკვანძო სიტყვები: document_properties_creation_date=შექმნის დრო: document_properties_modification_date=ჩასწორების დრო: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=გამომშვები: document_properties_producer=PDF-გამომშვები: document_properties_version=PDF-ვერსია: document_properties_page_count=გვერდები: document_properties_page_size=გვერდის ზომა: document_properties_page_size_unit_inches=დუიმი document_properties_page_size_unit_millimeters=მმ document_properties_page_size_orientation_portrait=შვეულად document_properties_page_size_orientation_landscape=თარაზულად document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=მსუბუქი ვებჩვენება: document_properties_linearized_yes=დიახ document_properties_linearized_no=არა document_properties_close=დახურვა print_progress_message=დოკუმენტი მზადდება ამოსაბეჭდად… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=გაუქმება # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=გვერდითა ზოლის გამოჩენა/დამალვა toggle_sidebar_notification.title=გვერდითა ზოლის გამოჩენა (შეიცავს სარჩევს/დანართს) toggle_sidebar_notification2.title=გვერდითი ზოლის გამოჩენა (შეიცავს სარჩევს/დანართს/ფენებს) toggle_sidebar_label=გვერდითა ზოლის გამოჩენა/დამალვა document_outline.title=დოკუმენტის სარჩევის ჩვენება (ორმაგი წკაპით თითოეულის ჩამოშლა/აკეცვა) document_outline_label=დოკუმენტის სარჩევი attachments.title=დანართების ჩვენება attachments_label=დანართები layers.title=ფენების გამოჩენა (ორმაგი წკაპით ყველა ფენის ნაგულისხმევზე დაბრუნება) layers_label=ფენები thumbs.title=შეთვალიერება thumbs_label=ესკიზები current_outline_item.title=მიმდინარე გვერდის მონახვა სარჩევში current_outline_item_label=მიმდინარე გვერდი სარჩევში findbar.title=პოვნა დოკუმენტში findbar_label=ძიება additional_layers=დამატებითი ფენები # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=გვერდი {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=გვერდი {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=გვერდის შეთვალიერება {{page}} # Find panel button title and messages find_input.title=ძიება find_input.placeholder=პოვნა დოკუმენტში… find_previous.title=ფრაზის წინა კონტექსტის პოვნა find_previous_label=წინა find_next.title=ფრაზის შემდეგი კონტექსტის პოვნა find_next_label=შემდეგი find_highlight=ყველას მონიშვნა find_match_case_label=ემთხვევა მთავრული find_entire_word_label=მთლიანი სიტყვები find_reached_top=მიღწეულია დოკუმენტის დასაწყისი, გრძელდება ბოლოდან find_reached_bottom=მიღწეულია დოკუმენტის ბოლო, გრძელდება დასაწყისიდან # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} / {{total}} თანხვედრიდან find_match_count[two]={{current}} / {{total}} თანხვედრიდან find_match_count[few]={{current}} / {{total}} თანხვედრიდან find_match_count[many]={{current}} / {{total}} თანხვედრიდან find_match_count[other]={{current}} / {{total}} თანხვედრიდან # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]={{limit}}-ზე მეტი თანხვედრა find_match_count_limit[one]={{limit}}-ზე მეტი თანხვედრა find_match_count_limit[two]={{limit}}-ზე მეტი თანხვედრა find_match_count_limit[few]={{limit}}-ზე მეტი თანხვედრა find_match_count_limit[many]={{limit}}-ზე მეტი თანხვედრა find_match_count_limit[other]={{limit}}-ზე მეტი თანხვედრა find_not_found=ფრაზა ვერ მოიძებნა # Error panel labels error_more_info=ვრცლად error_less_info=შემოკლებულად error_close=დახურვა # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=შეტყობინება: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=სტეკი: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=ფაილი: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=ხაზი: {{line}} rendering_error=შეცდომა, გვერდის ჩვენებისას. # Predefined zoom values page_scale_width=გვერდის სიგანეზე page_scale_fit=მთლიანი გვერდი page_scale_auto=ავტომატური page_scale_actual=საწყისი ზომა # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=შეცდომა loading_error=შეცდომა, PDF-ფაილის ჩატვირთვისას. invalid_file_error=არამართებული ან დაზიანებული PDF-ფაილი. missing_file_error=ნაკლული PDF-ფაილი. unexpected_response_error=სერვერის მოულოდნელი პასუხი. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} შენიშვნა] password_label=შეიყვანეთ პაროლი PDF-ფაილის გასახსნელად. password_invalid=არასწორი პაროლი. გთხოვთ, სცადოთ ხელახლა. password_ok=კარგი password_cancel=გაუქმება printing_not_supported=გაფრთხილება: ამობეჭდვა ამ ბრაუზერში არაა სრულად მხარდაჭერილი. printing_not_ready=გაფრთხილება: PDF სრულად ჩატვირთული არაა, ამობეჭდვის დასაწყებად. web_fonts_disabled=ვებშრიფტები გამორთულია: ჩაშენებული PDF-შრიფტების გამოყენება ვერ ხერხდება. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/kab/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Asebter azewwar previous_label=Azewwar next.title=Asebter d-iteddun next_label=Ddu ɣer zdat # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Asebter # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=ɣef {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} n {{pagesCount}}) zoom_out.title=Semẓi zoom_out_label=Semẓi zoom_in.title=Semɣeṛ zoom_in_label=Semɣeṛ zoom.title=Semɣeṛ/Semẓi presentation_mode.title=Uɣal ɣer Uskar Tihawt presentation_mode_label=Askar Tihawt open_file.title=Ldi Afaylu open_file_label=Ldi print.title=Siggez print_label=Siggez download.title=Sader download_label=Azdam bookmark.title=Timeẓri tamirant (nɣel neɣ ldi ɣef usfaylu amaynut) bookmark_label=Askan amiran # Secondary toolbar and context menu tools.title=Ifecka tools_label=Ifecka first_page.title=Ddu ɣer usebter amezwaru first_page.label=Ddu ɣer usebter amezwaru first_page_label=Ddu ɣer usebter amezwaru last_page.title=Ddu ɣer usebter aneggaru last_page.label=Ddu ɣer usebter aneggaru last_page_label=Ddu ɣer usebter aneggaru page_rotate_cw.title=Tuzzya tusrigt page_rotate_cw.label=Tuzzya tusrigt page_rotate_cw_label=Tuzzya tusrigt page_rotate_ccw.title=Tuzzya amgal-usrig page_rotate_ccw.label=Tuzzya amgal-usrig page_rotate_ccw_label=Tuzzya amgal-usrig cursor_text_select_tool.title=Rmed afecku n tefrant n uḍris cursor_text_select_tool_label=Afecku n tefrant n uḍris cursor_hand_tool.title=Rmed afecku afus cursor_hand_tool_label=Afecku afus scroll_vertical.title=Seqdec adrurem ubdid scroll_vertical_label=Adrurem ubdid scroll_horizontal.title=Seqdec adrurem aglawan scroll_horizontal_label=Adrurem aglawan scroll_wrapped.title=Seqdec adrurem yuẓen scroll_wrapped_label=Adrurem yuẓen spread_none.title=Ur sedday ara isiɣzaf n usebter spread_none_label=Ulac isiɣzaf spread_odd.title=Seddu isiɣzaf n usebter ibeddun s yisebtar irayuganen spread_odd_label=Isiɣzaf irayuganen spread_even.title=Seddu isiɣzaf n usebter ibeddun s yisebtar iyuganen spread_even_label=Isiɣzaf iyuganen # Document properties dialog box document_properties.title=Taɣaṛa n isemli… document_properties_label=Taɣaṛa n isemli… document_properties_file_name=Isem n ufaylu: document_properties_file_size=Teɣzi n ufaylu: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KAṬ ({{size_b}} ibiten) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MAṬ ({{size_b}} iṭamḍanen) document_properties_title=Azwel: document_properties_author=Ameskar: document_properties_subject=Amgay: document_properties_keywords=Awalen n tsaruţ document_properties_creation_date=Azemz n tmerna: document_properties_modification_date=Azemz n usnifel: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Yerna-t: document_properties_producer=Afecku n uselket PDF: document_properties_version=Lqem PDF: document_properties_page_count=Amḍan n yisebtar: document_properties_page_size=Tuγzi n usebter: document_properties_page_size_unit_inches=deg document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=s teɣzi document_properties_page_size_orientation_landscape=s tehri document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Asekkil document_properties_page_size_name_legal=Usḍif # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Taskant Web taruradt: document_properties_linearized_yes=Ih document_properties_linearized_no=Ala document_properties_close=Mdel print_progress_message=Aheggi i usiggez n isemli… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Sefsex # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Sken/Fer agalis adisan toggle_sidebar_notification.title=Ffer/Sken agalis adisan (isemli yegber aɣawas/imeddayen) toggle_sidebar_notification2.title=Ffer/Sekn agalis adisan (isemli yegber aɣawas/ticeqqufin yeddan/tissiwin) toggle_sidebar_label=Sken/Fer agalis adisan document_outline.title=Sken isemli (Senned snat tikal i wesemɣer/Afneẓ n iferdisen meṛṛa) document_outline_label=Isɣalen n isebtar attachments.title=Sken ticeqqufin yeddan attachments_label=Ticeqqufin yeddan layers.title=Skeen tissiwin (sit sin yiberdan i uwennez n meṛṛa tissiwin ɣer waddad amezwer) layers_label=Tissiwin thumbs.title=Sken tanfult. thumbs_label=Tinfulin current_outline_item.title=Af-d aferdis n uɣawas amiran current_outline_item_label=Aferdis n uɣawas amiran findbar.title=Nadi deg isemli findbar_label=Nadi additional_layers=Tissiwin-nniḍen # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Asebter {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Asebter {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Tanfult n usebter {{page}} # Find panel button title and messages find_input.title=Nadi find_input.placeholder=Nadi deg isemli… find_previous.title=Aff-d tamseḍriwt n twinest n deffir find_previous_label=Azewwar find_next.title=Aff-d timseḍriwt n twinest d-iteddun find_next_label=Ddu ɣer zdat find_highlight=Err izirig imaṛṛa find_match_case_label=Qadeṛ amasal n isekkilen find_entire_word_label=Awalen iččuranen find_reached_top=Yabbeḍ s afella n usebter, tuɣalin s wadda find_reached_bottom=Tebḍeḍ s adda n usebter, tuɣalin s afella # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} seg {{total}} n tmeɣṛuḍin find_match_count[two]={{current}} seg {{total}} n tmeɣṛuḍin find_match_count[few]={{current}} seg {{total}} n tmeɣṛuḍin find_match_count[many]={{current}} seg {{total}} n tmeɣṛuḍin find_match_count[other]={{current}} seg {{total}} n tmeɣṛuḍin # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Ugar n {{limit}} n tmeɣṛuḍin find_match_count_limit[one]=Ugar n {{limit}} n tmeɣṛuḍin find_match_count_limit[two]=Ugar n {{limit}} n tmeɣṛuḍin find_match_count_limit[few]=Ugar n {{limit}} n tmeɣṛuḍin find_match_count_limit[many]=Ugar n {{limit}} n tmeɣṛuḍin find_match_count_limit[other]=Ugar n {{limit}} n tmeɣṛuḍin find_not_found=Ulac tawinest # Error panel labels error_more_info=Ugar n telɣut error_less_info=Drus n isalen error_close=Mdel # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Izen: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Tanebdant: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Afaylu: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Izirig: {{line}} rendering_error=Teḍra-d tuccḍa deg uskan n usebter. # Predefined zoom values page_scale_width=Tehri n usebter page_scale_fit=Asebter imaṛṛa page_scale_auto=Asemɣeṛ/Asemẓi awurman page_scale_actual=Teɣzi tilawt # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Error loading_error=Teḍra-d tuccḍa deg alluy n PDF: invalid_file_error=Afaylu PDF arameɣtu neɣ yexṣeṛ. missing_file_error=Ulac afaylu PDF. unexpected_response_error=Aqeddac yerra-d yir tiririt ur nettwaṛǧi ara. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Tabzimt {{type}}] password_label=Sekcem awal uffir akken ad ldiḍ afaylu-yagi PDF password_invalid=Awal uffir mačči d ameɣtu, Ɛreḍ tikelt-nniḍen. password_ok=IH password_cancel=Sefsex printing_not_supported=Ɣuṛ-k: Asiggez ur ittusefrak ara yakan imaṛṛa deg iminig-a. printing_not_ready=Ɣuṛ-k: Afaylu PDF ur d-yuli ara imeṛṛa akken ad ittusiggez. web_fonts_disabled=Tisefsiyin web ttwassensent; D awezɣi useqdec n tsefsiyin yettwarnan ɣer PDF. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/kk/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Алдыңғы парақ previous_label=Алдыңғысы next.title=Келесі парақ next_label=Келесі # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Парақ # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages={{pagesCount}} ішінен # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=(парақ {{pageNumber}}, {{pagesCount}} ішінен) zoom_out.title=Кішірейту zoom_out_label=Кішірейту zoom_in.title=Үлкейту zoom_in_label=Үлкейту zoom.title=Масштаб presentation_mode.title=Презентация режиміне ауысу presentation_mode_label=Презентация режимі open_file.title=Файлды ашу open_file_label=Ашу print.title=Баспаға шығару print_label=Баспаға шығару download.title=Жүктеп алу download_label=Жүктеп алу bookmark.title=Ағымдағы көрініс (көшіру не жаңа терезеде ашу) bookmark_label=Ағымдағы көрініс # Secondary toolbar and context menu tools.title=Құралдар tools_label=Құралдар first_page.title=Алғашқы параққа өту first_page.label=Алғашқы параққа өту first_page_label=Алғашқы параққа өту last_page.title=Соңғы параққа өту last_page.label=Соңғы параққа өту last_page_label=Соңғы параққа өту page_rotate_cw.title=Сағат тілі бағытымен айналдыру page_rotate_cw.label=Сағат тілі бағытымен бұру page_rotate_cw_label=Сағат тілі бағытымен бұру page_rotate_ccw.title=Сағат тілі бағытына қарсы бұру page_rotate_ccw.label=Сағат тілі бағытына қарсы бұру page_rotate_ccw_label=Сағат тілі бағытына қарсы бұру cursor_text_select_tool.title=Мәтінді таңдау құралын іске қосу cursor_text_select_tool_label=Мәтінді таңдау құралы cursor_hand_tool.title=Қол құралын іске қосу cursor_hand_tool_label=Қол құралы scroll_vertical.title=Вертикалды айналдыруды қолдану scroll_vertical_label=Вертикалды айналдыру scroll_horizontal.title=Горизонталды айналдыруды қолдану scroll_horizontal_label=Горизонталды айналдыру scroll_wrapped.title=Масштабталатын айналдыруды қолдану scroll_wrapped_label=Масштабталатын айналдыру spread_none.title=Жазық беттер режимін қолданбау spread_none_label=Жазық беттер режимсіз spread_odd.title=Жазық беттер тақ нөмірлі беттерден басталады spread_odd_label=Тақ нөмірлі беттер сол жақтан spread_even.title=Жазық беттер жұп нөмірлі беттерден басталады spread_even_label=Жұп нөмірлі беттер сол жақтан # Document properties dialog box document_properties.title=Құжат қасиеттері… document_properties_label=Құжат қасиеттері… document_properties_file_name=Файл аты: document_properties_file_size=Файл өлшемі: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} КБ ({{size_b}} байт) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} МБ ({{size_b}} байт) document_properties_title=Тақырыбы: document_properties_author=Авторы: document_properties_subject=Тақырыбы: document_properties_keywords=Кілт сөздер: document_properties_creation_date=Жасалған күні: document_properties_modification_date=Түзету күні: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Жасаған: document_properties_producer=PDF өндірген: document_properties_version=PDF нұсқасы: document_properties_page_count=Беттер саны: document_properties_page_size=Бет өлшемі: document_properties_page_size_unit_inches=дюйм document_properties_page_size_unit_millimeters=мм document_properties_page_size_orientation_portrait=тік document_properties_page_size_orientation_landscape=жатық document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Жылдам Web көрінісі: document_properties_linearized_yes=Иә document_properties_linearized_no=Жоқ document_properties_close=Жабу print_progress_message=Құжатты баспаға шығару үшін дайындау… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Бас тарту # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Бүйір панелін көрсету/жасыру toggle_sidebar_notification.title=Бүйір панелін көрсету/жасыру (құжатта құрылымы/салынымдар бар) toggle_sidebar_notification2.title=Бүйір панелін көрсету/жасыру (құжатта құрылымы/салынымдар/қабаттар бар) toggle_sidebar_label=Бүйір панелін көрсету/жасыру document_outline.title=Құжат құрылымын көрсету (барлық нәрселерді жазық қылу/жинау үшін қос шерту керек) document_outline_label=Құжат құрамасы attachments.title=Салынымдарды көрсету attachments_label=Салынымдар layers.title=Қабаттарды көрсету (барлық қабаттарды бастапқы күйге келтіру үшін екі рет шертіңіз) layers_label=Қабаттар thumbs.title=Кіші көріністерді көрсету thumbs_label=Кіші көріністер findbar.title=Құжаттан табу findbar_label=Табу additional_layers=Қосымша қабаттар # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Бет {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title={{page}} парағы # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas={{page}} парағы үшін кіші көрінісі # Find panel button title and messages find_input.title=Табу find_input.placeholder=Құжаттан табу… find_previous.title=Осы сөздердің мәтіннен алдыңғы кездесуін табу find_previous_label=Алдыңғысы find_next.title=Осы сөздердің мәтіннен келесі кездесуін табу find_next_label=Келесі find_highlight=Барлығын түспен ерекшелеу find_match_case_label=Регистрді ескеру find_entire_word_label=Сөздер толығымен find_reached_top=Құжаттың басына жеттік, соңынан бастап жалғастырамыз find_reached_bottom=Құжаттың соңына жеттік, басынан бастап жалғастырамыз # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} / {{total}} сәйкестік find_match_count[two]={{current}} / {{total}} сәйкестік find_match_count[few]={{current}} / {{total}} сәйкестік find_match_count[many]={{current}} / {{total}} сәйкестік find_match_count[other]={{current}} / {{total}} сәйкестік # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]={{limit}} сәйкестіктен көп find_match_count_limit[one]={{limit}} сәйкестіктен көп find_match_count_limit[two]={{limit}} сәйкестіктен көп find_match_count_limit[few]={{limit}} сәйкестіктен көп find_match_count_limit[many]={{limit}} сәйкестіктен көп find_match_count_limit[other]={{limit}} сәйкестіктен көп find_not_found=Сөз(дер) табылмады # Error panel labels error_more_info=Көбірек ақпарат error_less_info=Азырақ ақпарат error_close=Жабу # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (жинақ: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Хабарлама: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Стек: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Файл: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Жол: {{line}} rendering_error=Парақты өңдеу кезінде қате кетті. # Predefined zoom values page_scale_width=Парақ ені page_scale_fit=Парақты сыйдыру page_scale_auto=Автомасштабтау page_scale_actual=Нақты өлшемі # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Қате loading_error=PDF жүктеу кезінде қате кетті. invalid_file_error=Зақымдалған немесе қате PDF файл. missing_file_error=PDF файлы жоқ. unexpected_response_error=Сервердің күтпеген жауабы. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} аңдатпасы] password_label=Бұл PDF файлын ашу үшін парольді енгізіңіз. password_invalid=Пароль дұрыс емес. Қайталап көріңіз. password_ok=ОК password_cancel=Бас тарту printing_not_supported=Ескерту: Баспаға шығаруды бұл браузер толығымен қолдамайды. printing_not_ready=Ескерту: Баспаға шығару үшін, бұл PDF толығымен жүктеліп алынбады. web_fonts_disabled=Веб қаріптері сөндірілген: құрамына енгізілген PDF қаріптерін қолдану мүмкін емес. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/km/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=ទំព័រ​មុន previous_label=មុន next.title=ទំព័រ​បន្ទាប់ next_label=បន្ទាប់ # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=ទំព័រ # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=នៃ {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} នៃ {{pagesCount}}) zoom_out.title=​បង្រួម zoom_out_label=​បង្រួម zoom_in.title=​ពង្រីក zoom_in_label=​ពង្រីក zoom.title=ពង្រីក presentation_mode.title=ប្ដូរ​ទៅ​របៀប​បទ​បង្ហាញ presentation_mode_label=របៀប​បទ​បង្ហាញ open_file.title=បើក​ឯកសារ open_file_label=បើក print.title=បោះពុម្ព print_label=បោះពុម្ព download.title=ទាញ​យក download_label=ទាញ​យក bookmark.title=ទិដ្ឋភាព​បច្ចុប្បន្ន (ចម្លង ឬ​បើក​នៅ​ក្នុង​បង្អួច​ថ្មី) bookmark_label=ទិដ្ឋភាព​បច្ចុប្បន្ន # Secondary toolbar and context menu tools.title=ឧបករណ៍ tools_label=ឧបករណ៍ first_page.title=ទៅកាន់​ទំព័រ​ដំបូង​ first_page.label=ទៅកាន់​ទំព័រ​ដំបូង​ first_page_label=ទៅកាន់​ទំព័រ​ដំបូង​ last_page.title=ទៅកាន់​ទំព័រ​ចុងក្រោយ​ last_page.label=ទៅកាន់​ទំព័រ​ចុងក្រោយ​ last_page_label=ទៅកាន់​ទំព័រ​ចុងក្រោយ page_rotate_cw.title=បង្វិល​ស្រប​ទ្រនិច​នាឡិកា page_rotate_cw.label=បង្វិល​ស្រប​ទ្រនិច​នាឡិកា page_rotate_cw_label=បង្វិល​ស្រប​ទ្រនិច​នាឡិកា page_rotate_ccw.title=បង្វិល​ច្រាស​ទ្រនិច​នាឡិកា​​ page_rotate_ccw.label=បង្វិល​ច្រាស​ទ្រនិច​នាឡិកា​​ page_rotate_ccw_label=បង្វិល​ច្រាស​ទ្រនិច​នាឡិកា​​ cursor_text_select_tool.title=បើក​ឧបករណ៍​ជ្រើស​អត្ថបទ cursor_text_select_tool_label=ឧបករណ៍​ជ្រើស​អត្ថបទ cursor_hand_tool.title=បើក​ឧបករណ៍​ដៃ cursor_hand_tool_label=ឧបករណ៍​ដៃ # Document properties dialog box document_properties.title=លក្ខណ​សម្បត្តិ​ឯកសារ… document_properties_label=លក្ខណ​សម្បត្តិ​ឯកសារ… document_properties_file_name=ឈ្មោះ​ឯកសារ៖ document_properties_file_size=ទំហំ​ឯកសារ៖ # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} បៃ) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} បៃ) document_properties_title=ចំណងជើង៖ document_properties_author=អ្នក​និពន្ធ៖ document_properties_subject=ប្រធានបទ៖ document_properties_keywords=ពាក្យ​គន្លឹះ៖ document_properties_creation_date=កាលបរិច្ឆេទ​បង្កើត៖ document_properties_modification_date=កាលបរិច្ឆេទ​កែប្រែ៖ # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=អ្នក​បង្កើត៖ document_properties_producer=កម្មវិធី​បង្កើត PDF ៖ document_properties_version=កំណែ PDF ៖ document_properties_page_count=ចំនួន​ទំព័រ៖ document_properties_page_size_unit_inches=អ៊ីញ document_properties_page_size_unit_millimeters=មម document_properties_page_size_orientation_portrait=បញ្ឈរ document_properties_page_size_orientation_landscape=ផ្តេក document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=សំបុត្រ # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized_yes=បាទ/ចាស document_properties_linearized_no=ទេ document_properties_close=បិទ print_progress_message=កំពុង​រៀបចំ​ឯកសារ​សម្រាប់​បោះពុម្ព… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=បោះបង់ # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=បិទ/បើក​គ្រាប់​រំកិល toggle_sidebar_notification.title=បិទ/បើក​របារ​ចំហៀង (ឯកសារ​មាន​មាតិកា​នៅ​ក្រៅ/attachments) toggle_sidebar_label=បិទ/បើក​គ្រាប់​រំកិល document_outline.title=បង្ហាញ​គ្រោង​ឯកសារ (ចុច​ទ្វេ​ដង​ដើម្បី​ពង្រីក/បង្រួម​ធាតុ​ទាំងអស់) document_outline_label=គ្រោង​ឯកសារ attachments.title=បង្ហាញ​ឯកសារ​ភ្ជាប់ attachments_label=ឯកសារ​ភ្ជាប់ thumbs.title=បង្ហាញ​រូបភាព​តូចៗ thumbs_label=រួបភាព​តូចៗ findbar.title=រក​នៅ​ក្នុង​ឯកសារ findbar_label=រក # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=ទំព័រ {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=រូបភាព​តូច​របស់​ទំព័រ {{page}} # Find panel button title and messages find_input.title=រក find_input.placeholder=រក​នៅ​ក្នុង​ឯកសារ... find_previous.title=រក​ពាក្យ ឬ​ឃ្លា​ដែល​បាន​ជួប​មុន find_previous_label=មុន find_next.title=រក​ពាក្យ ឬ​ឃ្លា​ដែល​បាន​ជួប​បន្ទាប់ find_next_label=បន្ទាប់ find_highlight=បន្លិច​ទាំងអស់ find_match_case_label=ករណី​ដំណូច find_reached_top=បាន​បន្ត​ពី​ខាង​ក្រោម ទៅ​ដល់​ខាង​​លើ​នៃ​ឯកសារ find_reached_bottom=បាន​បន្ត​ពី​ខាងលើ ទៅដល់​ចុង​​នៃ​ឯកសារ # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_not_found=រក​មិន​ឃើញ​ពាក្យ ឬ​ឃ្លា # Error panel labels error_more_info=ព័ត៌មាន​បន្ថែម error_less_info=ព័ត៌មាន​តិចតួច error_close=បិទ # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=សារ ៖ {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=ជង់ ៖ {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=ឯកសារ ៖ {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=ជួរ ៖ {{line}} rendering_error=មាន​កំហុស​បាន​កើតឡើង​ពេល​បង្ហាញ​ទំព័រ ។ # Predefined zoom values page_scale_width=ទទឹង​ទំព័រ page_scale_fit=សម​ទំព័រ page_scale_auto=ពង្រីក​ស្វ័យប្រវត្តិ page_scale_actual=ទំហំ​ជាក់ស្ដែង # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=កំហុស loading_error=មាន​កំហុស​បាន​កើតឡើង​ពេល​កំពុង​ផ្ទុក PDF ។ invalid_file_error=ឯកសារ PDF ខូច ឬ​មិន​ត្រឹមត្រូវ ។ missing_file_error=បាត់​ឯកសារ PDF unexpected_response_error=ការ​ឆ្លើយ​តម​ម៉ាស៊ីន​មេ​ដែល​មិន​បាន​រំពឹង។ # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} ចំណារ​ពន្យល់] password_label=បញ្ចូល​ពាក្យសម្ងាត់​ដើម្បី​បើក​ឯកសារ PDF នេះ។ password_invalid=ពាក្យសម្ងាត់​មិន​ត្រឹមត្រូវ។ សូម​ព្យាយាម​ម្ដងទៀត។ password_ok=យល់​ព្រម password_cancel=បោះបង់ printing_not_supported=ការ​ព្រមាន ៖ កា​រ​បោះពុម្ព​មិន​ត្រូវ​បាន​គាំទ្រ​ពេញលេញ​ដោយ​កម្មវិធី​រុករក​នេះ​ទេ ។ printing_not_ready=ព្រមាន៖ PDF មិន​ត្រូវ​បាន​ផ្ទុក​ទាំងស្រុង​ដើម្បី​បោះពុម្ព​ទេ។ web_fonts_disabled=បាន​បិទ​ពុម្ពអក្សរ​បណ្ដាញ ៖ មិន​អាច​ប្រើ​ពុម្ពអក្សរ PDF ដែល​បាន​បង្កប់​បាន​ទេ ។ ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/kn/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=ಹಿಂದಿನ ಪುಟ previous_label=ಹಿಂದಿನ next.title=ಮುಂದಿನ ಪುಟ next_label=ಮುಂದಿನ # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=ಪುಟ # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages={{pagesCount}} ರಲ್ಲಿ # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pagesCount}} ರಲ್ಲಿ {{pageNumber}}) zoom_out.title=ಕಿರಿದಾಗಿಸು zoom_out_label=ಕಿರಿದಾಗಿಸಿ zoom_in.title=ಹಿರಿದಾಗಿಸು zoom_in_label=ಹಿರಿದಾಗಿಸಿ zoom.title=ಗಾತ್ರಬದಲಿಸು presentation_mode.title=ಪ್ರಸ್ತುತಿ (ಪ್ರಸೆಂಟೇಶನ್) ಕ್ರಮಕ್ಕೆ ಬದಲಾಯಿಸು presentation_mode_label=ಪ್ರಸ್ತುತಿ (ಪ್ರಸೆಂಟೇಶನ್) ಕ್ರಮ open_file.title=ಕಡತವನ್ನು ತೆರೆ open_file_label=ತೆರೆಯಿರಿ print.title=ಮುದ್ರಿಸು print_label=ಮುದ್ರಿಸಿ download.title=ಇಳಿಸು download_label=ಇಳಿಸಿಕೊಳ್ಳಿ bookmark.title=ಪ್ರಸಕ್ತ ನೋಟ (ಪ್ರತಿ ಮಾಡು ಅಥವ ಹೊಸ ಕಿಟಕಿಯಲ್ಲಿ ತೆರೆ) bookmark_label=ಪ್ರಸಕ್ತ ನೋಟ # Secondary toolbar and context menu tools.title=ಉಪಕರಣಗಳು tools_label=ಉಪಕರಣಗಳು first_page.title=ಮೊದಲ ಪುಟಕ್ಕೆ ತೆರಳು first_page.label=ಮೊದಲ ಪುಟಕ್ಕೆ ತೆರಳು first_page_label=ಮೊದಲ ಪುಟಕ್ಕೆ ತೆರಳು last_page.title=ಕೊನೆಯ ಪುಟಕ್ಕೆ ತೆರಳು last_page.label=ಕೊನೆಯ ಪುಟಕ್ಕೆ ತೆರಳು last_page_label=ಕೊನೆಯ ಪುಟಕ್ಕೆ ತೆರಳು page_rotate_cw.title=ಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು page_rotate_cw.label=ಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು page_rotate_cw_label=ಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು page_rotate_ccw.title=ಅಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು page_rotate_ccw.label=ಅಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು page_rotate_ccw_label=ಅಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು cursor_text_select_tool.title=ಪಠ್ಯ ಆಯ್ಕೆ ಉಪಕರಣವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ cursor_text_select_tool_label=ಪಠ್ಯ ಆಯ್ಕೆಯ ಉಪಕರಣ cursor_hand_tool.title=ಕೈ ಉಪಕರಣವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ cursor_hand_tool_label=ಕೈ ಉಪಕರಣ # Document properties dialog box document_properties.title=ಡಾಕ್ಯುಮೆಂಟ್‌ ಗುಣಗಳು... document_properties_label=ಡಾಕ್ಯುಮೆಂಟ್‌ ಗುಣಗಳು... document_properties_file_name=ಕಡತದ ಹೆಸರು: document_properties_file_size=ಕಡತದ ಗಾತ್ರ: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} ಬೈಟ್‍ಗಳು) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} ಬೈಟ್‍ಗಳು) document_properties_title=ಶೀರ್ಷಿಕೆ: document_properties_author=ಕರ್ತೃ: document_properties_subject=ವಿಷಯ: document_properties_keywords=ಮುಖ್ಯಪದಗಳು: document_properties_creation_date=ರಚಿಸಿದ ದಿನಾಂಕ: document_properties_modification_date=ಮಾರ್ಪಡಿಸಲಾದ ದಿನಾಂಕ: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=ರಚಿಸಿದವರು: document_properties_producer=PDF ಉತ್ಪಾದಕ: document_properties_version=PDF ಆವೃತ್ತಿ: document_properties_page_count=ಪುಟದ ಎಣಿಕೆ: document_properties_page_size_unit_inches=ಇದರಲ್ಲಿ document_properties_page_size_orientation_portrait=ಭಾವಚಿತ್ರ document_properties_page_size_orientation_landscape=ಪ್ರಕೃತಿ ಚಿತ್ರ # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_close=ಮುಚ್ಚು print_progress_message=ಮುದ್ರಿಸುವುದಕ್ಕಾಗಿ ದಸ್ತಾವೇಜನ್ನು ಸಿದ್ಧಗೊಳಿಸಲಾಗುತ್ತಿದೆ… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=ರದ್ದು ಮಾಡು # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=ಬದಿಪಟ್ಟಿಯನ್ನು ಹೊರಳಿಸು toggle_sidebar_label=ಬದಿಪಟ್ಟಿಯನ್ನು ಹೊರಳಿಸು document_outline_label=ದಸ್ತಾವೇಜಿನ ಹೊರರೇಖೆ attachments.title=ಲಗತ್ತುಗಳನ್ನು ತೋರಿಸು attachments_label=ಲಗತ್ತುಗಳು thumbs.title=ಚಿಕ್ಕಚಿತ್ರದಂತೆ ತೋರಿಸು thumbs_label=ಚಿಕ್ಕಚಿತ್ರಗಳು findbar.title=ದಸ್ತಾವೇಜಿನಲ್ಲಿ ಹುಡುಕು findbar_label=ಹುಡುಕು # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=ಪುಟ {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=ಪುಟವನ್ನು ಚಿಕ್ಕಚಿತ್ರದಂತೆ ತೋರಿಸು {{page}} # Find panel button title and messages find_input.title=ಹುಡುಕು find_input.placeholder=ದಸ್ತಾವೇಜಿನಲ್ಲಿ ಹುಡುಕು… find_previous.title=ವಾಕ್ಯದ ಹಿಂದಿನ ಇರುವಿಕೆಯನ್ನು ಹುಡುಕು find_previous_label=ಹಿಂದಿನ find_next.title=ವಾಕ್ಯದ ಮುಂದಿನ ಇರುವಿಕೆಯನ್ನು ಹುಡುಕು find_next_label=ಮುಂದಿನ find_highlight=ಎಲ್ಲವನ್ನು ಹೈಲೈಟ್ ಮಾಡು find_match_case_label=ಕೇಸನ್ನು ಹೊಂದಿಸು find_reached_top=ದಸ್ತಾವೇಜಿನ ಮೇಲ್ಭಾಗವನ್ನು ತಲುಪಿದೆ, ಕೆಳಗಿನಿಂದ ಆರಂಭಿಸು find_reached_bottom=ದಸ್ತಾವೇಜಿನ ಕೊನೆಯನ್ನು ತಲುಪಿದೆ, ಮೇಲಿನಿಂದ ಆರಂಭಿಸು find_not_found=ವಾಕ್ಯವು ಕಂಡು ಬಂದಿಲ್ಲ # Error panel labels error_more_info=ಹೆಚ್ಚಿನ ಮಾಹಿತಿ error_less_info=ಕಡಿಮೆ ಮಾಹಿತಿ error_close=ಮುಚ್ಚು # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=ಸಂದೇಶ: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=ರಾಶಿ: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=ಕಡತ: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=ಸಾಲು: {{line}} rendering_error=ಪುಟವನ್ನು ನಿರೂಪಿಸುವಾಗ ಒಂದು ದೋಷ ಎದುರಾಗಿದೆ. # Predefined zoom values page_scale_width=ಪುಟದ ಅಗಲ page_scale_fit=ಪುಟದ ಸರಿಹೊಂದಿಕೆ page_scale_auto=ಸ್ವಯಂಚಾಲಿತ ಗಾತ್ರಬದಲಾವಣೆ page_scale_actual=ನಿಜವಾದ ಗಾತ್ರ # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=ದೋಷ loading_error=PDF ಅನ್ನು ಲೋಡ್ ಮಾಡುವಾಗ ಒಂದು ದೋಷ ಎದುರಾಗಿದೆ. invalid_file_error=ಅಮಾನ್ಯವಾದ ಅಥವ ಹಾಳಾದ PDF ಕಡತ. missing_file_error=PDF ಕಡತ ಇಲ್ಲ. unexpected_response_error=ಅನಿರೀಕ್ಷಿತವಾದ ಪೂರೈಕೆಗಣಕದ ಪ್ರತಿಕ್ರಿಯೆ. # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} ಟಿಪ್ಪಣಿ] password_label=PDF ಅನ್ನು ತೆರೆಯಲು ಗುಪ್ತಪದವನ್ನು ನಮೂದಿಸಿ. password_invalid=ಅಮಾನ್ಯವಾದ ಗುಪ್ತಪದ, ದಯವಿಟ್ಟು ಇನ್ನೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ. password_ok=OK password_cancel=ರದ್ದು ಮಾಡು printing_not_supported=ಎಚ್ಚರಿಕೆ: ಈ ಜಾಲವೀಕ್ಷಕದಲ್ಲಿ ಮುದ್ರಣಕ್ಕೆ ಸಂಪೂರ್ಣ ಬೆಂಬಲವಿಲ್ಲ. printing_not_ready=ಎಚ್ಚರಿಕೆ: PDF ಕಡತವು ಮುದ್ರಿಸಲು ಸಂಪೂರ್ಣವಾಗಿ ಲೋಡ್ ಆಗಿಲ್ಲ. web_fonts_disabled=ಜಾಲ ಅಕ್ಷರಶೈಲಿಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ: ಅಡಕಗೊಳಿಸಿದ PDF ಅಕ್ಷರಶೈಲಿಗಳನ್ನು ಬಳಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ko/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=이전 페이지 previous_label=이전 next.title=다음 페이지 next_label=다음 # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=페이지 # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=/ {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} / {{pagesCount}}) zoom_out.title=축소 zoom_out_label=축소 zoom_in.title=확대 zoom_in_label=확대 zoom.title=확대/축소 presentation_mode.title=프레젠테이션 모드로 전환 presentation_mode_label=프레젠테이션 모드 open_file.title=파일 열기 open_file_label=열기 print.title=인쇄 print_label=인쇄 download.title=다운로드 download_label=다운로드 bookmark.title=현재 보기 (복사 또는 새 창에 열기) bookmark_label=현재 보기 # Secondary toolbar and context menu tools.title=도구 tools_label=도구 first_page.title=첫 페이지로 이동 first_page.label=첫 페이지로 이동 first_page_label=첫 페이지로 이동 last_page.title=마지막 페이지로 이동 last_page.label=마지막 페이지로 이동 last_page_label=마지막 페이지로 이동 page_rotate_cw.title=시계방향으로 회전 page_rotate_cw.label=시계방향으로 회전 page_rotate_cw_label=시계방향으로 회전 page_rotate_ccw.title=시계 반대방향으로 회전 page_rotate_ccw.label=시계 반대방향으로 회전 page_rotate_ccw_label=시계 반대방향으로 회전 cursor_text_select_tool.title=텍스트 선택 도구 활성화 cursor_text_select_tool_label=텍스트 선택 도구 cursor_hand_tool.title=손 도구 활성화 cursor_hand_tool_label=손 도구 scroll_vertical.title=세로 스크롤 사용 scroll_vertical_label=세로 스크롤 scroll_horizontal.title=가로 스크롤 사용 scroll_horizontal_label=가로 스크롤 scroll_wrapped.title=래핑(자동 줄 바꿈) 스크롤 사용 scroll_wrapped_label=래핑 스크롤 spread_none.title=한 페이지 보기 spread_none_label=펼쳐짐 없음 spread_odd.title=홀수 페이지로 시작하는 두 페이지 보기 spread_odd_label=홀수 펼쳐짐 spread_even.title=짝수 페이지로 시작하는 두 페이지 보기 spread_even_label=짝수 펼쳐짐 # Document properties dialog box document_properties.title=문서 속성… document_properties_label=문서 속성… document_properties_file_name=파일 이름: document_properties_file_size=파일 크기: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}}바이트) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}}바이트) document_properties_title=제목: document_properties_author=작성자: document_properties_subject=주제: document_properties_keywords=키워드: document_properties_creation_date=작성 날짜: document_properties_modification_date=수정 날짜: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=작성 프로그램: document_properties_producer=PDF 변환 소프트웨어: document_properties_version=PDF 버전: document_properties_page_count=페이지 수: document_properties_page_size=페이지 크기: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=세로 방향 document_properties_page_size_orientation_landscape=가로 방향 document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=레터 document_properties_page_size_name_legal=리걸 # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=빠른 웹 보기: document_properties_linearized_yes=예 document_properties_linearized_no=아니오 document_properties_close=닫기 print_progress_message=인쇄 문서 준비 중… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=취소 # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=탐색창 표시/숨기기 toggle_sidebar_notification.title=탐색창 표시/숨기기 (문서에 아웃라인/첨부파일 포함됨) toggle_sidebar_notification2.title=탐색창 표시/숨기기 (문서에 아웃라인/첨부파일/레이어 포함됨) toggle_sidebar_label=탐색창 표시/숨기기 document_outline.title=문서 아웃라인 보기 (더블 클릭해서 모든 항목 펼치기/접기) document_outline_label=문서 아웃라인 attachments.title=첨부파일 보기 attachments_label=첨부파일 layers.title=레이어 보기 (더블 클릭해서 모든 레이어를 기본 상태로 재설정) layers_label=레이어 thumbs.title=미리보기 thumbs_label=미리보기 current_outline_item.title=현재 아웃라인 항목 찾기 current_outline_item_label=현재 아웃라인 항목 findbar.title=검색 findbar_label=검색 additional_layers=추가 레이어 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas={{page}} 페이지 # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title={{page}} 페이지 # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas={{page}} 페이지 미리보기 # Find panel button title and messages find_input.title=찾기 find_input.placeholder=문서에서 찾기… find_previous.title=지정 문자열에 일치하는 1개 부분을 검색 find_previous_label=이전 find_next.title=지정 문자열에 일치하는 다음 부분을 검색 find_next_label=다음 find_highlight=모두 강조 표시 find_match_case_label=대/소문자 구분 find_entire_word_label=단어 단위로 find_reached_top=문서 처음까지 검색하고 끝으로 돌아와 검색했습니다. find_reached_bottom=문서 끝까지 검색하고 앞으로 돌아와 검색했습니다. # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{total}} 중 {{current}} 일치 find_match_count[two]={{total}} 중 {{current}} 일치 find_match_count[few]={{total}} 중 {{current}} 일치 find_match_count[many]={{total}} 중 {{current}} 일치 find_match_count[other]={{total}} 중 {{current}} 일치 # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]={{limit}} 이상 일치 find_match_count_limit[one]={{limit}} 이상 일치 find_match_count_limit[two]={{limit}} 이상 일치 find_match_count_limit[few]={{limit}} 이상 일치 find_match_count_limit[many]={{limit}} 이상 일치 find_match_count_limit[other]={{limit}} 이상 일치 find_not_found=검색 결과 없음 # Error panel labels error_more_info=정보 더 보기 error_less_info=정보 간단히 보기 error_close=닫기 # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (빌드: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=메시지: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=스택: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=파일: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=줄 번호: {{line}} rendering_error=페이지를 렌더링하는 동안 오류가 발생했습니다. # Predefined zoom values page_scale_width=페이지 너비에 맞추기 page_scale_fit=페이지에 맞추기 page_scale_auto=자동 page_scale_actual=실제 크기 # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=오류 loading_error=PDF를 로드하는 동안 오류가 발생했습니다. invalid_file_error=잘못되었거나 손상된 PDF 파일. missing_file_error=PDF 파일 없음. unexpected_response_error=예상치 못한 서버 응답입니다. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}} {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} 주석] password_label=이 PDF 파일을 열 수 있는 비밀번호를 입력하세요. password_invalid=잘못된 비밀번호입니다. 다시 시도하세요. password_ok=확인 password_cancel=취소 printing_not_supported=경고: 이 브라우저는 인쇄를 완전히 지원하지 않습니다. printing_not_ready=경고: 이 PDF를 인쇄를 할 수 있을 정도로 읽어들이지 못했습니다. web_fonts_disabled=웹 폰트가 비활성화됨: 내장된 PDF 글꼴을 사용할 수 없습니다. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/lij/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Pagina primma previous_label=Precedente next.title=Pagina dòppo next_label=Pròscima # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Pagina # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=de {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} de {{pagesCount}}) zoom_out.title=Diminoisci zoom zoom_out_label=Diminoisci zoom zoom_in.title=Aomenta zoom zoom_in_label=Aomenta zoom zoom.title=Zoom presentation_mode.title=Vanni into mòddo de prezentaçion presentation_mode_label=Mòddo de prezentaçion open_file.title=Arvi file open_file_label=Arvi print.title=Stanpa print_label=Stanpa download.title=Descaregamento download_label=Descaregamento bookmark.title=Vixon corente (còpia ò arvi inte 'n neuvo barcon) bookmark_label=Vixon corente # Secondary toolbar and context menu tools.title=Atressi tools_label=Atressi first_page.title=Vanni a-a primma pagina first_page.label=Vanni a-a primma pagina first_page_label=Vanni a-a primma pagina last_page.title=Vanni a l'urtima pagina last_page.label=Vanni a l'urtima pagina last_page_label=Vanni a l'urtima pagina page_rotate_cw.title=Gia into verso oraio page_rotate_cw.label=Gia in senso do releuio page_rotate_cw_label=Gia into verso oraio page_rotate_ccw.title=Gia into verso antioraio page_rotate_ccw.label=Gia in senso do releuio a-a reversa page_rotate_ccw_label=Gia into verso antioraio cursor_text_select_tool.title=Abilita strumento de seleçion do testo cursor_text_select_tool_label=Strumento de seleçion do testo cursor_hand_tool.title=Abilita strumento man cursor_hand_tool_label=Strumento man scroll_vertical.title=Deuvia rebelamento verticale scroll_vertical_label=Rebelamento verticale scroll_horizontal.title=Deuvia rebelamento orizontâ scroll_horizontal_label=Rebelamento orizontâ scroll_wrapped.title=Deuvia rebelamento incapsolou scroll_wrapped_label=Rebelamento incapsolou spread_none.title=No unite a-a difuxon de pagina spread_none_label=No difuxon spread_odd.title=Uniscite a-a difuxon de pagina co-o numero dèspa spread_odd_label=Difuxon dèspa spread_even.title=Uniscite a-a difuxon de pagina co-o numero pari spread_even_label=Difuxon pari # Document properties dialog box document_properties.title=Propietæ do documento… document_properties_label=Propietæ do documento… document_properties_file_name=Nomme schedaio: document_properties_file_size=Dimenscion schedaio: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} kB ({{size_b}} byte) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} byte) document_properties_title=Titolo: document_properties_author=Aoto: document_properties_subject=Ogetto: document_properties_keywords=Paròlle ciave: document_properties_creation_date=Dæta creaçion: document_properties_modification_date=Dæta cangiamento: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Aotô originale: document_properties_producer=Produtô PDF: document_properties_version=Verscion PDF: document_properties_page_count=Contezzo pagine: document_properties_page_size=Dimenscion da pagina: document_properties_page_size_unit_inches=dii gròsci document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=drito document_properties_page_size_orientation_landscape=desteizo document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letia document_properties_page_size_name_legal=Lezze # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Vista veloce do Web: document_properties_linearized_yes=Sci document_properties_linearized_no=No document_properties_close=Særa print_progress_message=Praparo o documento pe-a stanpa… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Anulla # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Ativa/dizativa bara de scianco toggle_sidebar_notification.title=Cangia bara de löo (o documento o contegne di alegæ) toggle_sidebar_label=Ativa/dizativa bara de scianco document_outline.title=Fanni vedde o contorno do documento (scicca doggio pe espande/ridue tutti i elementi) document_outline_label=Contorno do documento attachments.title=Fanni vedde alegæ attachments_label=Alegæ thumbs.title=Mostra miniatue thumbs_label=Miniatue findbar.title=Treuva into documento findbar_label=Treuva # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Pagina {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Miniatua da pagina {{page}} # Find panel button title and messages find_input.title=Treuva find_input.placeholder=Treuva into documento… find_previous.title=Treuva a ripetiçion precedente do testo da çercâ find_previous_label=Precedente find_next.title=Treuva a ripetiçion dòppo do testo da çercâ find_next_label=Segoente find_highlight=Evidençia find_match_case_label=Maioscole/minoscole find_entire_word_label=Poula intrega find_reached_top=Razonto a fin da pagina, continoa da l'iniçio find_reached_bottom=Razonto l'iniçio da pagina, continoa da-a fin # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} de {{total}} corispondensa find_match_count[two]={{current}} de {{total}} corispondense find_match_count[few]={{current}} de {{total}} corispondense find_match_count[many]={{current}} de {{total}} corispondense find_match_count[other]={{current}} de {{total}} corispondense # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Ciù de {{limit}} corispondense find_match_count_limit[one]=Ciù de {{limit}} corispondensa find_match_count_limit[two]=Ciù de {{limit}} corispondense find_match_count_limit[few]=Ciù de {{limit}} corispondense find_match_count_limit[many]=Ciù de {{limit}} corispondense find_match_count_limit[other]=Ciù de {{limit}} corispondense find_not_found=Testo no trovou # Error panel labels error_more_info=Ciù informaçioin error_less_info=Meno informaçioin error_close=Særa # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Mesaggio: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stack: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Schedaio: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Linia: {{line}} rendering_error=Gh'é stæto 'n'erô itno rendering da pagina. # Predefined zoom values page_scale_width=Larghessa pagina page_scale_fit=Adatta a una pagina page_scale_auto=Zoom aotomatico page_scale_actual=Dimenscioin efetive # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Erô loading_error=S'é verificou 'n'erô itno caregamento do PDF. invalid_file_error=O schedaio PDF o l'é no valido ò aroinou. missing_file_error=O schedaio PDF o no gh'é. unexpected_response_error=Risposta inprevista do-u server # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Anotaçion: {{type}}] password_label=Dimme a paròlla segreta pe arvî sto schedaio PDF. password_invalid=Paròlla segreta sbalia. Preuva torna. password_ok=Va ben password_cancel=Anulla printing_not_supported=Atençion: a stanpa a no l'é conpletamente soportâ da sto navegatô. printing_not_ready=Atençion: o PDF o no l'é ancon caregou conpletamente pe-a stanpa. web_fonts_disabled=I font do web en dizativæ: inposcibile adeuviâ i carateri do PDF. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/lo/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=ຫນ້າກ່ອນຫນ້າ previous_label=ກ່ອນຫນ້າ next.title=ຫນ້າຖັດໄປ next_label=ຖັດໄປ # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=ຫນ້າ # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=ຈາກ {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} ຈາກ {{pagesCount}}) zoom_out.title=ຂະຫຍາຍອອກ zoom_out_label=ຂະຫຍາຍອອກ zoom_in.title=ຂະຫຍາຍເຂົ້າ zoom_in_label=ຂະຫຍາຍເຂົ້າ zoom.title=ຂະຫຍາຍ presentation_mode.title=ສັບປ່ຽນເປັນໂຫມດການນຳສະເຫນີ presentation_mode_label=ໂຫມດການນຳສະເຫນີ open_file.title=ເປີດໄຟລ໌ open_file_label=ເປີດ print.title=ພິມ print_label=ພິມ download.title=ດາວໂຫລດ download_label=ດາວໂຫລດ bookmark.title=ມຸມມອງປະຈຸບັນ (ສຳເນົາ ຫລື ເປີດໃນວິນໂດໃຫມ່) bookmark_label=ມຸມມອງປະຈຸບັນ # Secondary toolbar and context menu tools.title=ເຄື່ອງມື tools_label=ເຄື່ອງມື first_page.title=ໄປທີ່ຫນ້າທຳອິດ first_page.label=ໄປທີ່ຫນ້າທຳອິດ first_page_label=ໄປທີ່ຫນ້າທຳອິດ last_page.title=ໄປທີ່ຫນ້າສຸດທ້າຍ last_page.label=ໄປທີ່ຫນ້າສຸດທ້າຍ last_page_label=ໄປທີ່ຫນ້າສຸດທ້າຍ page_rotate_cw.title=ຫມູນຕາມເຂັມໂມງ page_rotate_cw.label=ຫມູນຕາມເຂັມໂມງ page_rotate_cw_label=ຫມູນຕາມເຂັມໂມງ page_rotate_ccw.title=ຫມູນທວນເຂັມໂມງ page_rotate_ccw.label=ຫມູນທວນເຂັມໂມງ page_rotate_ccw_label=ຫມູນທວນເຂັມໂມງ # Document properties dialog box document_properties_file_name=ຊື່ໄຟລ໌: document_properties_file_size=ຂະຫນາດໄຟລ໌: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=ລວງຕັ້ງ document_properties_page_size_orientation_landscape=ລວງນອນ document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=ຈົດໝາຍ document_properties_page_size_name_legal=ຂໍ້ກົດຫມາຍ # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_close=ປິດ # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_close=ຍົກເລີກ # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=ເປີດ/ປິດແຖບຂ້າງ toggle_sidebar_notification.title=ເປີດ/ປິດແຖບຂ້າງ (ເອກະສານມີເຄົ້າຮ່າງ/ໄຟລ໌ແນບ) toggle_sidebar_label=ເປີດ/ປິດແຖບຂ້າງ document_outline_label=ເຄົ້າຮ່າງເອກະສານ findbar_label=ຄົ້ນຫາ # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. # Find panel button title and messages find_input.title=ຄົ້ນຫາ # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. # Error panel labels error_more_info=ຂໍ້ມູນເພີ່ມເຕີມ error_less_info=ຂໍ້ມູນນ້ອຍລົງ error_close=ປິດ # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number rendering_error=ມີຂໍ້ຜິດພາດເກີດຂື້ນຂະນະທີ່ກຳລັງເຣັນເດີຫນ້າ. # Predefined zoom values # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. # Loading indicator messages loading_error_indicator=ຂໍ້ຜິດພາດ loading_error=ມີຂໍ້ຜິດພາດເກີດຂື້ນຂະນະທີ່ກຳລັງໂຫລດ PDF. invalid_file_error=ໄຟລ໌ PDF ບໍ່ຖືກຕ້ອງຫລືເສຍຫາຍ. # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" password_ok=ຕົກລົງ password_cancel=ຍົກເລີກ ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/locale.properties ================================================ [ach] @import url(ach/viewer.properties) [af] @import url(af/viewer.properties) [an] @import url(an/viewer.properties) [ar] @import url(ar/viewer.properties) [ast] @import url(ast/viewer.properties) [az] @import url(az/viewer.properties) [be] @import url(be/viewer.properties) [bg] @import url(bg/viewer.properties) [bn] @import url(bn/viewer.properties) [bo] @import url(bo/viewer.properties) [br] @import url(br/viewer.properties) [brx] @import url(brx/viewer.properties) [bs] @import url(bs/viewer.properties) [ca] @import url(ca/viewer.properties) [cak] @import url(cak/viewer.properties) [ckb] @import url(ckb/viewer.properties) [cs] @import url(cs/viewer.properties) [cy] @import url(cy/viewer.properties) [da] @import url(da/viewer.properties) [de] @import url(de/viewer.properties) [dsb] @import url(dsb/viewer.properties) [el] @import url(el/viewer.properties) [en-CA] @import url(en-CA/viewer.properties) [en-GB] @import url(en-GB/viewer.properties) [en-US] @import url(en-US/viewer.properties) [eo] @import url(eo/viewer.properties) [es-AR] @import url(es-AR/viewer.properties) [es-CL] @import url(es-CL/viewer.properties) [es-ES] @import url(es-ES/viewer.properties) [es-MX] @import url(es-MX/viewer.properties) [et] @import url(et/viewer.properties) [eu] @import url(eu/viewer.properties) [fa] @import url(fa/viewer.properties) [ff] @import url(ff/viewer.properties) [fi] @import url(fi/viewer.properties) [fr] @import url(fr/viewer.properties) [fy-NL] @import url(fy-NL/viewer.properties) [ga-IE] @import url(ga-IE/viewer.properties) [gd] @import url(gd/viewer.properties) [gl] @import url(gl/viewer.properties) [gn] @import url(gn/viewer.properties) [gu-IN] @import url(gu-IN/viewer.properties) [he] @import url(he/viewer.properties) [hi-IN] @import url(hi-IN/viewer.properties) [hr] @import url(hr/viewer.properties) [hsb] @import url(hsb/viewer.properties) [hu] @import url(hu/viewer.properties) [hy-AM] @import url(hy-AM/viewer.properties) [hye] @import url(hye/viewer.properties) [ia] @import url(ia/viewer.properties) [id] @import url(id/viewer.properties) [is] @import url(is/viewer.properties) [it] @import url(it/viewer.properties) [ja] @import url(ja/viewer.properties) [ka] @import url(ka/viewer.properties) [kab] @import url(kab/viewer.properties) [kk] @import url(kk/viewer.properties) [km] @import url(km/viewer.properties) [kn] @import url(kn/viewer.properties) [ko] @import url(ko/viewer.properties) [lij] @import url(lij/viewer.properties) [lo] @import url(lo/viewer.properties) [lt] @import url(lt/viewer.properties) [ltg] @import url(ltg/viewer.properties) [lv] @import url(lv/viewer.properties) [meh] @import url(meh/viewer.properties) [mk] @import url(mk/viewer.properties) [mr] @import url(mr/viewer.properties) [ms] @import url(ms/viewer.properties) [my] @import url(my/viewer.properties) [nb-NO] @import url(nb-NO/viewer.properties) [ne-NP] @import url(ne-NP/viewer.properties) [nl] @import url(nl/viewer.properties) [nn-NO] @import url(nn-NO/viewer.properties) [oc] @import url(oc/viewer.properties) [pa-IN] @import url(pa-IN/viewer.properties) [pl] @import url(pl/viewer.properties) [pt-BR] @import url(pt-BR/viewer.properties) [pt-PT] @import url(pt-PT/viewer.properties) [rm] @import url(rm/viewer.properties) [ro] @import url(ro/viewer.properties) [ru] @import url(ru/viewer.properties) [scn] @import url(scn/viewer.properties) [si] @import url(si/viewer.properties) [sk] @import url(sk/viewer.properties) [sl] @import url(sl/viewer.properties) [son] @import url(son/viewer.properties) [sq] @import url(sq/viewer.properties) [sr] @import url(sr/viewer.properties) [sv-SE] @import url(sv-SE/viewer.properties) [szl] @import url(szl/viewer.properties) [ta] @import url(ta/viewer.properties) [te] @import url(te/viewer.properties) [th] @import url(th/viewer.properties) [tl] @import url(tl/viewer.properties) [tr] @import url(tr/viewer.properties) [trs] @import url(trs/viewer.properties) [uk] @import url(uk/viewer.properties) [ur] @import url(ur/viewer.properties) [uz] @import url(uz/viewer.properties) [vi] @import url(vi/viewer.properties) [wo] @import url(wo/viewer.properties) [xh] @import url(xh/viewer.properties) [zh-CN] @import url(zh-CN/viewer.properties) [zh-TW] @import url(zh-TW/viewer.properties) ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/lt/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Ankstesnis puslapis previous_label=Ankstesnis next.title=Kitas puslapis next_label=Kitas # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Puslapis # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=iš {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} iš {{pagesCount}}) zoom_out.title=Sumažinti zoom_out_label=Sumažinti zoom_in.title=Padidinti zoom_in_label=Padidinti zoom.title=Mastelis presentation_mode.title=Pereiti į pateikties veikseną presentation_mode_label=Pateikties veiksena open_file.title=Atverti failą open_file_label=Atverti print.title=Spausdinti print_label=Spausdinti download.title=Parsiųsti download_label=Parsiųsti bookmark.title=Esamojo rodinio saitas (kopijavimui ar atvėrimui kitame lange) bookmark_label=Esamasis rodinys # Secondary toolbar and context menu tools.title=Priemonės tools_label=Priemonės first_page.title=Eiti į pirmą puslapį first_page.label=Eiti į pirmą puslapį first_page_label=Eiti į pirmą puslapį last_page.title=Eiti į paskutinį puslapį last_page.label=Eiti į paskutinį puslapį last_page_label=Eiti į paskutinį puslapį page_rotate_cw.title=Pasukti pagal laikrodžio rodyklę page_rotate_cw.label=Pasukti pagal laikrodžio rodyklę page_rotate_cw_label=Pasukti pagal laikrodžio rodyklę page_rotate_ccw.title=Pasukti prieš laikrodžio rodyklę page_rotate_ccw.label=Pasukti prieš laikrodžio rodyklę page_rotate_ccw_label=Pasukti prieš laikrodžio rodyklę cursor_text_select_tool.title=Įjungti teksto žymėjimo įrankį cursor_text_select_tool_label=Teksto žymėjimo įrankis cursor_hand_tool.title=Įjungti vilkimo įrankį cursor_hand_tool_label=Vilkimo įrankis scroll_vertical.title=Naudoti vertikalų slinkimą scroll_vertical_label=Vertikalus slinkimas scroll_horizontal.title=Naudoti horizontalų slinkimą scroll_horizontal_label=Horizontalus slinkimas scroll_wrapped.title=Naudoti išklotą slinkimą scroll_wrapped_label=Išklotas slinkimas spread_none.title=Nejungti puslapių į dvilapius spread_none_label=Be dvilapių spread_odd.title=Sujungti į dvilapius pradedant nelyginiais puslapiais spread_odd_label=Nelyginiai dvilapiai spread_even.title=Sujungti į dvilapius pradedant lyginiais puslapiais spread_even_label=Lyginiai dvilapiai # Document properties dialog box document_properties.title=Dokumento savybės… document_properties_label=Dokumento savybės… document_properties_file_name=Failo vardas: document_properties_file_size=Failo dydis: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} B) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} B) document_properties_title=Antraštė: document_properties_author=Autorius: document_properties_subject=Tema: document_properties_keywords=Reikšminiai žodžiai: document_properties_creation_date=Sukūrimo data: document_properties_modification_date=Modifikavimo data: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Kūrėjas: document_properties_producer=PDF generatorius: document_properties_version=PDF versija: document_properties_page_count=Puslapių skaičius: document_properties_page_size=Puslapio dydis: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=stačias document_properties_page_size_orientation_landscape=gulsčias document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Laiškas document_properties_page_size_name_legal=Dokumentas # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Spartus žiniatinklio rodinys: document_properties_linearized_yes=Taip document_properties_linearized_no=Ne document_properties_close=Užverti print_progress_message=Dokumentas ruošiamas spausdinimui… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Atsisakyti # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Rodyti / slėpti šoninį polangį toggle_sidebar_notification.title=Parankinė (dokumentas turi struktūrą / priedų) toggle_sidebar_notification2.title=Parankinė (dokumentas turi struktūrą / priedų / sluoksnių) toggle_sidebar_label=Šoninis polangis document_outline.title=Rodyti dokumento struktūrą (spustelėkite dukart norėdami išplėsti/suskleisti visus elementus) document_outline_label=Dokumento struktūra attachments.title=Rodyti priedus attachments_label=Priedai layers.title=Rodyti sluoksnius (spustelėkite dukart, norėdami atstatyti visus sluoksnius į numatytąją būseną) layers_label=Sluoksniai thumbs.title=Rodyti puslapių miniatiūras thumbs_label=Miniatiūros current_outline_item.title=Rasti dabartinį struktūros elementą current_outline_item_label=Dabartinis struktūros elementas findbar.title=Ieškoti dokumente findbar_label=Rasti additional_layers=Papildomi sluoksniai # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas={{page}} puslapis # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title={{page}} puslapis # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas={{page}} puslapio miniatiūra # Find panel button title and messages find_input.title=Rasti find_input.placeholder=Rasti dokumente… find_previous.title=Ieškoti ankstesnio frazės egzemplioriaus find_previous_label=Ankstesnis find_next.title=Ieškoti tolesnio frazės egzemplioriaus find_next_label=Tolesnis find_highlight=Viską paryškinti find_match_case_label=Skirti didžiąsias ir mažąsias raides find_entire_word_label=Ištisi žodžiai find_reached_top=Pasiekus dokumento pradžią, paieška pratęsta nuo pabaigos find_reached_bottom=Pasiekus dokumento pabaigą, paieška pratęsta nuo pradžios # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} iš {{total}} atitikmens find_match_count[two]={{current}} iš {{total}} atitikmenų find_match_count[few]={{current}} iš {{total}} atitikmenų find_match_count[many]={{current}} iš {{total}} atitikmenų find_match_count[other]={{current}} iš {{total}} atitikmens # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Daugiau nei {{limit}} atitikmenų find_match_count_limit[one]=Daugiau nei {{limit}} atitikmuo find_match_count_limit[two]=Daugiau nei {{limit}} atitikmenys find_match_count_limit[few]=Daugiau nei {{limit}} atitikmenys find_match_count_limit[many]=Daugiau nei {{limit}} atitikmenų find_match_count_limit[other]=Daugiau nei {{limit}} atitikmuo find_not_found=Ieškoma frazė nerasta # Error panel labels error_more_info=Išsamiau error_less_info=Glausčiau error_close=Užverti # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v. {{version}} (darinys: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Pranešimas: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Dėklas: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Failas: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Eilutė: {{line}} rendering_error=Atvaizduojant puslapį įvyko klaida. # Predefined zoom values page_scale_width=Priderinti prie lapo pločio page_scale_fit=Pritaikyti prie lapo dydžio page_scale_auto=Automatinis mastelis page_scale_actual=Tikras dydis # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Klaida loading_error=Įkeliant PDF failą įvyko klaida. invalid_file_error=Tai nėra PDF failas arba jis yra sugadintas. missing_file_error=PDF failas nerastas. unexpected_response_error=Netikėtas serverio atsakas. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[„{{type}}“ tipo anotacija] password_label=Įveskite slaptažodį šiam PDF failui atverti. password_invalid=Slaptažodis neteisingas. Bandykite dar kartą. password_ok=Gerai password_cancel=Atsisakyti printing_not_supported=Dėmesio! Spausdinimas šioje naršyklėje nėra pilnai realizuotas. printing_not_ready=Dėmesio! PDF failas dar nėra pilnai įkeltas spausdinimui. web_fonts_disabled=Saityno šriftai išjungti – PDF faile esančių šriftų naudoti negalima. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ltg/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Īprīkšejā lopa previous_label=Īprīkšejā next.title=Nuokomuo lopa next_label=Nuokomuo # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Lopa # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=nu {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} nu {{pagesCount}}) zoom_out.title=Attuolynuot zoom_out_label=Attuolynuot zoom_in.title=Pītuvynuot zoom_in_label=Pītuvynuot zoom.title=Palelynuojums presentation_mode.title=Puorslēgtīs iz Prezentacejis režymu presentation_mode_label=Prezentacejis režyms open_file.title=Attaiseit failu open_file_label=Attaiseit print.title=Drukuošona print_label=Drukōt download.title=Lejupīluode download_label=Lejupīluodeit bookmark.title=Pošreizejais skots (kopēt voi attaiseit jaunā lūgā) bookmark_label=Pošreizejais skots # Secondary toolbar and context menu tools.title=Reiki tools_label=Reiki first_page.title=Īt iz pyrmū lopu first_page.label=Īt iz pyrmū lopu first_page_label=Īt iz pyrmū lopu last_page.title=Īt iz piedejū lopu last_page.label=Īt iz piedejū lopu last_page_label=Īt iz piedejū lopu page_rotate_cw.title=Pagrīzt pa pulksteni page_rotate_cw.label=Pagrīzt pa pulksteni page_rotate_cw_label=Pagrīzt pa pulksteni page_rotate_ccw.title=Pagrīzt pret pulksteni page_rotate_ccw.label=Pagrīzt pret pulksteni page_rotate_ccw_label=Pagrīzt pret pulksteni cursor_text_select_tool.title=Aktivizēt teksta izvieles reiku cursor_text_select_tool_label=Teksta izvieles reiks cursor_hand_tool.title=Aktivēt rūkys reiku cursor_hand_tool_label=Rūkys reiks scroll_vertical.title=Izmontōt vertikalū ritinōšonu scroll_vertical_label=Vertikalō ritinōšona scroll_horizontal.title=Izmontōt horizontalū ritinōšonu scroll_horizontal_label=Horizontalō ritinōšona scroll_wrapped.title=Izmontōt mārūgojamū ritinōšonu scroll_wrapped_label=Mārūgojamō ritinōšona spread_none.title=Naizmontōt lopu atvāruma režimu spread_none_label=Bez atvārumim spread_odd.title=Izmontōt lopu atvārumus sōkut nu napōra numeru lopom spread_odd_label=Napōra lopys pa kreisi spread_even.title=Izmontōt lopu atvārumus sōkut nu pōra numeru lopom spread_even_label=Pōra lopys pa kreisi # Document properties dialog box document_properties.title=Dokumenta īstatiejumi… document_properties_label=Dokumenta īstatiejumi… document_properties_file_name=Faila nūsaukums: document_properties_file_size=Faila izmārs: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} biti) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} biti) document_properties_title=Nūsaukums: document_properties_author=Autors: document_properties_subject=Tema: document_properties_keywords=Atslāgi vuordi: document_properties_creation_date=Izveides datums: document_properties_modification_date=lobuošonys datums: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Radeituojs: document_properties_producer=PDF producents: document_properties_version=PDF verseja: document_properties_page_count=Lopu skaits: document_properties_page_size=Lopas izmārs: document_properties_page_size_unit_inches=collas document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=portreta orientaceja document_properties_page_size_orientation_landscape=ainovys orientaceja document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Fast Web View: document_properties_linearized_yes=Jā document_properties_linearized_no=Nā document_properties_close=Aiztaiseit print_progress_message=Preparing document for printing… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Atceļt # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Puorslēgt suonu jūslu toggle_sidebar_notification.title=Toggle Sidebar (document contains outline/attachments) toggle_sidebar_label=Puorslēgt suonu jūslu document_outline.title=Show Document Outline (double-click to expand/collapse all items) document_outline_label=Dokumenta saturs attachments.title=Show Attachments attachments_label=Attachments thumbs.title=Paruodeit seiktālus thumbs_label=Seiktāli findbar.title=Mekleit dokumentā findbar_label=Mekleit # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Lopa {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Lopys {{page}} seiktāls # Find panel button title and messages find_input.title=Mekleit find_input.placeholder=Mekleit dokumentā… find_previous.title=Atrast īprīkšejū find_previous_label=Īprīkšejā find_next.title=Atrast nuokamū find_next_label=Nuokomuo find_highlight=Īkruosuot vysys find_match_case_label=Lelū, mozū burtu jiuteigs find_reached_top=Sasnīgts dokumenta suokums, turpynojom nu beigom find_reached_bottom=Sasnīgtys dokumenta beigys, turpynojom nu suokuma find_not_found=Frāze nav atrosta # Error panel labels error_more_info=Vairuok informacejis error_less_info=mozuok informacejis error_close=Close # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Ziņuojums: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Steks: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=File: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Ryndeņa: {{line}} rendering_error=Attālojūt lopu rodās klaida # Predefined zoom values page_scale_width=Lopys plotumā page_scale_fit=Ītylpynūt lopu page_scale_auto=Automatiskais izmārs page_scale_actual=Patīsais izmārs # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Klaida loading_error=Īluodejūt PDF nūtyka klaida. invalid_file_error=Nadereigs voi būjuots PDF fails. missing_file_error=PDF fails nav atrosts. unexpected_response_error=Unexpected server response. # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Annotation] password_label=Īvodit paroli, kab attaiseitu PDF failu. password_invalid=Napareiza parole, raugit vēļreiz. password_ok=Labi password_cancel=Atceļt printing_not_supported=Uzmaneibu: Drukuošona nu itei puorlūka dorbojās tikai daleji. printing_not_ready=Uzmaneibu: PDF nav pilneibā īluodeits drukuošonai. web_fonts_disabled=Šķārsteikla fonti nav aktivizāti: Navar īgult PDF fontus. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/lv/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Iepriekšējā lapa previous_label=Iepriekšējā next.title=Nākamā lapa next_label=Nākamā # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Lapa # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=no {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} no {{pagesCount}}) zoom_out.title=Attālināt\u0020 zoom_out_label=Attālināt zoom_in.title=Pietuvināt zoom_in_label=Pietuvināt zoom.title=Palielinājums presentation_mode.title=Pārslēgties uz Prezentācijas režīmu presentation_mode_label=Prezentācijas režīms open_file.title=Atvērt failu open_file_label=Atvērt print.title=Drukāšana print_label=Drukāt download.title=Lejupielāde download_label=Lejupielādēt bookmark.title=Pašreizējais skats (kopēt vai atvērt jaunā logā) bookmark_label=Pašreizējais skats # Secondary toolbar and context menu tools.title=Rīki tools_label=Rīki first_page.title=Iet uz pirmo lapu first_page.label=Iet uz pirmo lapu first_page_label=Iet uz pirmo lapu last_page.title=Iet uz pēdējo lapu last_page.label=Iet uz pēdējo lapu last_page_label=Iet uz pēdējo lapu page_rotate_cw.title=Pagriezt pa pulksteni page_rotate_cw.label=Pagriezt pa pulksteni page_rotate_cw_label=Pagriezt pa pulksteni page_rotate_ccw.title=Pagriezt pret pulksteni page_rotate_ccw.label=Pagriezt pret pulksteni page_rotate_ccw_label=Pagriezt pret pulksteni cursor_text_select_tool.title=Aktivizēt teksta izvēles rīku cursor_text_select_tool_label=Teksta izvēles rīks cursor_hand_tool.title=Aktivēt rokas rīku cursor_hand_tool_label=Rokas rīks scroll_vertical.title=Izmantot vertikālo ritināšanu scroll_vertical_label=Vertikālā ritināšana scroll_horizontal.title=Izmantot horizontālo ritināšanu scroll_horizontal_label=Horizontālā ritināšana scroll_wrapped.title=Izmantot apkļauto ritināšanu scroll_wrapped_label=Apkļautā ritināšana spread_none.title=Nepievienoties lapu izpletumiem spread_none_label=Neizmantot izpletumus spread_odd.title=Izmantot lapu izpletumus sākot ar nepāra numuru lapām spread_odd_label=Nepāra izpletumi spread_even.title=Izmantot lapu izpletumus sākot ar pāra numuru lapām spread_even_label=Pāra izpletumi # Document properties dialog box document_properties.title=Dokumenta iestatījumi… document_properties_label=Dokumenta iestatījumi… document_properties_file_name=Faila nosaukums: document_properties_file_size=Faila izmērs: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} biti) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} biti) document_properties_title=Nosaukums: document_properties_author=Autors: document_properties_subject=Tēma: document_properties_keywords=Atslēgas vārdi: document_properties_creation_date=Izveides datums: document_properties_modification_date=LAbošanas datums: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Radītājs: document_properties_producer=PDF producents: document_properties_version=PDF versija: document_properties_page_count=Lapu skaits: document_properties_page_size=Papīra izmērs: document_properties_page_size_unit_inches=collas document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=portretorientācija document_properties_page_size_orientation_landscape=ainavorientācija document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Vēstule document_properties_page_size_name_legal=Juridiskie teksti # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Ātrā tīmekļa skats: document_properties_linearized_yes=Jā document_properties_linearized_no=Nē document_properties_close=Aizvērt print_progress_message=Gatavo dokumentu drukāšanai... # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Atcelt # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Pārslēgt sānu joslu toggle_sidebar_notification.title=Pārslēgt sānu joslu (dokumenta saturu un pielikumus) toggle_sidebar_label=Pārslēgt sānu joslu document_outline.title=Rādīt dokumenta struktūru (veiciet dubultklikšķi lai izvērstu/sakļautu visus vienumus) document_outline_label=Dokumenta saturs attachments.title=Rādīt pielikumus attachments_label=Pielikumi thumbs.title=Parādīt sīktēlus thumbs_label=Sīktēli findbar.title=Meklēt dokumentā findbar_label=Meklēt # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Lapa {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Lapas {{page}} sīktēls # Find panel button title and messages find_input.title=Meklēt find_input.placeholder=Meklēt dokumentā… find_previous.title=Atrast iepriekšējo find_previous_label=Iepriekšējā find_next.title=Atrast nākamo find_next_label=Nākamā find_highlight=Iekrāsot visas find_match_case_label=Lielo, mazo burtu jutīgs find_entire_word_label=Veselus vārdus find_reached_top=Sasniegts dokumenta sākums, turpinām no beigām find_reached_bottom=Sasniegtas dokumenta beigas, turpinām no sākuma # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} no {{total}} rezultāta find_match_count[two]={{current}} no {{total}} rezultātiem find_match_count[few]={{current}} no {{total}} rezultātiem find_match_count[many]={{current}} no {{total}} rezultātiem find_match_count[other]={{current}} no {{total}} rezultātiem # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Vairāk nekā {{limit}} rezultāti find_match_count_limit[one]=Vairāk nekā {{limit}} rezultāti find_match_count_limit[two]=Vairāk nekā {{limit}} rezultāti find_match_count_limit[few]=Vairāk nekā {{limit}} rezultāti find_match_count_limit[many]=Vairāk nekā {{limit}} rezultāti find_match_count_limit[other]=Vairāk nekā {{limit}} rezultāti find_not_found=Frāze nav atrasta # Error panel labels error_more_info=Vairāk informācijas error_less_info=MAzāk informācijas error_close=Close # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Ziņojums: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Steks: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=File: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Rindiņa: {{line}} rendering_error=Attēlojot lapu radās kļūda # Predefined zoom values page_scale_width=Lapas platumā page_scale_fit=Ietilpinot lapu page_scale_auto=Automātiskais izmērs page_scale_actual=Patiesais izmērs # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Kļūda loading_error=Ielādējot PDF notika kļūda. invalid_file_error=Nederīgs vai bojāts PDF fails. missing_file_error=PDF fails nav atrasts. unexpected_response_error=Negaidīa servera atbilde. # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} anotācija] password_label=Ievadiet paroli, lai atvērtu PDF failu. password_invalid=Nepareiza parole, mēģiniet vēlreiz. password_ok=Labi password_cancel=Atcelt printing_not_supported=Uzmanību: Drukāšana no šī pārlūka darbojas tikai daļēji. printing_not_ready=Uzmanību: PDF nav pilnībā ielādēts drukāšanai. web_fonts_disabled=Tīmekļa fonti nav aktivizēti: Nevar iegult PDF fontus. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/meh/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Página yata # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. zoom.title=Nasa´a ka´nu/Nasa´a luli open_file_label=Síne # Secondary toolbar and context menu # Document properties dialog box # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized_yes=Kuvi document_properties_close=Nakasɨ # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Nkuvi-ka # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) findbar_label=Nánuku # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. # Find panel button title and messages find_input.title=Nánuku # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} # Error panel labels error_close=Nakasɨ # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number # Predefined zoom values # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" password_cancel=Nkuvi-ka ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/mk/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Претходна страница previous_label=Претходна next.title=Следна страница next_label=Следна # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. zoom_out.title=Намалување zoom_out_label=Намали zoom_in.title=Зголемување zoom_in_label=Зголеми zoom.title=Променување на големина presentation_mode.title=Премини во презентациски режим presentation_mode_label=Презентациски режим open_file.title=Отворање датотека open_file_label=Отвори print.title=Печатење print_label=Печати download.title=Преземање download_label=Преземи bookmark.title=Овој преглед (копирај или отвори во нов прозорец) bookmark_label=Овој преглед # Secondary toolbar and context menu tools.title=Алатки first_page.label=Оди до првата страница last_page.label=Оди до последната страница page_rotate_cw.label=Ротирај по стрелките на часовникот page_rotate_ccw.label=Ротирај спротивно од стрелките на часовникот # Document properties dialog box # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_close=Откажи # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Вклучи странична лента toggle_sidebar_label=Вклучи странична лента thumbs.title=Прикажување на икони thumbs_label=Икони findbar.title=Најди во документот findbar_label=Најди # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Страница {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Икона од страница {{page}} # Find panel button title and messages find_previous.title=Најди ја предходната појава на фразата find_previous_label=Претходно find_next.title=Најди ја следната појава на фразата find_next_label=Следно find_highlight=Означи сѐ find_match_case_label=Токму така find_reached_top=Барањето стигна до почетокот на документот и почнува од крајот find_reached_bottom=Барањето стигна до крајот на документот и почнува од почеток find_not_found=Фразата не е пронајдена # Error panel labels error_more_info=Повеќе информации error_less_info=Помалку информации error_close=Затвори # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Порака: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stack: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Датотека: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Линија: {{line}} rendering_error=Настана грешка при прикажувањето на страницата. # Predefined zoom values page_scale_width=Ширина на страница page_scale_fit=Цела страница page_scale_auto=Автоматска големина page_scale_actual=Вистинска големина # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. # Loading indicator messages loading_error_indicator=Грешка loading_error=Настана грешка при вчитувањето на PDF-от. invalid_file_error=Невалидна или корумпирана PDF датотека. missing_file_error=Недостасува PDF документ. # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" password_cancel=Откажи printing_not_supported=Предупредување: Печатењето не е целосно поддржано во овој прелистувач. printing_not_ready=Предупредување: PDF документот не е целосно вчитан за печатење. web_fonts_disabled=Интернет фонтовите се оневозможени: не може да се користат вградените PDF фонтови. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/mr/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=मागील पृष्ठ previous_label=मागील next.title=पुढील पृष्ठ next_label=पुढील # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=पृष्ठ # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages={{pagesCount}}पैकी # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pagesCount}} पैकी {{pageNumber}}) zoom_out.title=छोटे करा zoom_out_label=छोटे करा zoom_in.title=मोठे करा zoom_in_label=मोठे करा zoom.title=लहान किंवा मोठे करा presentation_mode.title=प्रस्तुतिकरण मोडचा वापर करा presentation_mode_label=प्रस्तुतिकरण मोड open_file.title=फाइल उघडा open_file_label=उघडा print.title=छपाई करा print_label=छपाई करा download.title=डाउनलोड करा download_label=डाउनलोड करा bookmark.title=सध्याचे अवलोकन (नवीन पटलात प्रत बनवा किंवा उघडा) bookmark_label=सध्याचे अवलोकन # Secondary toolbar and context menu tools.title=साधने tools_label=साधने first_page.title=पहिल्या पृष्ठावर जा first_page.label=पहिल्या पृष्ठावर जा first_page_label=पहिल्या पृष्ठावर जा last_page.title=शेवटच्या पृष्ठावर जा last_page.label=शेवटच्या पृष्ठावर जा last_page_label=शेवटच्या पृष्ठावर जा page_rotate_cw.title=घड्याळाच्या काट्याच्या दिशेने फिरवा page_rotate_cw.label=घड्याळाच्या काट्याच्या दिशेने फिरवा page_rotate_cw_label=घड्याळाच्या काट्याच्या दिशेने फिरवा page_rotate_ccw.title=घड्याळाच्या काट्याच्या उलट दिशेने फिरवा page_rotate_ccw.label=घड्याळाच्या काट्याच्या उलट दिशेने फिरवा page_rotate_ccw_label=घड्याळाच्या काट्याच्या उलट दिशेने फिरवा cursor_text_select_tool.title=मजकूर निवड साधन कार्यान्वयीत करा cursor_text_select_tool_label=मजकूर निवड साधन cursor_hand_tool.title=हात साधन कार्यान्वित करा cursor_hand_tool_label=हस्त साधन scroll_vertical.title=अनुलंब स्क्रोलिंग वापरा scroll_vertical_label=अनुलंब स्क्रोलिंग scroll_horizontal.title=क्षैतिज स्क्रोलिंग वापरा scroll_horizontal_label=क्षैतिज स्क्रोलिंग # Document properties dialog box document_properties.title=दस्तऐवज गुणधर्म… document_properties_label=दस्तऐवज गुणधर्म… document_properties_file_name=फाइलचे नाव: document_properties_file_size=फाइल आकार: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} बाइट्स) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} बाइट्स) document_properties_title=शिर्षक: document_properties_author=लेखक: document_properties_subject=विषय: document_properties_keywords=मुख्यशब्द: document_properties_creation_date=निर्माण दिनांक: document_properties_modification_date=दुरूस्ती दिनांक: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=निर्माता: document_properties_producer=PDF निर्माता: document_properties_version=PDF आवृत्ती: document_properties_page_count=पृष्ठ संख्या: document_properties_page_size=पृष्ठ आकार: document_properties_page_size_unit_inches=इंच document_properties_page_size_unit_millimeters=मीमी document_properties_page_size_orientation_portrait=उभी मांडणी document_properties_page_size_orientation_landscape=आडवे document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=जलद वेब दृष्य: document_properties_linearized_yes=हो document_properties_linearized_no=नाही document_properties_close=बंद करा print_progress_message=छपाई करीता पृष्ठ तयार करीत आहे… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=रद्द करा # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=बाजूचीपट्टी टॉगल करा toggle_sidebar_notification.title=बाजूची पट्टी टॉगल करा (दस्तऐवजामध्ये रुपरेषा/जोडण्या आहेत) toggle_sidebar_label=बाजूचीपट्टी टॉगल करा document_outline.title=दस्तऐवज बाह्यरेखा दर्शवा (विस्तृत करण्यासाठी दोनवेळा क्लिक करा /सर्व घटक दाखवा) document_outline_label=दस्तऐवज रूपरेषा attachments.title=जोडपत्र दाखवा attachments_label=जोडपत्र thumbs.title=थंबनेल्स् दाखवा thumbs_label=थंबनेल्स् findbar.title=दस्तऐवजात शोधा findbar_label=शोधा # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=पृष्ठ {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=पृष्ठाचे थंबनेल {{page}} # Find panel button title and messages find_input.title=शोधा find_input.placeholder=दस्तऐवजात शोधा… find_previous.title=वाकप्रयोगची मागील घटना शोधा find_previous_label=मागील find_next.title=वाकप्रयोगची पुढील घटना शोधा find_next_label=पुढील find_highlight=सर्व ठळक करा find_match_case_label=आकार जुळवा find_entire_word_label=संपूर्ण शब्द find_reached_top=दस्तऐवजाच्या शीर्षकास पोहचले, तळपासून पुढे find_reached_bottom=दस्तऐवजाच्या तळाला पोहचले, शीर्षकापासून पुढे # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{total}} पैकी {{current}} सुसंगत find_match_count[two]={{total}} पैकी {{current}} सुसंगत find_match_count[few]={{total}} पैकी {{current}} सुसंगत find_match_count[many]={{total}} पैकी {{current}} सुसंगत find_match_count[other]={{total}} पैकी {{current}} सुसंगत # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]={{limit}} पेक्षा अधिक जुळण्या find_match_count_limit[one]={{limit}} पेक्षा अधिक जुळण्या find_match_count_limit[two]={{limit}} पेक्षा अधिक जुळण्या find_match_count_limit[few]={{limit}} पेक्षा अधिक जुळण्या find_match_count_limit[many]={{limit}} पेक्षा अधिक जुळण्या find_match_count_limit[other]={{limit}} पेक्षा अधिक जुळण्या find_not_found=वाकप्रयोग आढळले नाही # Error panel labels error_more_info=आणखी माहिती error_less_info=कमी माहिती error_close=बंद करा # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=संदेश: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=स्टॅक: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=फाइल: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=रेष: {{line}} rendering_error=पृष्ठ दाखवतेवेळी त्रुटी आढळली. # Predefined zoom values page_scale_width=पृष्ठाची रूंदी page_scale_fit=पृष्ठ बसवा page_scale_auto=स्वयं लाहन किंवा मोठे करणे page_scale_actual=प्रत्यक्ष आकार # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=त्रुटी loading_error=PDF लोड करतेवेळी त्रुटी आढळली. invalid_file_error=अवैध किंवा दोषीत PDF फाइल. missing_file_error=न आढळणारी PDF फाइल. unexpected_response_error=अनपेक्षित सर्व्हर प्रतिसाद. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} टिपण्णी] password_label=ही PDF फाइल उघडण्याकरिता पासवर्ड द्या. password_invalid=अवैध पासवर्ड. कृपया पुन्हा प्रयत्न करा. password_ok=ठीक आहे password_cancel=रद्द करा printing_not_supported=सावधानता: या ब्राउझरतर्फे छपाइ पूर्णपणे समर्थीत नाही. printing_not_ready=सावधानता: छपाईकरिता PDF पूर्णतया लोड झाले नाही. web_fonts_disabled=वेब टंक असमर्थीत आहेत: एम्बेडेड PDF टंक वापर अशक्य. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ms/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Halaman Dahulu previous_label=Dahulu next.title=Halaman Berikut next_label=Berikut # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Halaman # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=daripada {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} daripada {{pagesCount}}) zoom_out.title=Zum Keluar zoom_out_label=Zum Keluar zoom_in.title=Zum Masuk zoom_in_label=Zum Masuk zoom.title=Zum presentation_mode.title=Tukar ke Mod Persembahan presentation_mode_label=Mod Persembahan open_file.title=Buka Fail open_file_label=Buka print.title=Cetak print_label=Cetak download.title=Muat turun download_label=Muat turun bookmark.title=Paparan semasa (salin atau buka dalam tetingkap baru) bookmark_label=Paparan Semasa # Secondary toolbar and context menu tools.title=Alatan tools_label=Alatan first_page.title=Pergi ke Halaman Pertama first_page.label=Pergi ke Halaman Pertama first_page_label=Pergi ke Halaman Pertama last_page.title=Pergi ke Halaman Terakhir last_page.label=Pergi ke Halaman Terakhir last_page_label=Pergi ke Halaman Terakhir page_rotate_cw.title=Berputar ikut arah Jam page_rotate_cw.label=Berputar ikut arah Jam page_rotate_cw_label=Berputar ikut arah Jam page_rotate_ccw.title=Pusing berlawan arah jam page_rotate_ccw.label=Pusing berlawan arah jam page_rotate_ccw_label=Pusing berlawan arah jam cursor_text_select_tool.title=Dayakan Alatan Pilihan Teks cursor_text_select_tool_label=Alatan Pilihan Teks cursor_hand_tool.title=Dayakan Alatan Tangan cursor_hand_tool_label=Alatan Tangan scroll_vertical.title=Guna Skrol Menegak scroll_vertical_label=Skrol Menegak scroll_horizontal.title=Guna Skrol Mengufuk scroll_horizontal_label=Skrol Mengufuk scroll_wrapped.title=Guna Skrol Berbalut scroll_wrapped_label=Skrol Berbalut spread_none.title=Jangan hubungkan hamparan halaman spread_none_label=Tanpa Hamparan spread_odd.title=Hubungkan hamparan halaman dengan halaman nombor ganjil spread_odd_label=Hamparan Ganjil spread_even.title=Hubungkan hamparan halaman dengan halaman nombor genap spread_even_label=Hamparan Seimbang # Document properties dialog box document_properties.title=Sifat Dokumen… document_properties_label=Sifat Dokumen… document_properties_file_name=Nama fail: document_properties_file_size=Saiz fail: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bait) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bait) document_properties_title=Tajuk: document_properties_author=Pengarang: document_properties_subject=Subjek: document_properties_keywords=Kata kunci: document_properties_creation_date=Masa Dicipta: document_properties_modification_date=Tarikh Ubahsuai: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Pencipta: document_properties_producer=Pengeluar PDF: document_properties_version=Versi PDF: document_properties_page_count=Kiraan Laman: document_properties_page_size=Saiz Halaman: document_properties_page_size_unit_inches=dalam document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=potret document_properties_page_size_orientation_landscape=landskap document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Paparan Web Pantas: document_properties_linearized_yes=Ya document_properties_linearized_no=Tidak document_properties_close=Tutup print_progress_message=Menyediakan dokumen untuk dicetak… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Batal # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Togol Bar Sisi toggle_sidebar_notification.title=Togol Sidebar (dokumen mengandungi rangka/attachments) toggle_sidebar_label=Togol Bar Sisi document_outline.title=Papar Rangka Dokumen (klik-dua-kali untuk kembangkan/kolaps semua item) document_outline_label=Rangka Dokumen attachments.title=Papar Lampiran attachments_label=Lampiran thumbs.title=Papar Thumbnails thumbs_label=Imej kecil findbar.title=Cari didalam Dokumen findbar_label=Cari # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Halaman {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Halaman Imej kecil {{page}} # Find panel button title and messages find_input.title=Cari find_input.placeholder=Cari dalam dokumen… find_previous.title=Cari teks frasa berkenaan yang terdahulu find_previous_label=Dahulu find_next.title=Cari teks frasa berkenaan yang berikut find_next_label=Berikut find_highlight=Serlahkan semua find_match_case_label=Huruf sepadan find_entire_word_label=Seluruh perkataan find_reached_top=Mencapai teratas daripada dokumen, sambungan daripada bawah find_reached_bottom=Mencapai terakhir daripada dokumen, sambungan daripada atas # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} daripada {{total}} padanan find_match_count[two]={{current}} daripada {{total}} padanan find_match_count[few]={{current}} daripada {{total}} padanan find_match_count[many]={{current}} daripada {{total}} padanan find_match_count[other]={{current}} daripada {{total}} padanan # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Lebih daripada {{limit}} padanan find_match_count_limit[one]=Lebih daripada {{limit}} padanan find_match_count_limit[two]=Lebih daripada {{limit}} padanan find_match_count_limit[few]=Lebih daripada {{limit}} padanan find_match_count_limit[many]=Lebih daripada {{limit}} padanan find_match_count_limit[other]=Lebih daripada {{limit}} padanan find_not_found=Frasa tidak ditemui # Error panel labels error_more_info=Maklumat Lanjut error_less_info=Kurang Informasi error_close=Tutup # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Mesej: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Timbun: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Fail: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Garis: {{line}} rendering_error=Ralat berlaku ketika memberikan halaman. # Predefined zoom values page_scale_width=Lebar Halaman page_scale_fit=Muat Halaman page_scale_auto=Zoom Automatik page_scale_actual=Saiz Sebenar # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Ralat loading_error=Masalah berlaku semasa menuatkan sebuah PDF. invalid_file_error=Tidak sah atau fail PDF rosak. missing_file_error=Fail PDF Hilang. unexpected_response_error=Respon pelayan yang tidak dijangka. # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Anotasi] password_label=Masukan kata kunci untuk membuka fail PDF ini. password_invalid=Kata laluan salah. Cuba lagi. password_ok=OK password_cancel=Batal printing_not_supported=Amaran: Cetakan ini tidak sepenuhnya disokong oleh pelayar ini. printing_not_ready=Amaran: PDF tidak sepenuhnya dimuatkan untuk dicetak. web_fonts_disabled=Fon web dinyahdayakan: tidak dapat menggunakan fon terbenam PDF. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/my/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=အရင် စာမျက်နှာ previous_label=အရင်နေရာ next.title=ရှေ့ စာမျက်နှာ next_label=နောက်တခု # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=စာမျက်နှာ # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages={{pagesCount}} ၏ # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pagesCount}} ၏ {{pageNumber}}) zoom_out.title=ချုံ့ပါ zoom_out_label=ချုံ့ပါ zoom_in.title=ချဲ့ပါ zoom_in_label=ချဲ့ပါ zoom.title=ချုံ့/ချဲ့ပါ presentation_mode.title=ဆွေးနွေးတင်ပြစနစ်သို့ ကူးပြောင်းပါ presentation_mode_label=ဆွေးနွေးတင်ပြစနစ် open_file.title=ဖိုင်အားဖွင့်ပါ။ open_file_label=ဖွင့်ပါ print.title=ပုံနှိုပ်ပါ print_label=ပုံနှိုပ်ပါ download.title=ကူးဆွဲ download_label=ကူးဆွဲ bookmark.title=လက်ရှိ မြင်ကွင်း (ဝင်းဒိုးအသစ်မှာ ကူးပါ သို့မဟုတ် ဖွင့်ပါ) bookmark_label=လက်ရှိ မြင်ကွင်း # Secondary toolbar and context menu tools.title=ကိရိယာများ tools_label=ကိရိယာများ first_page.title=ပထမ စာမျက်နှာသို့ first_page.label=ပထမ စာမျက်နှာသို့ first_page_label=ပထမ စာမျက်နှာသို့ last_page.title=နောက်ဆုံး စာမျက်နှာသို့ last_page.label=နောက်ဆုံး စာမျက်နှာသို့ last_page_label=နောက်ဆုံး စာမျက်နှာသို့ page_rotate_cw.title=နာရီလက်တံ အတိုင်း page_rotate_cw.label=နာရီလက်တံ အတိုင်း page_rotate_cw_label=နာရီလက်တံ အတိုင်း page_rotate_ccw.title=နာရီလက်တံ ပြောင်းပြန် page_rotate_ccw.label=နာရီလက်တံ ပြောင်းပြန် page_rotate_ccw_label=နာရီလက်တံ ပြောင်းပြန် # Document properties dialog box document_properties.title=မှတ်တမ်းမှတ်ရာ ဂုဏ်သတ္တိများ document_properties_label=မှတ်တမ်းမှတ်ရာ ဂုဏ်သတ္တိများ document_properties_file_name=ဖိုင် : document_properties_file_size=ဖိုင်ဆိုဒ် : # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} ကီလိုဘိုတ် ({{size_b}}ဘိုတ်) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=ခေါင်းစဉ်‌ - document_properties_author=ရေးသားသူ: document_properties_subject=အကြောင်းအရာ:\u0020 document_properties_keywords=သော့ချက် စာလုံး: document_properties_creation_date=ထုတ်လုပ်ရက်စွဲ: document_properties_modification_date=ပြင်ဆင်ရက်စွဲ: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=ဖန်တီးသူ: document_properties_producer=PDF ထုတ်လုပ်သူ: document_properties_version=PDF ဗားရှင်း: document_properties_page_count=စာမျက်နှာအရေအတွက်: # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_close=ပိတ် print_progress_message=Preparing document for printing… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=ပယ်​ဖျက်ပါ # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=ဘေးတန်းဖွင့်ပိတ် toggle_sidebar_notification.title=ဘေးဘားတန်းကို အဖွင့်/အပိတ် လုပ်ရန် (စာတမ်းတွင် outline/attachments ပါဝင်နိုင်သည်) toggle_sidebar_label=ဖွင့်ပိတ် ဆလိုက်ဒါ document_outline.title=စာတမ်းအကျဉ်းချုပ်ကို ပြပါ (စာရင်းအားလုံးကို ချုံ့/ချဲ့ရန် ကလစ်နှစ်ချက်နှိပ်ပါ) document_outline_label=စာတမ်းအကျဉ်းချုပ် attachments.title=တွဲချက်များ ပြပါ attachments_label=တွဲထားချက်များ thumbs.title=ပုံရိပ်ငယ်များကို ပြပါ thumbs_label=ပုံရိပ်ငယ်များ findbar.title=Find in Document findbar_label=ရှာဖွေပါ # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=စာမျက်နှာ {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=စာမျက်နှာရဲ့ ပုံရိပ်ငယ် {{page}} # Find panel button title and messages find_input.title=ရှာဖွေပါ find_input.placeholder=စာတမ်းထဲတွင် ရှာဖွေရန်… find_previous.title=စကားစုရဲ့ အရင် ​ဖြစ်ပွားမှုကို ရှာဖွေပါ find_previous_label=နောက်သို့ find_next.title=စကားစုရဲ့ နောက်ထပ် ​ဖြစ်ပွားမှုကို ရှာဖွေပါ find_next_label=ရှေ့သို့ find_highlight=အားလုံးကို မျဉ်းသားပါ find_match_case_label=စာလုံး တိုက်ဆိုင်ပါ find_reached_top=စာမျက်နှာထိပ် ရောက်နေပြီ၊ အဆုံးကနေ ပြန်စပါ find_reached_bottom=စာမျက်နှာအဆုံး ရောက်နေပြီ၊ ထိပ်ကနေ ပြန်စပါ # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_not_found=စကားစု မတွေ့ရဘူး # Error panel labels error_more_info=နောက်ထပ်အချက်အလက်များ error_less_info=အနည်းငယ်မျှသော သတင်းအချက်အလက် error_close=ပိတ် # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=မက်ဆေ့ - {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=အထပ် - {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=ဖိုင် {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=လိုင်း - {{line}} rendering_error=စာမျက်နှာကို ပုံဖော်နေချိန်မှာ အမှားတစ်ခုတွေ့ရပါတယ်။ # Predefined zoom values page_scale_width=စာမျက်နှာ အကျယ် page_scale_fit=စာမျက်နှာ ကွက်တိ page_scale_auto=အလိုအလျောက် ချုံ့ချဲ့ page_scale_actual=အမှန်တကယ်ရှိတဲ့ အရွယ် # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=အမှား loading_error=PDF ဖိုင် ကိုဆွဲတင်နေချိန်မှာ အမှားတစ်ခုတွေ့ရပါတယ်။ invalid_file_error=မရသော သို့ ပျက်နေသော PDF ဖိုင် missing_file_error=PDF ပျောက်ဆုံး unexpected_response_error=မမျှော်လင့်ထားသော ဆာဗာမှ ပြန်ကြားချက် # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} အဓိပ္ပာယ်ဖွင့်ဆိုချက်] password_label=ယခု PDF ကို ဖွင့်ရန် စကားဝှက်ကို ရိုက်ပါ။ password_invalid=စာဝှက် မှားသည်။ ထပ်ကြိုးစားကြည့်ပါ။ password_ok=OK password_cancel=ပယ်​ဖျက်ပါ printing_not_supported=သတိပေးချက်၊ပရင့်ထုတ်ခြင်းကိုဤဘယောက်ဆာသည် ပြည့်ဝစွာထောက်ပံ့မထားပါ ။ printing_not_ready=သတိပေးချက်: ယခု PDF ဖိုင်သည် ပုံနှိပ်ရန် မပြည့်စုံပါ web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/nb-NO/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Forrige side previous_label=Forrige next.title=Neste side next_label=Neste # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Side # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=av {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} av {{pagesCount}}) zoom_out.title=Zoom ut zoom_out_label=Zoom ut zoom_in.title=Zoom inn zoom_in_label=Zoom inn zoom.title=Zoom presentation_mode.title=Bytt til presentasjonsmodus presentation_mode_label=Presentasjonsmodus open_file.title=Åpne fil open_file_label=Åpne print.title=Skriv ut print_label=Skriv ut download.title=Last ned download_label=Last ned bookmark.title=Nåværende visning (kopier eller åpne i et nytt vindu) bookmark_label=Nåværende visning # Secondary toolbar and context menu tools.title=Verktøy tools_label=Verktøy first_page.title=Gå til første side first_page.label=Gå til første side first_page_label=Gå til første side last_page.title=Gå til siste side last_page.label=Gå til siste side last_page_label=Gå til siste side page_rotate_cw.title=Roter med klokken page_rotate_cw.label=Roter med klokken page_rotate_cw_label=Roter med klokken page_rotate_ccw.title=Roter mot klokken page_rotate_ccw.label=Roter mot klokken page_rotate_ccw_label=Roter mot klokken cursor_text_select_tool.title=Aktiver tekstmarkeringsverktøy cursor_text_select_tool_label=Tekstmarkeringsverktøy cursor_hand_tool.title=Aktiver handverktøy cursor_hand_tool_label=Handverktøy scroll_vertical.title=Bruk vertikal rulling scroll_vertical_label=Vertikal rulling scroll_horizontal.title=Bruk horisontal rulling scroll_horizontal_label=Horisontal rulling scroll_wrapped.title=Bruk flersiderulling scroll_wrapped_label=Flersiderulling spread_none.title=Vis enkeltsider spread_none_label=Enkeltsider spread_odd.title=Vis oppslag med ulike sidenumre til venstre spread_odd_label=Oppslag med forside spread_even.title=Vis oppslag med like sidenumre til venstre spread_even_label=Oppslag uten forside # Document properties dialog box document_properties.title=Dokumentegenskaper … document_properties_label=Dokumentegenskaper … document_properties_file_name=Filnavn: document_properties_file_size=Filstørrelse: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Dokumentegenskaper … document_properties_author=Forfatter: document_properties_subject=Emne: document_properties_keywords=Nøkkelord: document_properties_creation_date=Opprettet dato: document_properties_modification_date=Endret dato: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Opprettet av: document_properties_producer=PDF-verktøy: document_properties_version=PDF-versjon: document_properties_page_count=Sideantall: document_properties_page_size=Sidestørrelse: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=stående document_properties_page_size_orientation_landscape=liggende document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Hurtig nettvisning: document_properties_linearized_yes=Ja document_properties_linearized_no=Nei document_properties_close=Lukk print_progress_message=Forbereder dokument for utskrift … # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Avbryt # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Slå av/på sidestolpe toggle_sidebar_notification.title=Vis/gjem sidestolpe (dokumentet inneholder oversikt/vedlegg) toggle_sidebar_notification2.title=Vis/gjem sidestolpe (dokumentet inneholder oversikt/vedlegg/lag) toggle_sidebar_label=Slå av/på sidestolpe document_outline.title=Vis dokumentdisposisjonen (dobbeltklikk for å utvide/skjule alle elementer) document_outline_label=Dokumentdisposisjon attachments.title=Vis vedlegg attachments_label=Vedlegg layers.title=Vis lag (dobbeltklikk for å tilbakestille alle lag til standardtilstand) layers_label=Lag thumbs.title=Vis miniatyrbilde thumbs_label=Miniatyrbilde current_outline_item.title=Finn gjeldende disposisjonselement current_outline_item_label=Gjeldende disposisjonselement findbar.title=Finn i dokumentet findbar_label=Finn additional_layers=Ytterligere lag # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Side {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Side {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Miniatyrbilde av side {{page}} # Find panel button title and messages find_input.title=Søk find_input.placeholder=Søk i dokument… find_previous.title=Finn forrige forekomst av frasen find_previous_label=Forrige find_next.title=Finn neste forekomst av frasen find_next_label=Neste find_highlight=Uthev alle find_match_case_label=Skill store/små bokstaver find_entire_word_label=Hele ord find_reached_top=Nådde toppen av dokumentet, fortsetter fra bunnen find_reached_bottom=Nådde bunnen av dokumentet, fortsetter fra toppen # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} av {{total}} treff find_match_count[two]={{current}} av {{total}} treff find_match_count[few]={{current}} av {{total}} treff find_match_count[many]={{current}} av {{total}} treff find_match_count[other]={{current}} av {{total}} treff # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Mer enn {{limit}} treff find_match_count_limit[one]=Mer enn {{limit}} treff find_match_count_limit[two]=Mer enn {{limit}} treff find_match_count_limit[few]=Mer enn {{limit}} treff find_match_count_limit[many]=Mer enn {{limit}} treff find_match_count_limit[other]=Mer enn {{limit}} treff find_not_found=Fant ikke teksten # Error panel labels error_more_info=Mer info error_less_info=Mindre info error_close=Lukk # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (bygg: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Melding: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stakk: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Fil: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Linje: {{line}} rendering_error=En feil oppstod ved opptegning av siden. # Predefined zoom values page_scale_width=Sidebredde page_scale_fit=Tilpass til siden page_scale_auto=Automatisk zoom page_scale_actual=Virkelig størrelse # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}} % # Loading indicator messages loading_error_indicator=Feil loading_error=En feil oppstod ved lasting av PDF. invalid_file_error=Ugyldig eller skadet PDF-fil. missing_file_error=Manglende PDF-fil. unexpected_response_error=Uventet serverrespons. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} annotasjon] password_label=Skriv inn passordet for å åpne denne PDF-filen. password_invalid=Ugyldig passord. Prøv igjen. password_ok=OK password_cancel=Avbryt printing_not_supported=Advarsel: Utskrift er ikke fullstendig støttet av denne nettleseren. printing_not_ready=Advarsel: PDF er ikke fullstendig innlastet for utskrift. web_fonts_disabled=Web-fonter er avslått: Kan ikke bruke innbundne PDF-fonter. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ne-NP/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=अघिल्लो पृष्ठ previous_label=अघिल्लो next.title=पछिल्लो पृष्ठ next_label=पछिल्लो # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=पृष्ठ # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages={{pagesCount}} मध्ये # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pagesCount}} को {{pageNumber}}) zoom_out.title=जुम घटाउनुहोस् zoom_out_label=जुम घटाउनुहोस् zoom_in.title=जुम बढाउनुहोस् zoom_in_label=जुम बढाउनुहोस् zoom.title=जुम गर्नुहोस् presentation_mode.title=प्रस्तुति मोडमा जानुहोस् presentation_mode_label=प्रस्तुति मोड open_file.title=फाइल खोल्नुहोस् open_file_label=खोल्नुहोस् print.title=मुद्रण गर्नुहोस् print_label=मुद्रण गर्नुहोस् download.title=डाउनलोडहरू download_label=डाउनलोडहरू bookmark.title=वर्तमान दृश्य (प्रतिलिपि गर्नुहोस् वा नयाँ सञ्झ्यालमा खुल्नुहोस्) bookmark_label=हालको दृश्य # Secondary toolbar and context menu tools.title=औजारहरू tools_label=औजारहरू first_page.title=पहिलो पृष्ठमा जानुहोस् first_page.label=पहिलो पृष्ठमा जानुहोस् first_page_label=पहिलो पृष्ठमा जानुहोस् last_page.title=पछिल्लो पृष्ठमा जानुहोस् last_page.label=पछिल्लो पृष्ठमा जानुहोस् last_page_label=पछिल्लो पृष्ठमा जानुहोस् page_rotate_cw.title=घडीको दिशामा घुमाउनुहोस् page_rotate_cw.label=घडीको दिशामा घुमाउनुहोस् page_rotate_cw_label=घडीको दिशामा घुमाउनुहोस् page_rotate_ccw.title=घडीको विपरित दिशामा घुमाउनुहोस् page_rotate_ccw.label=घडीको विपरित दिशामा घुमाउनुहोस् page_rotate_ccw_label=घडीको विपरित दिशामा घुमाउनुहोस् cursor_text_select_tool.title=पाठ चयन उपकरण सक्षम गर्नुहोस् cursor_text_select_tool_label=पाठ चयन उपकरण cursor_hand_tool.title=हाते उपकरण सक्षम गर्नुहोस् cursor_hand_tool_label=हाते उपकरण # Document properties dialog box document_properties.title=कागजात विशेषताहरू... document_properties_label=कागजात विशेषताहरू... document_properties_file_name=फाइल नाम: document_properties_file_size=फाइल आकार: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=शीर्षक: document_properties_author=लेखक: document_properties_subject=विषयः document_properties_keywords=शब्दकुञ्जीः document_properties_creation_date=सिर्जना गरिएको मिति: document_properties_modification_date=परिमार्जित मिति: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=सर्जक: document_properties_producer=PDF निर्माता: document_properties_version=PDF संस्करण document_properties_page_count=पृष्ठ गणना: document_properties_close=बन्द गर्नुहोस् print_progress_message=मुद्रणका लागि कागजात तयारी गरिदै… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=रद्द गर्नुहोस् # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=टगल साइडबार toggle_sidebar_notification.title=साइडबार टगल गर्नुहोस् (कागजातमा समावेश भएको कुराहरू रूपरेखा/attachments) toggle_sidebar_label=टगल साइडबार document_outline.title=कागजातको रूपरेखा देखाउनुहोस् (सबै वस्तुहरू विस्तार/पतन गर्न डबल-क्लिक गर्नुहोस्) document_outline_label=दस्तावेजको रूपरेखा attachments.title=संलग्नहरू देखाउनुहोस् attachments_label=संलग्नकहरू thumbs.title=थम्बनेलहरू देखाउनुहोस् thumbs_label=थम्बनेलहरू findbar.title=कागजातमा फेला पार्नुहोस् findbar_label=फेला पार्नुहोस् # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=पृष्ठ {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas={{page}} पृष्ठको थम्बनेल # Find panel button title and messages find_input.title=फेला पार्नुहोस् find_input.placeholder=कागजातमा फेला पार्नुहोस्… find_previous.title=यस वाक्यांशको अघिल्लो घटना फेला पार्नुहोस् find_previous_label=अघिल्लो find_next.title=यस वाक्यांशको पछिल्लो घटना फेला पार्नुहोस् find_next_label=अर्को find_highlight=सबै हाइलाइट गर्ने find_match_case_label=केस जोडा मिलाउनुहोस् find_reached_top=पृष्ठको शिर्षमा पुगीयो, तलबाट जारी गरिएको थियो find_reached_bottom=पृष्ठको अन्त्यमा पुगीयो, शिर्षबाट जारी गरिएको थियो find_not_found=वाक्यांश फेला परेन # Error panel labels error_more_info=थप जानकारी error_less_info=कम जानकारी error_close=बन्द गर्नुहोस् # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=सन्देश: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=स्ट्याक: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=फाइल: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=लाइन: {{line}} rendering_error=पृष्ठ प्रतिपादन गर्दा एउटा त्रुटि देखापर्‍यो। # Predefined zoom values page_scale_width=पृष्ठ चौडाइ page_scale_fit=पृष्ठ ठिक्क मिल्ने page_scale_auto=स्वचालित जुम page_scale_actual=वास्तविक आकार # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=त्रुटि loading_error=यो PDF लोड गर्दा एउटा त्रुटि देखापर्‍यो। invalid_file_error=अवैध वा दुषित PDF फाइल। missing_file_error=हराईरहेको PDF फाइल। unexpected_response_error=अप्रत्याशित सर्भर प्रतिक्रिया। # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Annotation] password_label=यस PDF फाइललाई खोल्न गोप्यशब्द प्रविष्ट गर्नुहोस्। password_invalid=अवैध गोप्यशब्द। पुनः प्रयास गर्नुहोस्। password_ok=ठिक छ password_cancel=रद्द गर्नुहोस् printing_not_supported=चेतावनी: यो ब्राउजरमा मुद्रण पूर्णतया समर्थित छैन। printing_not_ready=चेतावनी: PDF मुद्रणका लागि पूर्णतया लोड भएको छैन। web_fonts_disabled=वेब फन्ट असक्षम छन्: एम्बेडेड PDF फन्ट प्रयोग गर्न असमर्थ। ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/nl/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Vorige pagina previous_label=Vorige next.title=Volgende pagina next_label=Volgende # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Pagina # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=van {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} van {{pagesCount}}) zoom_out.title=Uitzoomen zoom_out_label=Uitzoomen zoom_in.title=Inzoomen zoom_in_label=Inzoomen zoom.title=Zoomen presentation_mode.title=Wisselen naar presentatiemodus presentation_mode_label=Presentatiemodus open_file.title=Bestand openen open_file_label=Openen print.title=Afdrukken print_label=Afdrukken download.title=Downloaden download_label=Downloaden bookmark.title=Huidige weergave (kopiëren of openen in nieuw venster) bookmark_label=Huidige weergave # Secondary toolbar and context menu tools.title=Hulpmiddelen tools_label=Hulpmiddelen first_page.title=Naar eerste pagina gaan first_page.label=Naar eerste pagina gaan first_page_label=Naar eerste pagina gaan last_page.title=Naar laatste pagina gaan last_page.label=Naar laatste pagina gaan last_page_label=Naar laatste pagina gaan page_rotate_cw.title=Rechtsom draaien page_rotate_cw.label=Rechtsom draaien page_rotate_cw_label=Rechtsom draaien page_rotate_ccw.title=Linksom draaien page_rotate_ccw.label=Linksom draaien page_rotate_ccw_label=Linksom draaien cursor_text_select_tool.title=Tekstselectiehulpmiddel inschakelen cursor_text_select_tool_label=Tekstselectiehulpmiddel cursor_hand_tool.title=Handhulpmiddel inschakelen cursor_hand_tool_label=Handhulpmiddel scroll_vertical.title=Verticaal scrollen gebruiken scroll_vertical_label=Verticaal scrollen scroll_horizontal.title=Horizontaal scrollen gebruiken scroll_horizontal_label=Horizontaal scrollen scroll_wrapped.title=Scrollen met terugloop gebruiken scroll_wrapped_label=Scrollen met terugloop spread_none.title=Dubbele pagina’s niet samenvoegen spread_none_label=Geen dubbele pagina’s spread_odd.title=Dubbele pagina’s samenvoegen vanaf oneven pagina’s spread_odd_label=Oneven dubbele pagina’s spread_even.title=Dubbele pagina’s samenvoegen vanaf even pagina’s spread_even_label=Even dubbele pagina’s # Document properties dialog box document_properties.title=Documenteigenschappen… document_properties_label=Documenteigenschappen… document_properties_file_name=Bestandsnaam: document_properties_file_size=Bestandsgrootte: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Titel: document_properties_author=Auteur: document_properties_subject=Onderwerp: document_properties_keywords=Trefwoorden: document_properties_creation_date=Aanmaakdatum: document_properties_modification_date=Wijzigingsdatum: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Maker: document_properties_producer=PDF-producent: document_properties_version=PDF-versie: document_properties_page_count=Aantal pagina’s: document_properties_page_size=Paginagrootte: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=staand document_properties_page_size_orientation_landscape=liggend document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Snelle webweergave: document_properties_linearized_yes=Ja document_properties_linearized_no=Nee document_properties_close=Sluiten print_progress_message=Document voorbereiden voor afdrukken… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Annuleren # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Zijbalk in-/uitschakelen toggle_sidebar_notification.title=Zijbalk in-/uitschakelen (document bevat overzicht/bijlagen) toggle_sidebar_notification2.title=Zijbalk in-/uitschakelen (document bevat overzicht/bijlagen/lagen) toggle_sidebar_label=Zijbalk in-/uitschakelen document_outline.title=Documentoverzicht tonen (dubbelklik om alle items uit/samen te vouwen) document_outline_label=Documentoverzicht attachments.title=Bijlagen tonen attachments_label=Bijlagen layers.title=Lagen tonen (dubbelklik om alle lagen naar de standaardstatus terug te zetten) layers_label=Lagen thumbs.title=Miniaturen tonen thumbs_label=Miniaturen current_outline_item.title=Huidig item in inhoudsopgave zoeken current_outline_item_label=Huidig item in inhoudsopgave findbar.title=Zoeken in document findbar_label=Zoeken additional_layers=Aanvullende lagen # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Pagina {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Pagina {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Miniatuur van pagina {{page}} # Find panel button title and messages find_input.title=Zoeken find_input.placeholder=Zoeken in document… find_previous.title=De vorige overeenkomst van de tekst zoeken find_previous_label=Vorige find_next.title=De volgende overeenkomst van de tekst zoeken find_next_label=Volgende find_highlight=Alles markeren find_match_case_label=Hoofdlettergevoelig find_entire_word_label=Hele woorden find_reached_top=Bovenkant van document bereikt, doorgegaan vanaf onderkant find_reached_bottom=Onderkant van document bereikt, doorgegaan vanaf bovenkant # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} van {{total}} overeenkomst find_match_count[two]={{current}} van {{total}} overeenkomsten find_match_count[few]={{current}} van {{total}} overeenkomsten find_match_count[many]={{current}} van {{total}} overeenkomsten find_match_count[other]={{current}} van {{total}} overeenkomsten # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Meer dan {{limit}} overeenkomsten find_match_count_limit[one]=Meer dan {{limit}} overeenkomst find_match_count_limit[two]=Meer dan {{limit}} overeenkomsten find_match_count_limit[few]=Meer dan {{limit}} overeenkomsten find_match_count_limit[many]=Meer dan {{limit}} overeenkomsten find_match_count_limit[other]=Meer dan {{limit}} overeenkomsten find_not_found=Tekst niet gevonden # Error panel labels error_more_info=Meer informatie error_less_info=Minder informatie error_close=Sluiten # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Bericht: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stack: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Bestand: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Regel: {{line}} rendering_error=Er is een fout opgetreden bij het weergeven van de pagina. # Predefined zoom values page_scale_width=Paginabreedte page_scale_fit=Hele pagina page_scale_auto=Automatisch zoomen page_scale_actual=Werkelijke grootte # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Fout loading_error=Er is een fout opgetreden bij het laden van de PDF. invalid_file_error=Ongeldig of beschadigd PDF-bestand. missing_file_error=PDF-bestand ontbreekt. unexpected_response_error=Onverwacht serverantwoord. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}}-aantekening] password_label=Voer het wachtwoord in om dit PDF-bestand te openen. password_invalid=Ongeldig wachtwoord. Probeer het opnieuw. password_ok=OK password_cancel=Annuleren printing_not_supported=Waarschuwing: afdrukken wordt niet volledig ondersteund door deze browser. printing_not_ready=Waarschuwing: de PDF is niet volledig geladen voor afdrukken. web_fonts_disabled=Weblettertypen zijn uitgeschakeld: gebruik van ingebedde PDF-lettertypen is niet mogelijk. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/nn-NO/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Føregåande side previous_label=Føregåande next.title=Neste side next_label=Neste # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Side # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=av {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} av {{pagesCount}}) zoom_out.title=Zoom ut zoom_out_label=Zoom ut zoom_in.title=Zoom inn zoom_in_label=Zoom inn zoom.title=Zoom presentation_mode.title=Byt til presentasjonsmodus presentation_mode_label=Presentasjonsmodus open_file.title=Opne fil open_file_label=Opne print.title=Skriv ut print_label=Skriv ut download.title=Last ned download_label=Last ned bookmark.title=Gjeldande vising (kopier eller opne i nytt vindauge) bookmark_label=Gjeldande vising # Secondary toolbar and context menu tools.title=Verktøy tools_label=Verktøy first_page.title=Gå til første side first_page.label=Gå til første side first_page_label=Gå til første side last_page.title=Gå til siste side last_page.label=Gå til siste side last_page_label=Gå til siste side page_rotate_cw.title=Roter med klokka page_rotate_cw.label=Roter med klokka page_rotate_cw_label=Roter med klokka page_rotate_ccw.title=Roter mot klokka page_rotate_ccw.label=Roter mot klokka page_rotate_ccw_label=Roter mot klokka cursor_text_select_tool.title=Aktiver tekstmarkeringsverktøy cursor_text_select_tool_label=Tekstmarkeringsverktøy cursor_hand_tool.title=Aktiver handverktøy cursor_hand_tool_label=Handverktøy scroll_vertical.title=Bruk vertikal rulling scroll_vertical_label=Vertikal rulling scroll_horizontal.title=Bruk horisontal rulling scroll_horizontal_label=Horisontal rulling scroll_wrapped.title=Bruk fleirsiderulling scroll_wrapped_label=Fleirsiderulling spread_none.title=Vis enkeltsider spread_none_label=Enkeltside spread_odd.title=Vis oppslag med ulike sidenummer til venstre spread_odd_label=Oppslag med framside spread_even.title=Vis oppslag med like sidenummmer til venstre spread_even_label=Oppslag utan framside # Document properties dialog box document_properties.title=Dokumenteigenskapar… document_properties_label=Dokumenteigenskapar… document_properties_file_name=Filnamn: document_properties_file_size=Filstorleik: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Tittel: document_properties_author=Forfattar: document_properties_subject=Emne: document_properties_keywords=Stikkord: document_properties_creation_date=Dato oppretta: document_properties_modification_date=Dato endra: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Oppretta av: document_properties_producer=PDF-verktøy: document_properties_version=PDF-versjon: document_properties_page_count=Sidetal: document_properties_page_size=Sidestørrelse: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=ståande document_properties_page_size_orientation_landscape=liggande document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Brev document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Rask nettvising: document_properties_linearized_yes=Ja document_properties_linearized_no=Nei document_properties_close=Lat att print_progress_message=Førebur dokumentet for utskrift… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Avbryt # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Slå av/på sidestolpe toggle_sidebar_notification.title=Vis/gøym sidestolpen (dokumentet inneheld oversikt/vedlegg) toggle_sidebar_notification2.title=Vis/gøym sidestolpe (dokumentet inneheld oversikt/vedlegg/lag) toggle_sidebar_label=Slå av/på sidestolpe document_outline.title=Vis dokumentdisposisjonen (dobbelklikk for å utvide/gøyme alle elementa) document_outline_label=Dokumentdisposisjon attachments.title=Vis vedlegg attachments_label=Vedlegg layers.title=Vis lag (dobbeltklikk for å tilbakestille alle lag til standardtilstand) layers_label=Lag thumbs.title=Vis miniatyrbilde thumbs_label=Miniatyrbilde findbar.title=Finn i dokumentet findbar_label=Finn additional_layers=Ytterlegare lag # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Side {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Side {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Miniatyrbilde av side {{page}} # Find panel button title and messages find_input.title=Søk find_input.placeholder=Søk i dokument… find_previous.title=Finn førre førekomst av frasen find_previous_label=Førre find_next.title=Finn neste førekomst av frasen find_next_label=Neste find_highlight=Uthev alle find_match_case_label=Skil store/små bokstavar find_entire_word_label=Heile ord find_reached_top=Nådde toppen av dokumentet, fortset frå botnen find_reached_bottom=Nådde botnen av dokumentet, fortset frå toppen # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} av {{total}} treff find_match_count[two]={{current}} av {{total}} treff find_match_count[few]={{current}} av {{total}} treff find_match_count[many]={{current}} av {{total}} treff find_match_count[other]={{current}} av {{total}} treff # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Meir enn {{limit}} treff find_match_count_limit[one]=Meir enn {{limit}} treff find_match_count_limit[two]=Meir enn {{limit}} treff find_match_count_limit[few]=Meir enn {{limit}} treff find_match_count_limit[many]=Meir enn {{limit}} treff find_match_count_limit[other]=Meir enn {{limit}} treff find_not_found=Fann ikkje teksten # Error panel labels error_more_info=Meir info error_less_info=Mindre info error_close=Lat att # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (bygg: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Melding: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stakk: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Fil: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Linje: {{line}} rendering_error=Ein feil oppstod under vising av sida. # Predefined zoom values page_scale_width=Sidebreidde page_scale_fit=Tilpass til sida page_scale_auto=Automatisk skalering page_scale_actual=Verkeleg storleik # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Feil loading_error=Ein feil oppstod ved lasting av PDF. invalid_file_error=Ugyldig eller korrupt PDF-fil. missing_file_error=Manglande PDF-fil. unexpected_response_error=Uventa tenarrespons. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}} {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} annotasjon] password_label=Skriv inn passordet for å opne denne PDF-fila. password_invalid=Ugyldig passord. Prøv igjen. password_ok=OK password_cancel=Avbryt printing_not_supported=Åtvaring: Utskrift er ikkje fullstendig støtta av denne nettlesaren. printing_not_ready=Åtvaring: PDF ikkje fullstendig innlasta for utskrift. web_fonts_disabled=Web-skrifter er slått av: Kan ikkje bruke innbundne PDF-skrifter. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/oc/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Pagina precedenta previous_label=Precedent next.title=Pagina seguenta next_label=Seguent # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Pagina # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=sus {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} sus {{pagesCount}}) zoom_out.title=Zoom arrièr zoom_out_label=Zoom arrièr zoom_in.title=Zoom avant zoom_in_label=Zoom avant zoom.title=Zoom presentation_mode.title=Bascular en mòde presentacion presentation_mode_label=Mòde Presentacion open_file.title=Dobrir lo fichièr open_file_label=Dobrir print.title=Imprimir print_label=Imprimir download.title=Telecargar download_label=Telecargar bookmark.title=Afichatge corrent (copiar o dobrir dins una fenèstra novèla) bookmark_label=Afichatge actual # Secondary toolbar and context menu tools.title=Aisinas tools_label=Aisinas first_page.title=Anar a la primièra pagina first_page.label=Anar a la primièra pagina first_page_label=Anar a la primièra pagina last_page.title=Anar a la darrièra pagina last_page.label=Anar a la darrièra pagina last_page_label=Anar a la darrièra pagina page_rotate_cw.title=Rotacion orària page_rotate_cw.label=Rotacion orària page_rotate_cw_label=Rotacion orària page_rotate_ccw.title=Rotacion antiorària page_rotate_ccw.label=Rotacion antiorària page_rotate_ccw_label=Rotacion antiorària cursor_text_select_tool.title=Activar l'aisina de seleccion de tèxte cursor_text_select_tool_label=Aisina de seleccion de tèxte cursor_hand_tool.title=Activar l’aisina man cursor_hand_tool_label=Aisina man scroll_vertical.title=Utilizar lo desfilament vertical scroll_vertical_label=Desfilament vertical scroll_horizontal.title=Utilizar lo desfilament orizontal scroll_horizontal_label=Desfilament orizontal scroll_wrapped.title=Activar lo desfilament continú scroll_wrapped_label=Desfilament continú spread_none.title=Agropar pas las paginas doas a doas spread_none_label=Una sola pagina spread_odd.title=Mostrar doas paginas en començant per las paginas imparas a esquèrra spread_odd_label=Dobla pagina, impara a drecha spread_even.title=Mostrar doas paginas en començant per las paginas paras a esquèrra spread_even_label=Dobla pagina, para a drecha # Document properties dialog box document_properties.title=Proprietats del document… document_properties_label=Proprietats del document… document_properties_file_name=Nom del fichièr : document_properties_file_size=Talha del fichièr : # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} Ko ({{size_b}} octets) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} Mo ({{size_b}} octets) document_properties_title=Títol : document_properties_author=Autor : document_properties_subject=Subjècte : document_properties_keywords=Mots claus : document_properties_creation_date=Data de creacion : document_properties_modification_date=Data de modificacion : # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, a {{time}} document_properties_creator=Creator : document_properties_producer=Aisina de conversion PDF : document_properties_version=Version PDF : document_properties_page_count=Nombre de paginas : document_properties_page_size=Talha de la pagina : document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=retrach document_properties_page_size_orientation_landscape=païsatge document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letra document_properties_page_size_name_legal=Document juridic # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Vista web rapida : document_properties_linearized_yes=Òc document_properties_linearized_no=Non document_properties_close=Tampar print_progress_message=Preparacion del document per l’impression… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Anullar # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Afichar/amagar lo panèl lateral toggle_sidebar_notification.title=Afichar/amagar lo panèl lateral (lo document conten esquèmas/pèças juntas) toggle_sidebar_notification2.title=Afichar/amagar lo panèl lateral (lo document conten esquèmas/pèças juntas/calques) toggle_sidebar_label=Afichar/amagar lo panèl lateral document_outline.title=Mostrar los esquèmas del document (dobleclicar per espandre/reduire totes los elements) document_outline_label=Marcapaginas del document attachments.title=Visualizar las pèças juntas attachments_label=Pèças juntas layers.title=Afichar los calques (doble-clicar per reïnicializar totes los calques a l’estat per defaut) layers_label=Calques thumbs.title=Afichar las vinhetas thumbs_label=Vinhetas findbar.title=Cercar dins lo document findbar_label=Recercar additional_layers=Calques suplementaris # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Pagina {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Pagina {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Vinheta de la pagina {{page}} # Find panel button title and messages find_input.title=Recercar find_input.placeholder=Cercar dins lo document… find_previous.title=Tròba l'ocurréncia precedenta de la frasa find_previous_label=Precedent find_next.title=Tròba l'ocurréncia venenta de la frasa find_next_label=Seguent find_highlight=Suslinhar tot find_match_case_label=Respectar la cassa find_entire_word_label=Mots entièrs find_reached_top=Naut de la pagina atenh, perseguida del bas find_reached_bottom=Bas de la pagina atench, perseguida al començament # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]=Occuréncia {{current}} sus {{total}} find_match_count[two]=Occuréncia {{current}} sus {{total}} find_match_count[few]=Occuréncia {{current}} sus {{total}} find_match_count[many]=Occuréncia {{current}} sus {{total}} find_match_count[other]=Occuréncia {{current}} sus {{total}} # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Mai de {{limit}} occuréncias find_match_count_limit[one]=Mai de {{limit}} occuréncia find_match_count_limit[two]=Mai de {{limit}} occuréncias find_match_count_limit[few]=Mai de {{limit}} occuréncias find_match_count_limit[many]=Mai de {{limit}} occuréncias find_match_count_limit[other]=Mai de {{limit}} occuréncias find_not_found=Frasa pas trobada # Error panel labels error_more_info=Mai de detalhs error_less_info=Mens d'informacions error_close=Tampar # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (identificant de compilacion : {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Messatge : {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Pila : {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Fichièr : {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Linha : {{line}} rendering_error=Una error s'es producha pendent l'afichatge de la pagina. # Predefined zoom values page_scale_width=Largor plena page_scale_fit=Pagina entièra page_scale_auto=Zoom automatic page_scale_actual=Talha vertadièra # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Error loading_error=Una error s'es producha pendent lo cargament del fichièr PDF. invalid_file_error=Fichièr PDF invalid o corromput. missing_file_error=Fichièr PDF mancant. unexpected_response_error=Responsa de servidor imprevista. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}} a {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Anotacion {{type}}] password_label=Picatz lo senhal per dobrir aqueste fichièr PDF. password_invalid=Senhal incorrècte. Tornatz ensajar. password_ok=D'acòrdi password_cancel=Anullar printing_not_supported=Atencion : l'impression es pas completament gerida per aqueste navegador. printing_not_ready=Atencion : lo PDF es pas entièrament cargat per lo poder imprimir. web_fonts_disabled=Las poliças web son desactivadas : impossible d'utilizar las poliças integradas al PDF. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/pa-IN/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=ਪਿਛਲਾ ਸਫ਼ਾ previous_label=ਪਿੱਛੇ next.title=ਅਗਲਾ ਸਫ਼ਾ next_label=ਅੱਗੇ # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=ਸਫ਼ਾ # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages={{pagesCount}} ਵਿੱਚੋਂ # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages={{pagesCount}}) ਵਿੱਚੋਂ ({{pageNumber}} zoom_out.title=ਜ਼ੂਮ ਆਉਟ zoom_out_label=ਜ਼ੂਮ ਆਉਟ zoom_in.title=ਜ਼ੂਮ ਇਨ zoom_in_label=ਜ਼ੂਮ ਇਨ zoom.title=ਜ਼ੂਨ presentation_mode.title=ਪਰਿਜੈਂਟੇਸ਼ਨ ਮੋਡ ਵਿੱਚ ਜਾਓ presentation_mode_label=ਪਰਿਜੈਂਟੇਸ਼ਨ ਮੋਡ open_file.title=ਫਾਈਲ ਨੂੰ ਖੋਲ੍ਹੋ open_file_label=ਖੋਲ੍ਹੋ print.title=ਪਰਿੰਟ print_label=ਪਰਿੰਟ download.title=ਡਾਊਨਲੋਡ download_label=ਡਾਊਨਲੋਡ bookmark.title=ਮੌਜੂਦਾ ਝਲਕ (ਨਵੀਂ ਵਿੰਡੋ ਵਿੱਚ ਕਾਪੀ ਕਰੋ ਜਾਂ ਖੋਲ੍ਹੋ) bookmark_label=ਮੌਜੂਦਾ ਝਲਕ # Secondary toolbar and context menu tools.title=ਟੂਲ tools_label=ਟੂਲ first_page.title=ਪਹਿਲੇ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ first_page.label=ਪਹਿਲੇ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ first_page_label=ਪਹਿਲੇ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ last_page.title=ਆਖਰੀ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ last_page.label=ਆਖਰੀ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ last_page_label=ਆਖਰੀ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ page_rotate_cw.title=ਸੱਜੇ ਦਾਅ ਘੁੰਮਾਓ page_rotate_cw.label=ਸੱਜੇ ਦਾਅ ਘੁੰਮਾਉ page_rotate_cw_label=ਸੱਜੇ ਦਾਅ ਘੁੰਮਾਓ page_rotate_ccw.title=ਖੱਬੇ ਦਾਅ ਘੁੰਮਾਓ page_rotate_ccw.label=ਖੱਬੇ ਦਾਅ ਘੁੰਮਾਉ page_rotate_ccw_label=ਖੱਬੇ ਦਾਅ ਘੁੰਮਾਓ cursor_text_select_tool.title=ਲਿਖਤ ਚੋਣ ਟੂਲ ਸਮਰੱਥ ਕਰੋ cursor_text_select_tool_label=ਲਿਖਤ ਚੋਣ ਟੂਲ cursor_hand_tool.title=ਹੱਥ ਟੂਲ ਸਮਰੱਥ ਕਰੋ cursor_hand_tool_label=ਹੱਥ ਟੂਲ scroll_vertical.title=ਖੜ੍ਹਵੇਂ ਸਕਰਾਉਣ ਨੂੰ ਵਰਤੋਂ scroll_vertical_label=ਖੜ੍ਹਵਾਂ ਸਰਕਾਉਣਾ scroll_horizontal.title=ਲੇਟਵੇਂ ਸਰਕਾਉਣ ਨੂੰ ਵਰਤੋਂ scroll_horizontal_label=ਲੇਟਵਾਂ ਸਰਕਾਉਣਾ scroll_wrapped.title=ਸਮੇਟੇ ਸਰਕਾਉਣ ਨੂੰ ਵਰਤੋਂ scroll_wrapped_label=ਸਮੇਟਿਆ ਸਰਕਾਉਣਾ spread_none.title=ਸਫ਼ਾ ਫੈਲਾਅ ਵਿੱਚ ਸ਼ਾਮਲ ਨਾ ਹੋਵੋ spread_none_label=ਕੋਈ ਫੈਲਾਅ ਨਹੀਂ spread_odd.title=ਟਾਂਕ ਅੰਕ ਵਾਲੇ ਸਫ਼ਿਆਂ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੇ ਸਫਿਆਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ spread_odd_label=ਟਾਂਕ ਫੈਲਾਅ spread_even.title=ਜਿਸਤ ਅੰਕ ਵਾਲੇ ਸਫ਼ਿਆਂ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੇ ਸਫਿਆਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ spread_even_label=ਜਿਸਤ ਫੈਲਾਅ # Document properties dialog box document_properties.title=…ਦਸਤਾਵੇਜ਼ ਦੀ ਵਿਸ਼ੇਸ਼ਤਾ document_properties_label=…ਦਸਤਾਵੇਜ਼ ਦੀ ਵਿਸ਼ੇਸ਼ਤਾ document_properties_file_name=ਫਾਈਲ ਦਾ ਨਾਂ: document_properties_file_size=ਫਾਈਲ ਦਾ ਆਕਾਰ: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} ਬਾਈਟ) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} ਬਾਈਟ) document_properties_title=ਟਾਈਟਲ: document_properties_author=ਲੇਖਕ: document_properties_subject=ਵਿਸ਼ਾ: document_properties_keywords=ਸ਼ਬਦ: document_properties_creation_date=ਬਣਾਉਣ ਦੀ ਮਿਤੀ: document_properties_modification_date=ਸੋਧ ਦੀ ਮਿਤੀ: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=ਨਿਰਮਾਤਾ: document_properties_producer=PDF ਪ੍ਰੋਡਿਊਸਰ: document_properties_version=PDF ਵਰਜਨ: document_properties_page_count=ਸਫ਼ੇ ਦੀ ਗਿਣਤੀ: document_properties_page_size=ਸਫ਼ਾ ਆਕਾਰ: document_properties_page_size_unit_inches=ਇੰਚ document_properties_page_size_unit_millimeters=ਮਿਮੀ document_properties_page_size_orientation_portrait=ਪੋਰਟਰੇਟ document_properties_page_size_orientation_landscape=ਲੈਂਡਸਕੇਪ document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=ਲੈਟਰ document_properties_page_size_name_legal=ਕਨੂੰਨੀ # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=ਤੇਜ਼ ਵੈੱਬ ਝਲਕ: document_properties_linearized_yes=ਹਾਂ document_properties_linearized_no=ਨਹੀਂ document_properties_close=ਬੰਦ ਕਰੋ print_progress_message=…ਪਰਿੰਟ ਕਰਨ ਲਈ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਤਿਆਰ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=ਰੱਦ ਕਰੋ # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=ਬਾਹੀ ਬਦਲੋ toggle_sidebar_notification.title=ਬਾਹੀ ਨੂੰ ਬਦਲੋ (ਦਸਤਾਵੇਜ਼ ਖਾਕਾ/ਅਟੈਚਮੈਂਟਾਂ ਰੱਖਦਾ ਹੈ) toggle_sidebar_notification2.title=ਬਾਹੀ ਨੂੰ ਬਦਲੋ (ਦਸਤਾਵੇਜ਼ ਖਾਕਾ/ਅਟੈਚਮੈਂਟ/ਪਰਤਾਂ ਰੱਖਦਾ ਹੈ) toggle_sidebar_label=ਬਾਹੀ ਬਦਲੋ document_outline.title=ਦਸਤਾਵੇਜ਼ ਖਾਕਾ ਦਿਖਾਓ (ਸਾਰੀਆਂ ਆਈਟਮਾਂ ਨੂੰ ਫੈਲਾਉਣ/ਸਮੇਟਣ ਲਈ ਦੋ ਵਾਰ ਕਲਿੱਕ ਕਰੋ) document_outline_label=ਦਸਤਾਵੇਜ਼ ਖਾਕਾ attachments.title=ਅਟੈਚਮੈਂਟ ਵੇਖਾਓ attachments_label=ਅਟੈਚਮੈਂਟਾਂ layers.title=ਪਰਤਾਂ ਵੇਖਾਓ (ਸਾਰੀਆਂ ਪਰਤਾਂ ਨੂੰ ਮੂਲ ਹਾਲਤ ਉੱਤੇ ਮੁੜ-ਸੈੱਟ ਕਰਨ ਲਈ ਦੋ ਵਾਰ ਕਲਿੱਕ ਕਰੋ) layers_label=ਪਰਤਾਂ thumbs.title=ਥੰਮਨੇਲ ਨੂੰ ਵੇਖਾਓ thumbs_label=ਥੰਮਨੇਲ current_outline_item.title=ਮੌੌਜੂਦਾ ਖਾਕਾ ਚੀਜ਼ ਲੱਭੋ current_outline_item_label=ਮੌਜੂਦਾ ਖਾਕਾ ਚੀਜ਼ findbar.title=ਦਸਤਾਵੇਜ਼ ਵਿੱਚ ਲੱਭੋ findbar_label=ਲੱਭੋ additional_layers=ਵਾਧੂ ਪਰਤਾਂ # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=ਸਫ਼ਾ {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=ਸਫ਼ਾ {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas={{page}} ਸਫ਼ੇ ਦਾ ਥੰਮਨੇਲ # Find panel button title and messages find_input.title=ਲੱਭੋ find_input.placeholder=…ਦਸਤਾਵੇਜ਼ 'ਚ ਲੱਭੋ find_previous.title=ਵਾਕ ਦੀ ਪਿਛਲੀ ਮੌਜੂਦਗੀ ਲੱਭੋ find_previous_label=ਪਿੱਛੇ find_next.title=ਵਾਕ ਦੀ ਅਗਲੀ ਮੌਜੂਦਗੀ ਲੱਭੋ find_next_label=ਅੱਗੇ find_highlight=ਸਭ ਉਭਾਰੋ find_match_case_label=ਅੱਖਰ ਆਕਾਰ ਨੂੰ ਮਿਲਾਉ find_entire_word_label=ਪੂਰੇ ਸ਼ਬਦ find_reached_top=ਦਸਤਾਵੇਜ਼ ਦੇ ਉੱਤੇ ਆ ਗਏ ਹਾਂ, ਥੱਲੇ ਤੋਂ ਜਾਰੀ ਰੱਖਿਆ ਹੈ find_reached_bottom=ਦਸਤਾਵੇਜ਼ ਦੇ ਅੰਤ ਉੱਤੇ ਆ ਗਏ ਹਾਂ, ਉੱਤੇ ਤੋਂ ਜਾਰੀ ਰੱਖਿਆ ਹੈ # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ find_match_count[two]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ find_match_count[few]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ find_match_count[many]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ find_match_count[other]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ find_match_count_limit[one]={{limit}} ਮੇਲ ਤੋਂ ਵੱਧ find_match_count_limit[two]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ find_match_count_limit[few]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ find_match_count_limit[many]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ find_match_count_limit[other]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ find_not_found=ਵਾਕ ਨਹੀਂ ਲੱਭਿਆ # Error panel labels error_more_info=ਹੋਰ ਜਾਣਕਾਰੀ error_less_info=ਘੱਟ ਜਾਣਕਾਰੀ error_close=ਬੰਦ ਕਰੋ # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (ਬਿਲਡ: {{build}} # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=ਸੁਨੇਹਾ: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=ਸਟੈਕ: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=ਫਾਈਲ: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=ਲਾਈਨ: {{line}} rendering_error=ਸਫ਼ਾ ਰੈਡਰ ਕਰਨ ਦੇ ਦੌਰਾਨ ਗਲਤੀ ਆਈ ਹੈ। # Predefined zoom values page_scale_width=ਸਫ਼ੇ ਦੀ ਚੌੜਾਈ page_scale_fit=ਸਫ਼ਾ ਫਿੱਟ page_scale_auto=ਆਟੋਮੈਟਿਕ ਜ਼ੂਮ ਕਰੋ page_scale_actual=ਆਟੋਮੈਟਿਕ ਆਕਾਰ # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=ਗਲਤੀ loading_error=PDF ਲੋਡ ਕਰਨ ਦੇ ਦੌਰਾਨ ਗਲਤੀ ਆਈ ਹੈ। invalid_file_error=ਗਲਤ ਜਾਂ ਨਿਕਾਰਾ PDF ਫਾਈਲ ਹੈ। missing_file_error=ਨਾ-ਮੌਜੂਦ PDF ਫਾਈਲ। unexpected_response_error=ਅਣਜਾਣ ਸਰਵਰ ਜਵਾਬ। # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} ਵਿਆਖਿਆ] password_label=ਇਹ PDF ਫਾਈਲ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ ਪਾਸਵਰਡ ਦਿਉ। password_invalid=ਗਲਤ ਪਾਸਵਰਡ। ਫੇਰ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ। password_ok=ਠੀਕ ਹੈ password_cancel=ਰੱਦ ਕਰੋ printing_not_supported=ਸਾਵਧਾਨ: ਇਹ ਬਰਾਊਜ਼ਰ ਪਰਿੰਟ ਕਰਨ ਲਈ ਪੂਰੀ ਤਰ੍ਹਾਂ ਸਹਾਇਕ ਨਹੀਂ ਹੈ। printing_not_ready=ਸਾਵਧਾਨ: PDF ਨੂੰ ਪਰਿੰਟ ਕਰਨ ਲਈ ਪੂਰੀ ਤਰ੍ਹਾਂ ਲੋਡ ਨਹੀਂ ਹੈ। web_fonts_disabled=ਵੈਬ ਫੋਂਟ ਬੰਦ ਹਨ: ਇੰਬੈਡ PDF ਫੋਂਟ ਨੂੰ ਵਰਤਣ ਲਈ ਅਸਮਰੱਥ ਹੈ। ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/pl/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Poprzednia strona previous_label=Poprzednia next.title=Następna strona next_label=Następna # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Strona # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=z {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} z {{pagesCount}}) zoom_out.title=Pomniejsz zoom_out_label=Pomniejsz zoom_in.title=Powiększ zoom_in_label=Powiększ zoom.title=Skala presentation_mode.title=Przełącz na tryb prezentacji presentation_mode_label=Tryb prezentacji open_file.title=Otwórz plik open_file_label=Otwórz print.title=Drukuj print_label=Drukuj download.title=Pobierz download_label=Pobierz bookmark.title=Bieżąca pozycja (skopiuj lub otwórz jako odnośnik w nowym oknie) bookmark_label=Bieżąca pozycja # Secondary toolbar and context menu tools.title=Narzędzia tools_label=Narzędzia first_page.title=Przejdź do pierwszej strony first_page.label=Przejdź do pierwszej strony first_page_label=Przejdź do pierwszej strony last_page.title=Przejdź do ostatniej strony last_page.label=Przejdź do ostatniej strony last_page_label=Przejdź do ostatniej strony page_rotate_cw.title=Obróć zgodnie z ruchem wskazówek zegara page_rotate_cw.label=Obróć zgodnie z ruchem wskazówek zegara page_rotate_cw_label=Obróć zgodnie z ruchem wskazówek zegara page_rotate_ccw.title=Obróć przeciwnie do ruchu wskazówek zegara page_rotate_ccw.label=Obróć przeciwnie do ruchu wskazówek zegara page_rotate_ccw_label=Obróć przeciwnie do ruchu wskazówek zegara cursor_text_select_tool.title=Włącz narzędzie zaznaczania tekstu cursor_text_select_tool_label=Narzędzie zaznaczania tekstu cursor_hand_tool.title=Włącz narzędzie rączka cursor_hand_tool_label=Narzędzie rączka scroll_vertical.title=Przewijaj dokument w pionie scroll_vertical_label=Przewijanie pionowe scroll_horizontal.title=Przewijaj dokument w poziomie scroll_horizontal_label=Przewijanie poziome scroll_wrapped.title=Strony dokumentu wyświetlaj i przewijaj w kolumnach scroll_wrapped_label=Widok dwóch stron spread_none.title=Nie ustawiaj stron obok siebie spread_none_label=Brak kolumn spread_odd.title=Strony nieparzyste ustawiaj na lewo od parzystych spread_odd_label=Nieparzyste po lewej spread_even.title=Strony parzyste ustawiaj na lewo od nieparzystych spread_even_label=Parzyste po lewej # Document properties dialog box document_properties.title=Właściwości dokumentu… document_properties_label=Właściwości dokumentu… document_properties_file_name=Nazwa pliku: document_properties_file_size=Rozmiar pliku: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} B) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} B) document_properties_title=Tytuł: document_properties_author=Autor: document_properties_subject=Temat: document_properties_keywords=Słowa kluczowe: document_properties_creation_date=Data utworzenia: document_properties_modification_date=Data modyfikacji: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Utworzony przez: document_properties_producer=PDF wyprodukowany przez: document_properties_version=Wersja PDF: document_properties_page_count=Liczba stron: document_properties_page_size=Wymiary strony: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=pionowa document_properties_page_size_orientation_landscape=pozioma document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=US Letter document_properties_page_size_name_legal=US Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}}×{{height}} {{unit}} (orientacja {{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}}×{{height}} {{unit}} ({{name}}, orientacja {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Szybki podgląd w Internecie: document_properties_linearized_yes=tak document_properties_linearized_no=nie document_properties_close=Zamknij print_progress_message=Przygotowywanie dokumentu do druku… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Anuluj # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Przełącz panel boczny toggle_sidebar_notification.title=Przełącz panel boczny (dokument zawiera konspekt/załączniki) toggle_sidebar_notification2.title=Przełącz panel boczny (dokument zawiera konspekt/załączniki/warstwy) toggle_sidebar_label=Przełącz panel boczny document_outline.title=Konspekt dokumentu (podwójne kliknięcie rozwija lub zwija wszystkie pozycje) document_outline_label=Konspekt dokumentu attachments.title=Załączniki attachments_label=Załączniki layers.title=Warstwy (podwójne kliknięcie przywraca wszystkie warstwy do stanu domyślnego) layers_label=Warstwy thumbs.title=Miniatury thumbs_label=Miniatury findbar.title=Znajdź w dokumencie findbar_label=Znajdź additional_layers=Dodatkowe warstwy # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas={{page}}. strona # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title={{page}}. strona # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Miniatura {{page}}. strony # Find panel button title and messages find_input.title=Znajdź find_input.placeholder=Znajdź w dokumencie… find_previous.title=Znajdź poprzednie wystąpienie tekstu find_previous_label=Poprzednie find_next.title=Znajdź następne wystąpienie tekstu find_next_label=Następne find_highlight=Wyróżnianie wszystkich find_match_case_label=Rozróżnianie wielkości liter find_entire_word_label=Całe słowa find_reached_top=Początek dokumentu. Wyszukiwanie od końca. find_reached_bottom=Koniec dokumentu. Wyszukiwanie od początku. # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]=Pierwsze z {{total}} trafień find_match_count[two]=Drugie z {{total}} trafień find_match_count[few]={{current}}. z {{total}} trafień find_match_count[many]={{current}}. z {{total}} trafień find_match_count[other]={{current}}. z {{total}} trafień # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Brak trafień. find_match_count_limit[one]=Więcej niż jedno trafienie. find_match_count_limit[two]=Więcej niż dwa trafienia. find_match_count_limit[few]=Więcej niż {{limit}} trafienia. find_match_count_limit[many]=Więcej niż {{limit}} trafień. find_match_count_limit[other]=Więcej niż {{limit}} trafień. find_not_found=Nie znaleziono tekstu # Error panel labels error_more_info=Więcej informacji error_less_info=Mniej informacji error_close=Zamknij # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (kompilacja: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Komunikat: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stos: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Plik: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Wiersz: {{line}} rendering_error=Podczas renderowania strony wystąpił błąd. # Predefined zoom values page_scale_width=Szerokość strony page_scale_fit=Dopasowanie strony page_scale_auto=Skala automatyczna page_scale_actual=Rozmiar oryginalny # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Błąd loading_error=Podczas wczytywania dokumentu PDF wystąpił błąd. invalid_file_error=Nieprawidłowy lub uszkodzony plik PDF. missing_file_error=Brak pliku PDF. unexpected_response_error=Nieoczekiwana odpowiedź serwera. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Adnotacja: {{type}}] password_label=Wprowadź hasło, aby otworzyć ten dokument PDF. password_invalid=Nieprawidłowe hasło. Proszę spróbować ponownie. password_ok=OK password_cancel=Anuluj printing_not_supported=Ostrzeżenie: drukowanie nie jest w pełni obsługiwane przez tę przeglądarkę. printing_not_ready=Ostrzeżenie: dokument PDF nie jest całkowicie wczytany, więc nie można go wydrukować. web_fonts_disabled=Czcionki sieciowe są wyłączone: nie można użyć osadzonych czcionek PDF. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/pt-BR/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Página anterior previous_label=Anterior next.title=Próxima página next_label=Próxima # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Página # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=de {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} de {{pagesCount}}) zoom_out.title=Reduzir zoom_out_label=Reduzir zoom_in.title=Ampliar zoom_in_label=Ampliar zoom.title=Zoom presentation_mode.title=Alternar para o modo de apresentação presentation_mode_label=Modo de apresentação open_file.title=Abrir arquivo open_file_label=Abrir print.title=Imprimir print_label=Imprimir download.title=Baixar download_label=Baixar bookmark.title=Visão atual (copiar ou abrir em nova janela) bookmark_label=Visualização atual # Secondary toolbar and context menu tools.title=Ferramentas tools_label=Ferramentas first_page.title=Ir para a primeira página first_page.label=Ir para a primeira página first_page_label=Ir para a primeira página last_page.title=Ir para a última página last_page.label=Ir para a última página last_page_label=Ir para a última página page_rotate_cw.title=Girar no sentido horário page_rotate_cw.label=Girar no sentido horário page_rotate_cw_label=Girar no sentido horário page_rotate_ccw.title=Girar no sentido anti-horário page_rotate_ccw.label=Girar no sentido anti-horário page_rotate_ccw_label=Girar no sentido anti-horário cursor_text_select_tool.title=Ativar a ferramenta de seleção de texto cursor_text_select_tool_label=Ferramenta de seleção de texto cursor_hand_tool.title=Ativar ferramenta de deslocamento cursor_hand_tool_label=Ferramenta de deslocamento scroll_vertical.title=Usar deslocamento vertical scroll_vertical_label=Deslocamento vertical scroll_horizontal.title=Usar deslocamento horizontal scroll_horizontal_label=Deslocamento horizontal scroll_wrapped.title=Usar deslocamento contido scroll_wrapped_label=Deslocamento contido spread_none.title=Não reagrupar páginas spread_none_label=Não estender spread_odd.title=Agrupar páginas começando em páginas com números ímpares spread_odd_label=Estender ímpares spread_even.title=Agrupar páginas começando em páginas com números pares spread_even_label=Estender pares # Document properties dialog box document_properties.title=Propriedades do documento… document_properties_label=Propriedades do documento… document_properties_file_name=Nome do arquivo: document_properties_file_size=Tamanho do arquivo: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Título: document_properties_author=Autor: document_properties_subject=Assunto: document_properties_keywords=Palavras-chave: document_properties_creation_date=Data da criação: document_properties_modification_date=Data da modificação: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Criação: document_properties_producer=Criador do PDF: document_properties_version=Versão do PDF: document_properties_page_count=Número de páginas: document_properties_page_size=Tamanho da página: document_properties_page_size_unit_inches=pol. document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=retrato document_properties_page_size_orientation_landscape=paisagem document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Carta document_properties_page_size_name_legal=Jurídico # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Exibição web rápida: document_properties_linearized_yes=Sim document_properties_linearized_no=Não document_properties_close=Fechar print_progress_message=Preparando documento para impressão… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}} % print_progress_close=Cancelar # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Exibir/ocultar painel toggle_sidebar_notification.title=Exibir/ocultar o painel (documento contém estrutura/anexos) toggle_sidebar_notification2.title=Exibir/ocultar o painel (documento contém estrutura/anexos/camadas) toggle_sidebar_label=Exibir/ocultar painel document_outline.title=Mostrar a estrutura do documento (dê um duplo-clique para expandir/recolher todos os itens) document_outline_label=Estrutura do documento attachments.title=Mostrar anexos attachments_label=Anexos layers.title=Exibir camadas (duplo-clique para redefinir todas as camadas ao estado predefinido) layers_label=Camadas thumbs.title=Mostrar miniaturas thumbs_label=Miniaturas current_outline_item.title=Encontrar item atual da estrutura current_outline_item_label=Item atual da estrutura findbar.title=Procurar no documento findbar_label=Procurar additional_layers=Camadas adicionais # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Página {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Página {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Miniatura da página {{page}} # Find panel button title and messages find_input.title=Procurar find_input.placeholder=Procurar no documento… find_previous.title=Procurar a ocorrência anterior da frase find_previous_label=Anterior find_next.title=Procurar a próxima ocorrência da frase find_next_label=Próxima find_highlight=Destacar tudo find_match_case_label=Diferenciar maiúsculas/minúsculas find_entire_word_label=Palavras completas find_reached_top=Início do documento alcançado, continuando do fim find_reached_bottom=Fim do documento alcançado, continuando do início # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} de {{total}} ocorrência find_match_count[two]={{current}} de {{total}} ocorrências find_match_count[few]={{current}} de {{total}} ocorrências find_match_count[many]={{current}} de {{total}} ocorrências find_match_count[other]={{current}} de {{total}} ocorrências # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Mais de {{limit}} ocorrências find_match_count_limit[one]=Mais de {{limit}} ocorrência find_match_count_limit[two]=Mais de {{limit}} ocorrências find_match_count_limit[few]=Mais de {{limit}} ocorrências find_match_count_limit[many]=Mais de {{limit}} ocorrências find_match_count_limit[other]=Mais de {{limit}} ocorrências find_not_found=Frase não encontrada # Error panel labels error_more_info=Mais informações error_less_info=Menos informações error_close=Fechar # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (compilação: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Mensagem: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Pilha: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Arquivo: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Linha: {{line}} rendering_error=Ocorreu um erro ao renderizar a página. # Predefined zoom values page_scale_width=Largura da página page_scale_fit=Ajustar à janela page_scale_auto=Zoom automático page_scale_actual=Tamanho real # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Erro loading_error=Ocorreu um erro ao carregar o PDF. invalid_file_error=Arquivo PDF corrompido ou inválido. missing_file_error=Arquivo PDF ausente. unexpected_response_error=Resposta inesperada do servidor. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Anotação {{type}}] password_label=Forneça a senha para abrir este arquivo PDF. password_invalid=Senha inválida. Tente novamente. password_ok=OK password_cancel=Cancelar printing_not_supported=Aviso: a impressão não é totalmente suportada neste navegador. printing_not_ready=Aviso: o PDF não está totalmente carregado para impressão. web_fonts_disabled=As fontes web estão desativadas: não foi possível usar fontes incorporadas do PDF. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/pt-PT/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Página anterior previous_label=Anterior next.title=Página seguinte next_label=Seguinte # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Página # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=de {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} de {{pagesCount}}) zoom_out.title=Reduzir zoom_out_label=Reduzir zoom_in.title=Ampliar zoom_in_label=Ampliar zoom.title=Zoom presentation_mode.title=Trocar para o modo de apresentação presentation_mode_label=Modo de apresentação open_file.title=Abrir ficheiro open_file_label=Abrir print.title=Imprimir print_label=Imprimir download.title=Transferir download_label=Transferir bookmark.title=Vista atual (copiar ou abrir numa nova janela) bookmark_label=Visão atual # Secondary toolbar and context menu tools.title=Ferramentas tools_label=Ferramentas first_page.title=Ir para a primeira página first_page.label=Ir para a primeira página first_page_label=Ir para a primeira página last_page.title=Ir para a última página last_page.label=Ir para a última página last_page_label=Ir para a última página page_rotate_cw.title=Rodar à direita page_rotate_cw.label=Rodar à direita page_rotate_cw_label=Rodar à direita page_rotate_ccw.title=Rodar à esquerda page_rotate_ccw.label=Rodar à esquerda page_rotate_ccw_label=Rodar à esquerda cursor_text_select_tool.title=Ativar ferramenta de seleção de texto cursor_text_select_tool_label=Ferramenta de seleção de texto cursor_hand_tool.title=Ativar ferramenta de mão cursor_hand_tool_label=Ferramenta de mão scroll_vertical.title=Utilizar deslocação vertical scroll_vertical_label=Deslocação vertical scroll_horizontal.title=Utilizar deslocação horizontal scroll_horizontal_label=Deslocação horizontal scroll_wrapped.title=Utilizar deslocação encapsulada scroll_wrapped_label=Deslocação encapsulada spread_none.title=Não juntar páginas dispersas spread_none_label=Sem spreads spread_odd.title=Juntar páginas dispersas a partir de páginas com números ímpares spread_odd_label=Spreads ímpares spread_even.title=Juntar páginas dispersas a partir de páginas com números pares spread_even_label=Spreads pares # Document properties dialog box document_properties.title=Propriedades do documento… document_properties_label=Propriedades do documento… document_properties_file_name=Nome do ficheiro: document_properties_file_size=Tamanho do ficheiro: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Título: document_properties_author=Autor: document_properties_subject=Assunto: document_properties_keywords=Palavras-chave: document_properties_creation_date=Data de criação: document_properties_modification_date=Data de modificação: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Criador: document_properties_producer=Produtor de PDF: document_properties_version=Versão do PDF: document_properties_page_count=N.º de páginas: document_properties_page_size=Tamanho da página: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=retrato document_properties_page_size_orientation_landscape=paisagem document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Carta document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Vista rápida web: document_properties_linearized_yes=Sim document_properties_linearized_no=Não document_properties_close=Fechar print_progress_message=A preparar o documento para impressão… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Cancelar # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Alternar barra lateral toggle_sidebar_notification.title=Alternar barra lateral (documento contém contorno/anexos) toggle_sidebar_notification2.title=Alternar barra lateral (o documento contém contornos/anexos/camadas) toggle_sidebar_label=Alternar barra lateral document_outline.title=Mostrar esquema do documento (duplo clique para expandir/colapsar todos os itens) document_outline_label=Esquema do documento attachments.title=Mostrar anexos attachments_label=Anexos layers.title=Mostrar camadas (clique duas vezes para repor todas as camadas para o estado predefinido) layers_label=Camadas thumbs.title=Mostrar miniaturas thumbs_label=Miniaturas current_outline_item.title=Encontrar o item atualmente destacado current_outline_item_label=Item atualmente destacado findbar.title=Localizar em documento findbar_label=Localizar additional_layers=Camadas adicionais # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Página {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Página {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Miniatura da página {{page}} # Find panel button title and messages find_input.title=Localizar find_input.placeholder=Localizar em documento… find_previous.title=Localizar ocorrência anterior da frase find_previous_label=Anterior find_next.title=Localizar ocorrência seguinte da frase find_next_label=Seguinte find_highlight=Destacar tudo find_match_case_label=Correspondência find_entire_word_label=Palavras completas find_reached_top=Topo do documento atingido, a continuar a partir do fundo find_reached_bottom=Fim do documento atingido, a continuar a partir do topo # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} de {{total}} correspondência find_match_count[two]={{current}} de {{total}} correspondências find_match_count[few]={{current}} de {{total}} correspondências find_match_count[many]={{current}} de {{total}} correspondências find_match_count[other]={{current}} de {{total}} correspondências # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Mais de {{limit}} correspondências find_match_count_limit[one]=Mais de {{limit}} correspondência find_match_count_limit[two]=Mais de {{limit}} correspondências find_match_count_limit[few]=Mais de {{limit}} correspondências find_match_count_limit[many]=Mais de {{limit}} correspondências find_match_count_limit[other]=Mais de {{limit}} correspondências find_not_found=Frase não encontrada # Error panel labels error_more_info=Mais informação error_less_info=Menos informação error_close=Fechar # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (compilação: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Mensagem: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stack: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Ficheiro: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Linha: {{line}} rendering_error=Ocorreu um erro ao processar a página. # Predefined zoom values page_scale_width=Ajustar à largura page_scale_fit=Ajustar à página page_scale_auto=Zoom automático page_scale_actual=Tamanho real # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Erro loading_error=Ocorreu um erro ao carregar o PDF. invalid_file_error=Ficheiro PDF inválido ou danificado. missing_file_error=Ficheiro PDF inexistente. unexpected_response_error=Resposta inesperada do servidor. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Anotação {{type}}] password_label=Introduza a palavra-passe para abrir este ficheiro PDF. password_invalid=Palavra-passe inválida. Por favor, tente novamente. password_ok=OK password_cancel=Cancelar printing_not_supported=Aviso: a impressão não é totalmente suportada por este navegador. printing_not_ready=Aviso: o PDF ainda não está totalmente carregado. web_fonts_disabled=Os tipos de letra web estão desativados: não é possível utilizar os tipos de letra PDF embutidos. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/rm/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Pagina precedenta previous_label=Enavos next.title=Proxima pagina next_label=Enavant # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Pagina # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=da {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} da {{pagesCount}}) zoom_out.title=Empitschnir zoom_out_label=Empitschnir zoom_in.title=Engrondir zoom_in_label=Engrondir zoom.title=Zoom presentation_mode.title=Midar en il modus da preschentaziun presentation_mode_label=Modus da preschentaziun open_file.title=Avrir datoteca open_file_label=Avrir print.title=Stampar print_label=Stampar download.title=Telechargiar download_label=Telechargiar bookmark.title=Vista actuala (copiar u avrir en ina nova fanestra) bookmark_label=Vista actuala # Secondary toolbar and context menu tools.title=Utensils tools_label=Utensils first_page.title=Siglir a l'emprima pagina first_page.label=Siglir a l'emprima pagina first_page_label=Siglir a l'emprima pagina last_page.title=Siglir a la davosa pagina last_page.label=Siglir a la davosa pagina last_page_label=Siglir a la davosa pagina page_rotate_cw.title=Rotar en direcziun da l'ura page_rotate_cw.label=Rotar en direcziun da l'ura page_rotate_cw_label=Rotar en direcziun da l'ura page_rotate_ccw.title=Rotar en direcziun cuntraria a l'ura page_rotate_ccw.label=Rotar en direcziun cuntraria a l'ura page_rotate_ccw_label=Rotar en direcziun cuntraria a l'ura cursor_text_select_tool.title=Activar l'utensil per selecziunar text cursor_text_select_tool_label=Utensil per selecziunar text cursor_hand_tool.title=Activar l'utensil da maun cursor_hand_tool_label=Utensil da maun scroll_vertical.title=Utilisar il defilar vertical scroll_vertical_label=Defilar vertical scroll_horizontal.title=Utilisar il defilar orizontal scroll_horizontal_label=Defilar orizontal scroll_wrapped.title=Utilisar il defilar en colonnas scroll_wrapped_label=Defilar en colonnas spread_none.title=Betg parallelisar las paginas spread_none_label=Betg parallel spread_odd.title=Parallelisar las paginas cun cumenzar cun paginas spèras spread_odd_label=Parallel spèr spread_even.title=Parallelisar las paginas cun cumenzar cun paginas pèras spread_even_label=Parallel pèr # Document properties dialog box document_properties.title=Caracteristicas dal document… document_properties_label=Caracteristicas dal document… document_properties_file_name=Num da la datoteca: document_properties_file_size=Grondezza da la datoteca: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Titel: document_properties_author=Autur: document_properties_subject=Tema: document_properties_keywords=Chavazzins: document_properties_creation_date=Data da creaziun: document_properties_modification_date=Data da modificaziun: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}} {{time}} document_properties_creator=Creà da: document_properties_producer=Creà il PDF cun: document_properties_version=Versiun da PDF: document_properties_page_count=Dumber da paginas: document_properties_page_size=Grondezza da la pagina: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=vertical document_properties_page_size_orientation_landscape=orizontal document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Fast Web View: document_properties_linearized_yes=Gea document_properties_linearized_no=Na document_properties_close=Serrar print_progress_message=Preparar il document per stampar… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Interrumper # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Activar/deactivar la trav laterala toggle_sidebar_notification.title=Activar/deactivar la trav laterala (structura dal document/agiuntas) toggle_sidebar_notification2.title=Activar/deactivar la trav laterala (il document cuntegna structura dal document/agiuntas/nivels) toggle_sidebar_label=Activar/deactivar la trav laterala document_outline.title=Mussar la structura dal document (cliccar duas giadas per extender/cumprimer tut ils elements) document_outline_label=Structura dal document attachments.title=Mussar agiuntas attachments_label=Agiuntas layers.title=Mussar ils nivels (cliccar dubel per restaurar il stadi da standard da tut ils nivels) layers_label=Nivels thumbs.title=Mussar las miniaturas thumbs_label=Miniaturas findbar.title=Tschertgar en il document findbar_label=Tschertgar additional_layers=Nivels supplementars # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Pagina {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Pagina {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Miniatura da la pagina {{page}} # Find panel button title and messages find_input.title=Tschertgar find_input.placeholder=Tschertgar en il document… find_previous.title=Tschertgar la posiziun precedenta da l'expressiun find_previous_label=Enavos find_next.title=Tschertgar la proxima posiziun da l'expressiun find_next_label=Enavant find_highlight=Relevar tuts find_match_case_label=Resguardar maiusclas/minusclas find_entire_word_label=Pleds entirs find_reached_top=Il cumenzament dal document è cuntanschì, la tschertga cuntinuescha a la fin dal document find_reached_bottom=La fin dal document è cuntanschì, la tschertga cuntinuescha al cumenzament dal document # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} dad {{total}} correspundenza find_match_count[two]={{current}} da {{total}} correspundenzas find_match_count[few]={{current}} da {{total}} correspundenzas find_match_count[many]={{current}} da {{total}} correspundenzas find_match_count[other]={{current}} da {{total}} correspundenzas # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Dapli che {{limit}} correspundenzas find_match_count_limit[one]=Dapli che {{limit}} correspundenza find_match_count_limit[two]=Dapli che {{limit}} correspundenzas find_match_count_limit[few]=Dapli che {{limit}} correspundenzas find_match_count_limit[many]=Dapli che {{limit}} correspundenzas find_match_count_limit[other]=Dapli che {{limit}} correspundenzas find_not_found=Impussibel da chattar l'expressiun # Error panel labels error_more_info=Dapli infurmaziuns error_less_info=Damain infurmaziuns error_close=Serrar # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Messadi: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stack: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Datoteca: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Lingia: {{line}} rendering_error=Ina errur è cumparida cun visualisar questa pagina. # Predefined zoom values page_scale_width=Ladezza da la pagina page_scale_fit=Entira pagina page_scale_auto=Zoom automatic page_scale_actual=Grondezza actuala # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Errur loading_error=Ina errur è cumparida cun chargiar il PDF. invalid_file_error=Datoteca PDF nunvalida u donnegiada. missing_file_error=Datoteca PDF manconta. unexpected_response_error=Resposta nunspetgada dal server. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Annotaziun da {{type}}] password_label=Endatescha il pled-clav per avrir questa datoteca da PDF. password_invalid=Pled-clav nunvalid. Emprova anc ina giada. password_ok=OK password_cancel=Interrumper printing_not_supported=Attenziun: Il stampar na funcziunescha anc betg dal tut en quest navigatur. printing_not_ready=Attenziun: Il PDF n'è betg chargià cumplettamain per stampar. web_fonts_disabled=Scrittiras dal web èn deactivadas: impussibel dad utilisar las scrittiras integradas en il PDF. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ro/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Pagina precedentă previous_label=Înapoi next.title=Pagina următoare next_label=Înainte # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Pagina # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=din {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} din {{pagesCount}}) zoom_out.title=Micșorează zoom_out_label=Micșorează zoom_in.title=Mărește zoom_in_label=Mărește zoom.title=Zoom presentation_mode.title=Comută la modul de prezentare presentation_mode_label=Mod de prezentare open_file.title=Deschide un fișier open_file_label=Deschide print.title=Tipărește print_label=Tipărește download.title=Descarcă download_label=Descarcă bookmark.title=Vizualizare actuală (copiază sau deschide într-o fereastră nouă) bookmark_label=Vizualizare actuală # Secondary toolbar and context menu tools.title=Instrumente tools_label=Instrumente first_page.title=Mergi la prima pagină first_page.label=Mergi la prima pagină first_page_label=Mergi la prima pagină last_page.title=Mergi la ultima pagină last_page.label=Mergi la ultima pagină last_page_label=Mergi la ultima pagină page_rotate_cw.title=Rotește în sensul acelor de ceas page_rotate_cw.label=Rotește în sensul acelor de ceas page_rotate_cw_label=Rotește în sensul acelor de ceas page_rotate_ccw.title=Rotește în sens invers al acelor de ceas page_rotate_ccw.label=Rotește în sens invers al acelor de ceas page_rotate_ccw_label=Rotește în sens invers al acelor de ceas cursor_text_select_tool.title=Activează instrumentul de selecție a textului cursor_text_select_tool_label=Instrumentul de selecție a textului cursor_hand_tool.title=Activează instrumentul mână cursor_hand_tool_label=Unealta mână scroll_vertical.title=Folosește derularea verticală scroll_vertical_label=Derulare verticală scroll_horizontal.title=Folosește derularea orizontală scroll_horizontal_label=Derulare orizontală scroll_wrapped.title=Folosește derularea încadrată scroll_wrapped_label=Derulare încadrată spread_none.title=Nu uni paginile broșate spread_none_label=Fără pagini broșate spread_odd.title=Unește paginile broșate începând cu cele impare spread_odd_label=Broșare pagini impare spread_even.title=Unește paginile broșate începând cu cele pare spread_even_label=Broșare pagini pare # Document properties dialog box document_properties.title=Proprietățile documentului… document_properties_label=Proprietățile documentului… document_properties_file_name=Numele fișierului: document_properties_file_size=Mărimea fișierului: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} byți) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} byți) document_properties_title=Titlu: document_properties_author=Autor: document_properties_subject=Subiect: document_properties_keywords=Cuvinte cheie: document_properties_creation_date=Data creării: document_properties_modification_date=Data modificării: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Autor: document_properties_producer=Producător PDF: document_properties_version=Versiune PDF: document_properties_page_count=Număr de pagini: document_properties_page_size=Mărimea paginii: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=verticală document_properties_page_size_orientation_landscape=orizontală document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Literă document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Vizualizare web rapidă: document_properties_linearized_yes=Da document_properties_linearized_no=Nu document_properties_close=Închide print_progress_message=Se pregătește documentul pentru tipărire… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Renunță # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Comută bara laterală toggle_sidebar_notification.title=Comută bara laterală (documentul conține schițe/atașamente) toggle_sidebar_label=Comută bara laterală document_outline.title=Afișează schița documentului (dublu-clic pentru a extinde/restrânge toate elementele) document_outline_label=Schița documentului attachments.title=Afișează atașamentele attachments_label=Atașamente thumbs.title=Afișează miniaturi thumbs_label=Miniaturi findbar.title=Caută în document findbar_label=Caută # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Pagina {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Pagina {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Miniatura paginii {{page}} # Find panel button title and messages find_input.title=Caută find_input.placeholder=Caută în document… find_previous.title=Mergi la apariția anterioară a textului find_previous_label=Înapoi find_next.title=Mergi la apariția următoare a textului find_next_label=Înainte find_highlight=Evidențiază toate aparițiile find_match_case_label=Ține cont de majuscule și minuscule find_entire_word_label=Cuvinte întregi find_reached_top=Am ajuns la începutul documentului, continuă de la sfârșit find_reached_bottom=Am ajuns la sfârșitul documentului, continuă de la început # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} din {{total}} rezultat find_match_count[two]={{current}} din {{total}} rezultate find_match_count[few]={{current}} din {{total}} rezultate find_match_count[many]={{current}} din {{total}} de rezultate find_match_count[other]={{current}} din {{total}} de rezultate # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Peste {{limit}} rezultate find_match_count_limit[one]=Peste {{limit}} rezultat find_match_count_limit[two]=Peste {{limit}} rezultate find_match_count_limit[few]=Peste {{limit}} rezultate find_match_count_limit[many]=Peste {{limit}} de rezultate find_match_count_limit[other]=Peste {{limit}} de rezultate find_not_found=Nu s-a găsit textul # Error panel labels error_more_info=Mai multe informații error_less_info=Mai puține informații error_close=Închide # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (versiunea compilată: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Mesaj: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stivă: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Fișier: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Rând: {{line}} rendering_error=A intervenit o eroare la randarea paginii. # Predefined zoom values page_scale_width=Lățime pagină page_scale_fit=Potrivire la pagină page_scale_auto=Zoom automat page_scale_actual=Mărime reală # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Eroare loading_error=A intervenit o eroare la încărcarea PDF-ului. invalid_file_error=Fișier PDF nevalid sau corupt. missing_file_error=Fișier PDF lipsă. unexpected_response_error=Răspuns neașteptat de la server. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Adnotare {{type}}] password_label=Introdu parola pentru a deschide acest fișier PDF. password_invalid=Parolă nevalidă. Te rugăm să încerci din nou. password_ok=Ok password_cancel=Renunță printing_not_supported=Avertisment: Tipărirea nu este suportată în totalitate de acest browser. printing_not_ready=Avertisment: PDF-ul nu este încărcat complet pentru tipărire. web_fonts_disabled=Fonturile web sunt dezactivate: nu se pot folosi fonturile PDF încorporate. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ru/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Предыдущая страница previous_label=Предыдущая next.title=Следующая страница next_label=Следующая # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Страница # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=из {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} из {{pagesCount}}) zoom_out.title=Уменьшить zoom_out_label=Уменьшить zoom_in.title=Увеличить zoom_in_label=Увеличить zoom.title=Масштаб presentation_mode.title=Перейти в режим презентации presentation_mode_label=Режим презентации open_file.title=Открыть файл open_file_label=Открыть print.title=Печать print_label=Печать download.title=Загрузить download_label=Загрузить bookmark.title=Ссылка на текущий вид (скопировать или открыть в новом окне) bookmark_label=Текущий вид # Secondary toolbar and context menu tools.title=Инструменты tools_label=Инструменты first_page.title=Перейти на первую страницу first_page.label=Перейти на первую страницу first_page_label=Перейти на первую страницу last_page.title=Перейти на последнюю страницу last_page.label=Перейти на последнюю страницу last_page_label=Перейти на последнюю страницу page_rotate_cw.title=Повернуть по часовой стрелке page_rotate_cw.label=Повернуть по часовой стрелке page_rotate_cw_label=Повернуть по часовой стрелке page_rotate_ccw.title=Повернуть против часовой стрелки page_rotate_ccw.label=Повернуть против часовой стрелки page_rotate_ccw_label=Повернуть против часовой стрелки cursor_text_select_tool.title=Включить Инструмент «Выделение текста» cursor_text_select_tool_label=Инструмент «Выделение текста» cursor_hand_tool.title=Включить Инструмент «Рука» cursor_hand_tool_label=Инструмент «Рука» scroll_vertical.title=Использовать вертикальную прокрутку scroll_vertical_label=Вертикальная прокрутка scroll_horizontal.title=Использовать горизонтальную прокрутку scroll_horizontal_label=Горизонтальная прокрутка scroll_wrapped.title=Использовать масштабируемую прокрутку scroll_wrapped_label=Масштабируемая прокрутка spread_none.title=Не использовать режим разворотов страниц spread_none_label=Без разворотов страниц spread_odd.title=Развороты начинаются с нечётных номеров страниц spread_odd_label=Нечётные страницы слева spread_even.title=Развороты начинаются с чётных номеров страниц spread_even_label=Чётные страницы слева # Document properties dialog box document_properties.title=Свойства документа… document_properties_label=Свойства документа… document_properties_file_name=Имя файла: document_properties_file_size=Размер файла: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} КБ ({{size_b}} байт) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} МБ ({{size_b}} байт) document_properties_title=Заголовок: document_properties_author=Автор: document_properties_subject=Тема: document_properties_keywords=Ключевые слова: document_properties_creation_date=Дата создания: document_properties_modification_date=Дата изменения: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Приложение: document_properties_producer=Производитель PDF: document_properties_version=Версия PDF: document_properties_page_count=Число страниц: document_properties_page_size=Размер страницы: document_properties_page_size_unit_inches=дюймов document_properties_page_size_unit_millimeters=мм document_properties_page_size_orientation_portrait=книжная document_properties_page_size_orientation_landscape=альбомная document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Быстрый просмотр в Web: document_properties_linearized_yes=Да document_properties_linearized_no=Нет document_properties_close=Закрыть print_progress_message=Подготовка документа к печати… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Отмена # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Показать/скрыть боковую панель toggle_sidebar_notification.title=Показать/скрыть боковую панель (документ имеет содержание/вложения) toggle_sidebar_notification2.title=Показать/скрыть боковую панель (документ имеет содержание/вложения/слои) toggle_sidebar_label=Показать/скрыть боковую панель document_outline.title=Показать содержание документа (двойной щелчок, чтобы развернуть/свернуть все элементы) document_outline_label=Содержание документа attachments.title=Показать вложения attachments_label=Вложения layers.title=Показать слои (дважды щёлкните, чтобы сбросить все слои к состоянию по умолчанию) layers_label=Слои thumbs.title=Показать миниатюры thumbs_label=Миниатюры current_outline_item.title=Найти текущий элемент структуры current_outline_item_label=Текущий элемент структуры findbar.title=Найти в документе findbar_label=Найти additional_layers=Дополнительные слои # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Страница {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Страница {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Миниатюра страницы {{page}} # Find panel button title and messages find_input.title=Найти find_input.placeholder=Найти в документе… find_previous.title=Найти предыдущее вхождение фразы в текст find_previous_label=Назад find_next.title=Найти следующее вхождение фразы в текст find_next_label=Далее find_highlight=Подсветить все find_match_case_label=С учётом регистра find_entire_word_label=Слова целиком find_reached_top=Достигнут верх документа, продолжено снизу find_reached_bottom=Достигнут конец документа, продолжено сверху # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} из {{total}} совпадения find_match_count[two]={{current}} из {{total}} совпадений find_match_count[few]={{current}} из {{total}} совпадений find_match_count[many]={{current}} из {{total}} совпадений find_match_count[other]={{current}} из {{total}} совпадений # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Более {{limit}} совпадений find_match_count_limit[one]=Более {{limit}} совпадения find_match_count_limit[two]=Более {{limit}} совпадений find_match_count_limit[few]=Более {{limit}} совпадений find_match_count_limit[many]=Более {{limit}} совпадений find_match_count_limit[other]=Более {{limit}} совпадений find_not_found=Фраза не найдена # Error panel labels error_more_info=Детали error_less_info=Скрыть детали error_close=Закрыть # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (сборка: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Сообщение: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Стeк: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Файл: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Строка: {{line}} rendering_error=При создании страницы произошла ошибка. # Predefined zoom values page_scale_width=По ширине страницы page_scale_fit=По размеру страницы page_scale_auto=Автоматически page_scale_actual=Реальный размер # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Ошибка loading_error=При загрузке PDF произошла ошибка. invalid_file_error=Некорректный или повреждённый PDF-файл. missing_file_error=PDF-файл отсутствует. unexpected_response_error=Неожиданный ответ сервера. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Аннотация {{type}}] password_label=Введите пароль, чтобы открыть этот PDF-файл. password_invalid=Неверный пароль. Пожалуйста, попробуйте снова. password_ok=OK password_cancel=Отмена printing_not_supported=Предупреждение: В этом браузере не полностью поддерживается печать. printing_not_ready=Предупреждение: PDF не полностью загружен для печати. web_fonts_disabled=Веб-шрифты отключены: не удалось задействовать встроенные PDF-шрифты. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/scn/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. zoom_out.title=Cchiù nicu zoom_out_label=Cchiù nicu zoom_in.title=Cchiù granni zoom_in_label=Cchiù granni # Secondary toolbar and context menu # Document properties dialog box # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Vista web lesta: document_properties_linearized_yes=Se # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_close=Sfai # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. # Find panel button title and messages # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. # Error panel labels # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number # Predefined zoom values page_scale_width=Larghizza dâ pàggina # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. # Loading indicator messages # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" password_cancel=Sfai ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/si/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=මීට පෙර පිටුව previous_label=පෙර next.title=මීළඟ පිටුව next_label=මීළඟ # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=පිටුව # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. zoom_out.title=කුඩා කරන්න zoom_out_label=කුඩා කරන්න zoom_in.title=විශාල කරන්න zoom_in_label=විශාල කරන්න zoom.title=විශාලණය presentation_mode.title=ඉදිරිපත්කිරීම් ප්‍රකාරය වෙත මාරුවන්න presentation_mode_label=ඉදිරිපත්කිරීම් ප්‍රකාරය open_file.title=ගොනුව විවෘත කරන්න open_file_label=විවෘත කරන්න print.title=මුද්‍රණය print_label=මුද්‍රණය download.title=බාගන්න download_label=බාගන්න bookmark.title=දැනට ඇති දසුන (පිටපත් කරන්න හෝ නව කවුළුවක විවෘත කරන්න) bookmark_label=දැනට ඇති දසුන # Secondary toolbar and context menu tools.title=මෙවලම් tools_label=මෙවලම් first_page.title=මුල් පිටුවට යන්න first_page.label=මුල් පිටුවට යන්න first_page_label=මුල් පිටුවට යන්න last_page.title=අවසන් පිටුවට යන්න last_page.label=අවසන් පිටුවට යන්න last_page_label=අවසන් පිටුවට යන්න page_rotate_cw.title=දක්ශිණාවර්තව භ්‍රමණය page_rotate_cw.label=දක්ශිණාවර්තව භ්‍රමණය page_rotate_cw_label=දක්ශිණාවර්තව භ්‍රමණය page_rotate_ccw.title=වාමාවර්තව භ්‍රමණය page_rotate_ccw.label=වාමාවර්තව භ්‍රමණය page_rotate_ccw_label=වාමාවර්තව භ්‍රමණය cursor_hand_tool_label=අත් මෙවලම # Document properties dialog box document_properties.title=ලේඛන වත්කම්... document_properties_label=ලේඛන වත්කම්... document_properties_file_name=ගොනු නම: document_properties_file_size=ගොනු ප්‍රමාණය: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} බයිට) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} බයිට) document_properties_title=සිරස්තලය: document_properties_author=කතෲ document_properties_subject=මාතෘකාව: document_properties_keywords=යතුරු වදන්: document_properties_creation_date=නිර්මිත දිනය: document_properties_modification_date=වෙනස්කල දිනය: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=නිර්මාපක: document_properties_producer=PDF නිශ්පාදක: document_properties_version=PDF නිකුතුව: document_properties_page_count=පිටු ගණන: document_properties_page_size=පිටුවේ විශාලත්වය: document_properties_page_size_unit_inches=අඟල් document_properties_page_size_unit_millimeters=මිමි document_properties_page_size_orientation_portrait=සිරස් document_properties_page_size_orientation_landscape=තිරස් document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}}×{{height}}{{unit}}{{name}}{{orientation}} # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=වේගවත් ජාල දසුන: document_properties_linearized_yes=ඔව් document_properties_linearized_no=නැහැ document_properties_close=වසන්න print_progress_message=ලේඛනය මුද්‍රණය සඳහා සූදානම් කරමින්… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=අවලංගු කරන්න # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=පැති තීරුවට මාරුවන්න toggle_sidebar_label=පැති තීරුවට මාරුවන්න document_outline_label=ලේඛනයේ පිට මායිම attachments.title=ඇමිණුම් පෙන්වන්න attachments_label=ඇමිණුම් thumbs.title=සිඟිති රූ පෙන්වන්න thumbs_label=සිඟිති රූ findbar.title=ලේඛනය තුළ සොයන්න findbar_label=සොයන්න # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=පිටුව {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=පිටුවෙ සිඟිත රූව {{page}} # Find panel button title and messages find_input.title=සොයන්න find_previous.title=මේ වාක්‍ය ඛණ්ඩය මීට පෙර යෙදුණු ස්ථානය සොයන්න find_previous_label=පෙර: find_next.title=මේ වාක්‍ය ඛණ්ඩය මීළඟට යෙදෙන ස්ථානය සොයන්න find_next_label=මීළඟ find_highlight=සියල්ල උද්දීපනය find_match_case_label=අකුරු ගළපන්න find_entire_word_label=සම්පූර්ණ වචන find_reached_top=පිටුවේ ඉහළ කෙළවරට ලගාවිය, පහළ සිට ඉදිරියට යමින් find_reached_bottom=පිටුවේ පහළ කෙළවරට ලගාවිය, ඉහළ සිට ඉදිරියට යමින් # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit[zero]=ගැලපුම් {{limit}} ට වඩා find_not_found=ඔබ සෙව් වචන හමු නොවීය # Error panel labels error_more_info=බොහෝ තොරතුරු error_less_info=අවම තොරතුරු error_close=වසන්න # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (නිකුතුව: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=පණිවිඩය: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stack: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=ගොනුව: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=පේළිය: {{line}} rendering_error=පිටුව රෙන්ඩර් විමේදි ගැටලුවක් හට ගැනුණි. # Predefined zoom values page_scale_width=පිටුවේ පළල page_scale_fit=පිටුවට සුදුසු ලෙස page_scale_auto=ස්වයංක්‍රීය විශාලණය page_scale_actual=නියමිත ප්‍රමාණය # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=දෝෂය loading_error=PDF පූරණය විමේදි දෝෂයක් හට ගැනුණි. invalid_file_error=දූශිත හෝ සාවද්‍ය PDF ගොනුව. missing_file_error=නැතිවූ PDF ගොනුව. unexpected_response_error=බලාපොරොත්තු නොවූ සේවාදායක ප්‍රතිචාරය. # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} විස්තරය] password_label=මෙම PDF ගොනුව විවෘත කිරීමට මුරපදය ඇතුළත් කරන්න. password_invalid=වැරදි මුරපදයක්. කරුණාකර නැවත උත්සහ කරන්න. password_ok=හරි password_cancel=එපා printing_not_supported=අවවාදයයි: මෙම ගවේශකය මුද්‍රණය සඳහා සම්පූර්ණයෙන් සහය නොදක්වයි. printing_not_ready=අවවාදයයි: මුද්‍රණය සඳහා PDF සම්පූර්ණයෙන් පූර්ණය වී නොමැත. web_fonts_disabled=ජාල අකුරු අක්‍රීයයි: තිළැලි PDF අකුරු භාවිත කළ නොහැක. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/sk/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Predchádzajúca strana previous_label=Predchádzajúca next.title=Nasledujúca strana next_label=Nasledujúca # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Strana # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=z {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} z {{pagesCount}}) zoom_out.title=Zmenšiť veľkosť zoom_out_label=Zmenšiť veľkosť zoom_in.title=Zväčšiť veľkosť zoom_in_label=Zväčšiť veľkosť zoom.title=Nastavenie veľkosti presentation_mode.title=Prepnúť na režim prezentácie presentation_mode_label=Režim prezentácie open_file.title=Otvoriť súbor open_file_label=Otvoriť print.title=Tlačiť print_label=Tlačiť download.title=Prevziať download_label=Prevziať bookmark.title=Aktuálne zobrazenie (kopírovať alebo otvoriť v novom okne) bookmark_label=Aktuálne zobrazenie # Secondary toolbar and context menu tools.title=Nástroje tools_label=Nástroje first_page.title=Prejsť na prvú stranu first_page.label=Prejsť na prvú stranu first_page_label=Prejsť na prvú stranu last_page.title=Prejsť na poslednú stranu last_page.label=Prejsť na poslednú stranu last_page_label=Prejsť na poslednú stranu page_rotate_cw.title=Otočiť v smere hodinových ručičiek page_rotate_cw.label=Otočiť v smere hodinových ručičiek page_rotate_cw_label=Otočiť v smere hodinových ručičiek page_rotate_ccw.title=Otočiť proti smeru hodinových ručičiek page_rotate_ccw.label=Otočiť proti smeru hodinových ručičiek page_rotate_ccw_label=Otočiť proti smeru hodinových ručičiek cursor_text_select_tool.title=Povoliť výber textu cursor_text_select_tool_label=Výber textu cursor_hand_tool.title=Povoliť nástroj ruka cursor_hand_tool_label=Nástroj ruka scroll_vertical.title=Používať zvislé posúvanie scroll_vertical_label=Zvislé posúvanie scroll_horizontal.title=Používať vodorovné posúvanie scroll_horizontal_label=Vodorovné posúvanie scroll_wrapped.title=Použiť postupné posúvanie scroll_wrapped_label=Postupné posúvanie spread_none.title=Nezdružovať stránky spread_none_label=Žiadne združovanie spread_odd.title=Združí stránky a umiestni nepárne stránky vľavo spread_odd_label=Združiť stránky (nepárne vľavo) spread_even.title=Združí stránky a umiestni párne stránky vľavo spread_even_label=Združiť stránky (párne vľavo) # Document properties dialog box document_properties.title=Vlastnosti dokumentu… document_properties_label=Vlastnosti dokumentu… document_properties_file_name=Názov súboru: document_properties_file_size=Veľkosť súboru: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} kB ({{size_b}} bajtov) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bajtov) document_properties_title=Názov: document_properties_author=Autor: document_properties_subject=Predmet: document_properties_keywords=Kľúčové slová: document_properties_creation_date=Dátum vytvorenia: document_properties_modification_date=Dátum úpravy: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Vytvoril: document_properties_producer=Tvorca PDF: document_properties_version=Verzia PDF: document_properties_page_count=Počet strán: document_properties_page_size=Veľkosť stránky: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=na výšku document_properties_page_size_orientation_landscape=na šírku document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=List document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Rýchle Web View: document_properties_linearized_yes=Áno document_properties_linearized_no=Nie document_properties_close=Zavrieť print_progress_message=Príprava dokumentu na tlač… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Zrušiť # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Prepnúť bočný panel toggle_sidebar_notification.title=Prepnúť bočný panel (dokument obsahuje osnovu/prílohy) toggle_sidebar_notification2.title=Prepnúť bočný panel (dokument obsahuje osnovu/prílohy/vrstvy) toggle_sidebar_label=Prepnúť bočný panel document_outline.title=Zobraziť osnovu dokumentu (dvojitým kliknutím rozbalíte/zbalíte všetky položky) document_outline_label=Osnova dokumentu attachments.title=Zobraziť prílohy attachments_label=Prílohy layers.title=Zobraziť vrstvy (dvojitým kliknutím uvediete všetky vrstvy do pôvodného stavu) layers_label=Vrstvy thumbs.title=Zobraziť miniatúry thumbs_label=Miniatúry findbar.title=Hľadať v dokumente findbar_label=Hľadať additional_layers=Ďalšie vrstvy # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Strana {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Strana {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Miniatúra strany {{page}} # Find panel button title and messages find_input.title=Hľadať find_input.placeholder=Hľadať v dokumente… find_previous.title=Vyhľadať predchádzajúci výskyt reťazca find_previous_label=Predchádzajúce find_next.title=Vyhľadať ďalší výskyt reťazca find_next_label=Ďalšie find_highlight=Zvýrazniť všetky find_match_case_label=Rozlišovať veľkosť písmen find_entire_word_label=Celé slová find_reached_top=Bol dosiahnutý začiatok stránky, pokračuje sa od konca find_reached_bottom=Bol dosiahnutý koniec stránky, pokračuje sa od začiatku # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}}. z {{total}} výsledku find_match_count[two]={{current}}. z {{total}} výsledkov find_match_count[few]={{current}}. z {{total}} výsledkov find_match_count[many]={{current}}. z {{total}} výsledkov find_match_count[other]={{current}}. z {{total}} výsledkov # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Viac než {{limit}} výsledkov find_match_count_limit[one]=Viac než {{limit}} výsledok find_match_count_limit[two]=Viac než {{limit}} výsledky find_match_count_limit[few]=Viac než {{limit}} výsledky find_match_count_limit[many]=Viac než {{limit}} výsledkov find_match_count_limit[other]=Viac než {{limit}} výsledkov find_not_found=Výraz nebol nájdený # Error panel labels error_more_info=Viac informácií error_less_info=Menej informácií error_close=Zavrieť # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (zostavenie: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Správa: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Zásobník: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Súbor: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Riadok: {{line}} rendering_error=Pri vykresľovaní stránky sa vyskytla chyba. # Predefined zoom values page_scale_width=Na šírku strany page_scale_fit=Na veľkosť strany page_scale_auto=Automatická veľkosť page_scale_actual=Skutočná veľkosť # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}} % # Loading indicator messages loading_error_indicator=Chyba loading_error=Počas načítavania dokumentu PDF sa vyskytla chyba. invalid_file_error=Neplatný alebo poškodený súbor PDF. missing_file_error=Chýbajúci súbor PDF. unexpected_response_error=Neočakávaná odpoveď zo servera. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Anotácia typu {{type}}] password_label=Ak chcete otvoriť tento súbor PDF, zadajte jeho heslo. password_invalid=Heslo nie je platné. Skúste to znova. password_ok=OK password_cancel=Zrušiť printing_not_supported=Upozornenie: tlač nie je v tomto prehliadači plne podporovaná. printing_not_ready=Upozornenie: súbor PDF nie je plne načítaný pre tlač. web_fonts_disabled=Webové písma sú vypnuté: nie je možné použiť písma vložené do súboru PDF. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/sl/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Prejšnja stran previous_label=Nazaj next.title=Naslednja stran next_label=Naprej # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Stran # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=od {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} od {{pagesCount}}) zoom_out.title=Pomanjšaj zoom_out_label=Pomanjšaj zoom_in.title=Povečaj zoom_in_label=Povečaj zoom.title=Povečava presentation_mode.title=Preklopi v način predstavitve presentation_mode_label=Način predstavitve open_file.title=Odpri datoteko open_file_label=Odpri print.title=Natisni print_label=Natisni download.title=Prenesi download_label=Prenesi bookmark.title=Trenutni pogled (kopiraj ali odpri v novem oknu) bookmark_label=Trenutni pogled # Secondary toolbar and context menu tools.title=Orodja tools_label=Orodja first_page.title=Pojdi na prvo stran first_page.label=Pojdi na prvo stran first_page_label=Pojdi na prvo stran last_page.title=Pojdi na zadnjo stran last_page.label=Pojdi na zadnjo stran last_page_label=Pojdi na zadnjo stran page_rotate_cw.title=Zavrti v smeri urnega kazalca page_rotate_cw.label=Zavrti v smeri urnega kazalca page_rotate_cw_label=Zavrti v smeri urnega kazalca page_rotate_ccw.title=Zavrti v nasprotni smeri urnega kazalca page_rotate_ccw.label=Zavrti v nasprotni smeri urnega kazalca page_rotate_ccw_label=Zavrti v nasprotni smeri urnega kazalca cursor_text_select_tool.title=Omogoči orodje za izbor besedila cursor_text_select_tool_label=Orodje za izbor besedila cursor_hand_tool.title=Omogoči roko cursor_hand_tool_label=Roka scroll_vertical.title=Uporabi navpično drsenje scroll_vertical_label=Navpično drsenje scroll_horizontal.title=Uporabi vodoravno drsenje scroll_horizontal_label=Vodoravno drsenje scroll_wrapped.title=Uporabi ovito drsenje scroll_wrapped_label=Ovito drsenje spread_none.title=Ne združuj razponov strani spread_none_label=Brez razponov spread_odd.title=Združuj razpone strani z začetkom pri lihih straneh spread_odd_label=Lihi razponi spread_even.title=Združuj razpone strani z začetkom pri sodih straneh spread_even_label=Sodi razponi # Document properties dialog box document_properties.title=Lastnosti dokumenta … document_properties_label=Lastnosti dokumenta … document_properties_file_name=Ime datoteke: document_properties_file_size=Velikost datoteke: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bajtov) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bajtov) document_properties_title=Ime: document_properties_author=Avtor: document_properties_subject=Tema: document_properties_keywords=Ključne besede: document_properties_creation_date=Datum nastanka: document_properties_modification_date=Datum spremembe: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Ustvaril: document_properties_producer=Izdelovalec PDF: document_properties_version=Različica PDF: document_properties_page_count=Število strani: document_properties_page_size=Velikost strani: document_properties_page_size_unit_inches=palcev document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=pokončno document_properties_page_size_orientation_landscape=ležeče document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Pismo document_properties_page_size_name_legal=Pravno # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Hitri spletni ogled: document_properties_linearized_yes=Da document_properties_linearized_no=Ne document_properties_close=Zapri print_progress_message=Priprava dokumenta na tiskanje … # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}} % print_progress_close=Prekliči # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Preklopi stransko vrstico toggle_sidebar_notification.title=Preklopi stransko vrstico (dokument vsebuje oris/priponke) toggle_sidebar_notification2.title=Preklopi stransko vrstico (dokument vsebuje oris/priponke/plasti) toggle_sidebar_label=Preklopi stransko vrstico document_outline.title=Prikaži oris dokumenta (dvokliknite za razširitev/strnitev vseh predmetov) document_outline_label=Oris dokumenta attachments.title=Prikaži priponke attachments_label=Priponke layers.title=Prikaži plasti (dvokliknite za ponastavitev vseh plasti na privzeto stanje) layers_label=Plasti thumbs.title=Prikaži sličice thumbs_label=Sličice findbar.title=Iskanje po dokumentu findbar_label=Najdi additional_layers=Dodatne plasti # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Stran {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Stran {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Sličica strani {{page}} # Find panel button title and messages find_input.title=Najdi find_input.placeholder=Najdi v dokumentu … find_previous.title=Najdi prejšnjo ponovitev iskanega find_previous_label=Najdi nazaj find_next.title=Najdi naslednjo ponovitev iskanega find_next_label=Najdi naprej find_highlight=Označi vse find_match_case_label=Razlikuj velike/male črke find_entire_word_label=Cele besede find_reached_top=Dosežen začetek dokumenta iz smeri konca find_reached_bottom=Doseženo konec dokumenta iz smeri začetka # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]=Zadetek {{current}} od {{total}} find_match_count[two]=Zadetek {{current}} od {{total}} find_match_count[few]=Zadetek {{current}} od {{total}} find_match_count[many]=Zadetek {{current}} od {{total}} find_match_count[other]=Zadetek {{current}} od {{total}} # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Več kot {{limit}} zadetkov find_match_count_limit[one]=Več kot {{limit}} zadetek find_match_count_limit[two]=Več kot {{limit}} zadetka find_match_count_limit[few]=Več kot {{limit}} zadetki find_match_count_limit[many]=Več kot {{limit}} zadetkov find_match_count_limit[other]=Več kot {{limit}} zadetkov find_not_found=Iskanega ni mogoče najti # Error panel labels error_more_info=Več informacij error_less_info=Manj informacij error_close=Zapri # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js r{{version}} (graditev: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Sporočilo: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Sklad: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Datoteka: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Vrstica: {{line}} rendering_error=Med pripravljanjem strani je prišlo do napake! # Predefined zoom values page_scale_width=Širina strani page_scale_fit=Prilagodi stran page_scale_auto=Samodejno page_scale_actual=Dejanska velikost # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}} % # Loading indicator messages loading_error_indicator=Napaka loading_error=Med nalaganjem datoteke PDF je prišlo do napake. invalid_file_error=Neveljavna ali pokvarjena datoteka PDF. missing_file_error=Ni datoteke PDF. unexpected_response_error=Nepričakovan odgovor strežnika. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Opomba vrste {{type}}] password_label=Vnesite geslo za odpiranje te datoteke PDF. password_invalid=Neveljavno geslo. Poskusite znova. password_ok=V redu password_cancel=Prekliči printing_not_supported=Opozorilo: ta brskalnik ne podpira vseh možnosti tiskanja. printing_not_ready=Opozorilo: PDF ni v celoti naložen za tiskanje. web_fonts_disabled=Spletne pisave so onemogočene: vgradnih pisav za PDF ni mogoče uporabiti. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/son/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Moo bisante previous_label=Bisante next.title=Jinehere moo next_label=Jine # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Moo # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages={{pagesCount}} ra # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} ka hun {{pagesCount}}) ra zoom_out.title=Nakasandi zoom_out_label=Nakasandi zoom_in.title=Bebbeerandi zoom_in_label=Bebbeerandi zoom.title=Bebbeerandi presentation_mode.title=Bere cebeyan alhaali presentation_mode_label=Cebeyan alhaali open_file.title=Tuku feeri open_file_label=Feeri print.title=Kar print_label=Kar download.title=Zumandi download_label=Zumandi bookmark.title=Sohõ gunarro (bere wala feeri zanfun taaga ra) bookmark_label=Sohõ gunaroo # Secondary toolbar and context menu tools.title=Goyjinawey tools_label=Goyjinawey first_page.title=Koy moo jinaa ga first_page.label=Koy moo jinaa ga first_page_label=Koy moo jinaa ga last_page.title=Koy moo koraa ga last_page.label=Koy moo koraa ga last_page_label=Koy moo koraa ga page_rotate_cw.title=Kuubi kanbe guma here page_rotate_cw.label=Kuubi kanbe guma here page_rotate_cw_label=Kuubi kanbe guma here page_rotate_ccw.title=Kuubi kanbe wowa here page_rotate_ccw.label=Kuubi kanbe wowa here page_rotate_ccw_label=Kuubi kanbe wowa here # Document properties dialog box document_properties.title=Takadda mayrawey… document_properties_label=Takadda mayrawey… document_properties_file_name=Tuku maa: document_properties_file_size=Tuku adadu: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb=KB {{size_kb}} (cebsu-ize {{size_b}}) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb=MB {{size_mb}} (cebsu-ize {{size_b}}) document_properties_title=Tiiramaa: document_properties_author=Hantumkaw: document_properties_subject=Dalil: document_properties_keywords=Kufalkalimawey: document_properties_creation_date=Teeyan han: document_properties_modification_date=Barmayan han: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Teekaw: document_properties_producer=PDF berandikaw: document_properties_version=PDF dumi: document_properties_page_count=Moo hinna: document_properties_close=Daabu print_progress_message=Goo ma takaddaa soolu k'a kar se… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Naŋ # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Kanjari ceraw zuu toggle_sidebar_notification.title=Kanjari ceraw-zuu (takaddaa goo nda filla-boŋ/hangandiyaŋ) toggle_sidebar_label=Kanjari ceraw zuu document_outline.title=Takaddaa korfur alhaaloo cebe (naagu cee hinka ka haya-izey kul hayandi/kankamandi) document_outline_label=Takadda filla-boŋ attachments.title=Hangarey cebe attachments_label=Hangarey thumbs.title=Kabeboy biyey cebe thumbs_label=Kabeboy biyey findbar.title=Ceeci takaddaa ra findbar_label=Ceeci # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title={{page}} moo # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Kabeboy bii {{page}} moo še # Find panel button title and messages find_input.title=Ceeci find_input.placeholder=Ceeci takaddaa ra… find_previous.title=Kalimaɲaŋoo bangayri bisantaa ceeci find_previous_label=Bisante find_next.title=Kalimaɲaŋoo hiino bangayroo ceeci find_next_label=Jine find_highlight=Ikul šilbay find_match_case_label=Harfu-beeriyan hawgay find_reached_top=A too moŋoo boŋoo, koy jine ka šinitin nda cewoo find_reached_bottom=A too moɲoo cewoo, koy jine šintioo ga find_not_found=Kalimaɲaa mana duwandi # Error panel labels error_more_info=Alhabar tontoni error_less_info=Alhabar tontoni error_close=Daabu # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Alhabar: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Dekeri: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Tuku: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Žeeri: {{line}} rendering_error=Firka bangay kaŋ moɲoo goo ma willandi. # Predefined zoom values page_scale_width=Mooo hayyan page_scale_fit=Moo sawayan page_scale_auto=Boŋše azzaati barmayyan page_scale_actual=Adadu cimi # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Firka loading_error=Firka bangay kaŋ PDF goo ma zumandi. invalid_file_error=PDF tuku laala wala laybante. missing_file_error=PDF tuku kumante. unexpected_response_error=Manti feršikaw tuuruyan maatante. # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt={{type}} maasa-caw] password_label=Šennikufal dam ka PDF tukoo woo feeri. password_invalid=Šennikufal laalo. Ceeci koyne taare. password_ok=Ayyo password_cancel=Naŋ printing_not_supported=Yaamar: Karyan ši tee ka timme nda ceecikaa woo. printing_not_ready=Yaamar: PDF ši zunbu ka timme karyan še. web_fonts_disabled=Interneti šigirawey kay: ši hin ka goy nda PDF šigira hurantey. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/sq/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Faqja e Mëparshme previous_label=E mëparshmja next.title=Faqja Pasuese next_label=Pasuesja # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Faqe # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=nga {{pagesCount}} gjithsej # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} nga {{pagesCount}}) zoom_out.title=Zvogëlojeni zoom_out_label=Zvogëlojeni zoom_in.title=Zmadhojeni zoom_in_label=Zmadhojini zoom.title=Zoom presentation_mode.title=Kalo te Mënyra Paraqitje presentation_mode_label=Mënyra Paraqitje open_file.title=Hapni Kartelë open_file_label=Hape print.title=Shtypje print_label=Shtype download.title=Shkarkim download_label=Shkarkoje bookmark.title=Pamja e tanishme (kopjojeni ose hapeni në dritare të re) bookmark_label=Pamja e Tanishme # Secondary toolbar and context menu tools.title=Mjete tools_label=Mjete first_page.title=Kaloni te Faqja e Parë first_page.label=Kaloni te Faqja e Parë first_page_label=Kaloni te Faqja e Parë last_page.title=Kaloni te Faqja e Fundit last_page.label=Kaloni te Faqja e Fundit last_page_label=Kaloni te Faqja e Fundit page_rotate_cw.title=Rrotullojeni Në Kahun Orar page_rotate_cw.label=Rrotulloje Në Kahun Orar page_rotate_cw_label=Rrotulloje Në Kahun Orar page_rotate_ccw.title=Rrotullojeni Në Kahun Kundërorar page_rotate_ccw.label=Rrotulloje Në Kahun Kundërorar page_rotate_ccw_label=Rrotulloje Në Kahun Kundërorar cursor_text_select_tool.title=Aktivizo Mjet Përzgjedhjeje Teksti cursor_text_select_tool_label=Mjet Përzgjedhjeje Teksti cursor_hand_tool.title=Aktivizo Mjetin Dorë cursor_hand_tool_label=Mjeti Dorë scroll_vertical.title=Përdor Rrëshqitje Vertikale scroll_vertical_label=Rrëshqitje Vertikale scroll_horizontal.title=Përdor Rrëshqitje Horizontale scroll_horizontal_label=Rrëshqitje Horizontale scroll_wrapped.title=Përdor Rrëshqitje Me Mbështjellje scroll_wrapped_label=Rrëshqitje Me Mbështjellje # Document properties dialog box document_properties.title=Veti Dokumenti… document_properties_label=Veti Dokumenti… document_properties_file_name=Emër kartele: document_properties_file_size=Madhësi kartele: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bajte) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bajte) document_properties_title=Titull: document_properties_author=Autor: document_properties_subject=Subjekt: document_properties_keywords=Fjalëkyçe: document_properties_creation_date=Datë Krijimi: document_properties_modification_date=Datë Ndryshimi: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Krijues: document_properties_producer=Prodhues PDF-je: document_properties_version=Version PDF-je: document_properties_page_count=Numër Faqesh: document_properties_page_size=Madhësi Faqeje: document_properties_page_size_unit_inches=inç document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=portret document_properties_page_size_orientation_landscape=së gjeri document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized_yes=Po document_properties_linearized_no=Jo document_properties_close=Mbylleni print_progress_message=Po përgatitet dokumenti për shtypje… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Anuloje # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Shfaqni/Fshihni Anështyllën toggle_sidebar_notification.title=Shfaqni Anështyllën (dokumenti përmban përvijim/bashkëngjitje) toggle_sidebar_notification2.title=Hap/Mbyll Anështylë (dokumenti përmban përvijim/nashkëngjitje/shtresa) toggle_sidebar_label=Shfaq/Fshih Anështyllën document_outline.title=Shfaqni Përvijim Dokumenti (dyklikoni që të shfaqen/fshihen krejt elementët) document_outline_label=Përvijim Dokumenti attachments.title=Shfaqni Bashkëngjitje attachments_label=Bashkëngjitje layers.title=Shfaq Shtresa (dyklikoni që të rikthehen krejt shtresat në gjendjen e tyre parazgjedhje) layers_label=Shtresa thumbs.title=Shfaqni Miniatura thumbs_label=Miniatura findbar.title=Gjeni në Dokument findbar_label=Gjej additional_layers=Shtresa Shtesë # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Faqja {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Faqja {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Miniaturë e Faqes {{page}} # Find panel button title and messages find_input.title=Gjej find_input.placeholder=Gjeni në dokument… find_previous.title=Gjeni hasjen e mëparshme të togfjalëshit find_previous_label=E mëparshmja find_next.title=Gjeni hasjen pasuese të togfjalëshit find_next_label=Pasuesja find_highlight=Theksoji të tëra find_match_case_label=Siç është shkruar find_entire_word_label=Krejt fjalët find_reached_top=U mbërrit në krye të dokumentit, vazhduar prej fundit find_reached_bottom=U mbërrit në fund të dokumentit, vazhduar prej kreut # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} nga {{total}} përputhje gjithsej find_match_count[two]={{current}} nga {{total}} përputhje gjithsej find_match_count[few]={{current}} nga {{total}} përputhje gjithsej find_match_count[many]={{current}} nga {{total}} përputhje gjithsej find_match_count[other]={{current}} nga {{total}} përputhje gjithsej # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Më shumë se {{limit}} përputhje find_match_count_limit[one]=Më shumë se {{limit}} përputhje find_match_count_limit[two]=Më shumë se {{limit}} përputhje find_match_count_limit[few]=Më shumë se {{limit}} përputhje find_match_count_limit[many]=Më shumë se {{limit}} përputhje find_match_count_limit[other]=Më shumë se {{limit}} përputhje find_not_found=Togfjalësh që s’gjendet # Error panel labels error_more_info=Më Tepër të Dhëna error_less_info=Më Pak të Dhëna error_close=Mbylleni # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Mesazh: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stack: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Kartelë: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Rresht: {{line}} rendering_error=Ndodhi një gabim gjatë riprodhimit të faqes. # Predefined zoom values page_scale_width=Gjerësi Faqeje page_scale_fit=Sa Nxë Faqja page_scale_auto=Zoom i Vetvetishëm page_scale_actual=Madhësia Faktike # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Gabim loading_error=Ndodhi një gabim gjatë ngarkimit të PDF-së. invalid_file_error=Kartelë PDF e pavlefshme ose e dëmtuar. missing_file_error=Kartelë PDF që mungon. unexpected_response_error=Përgjigje shërbyesi e papritur. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Nënvizim {{type}}] password_label=Jepni fjalëkalimin që të hapet kjo kartelë PDF. password_invalid=Fjalëkalim i pavlefshëm. Ju lutemi, riprovoni. password_ok=OK password_cancel=Anuloje printing_not_supported=Kujdes: Shtypja s’mbulohet plotësisht nga ky shfletues. printing_not_ready=Kujdes: PDF-ja s’është ngarkuar plotësisht që ta shtypni. web_fonts_disabled=Shkronjat Web janë të çaktivizuara: s’arrihet të përdoren shkronja të trupëzuara në PDF. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/sr/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Претходна страница previous_label=Претходна next.title=Следећа страница next_label=Следећа # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Страница # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=од {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} од {{pagesCount}}) zoom_out.title=Умањи zoom_out_label=Умањи zoom_in.title=Увеличај zoom_in_label=Увеличај zoom.title=Увеличавање presentation_mode.title=Промени на приказ у режиму презентације presentation_mode_label=Режим презентације open_file.title=Отвори датотеку open_file_label=Отвори print.title=Штампај print_label=Штампај download.title=Преузми download_label=Преузми bookmark.title=Тренутни приказ (копирај или отвори нови прозор) bookmark_label=Тренутни приказ # Secondary toolbar and context menu tools.title=Алатке tools_label=Алатке first_page.title=Иди на прву страницу first_page.label=Иди на прву страницу first_page_label=Иди на прву страницу last_page.title=Иди на последњу страницу last_page.label=Иди на последњу страницу last_page_label=Иди на последњу страницу page_rotate_cw.title=Ротирај у смеру казаљке на сату page_rotate_cw.label=Ротирај у смеру казаљке на сату page_rotate_cw_label=Ротирај у смеру казаљке на сату page_rotate_ccw.title=Ротирај у смеру супротном од казаљке на сату page_rotate_ccw.label=Ротирај у смеру супротном од казаљке на сату page_rotate_ccw_label=Ротирај у смеру супротном од казаљке на сату cursor_text_select_tool.title=Омогући алат за селектовање текста cursor_text_select_tool_label=Алат за селектовање текста cursor_hand_tool.title=Омогући алат за померање cursor_hand_tool_label=Алат за померање scroll_vertical.title=Користи вертикално скроловање scroll_vertical_label=Вертикално скроловање scroll_horizontal.title=Користи хоризонтално скроловање scroll_horizontal_label=Хоризонтално скроловање scroll_wrapped.title=Користи скроловање по омоту scroll_wrapped_label=Скроловање по омоту spread_none.title=Немој спајати ширења страница spread_none_label=Без распростирања spread_odd.title=Споји ширења страница које почињу непарним бројем spread_odd_label=Непарна распростирања spread_even.title=Споји ширења страница које почињу парним бројем spread_even_label=Парна распростирања # Document properties dialog box document_properties.title=Параметри документа… document_properties_label=Параметри документа… document_properties_file_name=Име датотеке: document_properties_file_size=Величина датотеке: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} B) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} B) document_properties_title=Наслов: document_properties_author=Аутор: document_properties_subject=Тема: document_properties_keywords=Кључне речи: document_properties_creation_date=Датум креирања: document_properties_modification_date=Датум модификације: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Стваралац: document_properties_producer=PDF произвођач: document_properties_version=PDF верзија: document_properties_page_count=Број страница: document_properties_page_size=Величина странице: document_properties_page_size_unit_inches=ин document_properties_page_size_unit_millimeters=мм document_properties_page_size_orientation_portrait=усправно document_properties_page_size_orientation_landscape=водоравно document_properties_page_size_name_a3=А3 document_properties_page_size_name_a4=А4 document_properties_page_size_name_letter=Слово document_properties_page_size_name_legal=Права # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Брз веб приказ: document_properties_linearized_yes=Да document_properties_linearized_no=Не document_properties_close=Затвори print_progress_message=Припремам документ за штампање… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Откажи # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Прикажи додатну палету toggle_sidebar_notification.title=Прикажи додатну траку (докуменат садржи оквире/прилоге) toggle_sidebar_notification2.title=Прикажи/сакриј бочну траку (документ садржи контуру/прилоге/слојеве) toggle_sidebar_label=Прикажи додатну палету document_outline.title=Прикажи контуру документа (дупли клик за проширење/скупљање елемената) document_outline_label=Контура документа attachments.title=Прикажи прилоге attachments_label=Прилози layers.title=Прикажи слојеве (дупли клик за враћање свих слојева у подразумевано стање) layers_label=Слојеви thumbs.title=Прикажи сличице thumbs_label=Сличице current_outline_item.title=Пронађите тренутну контуру current_outline_item_label=Тренутна контура findbar.title=Пронађи у документу findbar_label=Пронађи additional_layers=Додатни слојеви # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Страница {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Страница {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Сличица од странице {{page}} # Find panel button title and messages find_input.title=Пронађи find_input.placeholder=Пронађи у документу… find_previous.title=Пронађи претходну појаву фразе find_previous_label=Претходна find_next.title=Пронађи следећу појаву фразе find_next_label=Следећа find_highlight=Истакнути све find_match_case_label=Подударања find_entire_word_label=Целе речи find_reached_top=Достигнут врх документа, наставио са дна find_reached_bottom=Достигнуто дно документа, наставио са врха # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} од {{total}} одговара find_match_count[two]={{current}} од {{total}} одговара find_match_count[few]={{current}} од {{total}} одговара find_match_count[many]={{current}} од {{total}} одговара find_match_count[other]={{current}} од {{total}} одговара # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Више од {{limit}} одговара find_match_count_limit[one]=Више од {{limit}} одговара find_match_count_limit[two]=Више од {{limit}} одговара find_match_count_limit[few]=Више од {{limit}} одговара find_match_count_limit[many]=Више од {{limit}} одговара find_match_count_limit[other]=Више од {{limit}} одговара find_not_found=Фраза није пронађена # Error panel labels error_more_info=Више информација error_less_info=Мање информација error_close=Затвори # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Порука: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Стек: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Датотека: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Линија: {{line}} rendering_error=Дошло је до грешке приликом рендеровања ове странице. # Predefined zoom values page_scale_width=Ширина странице page_scale_fit=Прилагоди страницу page_scale_auto=Аутоматско увеличавање page_scale_actual=Стварна величина # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Грешка loading_error=Дошло је до грешке приликом учитавања PDF-а. invalid_file_error=PDF датотека је оштећена или је неисправна. missing_file_error=PDF датотека није пронађена. unexpected_response_error=Неочекиван одговор од сервера. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} коментар] password_label=Унесите лозинку да бисте отворили овај PDF докуменат. password_invalid=Неисправна лозинка. Покушајте поново. password_ok=У реду password_cancel=Откажи printing_not_supported=Упозорење: Штампање није у потпуности подржано у овом прегледачу. printing_not_ready=Упозорење: PDF није у потпуности учитан за штампу. web_fonts_disabled=Веб фонтови су онемогућени: не могу користити уграђене PDF фонтове. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/sv-SE/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Föregående sida previous_label=Föregående next.title=Nästa sida next_label=Nästa # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Sida # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=av {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} av {{pagesCount}}) zoom_out.title=Zooma ut zoom_out_label=Zooma ut zoom_in.title=Zooma in zoom_in_label=Zooma in zoom.title=Zoom presentation_mode.title=Byt till presentationsläge presentation_mode_label=Presentationsläge open_file.title=Öppna fil open_file_label=Öppna print.title=Skriv ut print_label=Skriv ut download.title=Hämta download_label=Hämta bookmark.title=Aktuell vy (kopiera eller öppna i nytt fönster) bookmark_label=Aktuell vy # Secondary toolbar and context menu tools.title=Verktyg tools_label=Verktyg first_page.title=Gå till första sidan first_page.label=Gå till första sidan first_page_label=Gå till första sidan last_page.title=Gå till sista sidan last_page.label=Gå till sista sidan last_page_label=Gå till sista sidan page_rotate_cw.title=Rotera medurs page_rotate_cw.label=Rotera medurs page_rotate_cw_label=Rotera medurs page_rotate_ccw.title=Rotera moturs page_rotate_ccw.label=Rotera moturs page_rotate_ccw_label=Rotera moturs cursor_text_select_tool.title=Aktivera textmarkeringsverktyg cursor_text_select_tool_label=Textmarkeringsverktyg cursor_hand_tool.title=Aktivera handverktyg cursor_hand_tool_label=Handverktyg scroll_vertical.title=Använd vertikal rullning scroll_vertical_label=Vertikal rullning scroll_horizontal.title=Använd horisontell rullning scroll_horizontal_label=Horisontell rullning scroll_wrapped.title=Använd överlappande rullning scroll_wrapped_label=Överlappande rullning spread_none.title=Visa enkelsidor spread_none_label=Enkelsidor spread_odd.title=Visa uppslag med olika sidnummer till vänster spread_odd_label=Uppslag med framsida spread_even.title=Visa uppslag med lika sidnummer till vänster spread_even_label=Uppslag utan framsida # Document properties dialog box document_properties.title=Dokumentegenskaper… document_properties_label=Dokumentegenskaper… document_properties_file_name=Filnamn: document_properties_file_size=Filstorlek: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} kB ({{size_b}} byte) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} byte) document_properties_title=Titel: document_properties_author=Författare: document_properties_subject=Ämne: document_properties_keywords=Nyckelord: document_properties_creation_date=Skapades: document_properties_modification_date=Ändrades: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Skapare: document_properties_producer=PDF-producent: document_properties_version=PDF-version: document_properties_page_count=Sidantal: document_properties_page_size=Pappersstorlek: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=porträtt document_properties_page_size_orientation_landscape=landskap document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Snabb webbvisning: document_properties_linearized_yes=Ja document_properties_linearized_no=Nej document_properties_close=Stäng print_progress_message=Förbereder sidor för utskrift… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Avbryt # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Visa/dölj sidofält toggle_sidebar_notification.title=Visa/dölj sidofält (dokument innehåller översikt/bilagor) toggle_sidebar_notification2.title=Växla sidofält (dokumentet innehåller dokumentstruktur/bilagor/lager) toggle_sidebar_label=Visa/dölj sidofält document_outline.title=Visa dokumentdisposition (dubbelklicka för att expandera/komprimera alla objekt) document_outline_label=Dokumentöversikt attachments.title=Visa Bilagor attachments_label=Bilagor layers.title=Visa lager (dubbelklicka för att återställa alla lager till standardläge) layers_label=Lager thumbs.title=Visa miniatyrer thumbs_label=Miniatyrer current_outline_item.title=Hitta aktuellt dispositionsobjekt current_outline_item_label=Aktuellt dispositionsobjekt findbar.title=Sök i dokument findbar_label=Sök additional_layers=Ytterligare lager # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Sida {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Sida {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Miniatyr av sida {{page}} # Find panel button title and messages find_input.title=Sök find_input.placeholder=Sök i dokument… find_previous.title=Hitta föregående förekomst av frasen find_previous_label=Föregående find_next.title=Hitta nästa förekomst av frasen find_next_label=Nästa find_highlight=Markera alla find_match_case_label=Matcha versal/gemen find_entire_word_label=Hela ord find_reached_top=Nådde början av dokumentet, började från slutet find_reached_bottom=Nådde slutet på dokumentet, började från början # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} av {{total}} träff find_match_count[two]={{current}} av {{total}} träffar find_match_count[few]={{current}} av {{total}} träffar find_match_count[many]={{current}} av {{total}} träffar find_match_count[other]={{current}} av {{total}} träffar # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Mer än {{limit}} träffar find_match_count_limit[one]=Mer än {{limit}} träff find_match_count_limit[two]=Mer än {{limit}} träffar find_match_count_limit[few]=Mer än {{limit}} träffar find_match_count_limit[many]=Mer än {{limit}} träffar find_match_count_limit[other]=Mer än {{limit}} träffar find_not_found=Frasen hittades inte # Error panel labels error_more_info=Mer information error_less_info=Mindre information error_close=Stäng # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Meddelande: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stack: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Fil: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Rad: {{line}} rendering_error=Ett fel uppstod vid visning av sidan. # Predefined zoom values page_scale_width=Sidbredd page_scale_fit=Anpassa sida page_scale_auto=Automatisk zoom page_scale_actual=Verklig storlek # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Fel loading_error=Ett fel uppstod vid laddning av PDF-filen. invalid_file_error=Ogiltig eller korrupt PDF-fil. missing_file_error=Saknad PDF-fil. unexpected_response_error=Oväntat svar från servern. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}} {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}}-annotering] password_label=Skriv in lösenordet för att öppna PDF-filen. password_invalid=Ogiltigt lösenord. Försök igen. password_ok=OK password_cancel=Avbryt printing_not_supported=Varning: Utskrifter stöds inte helt av den här webbläsaren. printing_not_ready=Varning: PDF:en är inte klar för utskrift. web_fonts_disabled=Webbtypsnitt är inaktiverade: kan inte använda inbäddade PDF-typsnitt. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/szl/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Piyrwyjszo strōna previous_label=Piyrwyjszo next.title=Nastympno strōna next_label=Dalij # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Strōna # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=ze {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} ze {{pagesCount}}) zoom_out.title=Zmyńsz zoom_out_label=Zmyńsz zoom_in.title=Zwiynksz zoom_in_label=Zwiynksz zoom.title=Srogość presentation_mode.title=Przełōncz na tryb prezyntacyje presentation_mode_label=Tryb prezyntacyje open_file.title=Ôdewrzij zbiōr open_file_label=Ôdewrzij print.title=Durkuj print_label=Durkuj download.title=Pobier download_label=Pobier bookmark.title=Aktualny widok (kopiuj abo ôdewrzij w nowym ôknie) bookmark_label=Aktualny widok # Secondary toolbar and context menu tools.title=Noczynia tools_label=Noczynia first_page.title=Idź ku piyrszyj strōnie first_page.label=Idź ku piyrszyj strōnie first_page_label=Idź ku piyrszyj strōnie last_page.title=Idź ku ôstatnij strōnie last_page.label=Idź ku ôstatnij strōnie last_page_label=Idź ku ôstatnij strōnie page_rotate_cw.title=Zwyrtnij w prawo page_rotate_cw.label=Zwyrtnij w prawo page_rotate_cw_label=Zwyrtnij w prawo page_rotate_ccw.title=Zwyrtnij w lewo page_rotate_ccw.label=Zwyrtnij w lewo page_rotate_ccw_label=Zwyrtnij w lewo cursor_text_select_tool.title=Załōncz noczynie ôbiyranio tekstu cursor_text_select_tool_label=Noczynie ôbiyranio tekstu cursor_hand_tool.title=Załōncz noczynie rōnczka cursor_hand_tool_label=Noczynie rōnczka scroll_vertical.title=Używej piōnowego przewijanio scroll_vertical_label=Piōnowe przewijanie scroll_horizontal.title=Używej poziōmego przewijanio scroll_horizontal_label=Poziōme przewijanie scroll_wrapped.title=Używej szichtowego przewijanio scroll_wrapped_label=Szichtowe przewijanie spread_none.title=Niy dowej strōn w widoku po dwie spread_none_label=Po jednyj strōnie spread_odd.title=Dej strōny po dwie: niyparzysto i parzysto spread_odd_label=Niyparzysto i parzysto spread_even.title=Dej strōny po dwie: parzysto i niyparzysto spread_even_label=Parzysto i niyparzysto # Document properties dialog box document_properties.title=Włosności dokumyntu… document_properties_label=Włosności dokumyntu… document_properties_file_name=Miano zbioru: document_properties_file_size=Srogość zbioru: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} B) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} B) document_properties_title=Tytuł: document_properties_author=Autōr: document_properties_subject=Tymat: document_properties_keywords=Kluczowe słowa: document_properties_creation_date=Data zrychtowanio: document_properties_modification_date=Data zmiany: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Zrychtowane ôd: document_properties_producer=PDF ôd: document_properties_version=Wersyjo PDF: document_properties_page_count=Wielość strōn: document_properties_page_size=Srogość strōny: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=piōnowo document_properties_page_size_orientation_landscape=poziōmo document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Gibki necowy podglōnd: document_properties_linearized_yes=Ja document_properties_linearized_no=Niy document_properties_close=Zawrzij print_progress_message=Rychtowanie dokumyntu do durku… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Pociep # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Przełōncz posek na rancie toggle_sidebar_notification.title=Przełōncz posek na rancie (dokumynt mo struktura/przidowki) toggle_sidebar_notification2.title=Przełōncz posek na rancie (dokumynt mo struktura/przidowki/warstwy) toggle_sidebar_label=Przełōncz posek na rancie document_outline.title=Pokoż struktura dokumyntu (tuplowane klikniyncie rozszyrzo/swijo wszyskie elymynta) document_outline_label=Struktura dokumyntu attachments.title=Pokoż przidowki attachments_label=Przidowki layers.title=Pokoż warstwy (tuplowane klikniyncie resetuje wszyskie warstwy do bazowego stanu) layers_label=Warstwy thumbs.title=Pokoż miniatury thumbs_label=Miniatury findbar.title=Znojdź w dokumyncie findbar_label=Znojdź additional_layers=Nadbytnie warstwy # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Strōna {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Strōna {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Miniatura strōny {{page}} # Find panel button title and messages find_input.title=Znojdź find_input.placeholder=Znojdź w dokumyncie… find_previous.title=Znojdź piyrwyjsze pokozanie sie tyj frazy find_previous_label=Piyrwyjszo find_next.title=Znojdź nastympne pokozanie sie tyj frazy find_next_label=Dalij find_highlight=Ôbznocz wszysko find_match_case_label=Poznowej srogość liter find_entire_word_label=Cołke słowa find_reached_top=Doszło do samego wiyrchu strōny, dalij ôd spodku find_reached_bottom=Doszło do samego spodku strōny, dalij ôd wiyrchu # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} ze {{total}}, co pasujōm find_match_count[two]={{current}} ze {{total}}, co pasujōm find_match_count[few]={{current}} ze {{total}}, co pasujōm find_match_count[many]={{current}} ze {{total}}, co pasujōm find_match_count[other]={{current}} ze {{total}}, co pasujōm # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(total) ]} find_match_count_limit[zero]=Wiyncyj jak {{limit}}, co pasujōm find_match_count_limit[one]=Wiyncyj jak {{limit}}, co pasuje find_match_count_limit[two]=Wiyncyj jak {{limit}}, co pasujōm find_match_count_limit[few]=Wiyncyj jak {{limit}}, co pasujōm find_match_count_limit[many]=Wiyncyj jak {{limit}}, co pasujōm find_match_count_limit[other]=Wiyncyj jak {{limit}}, co pasujōm find_not_found=Fraza niy ma znodniynto # Error panel labels error_more_info=Wiyncyj informacyji error_less_info=Mynij informacyji error_close=Zawrzij # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Wiadōmość: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Sztapel: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Zbiōr: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Linijo: {{line}} rendering_error=Przi renderowaniu strōny pokozoł sie feler. # Predefined zoom values page_scale_width=Szyrzka strōny page_scale_fit=Napasowanie strōny page_scale_auto=Autōmatyczno srogość page_scale_actual=Aktualno srogość # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Feler loading_error=Przi ladowaniu PDFa pokozoł sie feler. invalid_file_error=Zły abo felerny zbiōr PDF. missing_file_error=Chybio zbioru PDF. unexpected_response_error=Niyôczekowano ôdpowiydź serwera. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Anotacyjo typu {{type}}] password_label=Wkludź hasło, coby ôdewrzić tyn zbiōr PDF. password_invalid=Hasło je złe. Sprōbuj jeszcze roz. password_ok=OK password_cancel=Pociep printing_not_supported=Pozōr: Ta przeglōndarka niy cołkiym ôbsuguje durk. printing_not_ready=Pozōr: Tyn PDF niy ma za tela zaladowany do durku. web_fonts_disabled=Necowe fōnty sōm zastawiōne: niy idzie użyć wkludzōnych fōntōw PDF. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ta/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=முந்தைய பக்கம் previous_label=முந்தையது next.title=அடுத்த பக்கம் next_label=அடுத்து # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=பக்கம் # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages={{pagesCount}} இல் # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages={{pagesCount}}) இல் ({{pageNumber}} zoom_out.title=சிறிதாக்கு zoom_out_label=சிறிதாக்கு zoom_in.title=பெரிதாக்கு zoom_in_label=பெரிதாக்கு zoom.title=பெரிதாக்கு presentation_mode.title=விளக்ககாட்சி பயன்முறைக்கு மாறு presentation_mode_label=விளக்ககாட்சி பயன்முறை open_file.title=கோப்பினை திற open_file_label=திற print.title=அச்சிடு print_label=அச்சிடு download.title=பதிவிறக்கு download_label=பதிவிறக்கு bookmark.title=தற்போதைய காட்சி (புதிய சாளரத்திற்கு நகலெடு அல்லது புதிய சாளரத்தில் திற) bookmark_label=தற்போதைய காட்சி # Secondary toolbar and context menu tools.title=கருவிகள் tools_label=கருவிகள் first_page.title=முதல் பக்கத்திற்கு செல்லவும் first_page.label=முதல் பக்கத்திற்கு செல்லவும் first_page_label=முதல் பக்கத்திற்கு செல்லவும் last_page.title=கடைசி பக்கத்திற்கு செல்லவும் last_page.label=கடைசி பக்கத்திற்கு செல்லவும் last_page_label=கடைசி பக்கத்திற்கு செல்லவும் page_rotate_cw.title=வலஞ்சுழியாக சுழற்று page_rotate_cw.label=வலஞ்சுழியாக சுழற்று page_rotate_cw_label=வலஞ்சுழியாக சுழற்று page_rotate_ccw.title=இடஞ்சுழியாக சுழற்று page_rotate_ccw.label=இடஞ்சுழியாக சுழற்று page_rotate_ccw_label=இடஞ்சுழியாக சுழற்று cursor_text_select_tool.title=உரைத் தெரிவு கருவியைச் செயல்படுத்து cursor_text_select_tool_label=உரைத் தெரிவு கருவி cursor_hand_tool.title=கைக் கருவிக்ச் செயற்படுத்து cursor_hand_tool_label=கைக்குருவி # Document properties dialog box document_properties.title=ஆவண பண்புகள்... document_properties_label=ஆவண பண்புகள்... document_properties_file_name=கோப்பு பெயர்: document_properties_file_size=கோப்பின் அளவு: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} கிபை ({{size_b}} பைட்டுகள்) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} மெபை ({{size_b}} பைட்டுகள்) document_properties_title=தலைப்பு: document_properties_author=எழுதியவர் document_properties_subject=பொருள்: document_properties_keywords=முக்கிய வார்த்தைகள்: document_properties_creation_date=படைத்த தேதி : document_properties_modification_date=திருத்திய தேதி: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=உருவாக்குபவர்: document_properties_producer=பிடிஎஃப் தயாரிப்பாளர்: document_properties_version=PDF பதிப்பு: document_properties_page_count=பக்க எண்ணிக்கை: document_properties_page_size=பக்க அளவு: document_properties_page_size_unit_inches=இதில் document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=நிலைபதிப்பு document_properties_page_size_orientation_landscape=நிலைபரப்பு document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=கடிதம் document_properties_page_size_name_legal=சட்டபூர்வ # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) document_properties_close=மூடுக print_progress_message=அச்சிடுவதற்கான ஆவணம் தயாராகிறது... # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=ரத்து # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=பக்கப் பட்டியை நிலைமாற்று toggle_sidebar_notification.title=பக்கப்பட்டையை நிலைமாற்று (வெளிக்கோடு/இணைப்புகளை ஆவணம் கொண்டுள்ளது) toggle_sidebar_label=பக்கப் பட்டியை நிலைமாற்று document_outline.title=ஆவண அடக்கத்தைக் காட்டு (இருமுறைச் சொடுக்கி அனைத்து உறுப்பிடிகளையும் விரி/சேர்) document_outline_label=ஆவண வெளிவரை attachments.title=இணைப்புகளை காண்பி attachments_label=இணைப்புகள் thumbs.title=சிறுபடங்களைக் காண்பி thumbs_label=சிறுபடங்கள் findbar.title=ஆவணத்தில் கண்டறி findbar_label=தேடு # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=பக்கம் {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=பக்கத்தின் சிறுபடம் {{page}} # Find panel button title and messages find_input.title=கண்டுபிடி find_input.placeholder=ஆவணத்தில் கண்டறி… find_previous.title=இந்த சொற்றொடரின் முந்தைய நிகழ்வை தேடு find_previous_label=முந்தையது find_next.title=இந்த சொற்றொடரின் அடுத்த நிகழ்வை தேடு find_next_label=அடுத்து find_highlight=அனைத்தையும் தனிப்படுத்து find_match_case_label=பேரெழுத்தாக்கத்தை உணர் find_reached_top=ஆவணத்தின் மேல் பகுதியை அடைந்தது, அடிப்பக்கத்திலிருந்து தொடர்ந்தது find_reached_bottom=ஆவணத்தின் முடிவை அடைந்தது, மேலிருந்து தொடர்ந்தது find_not_found=சொற்றொடர் காணவில்லை # Error panel labels error_more_info=கூடுதல் தகவல் error_less_info=குறைந்த தகவல் error_close=மூடுக # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=செய்தி: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=ஸ்டேக்: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=கோப்பு: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=வரி: {{line}} rendering_error=இந்தப் பக்கத்தை காட்சிப்படுத்தும் போது ஒரு பிழை ஏற்பட்டது. # Predefined zoom values page_scale_width=பக்க அகலம் page_scale_fit=பக்கப் பொருத்தம் page_scale_auto=தானியக்க பெரிதாக்கல் page_scale_actual=உண்மையான அளவு # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=பிழை loading_error=PDF ஐ ஏற்றும் போது ஒரு பிழை ஏற்பட்டது. invalid_file_error=செல்லுபடியாகாத அல்லது சிதைந்த PDF கோப்பு. missing_file_error=PDF கோப்பு காணவில்லை. unexpected_response_error=சேவகன் பதில் எதிர்பாரதது. # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} விளக்கம்] password_label=இந்த PDF கோப்பை திறக்க கடவுச்சொல்லை உள்ளிடவும். password_invalid=செல்லுபடியாகாத கடவுச்சொல், தயை செய்து மீண்டும் முயற்சி செய்க. password_ok=சரி password_cancel=ரத்து printing_not_supported=எச்சரிக்கை: இந்த உலாவி அச்சிடுதலை முழுமையாக ஆதரிக்கவில்லை. printing_not_ready=எச்சரிக்கை: PDF அச்சிட முழுவதுமாக ஏற்றப்படவில்லை. web_fonts_disabled=வலை எழுத்துருக்கள் முடக்கப்பட்டுள்ளன: உட்பொதிக்கப்பட்ட PDF எழுத்துருக்களைப் பயன்படுத்த முடியவில்லை. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/te/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=మునుపటి పేజీ previous_label=క్రితం next.title=తరువాత పేజీ next_label=తరువాత # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=పేజీ # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=మొత్తం {{pagesCount}} లో # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=(మొత్తం {{pagesCount}} లో {{pageNumber}}వది) zoom_out.title=జూమ్ తగ్గించు zoom_out_label=జూమ్ తగ్గించు zoom_in.title=జూమ్ చేయి zoom_in_label=జూమ్ చేయి zoom.title=జూమ్ presentation_mode.title=ప్రదర్శనా రీతికి మారు presentation_mode_label=ప్రదర్శనా రీతి open_file.title=ఫైల్ తెరువు open_file_label=తెరువు print.title=ముద్రించు print_label=ముద్రించు download.title=దింపుకోళ్ళు download_label=దింపుకోళ్ళు bookmark.title=ప్రస్తుత దర్శనం (కాపీ చేయి లేదా కొత్త విండోలో తెరువు) bookmark_label=ప్రస్తుత దర్శనం # Secondary toolbar and context menu tools.title=పనిముట్లు tools_label=పనిముట్లు first_page.title=మొదటి పేజీకి వెళ్ళు first_page.label=మొదటి పేజీకి వెళ్ళు first_page_label=మొదటి పేజీకి వెళ్ళు last_page.title=చివరి పేజీకి వెళ్ళు last_page.label=చివరి పేజీకి వెళ్ళు last_page_label=చివరి పేజీకి వెళ్ళు page_rotate_cw.title=సవ్యదిశలో తిప్పు page_rotate_cw.label=సవ్యదిశలో తిప్పు page_rotate_cw_label=సవ్యదిశలో తిప్పు page_rotate_ccw.title=అపసవ్యదిశలో తిప్పు page_rotate_ccw.label=అపసవ్యదిశలో తిప్పు page_rotate_ccw_label=అపసవ్యదిశలో తిప్పు cursor_text_select_tool.title=టెక్స్ట్ ఎంపిక సాధనాన్ని ప్రారంభించండి cursor_text_select_tool_label=టెక్స్ట్ ఎంపిక సాధనం cursor_hand_tool.title=చేతి సాధనం చేతనించు cursor_hand_tool_label=చేతి సాధనం scroll_vertical_label=నిలువు స్క్రోలింగు # Document properties dialog box document_properties.title=పత్రము లక్షణాలు... document_properties_label=పత్రము లక్షణాలు... document_properties_file_name=దస్త్రం పేరు: document_properties_file_size=దస్త్రం పరిమాణం: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=శీర్షిక: document_properties_author=మూలకర్త: document_properties_subject=విషయం: document_properties_keywords=కీ పదాలు: document_properties_creation_date=సృష్టించిన తేదీ: document_properties_modification_date=సవరించిన తేదీ: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=సృష్టికర్త: document_properties_producer=PDF ఉత్పాదకి: document_properties_version=PDF వర్షన్: document_properties_page_count=పేజీల సంఖ్య: document_properties_page_size=కాగితం పరిమాణం: document_properties_page_size_unit_inches=లో document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=నిలువుచిత్రం document_properties_page_size_orientation_landscape=అడ్డచిత్రం document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=లేఖ document_properties_page_size_name_legal=చట్టపరమైన # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized_yes=అవును document_properties_linearized_no=కాదు document_properties_close=మూసివేయి print_progress_message=ముద్రించడానికి పత్రము సిద్ధమవుతున్నది… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=రద్దుచేయి # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=పక్కపట్టీ మార్చు toggle_sidebar_label=పక్కపట్టీ మార్చు document_outline.title=పత్రము రూపము చూపించు (డబుల్ క్లిక్ చేసి అన్ని అంశాలను విస్తరించు/కూల్చు) document_outline_label=పత్రము అవుట్‌లైన్ attachments.title=అనుబంధాలు చూపు attachments_label=అనుబంధాలు layers_label=పొరలు thumbs.title=థంబ్‌నైల్స్ చూపు thumbs_label=థంబ్‌నైల్స్ findbar.title=పత్రములో కనుగొనుము findbar_label=కనుగొను additional_layers=అదనపు పొరలు # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=పేజి {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=పేజీ {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas={{page}} పేజీ నఖచిత్రం # Find panel button title and messages find_input.title=కనుగొను find_input.placeholder=పత్రములో కనుగొను… find_previous.title=పదం యొక్క ముందు సంభవాన్ని కనుగొను find_previous_label=మునుపటి find_next.title=పదం యొక్క తర్వాతి సంభవాన్ని కనుగొను find_next_label=తరువాత find_highlight=అన్నిటిని ఉద్దీపనం చేయుము find_match_case_label=అక్షరముల తేడాతో పోల్చు find_entire_word_label=పూర్తి పదాలు find_reached_top=పేజీ పైకి చేరుకున్నది, క్రింది నుండి కొనసాగించండి find_reached_bottom=పేజీ చివరకు చేరుకున్నది, పైనుండి కొనసాగించండి # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_not_found=పదబంధం కనబడలేదు # Error panel labels error_more_info=మరింత సమాచారం error_less_info=తక్కువ సమాచారం error_close=మూసివేయి # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=సందేశం: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=స్టాక్: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=ఫైలు: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=వరుస: {{line}} rendering_error=పేజీను రెండర్ చేయుటలో ఒక దోషం ఎదురైంది. # Predefined zoom values page_scale_width=పేజీ వెడల్పు page_scale_fit=పేజీ అమర్పు page_scale_auto=స్వయంచాలక జూమ్ page_scale_actual=యథార్ధ పరిమాణం # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=దోషం loading_error=PDF లోడవుచున్నప్పుడు ఒక దోషం ఎదురైంది. invalid_file_error=చెల్లని లేదా పాడైన PDF ఫైలు. missing_file_error=దొరకని PDF ఫైలు. unexpected_response_error=అనుకోని సర్వర్ స్పందన. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} టీకా] password_label=ఈ PDF ఫైల్ తెరుచుటకు సంకేతపదం ప్రవేశపెట్టుము. password_invalid=సంకేతపదం చెల్లదు. దయచేసి మళ్ళీ ప్రయత్నించండి. password_ok=సరే password_cancel=రద్దుచేయి printing_not_supported=హెచ్చరిక: ఈ విహారిణి చేత ముద్రణ పూర్తిగా తోడ్పాటు లేదు. printing_not_ready=హెచ్చరిక: ముద్రణ కొరకు ఈ PDF పూర్తిగా లోడవలేదు. web_fonts_disabled=వెబ్ ఫాంట్లు అచేతనించబడెను: ఎంబెడెడ్ PDF ఫాంట్లు ఉపయోగించలేక పోయింది. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/th/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=หน้าก่อนหน้า previous_label=ก่อนหน้า next.title=หน้าถัดไป next_label=ถัดไป # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=หน้า # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=จาก {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} จาก {{pagesCount}}) zoom_out.title=ซูมออก zoom_out_label=ซูมออก zoom_in.title=ซูมเข้า zoom_in_label=ซูมเข้า zoom.title=ซูม presentation_mode.title=สลับเป็นโหมดการนำเสนอ presentation_mode_label=โหมดการนำเสนอ open_file.title=เปิดไฟล์ open_file_label=เปิด print.title=พิมพ์ print_label=พิมพ์ download.title=ดาวน์โหลด download_label=ดาวน์โหลด bookmark.title=มุมมองปัจจุบัน (คัดลอกหรือเปิดในหน้าต่างใหม่) bookmark_label=มุมมองปัจจุบัน # Secondary toolbar and context menu tools.title=เครื่องมือ tools_label=เครื่องมือ first_page.title=ไปยังหน้าแรก first_page.label=ไปยังหน้าแรก first_page_label=ไปยังหน้าแรก last_page.title=ไปยังหน้าสุดท้าย last_page.label=ไปยังหน้าสุดท้าย last_page_label=ไปยังหน้าสุดท้าย page_rotate_cw.title=หมุนตามเข็มนาฬิกา page_rotate_cw.label=หมุนตามเข็มนาฬิกา page_rotate_cw_label=หมุนตามเข็มนาฬิกา page_rotate_ccw.title=หมุนทวนเข็มนาฬิกา page_rotate_ccw.label=หมุนทวนเข็มนาฬิกา page_rotate_ccw_label=หมุนทวนเข็มนาฬิกา cursor_text_select_tool.title=เปิดใช้งานเครื่องมือการเลือกข้อความ cursor_text_select_tool_label=เครื่องมือการเลือกข้อความ cursor_hand_tool.title=เปิดใช้งานเครื่องมือมือ cursor_hand_tool_label=เครื่องมือมือ scroll_vertical.title=ใช้การเลื่อนแนวตั้ง scroll_vertical_label=การเลื่อนแนวตั้ง scroll_horizontal.title=ใช้การเลื่อนแนวนอน scroll_horizontal_label=การเลื่อนแนวนอน scroll_wrapped.title=ใช้การเลื่อนแบบคลุม scroll_wrapped_label=เลื่อนแบบคลุม spread_none.title=ไม่ต้องรวมการกระจายหน้า spread_none_label=ไม่กระจาย spread_odd.title=รวมการกระจายหน้าเริ่มจากหน้าคี่ spread_odd_label=กระจายอย่างเหลือเศษ spread_even.title=รวมการกระจายหน้าเริ่มจากหน้าคู่ spread_even_label=กระจายอย่างเท่าเทียม # Document properties dialog box document_properties.title=คุณสมบัติเอกสาร… document_properties_label=คุณสมบัติเอกสาร… document_properties_file_name=ชื่อไฟล์: document_properties_file_size=ขนาดไฟล์: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} ไบต์) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} ไบต์) document_properties_title=ชื่อเรื่อง: document_properties_author=ผู้สร้าง: document_properties_subject=ชื่อเรื่อง: document_properties_keywords=คำสำคัญ: document_properties_creation_date=วันที่สร้าง: document_properties_modification_date=วันที่แก้ไข: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=ผู้สร้าง: document_properties_producer=ผู้ผลิต PDF: document_properties_version=รุ่น PDF: document_properties_page_count=จำนวนหน้า: document_properties_page_size=ขนาดหน้า: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=แนวตั้ง document_properties_page_size_orientation_landscape=แนวนอน document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=จดหมาย document_properties_page_size_name_legal=ข้อกฎหมาย # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=มุมมองเว็บแบบรวดเร็ว: document_properties_linearized_yes=ใช่ document_properties_linearized_no=ไม่ document_properties_close=ปิด print_progress_message=กำลังเตรียมเอกสารสำหรับการพิมพ์… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=ยกเลิก # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=เปิด/ปิดแถบข้าง toggle_sidebar_notification.title=เปิด/ปิดแถบข้าง (เอกสารมีเค้าร่าง/ไฟล์แนบ) toggle_sidebar_notification2.title=เปิด/ปิดแถบข้าง (เอกสารมีเค้าร่าง/ไฟล์แนบ/เลเยอร์) toggle_sidebar_label=เปิด/ปิดแถบข้าง document_outline.title=แสดงเค้าร่างเอกสาร (คลิกสองครั้งเพื่อขยาย/ยุบรายการทั้งหมด) document_outline_label=เค้าร่างเอกสาร attachments.title=แสดงไฟล์แนบ attachments_label=ไฟล์แนบ layers.title=แสดงเลเยอร์ (คลิกสองครั้งเพื่อรีเซ็ตเลเยอร์ทั้งหมดเป็นสถานะเริ่มต้น) layers_label=เลเยอร์ thumbs.title=แสดงภาพขนาดย่อ thumbs_label=ภาพขนาดย่อ findbar.title=ค้นหาในเอกสาร findbar_label=ค้นหา additional_layers=เลเยอร์เพิ่มเติม # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=หน้า {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=หน้า {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=ภาพขนาดย่อของหน้า {{page}} # Find panel button title and messages find_input.title=ค้นหา find_input.placeholder=ค้นหาในเอกสาร… find_previous.title=หาตำแหน่งก่อนหน้าของวลี find_previous_label=ก่อนหน้า find_next.title=หาตำแหน่งถัดไปของวลี find_next_label=ถัดไป find_highlight=เน้นสีทั้งหมด find_match_case_label=ตัวพิมพ์ใหญ่เล็กตรงกัน find_entire_word_label=ทั้งคำ find_reached_top=ค้นหาถึงจุดเริ่มต้นของหน้า เริ่มค้นต่อจากด้านล่าง find_reached_bottom=ค้นหาถึงจุดสิ้นสุดหน้า เริ่มค้นต่อจากด้านบน # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} จาก {{total}} ที่ตรงกัน find_match_count[two]={{current}} จาก {{total}} ที่ตรงกัน find_match_count[few]={{current}} จาก {{total}} ที่ตรงกัน find_match_count[many]={{current}} จาก {{total}} ที่ตรงกัน find_match_count[other]={{current}} จาก {{total}} ที่ตรงกัน # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=มากกว่า {{limit}} ที่ตรงกัน find_match_count_limit[one]=มากกว่า {{limit}} ที่ตรงกัน find_match_count_limit[two]=มากกว่า {{limit}} ที่ตรงกัน find_match_count_limit[few]=มากกว่า {{limit}} ที่ตรงกัน find_match_count_limit[many]=มากกว่า {{limit}} ที่ตรงกัน find_match_count_limit[other]=มากกว่า {{limit}} ที่ตรงกัน find_not_found=ไม่พบวลี # Error panel labels error_more_info=ข้อมูลเพิ่มเติม error_less_info=ข้อมูลน้อยลง error_close=ปิด # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=ข้อความ: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=สแตก: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=ไฟล์: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=บรรทัด: {{line}} rendering_error=เกิดข้อผิดพลาดขณะเรนเดอร์หน้า # Predefined zoom values page_scale_width=ความกว้างหน้า page_scale_fit=พอดีหน้า page_scale_auto=ซูมอัตโนมัติ page_scale_actual=ขนาดจริง # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=ข้อผิดพลาด loading_error=เกิดข้อผิดพลาดขณะโหลด PDF invalid_file_error=ไฟล์ PDF ไม่ถูกต้องหรือเสียหาย missing_file_error=ไฟล์ PDF หายไป unexpected_response_error=การตอบสนองของเซิร์ฟเวอร์ที่ไม่คาดคิด # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[คำอธิบายประกอบ {{type}}] password_label=ป้อนรหัสผ่านเพื่อเปิดไฟล์ PDF นี้ password_invalid=รหัสผ่านไม่ถูกต้อง โปรดลองอีกครั้ง password_ok=ตกลง password_cancel=ยกเลิก printing_not_supported=คำเตือน: เบราว์เซอร์นี้ไม่ได้สนับสนุนการพิมพ์อย่างเต็มที่ printing_not_ready=คำเตือน: PDF ไม่ได้รับการโหลดอย่างเต็มที่สำหรับการพิมพ์ web_fonts_disabled=แบบอักษรเว็บถูกปิดใช้งาน: ไม่สามารถใช้แบบอักษร PDF ฝังตัว ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/tl/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Naunang Pahina previous_label=Nakaraan next.title=Sunod na Pahina next_label=Sunod # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Pahina # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=ng {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} ng {{pagesCount}}) zoom_out.title=Paliitin zoom_out_label=Paliitin zoom_in.title=Palakihin zoom_in_label=Palakihin zoom.title=Mag-zoom presentation_mode.title=Lumipat sa Presentation Mode presentation_mode_label=Presentation Mode open_file.title=Magbukas ng file open_file_label=Buksan print.title=i-Print print_label=i-Print download.title=i-Download download_label=i-Download bookmark.title=Kasalukuyang tingin (kopyahin o buksan sa bagong window) bookmark_label=Kasalukuyang tingin # Secondary toolbar and context menu tools.title=Mga Kagamitan tools_label=Mga Kagamitan first_page.title=Pumunta sa Unang Pahina first_page.label=Pumunta sa Unang Pahina first_page_label=Pumunta sa Unang Pahina last_page.title=Pumunta sa Huling Pahina last_page.label=Pumunta sa Huling Pahina last_page_label=Pumunta sa Huling Pahina page_rotate_cw.title=Paikutin Pakanan page_rotate_cw.label=Paikutin Pakanan page_rotate_cw_label=Paikutin Pakanan page_rotate_ccw.title=Paikutin Pakaliwa page_rotate_ccw.label=Paikutin Pakaliwa page_rotate_ccw_label=Paikutin Pakaliwa cursor_text_select_tool.title=I-enable ang Text Selection Tool cursor_text_select_tool_label=Text Selection Tool cursor_hand_tool.title=I-enable ang Hand Tool cursor_hand_tool_label=Hand Tool scroll_vertical.title=Gumamit ng Vertical Scrolling scroll_vertical_label=Vertical Scrolling scroll_horizontal.title=Gumamit ng Horizontal Scrolling scroll_horizontal_label=Horizontal Scrolling scroll_wrapped.title=Gumamit ng Wrapped Scrolling scroll_wrapped_label=Wrapped Scrolling spread_none.title=Huwag pagsamahin ang mga page spread spread_none_label=No Spreads spread_odd.title=Join page spreads starting with odd-numbered pages spread_odd_label=Mga Odd Spread spread_even.title=Pagsamahin ang mga page spread na nagsisimula sa mga even-numbered na pahina spread_even_label=Mga Even Spread # Document properties dialog box document_properties.title=Mga Katangian ng Dokumento… document_properties_label=Mga Katangian ng Dokumento… document_properties_file_name=File name: document_properties_file_size=File size: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Pamagat: document_properties_author=May-akda: document_properties_subject=Paksa: document_properties_keywords=Mga keyword: document_properties_creation_date=Petsa ng Pagkakagawa: document_properties_modification_date=Petsa ng Pagkakabago: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Tagalikha: document_properties_producer=PDF Producer: document_properties_version=PDF Version: document_properties_page_count=Bilang ng Pahina: document_properties_page_size=Laki ng Pahina: document_properties_page_size_unit_inches=pulgada document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=patayo document_properties_page_size_orientation_landscape=pahiga document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Fast Web View: document_properties_linearized_yes=Oo document_properties_linearized_no=Hindi document_properties_close=Isara print_progress_message=Inihahanda ang dokumento para sa pag-print… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Kanselahin # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Ipakita/Itago ang Sidebar toggle_sidebar_notification.title=Ipakita/Itago ang Sidebar (nagtataglay ang dokumento ng balangkas/mga attachment) toggle_sidebar_notification2.title=Ipakita/Itago ang Sidebar (nagtataglay ang dokumento ng balangkas/mga attachment/mga layer) toggle_sidebar_label=Ipakita/Itago ang Sidebar document_outline.title=Ipakita ang Document Outline (mag-double-click para i-expand/collapse ang laman) document_outline_label=Balangkas ng Dokumento attachments.title=Ipakita ang mga Attachment attachments_label=Mga attachment layers.title=Ipakita ang mga Layer (mag-double click para mareset ang lahat ng layer sa orihinal na estado) layers_label=Mga layer thumbs.title=Ipakita ang mga Thumbnail thumbs_label=Mga thumbnail findbar.title=Hanapin sa Dokumento findbar_label=Hanapin additional_layers=Mga Karagdagang Layer # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Pahina {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Pahina {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Thumbnail ng Pahina {{page}} # Find panel button title and messages find_input.title=Hanapin find_input.placeholder=Hanapin sa dokumento… find_previous.title=Hanapin ang nakaraang pangyayari ng parirala find_previous_label=Nakaraan find_next.title=Hanapin ang susunod na pangyayari ng parirala find_next_label=Susunod find_highlight=I-highlight lahat find_match_case_label=Itugma ang case find_entire_word_label=Buong salita find_reached_top=Naabot na ang tuktok ng dokumento, ipinagpatuloy mula sa ilalim find_reached_bottom=Naabot na ang dulo ng dokumento, ipinagpatuloy mula sa tuktok # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} ng {{total}} tugma find_match_count[two]={{current}} ng {{total}} tugma find_match_count[few]={{current}} ng {{total}} tugma find_match_count[many]={{current}} ng {{total}} tugma find_match_count[other]={{current}} ng {{total}} tugma # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Higit sa {{limit}} tugma find_match_count_limit[one]=Higit sa {{limit}} tugma find_match_count_limit[two]=Higit sa {{limit}} tugma find_match_count_limit[few]=Higit sa {{limit}} tugma find_match_count_limit[many]=Higit sa {{limit}} tugma find_match_count_limit[other]=Higit sa {{limit}} tugma find_not_found=Hindi natagpuan ang parirala # Error panel labels error_more_info=Karagdagang Impormasyon error_less_info=Mas Kaunting Impormasyon error_close=Isara # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Mensahe: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stack: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=File: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Linya: {{line}} rendering_error=Nagkaproblema habang nirerender ang pahina. # Predefined zoom values page_scale_width=Lapad ng Pahina page_scale_fit=Pagkasyahin ang Pahina page_scale_auto=Automatic Zoom page_scale_actual=Totoong sukat # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Error loading_error=Nagkaproblema habang niloload ang PDF. invalid_file_error=Di-wasto o sira ang PDF file. missing_file_error=Nawawalang PDF file. unexpected_response_error=Hindi inaasahang tugon ng server. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Annotation] password_label=Ipasok ang password upang buksan ang PDF file na ito. password_invalid=Maling password. Subukan uli. password_ok=OK password_cancel=Kanselahin printing_not_supported=Babala: Hindi pa ganap na suportado ang pag-print sa browser na ito. printing_not_ready=Babala: Hindi ganap na nabuksan ang PDF para sa pag-print. web_fonts_disabled=Naka-disable ang mga Web font: hindi kayang gamitin ang mga naka-embed na PDF font. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/tr/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Önceki sayfa previous_label=Önceki next.title=Sonraki sayfa next_label=Sonraki # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Sayfa # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=/ {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} / {{pagesCount}}) zoom_out.title=Uzaklaştır zoom_out_label=Uzaklaştır zoom_in.title=Yaklaştır zoom_in_label=Yaklaştır zoom.title=Yakınlaştırma presentation_mode.title=Sunum moduna geç presentation_mode_label=Sunum Modu open_file.title=Dosya aç open_file_label=Aç print.title=Yazdır print_label=Yazdır download.title=İndir download_label=İndir bookmark.title=Geçerli görünüm (kopyala veya yeni pencerede aç) bookmark_label=Geçerli görünüm # Secondary toolbar and context menu tools.title=Araçlar tools_label=Araçlar first_page.title=İlk sayfaya git first_page.label=İlk sayfaya git first_page_label=İlk sayfaya git last_page.title=Son sayfaya git last_page.label=Son sayfaya git last_page_label=Son sayfaya git page_rotate_cw.title=Saat yönünde döndür page_rotate_cw.label=Saat yönünde döndür page_rotate_cw_label=Saat yönünde döndür page_rotate_ccw.title=Saat yönünün tersine döndür page_rotate_ccw.label=Saat yönünün tersine döndür page_rotate_ccw_label=Saat yönünün tersine döndür cursor_text_select_tool.title=Metin seçme aracını etkinleştir cursor_text_select_tool_label=Metin seçme aracı cursor_hand_tool.title=El aracını etkinleştir cursor_hand_tool_label=El aracı scroll_vertical.title=Dikey kaydırma kullan scroll_vertical_label=Dikey kaydırma scroll_horizontal.title=Yatay kaydırma kullan scroll_horizontal_label=Yatay kaydırma scroll_wrapped.title=Yan yana kaydırmayı kullan scroll_wrapped_label=Yan yana kaydırma spread_none.title=Yan yana sayfaları birleştirme spread_none_label=Birleştirme spread_odd.title=Yan yana sayfaları tek numaralı sayfalardan başlayarak birleştir spread_odd_label=Tek numaralı spread_even.title=Yan yana sayfaları çift numaralı sayfalardan başlayarak birleştir spread_even_label=Çift numaralı # Document properties dialog box document_properties.title=Belge özellikleri… document_properties_label=Belge özellikleri… document_properties_file_name=Dosya adı: document_properties_file_size=Dosya boyutu: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bayt) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bayt) document_properties_title=Başlık: document_properties_author=Yazar: document_properties_subject=Konu: document_properties_keywords=Anahtar kelimeler: document_properties_creation_date=Oluturma tarihi: document_properties_modification_date=Değiştirme tarihi: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}} {{time}} document_properties_creator=Oluşturan: document_properties_producer=PDF üreticisi: document_properties_version=PDF sürümü: document_properties_page_count=Sayfa sayısı: document_properties_page_size=Sayfa boyutu: document_properties_page_size_unit_inches=inç document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=dikey document_properties_page_size_orientation_landscape=yatay document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Hızlı web görünümü: document_properties_linearized_yes=Evet document_properties_linearized_no=Hayır document_properties_close=Kapat print_progress_message=Belge yazdırılmaya hazırlanıyor… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent=%{{progress}} print_progress_close=İptal # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Kenar çubuğunu aç/kapat toggle_sidebar_notification.title=Kenar çubuğunu aç/kapat (Belge ana hat/ekler içeriyor) toggle_sidebar_notification2.title=Kenar çubuğunu aç/kapat (Belge ana hat/ekler/katmanlar içeriyor) toggle_sidebar_label=Kenar çubuğunu aç/kapat document_outline.title=Belge ana hatlarını göster (Tüm öğeleri genişletmek/daraltmak için çift tıklayın) document_outline_label=Belge ana hatları attachments.title=Ekleri göster attachments_label=Ekler layers.title=Katmanları göster (tüm katmanları varsayılan duruma sıfırlamak için çift tıklayın) layers_label=Katmanlar thumbs.title=Küçük resimleri göster thumbs_label=Küçük resimler current_outline_item.title=Mevcut ana hat öğesini bul current_outline_item_label=Mevcut ana hat öğesi findbar.title=Belgede bul findbar_label=Bul additional_layers=Ek katmanlar # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Sayfa {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Sayfa {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas={{page}}. sayfanın küçük hâli # Find panel button title and messages find_input.title=Bul find_input.placeholder=Belgede bul… find_previous.title=Önceki eşleşmeyi bul find_previous_label=Önceki find_next.title=Sonraki eşleşmeyi bul find_next_label=Sonraki find_highlight=Tümünü vurgula find_match_case_label=Büyük-küçük harfe duyarlı find_entire_word_label=Tam sözcükler find_reached_top=Belgenin başına ulaşıldı, sonundan devam edildi find_reached_bottom=Belgenin sonuna ulaşıldı, başından devam edildi # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{total}} eşleşmeden {{current}}. eşleşme find_match_count[two]={{total}} eşleşmeden {{current}}. eşleşme find_match_count[few]={{total}} eşleşmeden {{current}}. eşleşme find_match_count[many]={{total}} eşleşmeden {{current}}. eşleşme find_match_count[other]={{total}} eşleşmeden {{current}}. eşleşme # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]={{limit}} eşleşmeden fazla find_match_count_limit[one]={{limit}} eşleşmeden fazla find_match_count_limit[two]={{limit}} eşleşmeden fazla find_match_count_limit[few]={{limit}} eşleşmeden fazla find_match_count_limit[many]={{limit}} eşleşmeden fazla find_match_count_limit[other]={{limit}} eşleşmeden fazla find_not_found=Eşleşme bulunamadı # Error panel labels error_more_info=Daha fazla bilgi al error_less_info=Daha az bilgi error_close=Kapat # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js sürüm {{version}} (yapı: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=İleti: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Yığın: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Dosya: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Satır: {{line}} rendering_error=Sayfa yorumlanırken bir hata oluştu. # Predefined zoom values page_scale_width=Sayfa genişliği page_scale_fit=Sayfayı sığdır page_scale_auto=Otomatik yakınlaştır page_scale_actual=Gerçek boyut # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent=%{{scale}} # Loading indicator messages loading_error_indicator=Hata loading_error=PDF yüklenirken bir hata oluştu. invalid_file_error=Geçersiz veya bozulmuş PDF dosyası. missing_file_error=PDF dosyası eksik. unexpected_response_error=Beklenmeyen sunucu yanıtı. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} işareti] password_label=Bu PDF dosyasını açmak için parolasını yazın. password_invalid=Geçersiz parola. Lütfen yeniden deneyin. password_ok=Tamam password_cancel=İptal printing_not_supported=Uyarı: Yazdırma bu tarayıcı tarafından tam olarak desteklenmemektedir. printing_not_ready=Uyarı: PDF tamamen yüklenmedi ve yazdırmaya hazır değil. web_fonts_disabled=Web fontları devre dışı: Gömülü PDF fontları kullanılamıyor. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/trs/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Pajinâ gunâj rukùu previous_label=Sa gachin next.title=Pajinâ 'na' ñaan next_label=Ne' ñaan # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Ñanj # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=si'iaj {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} of {{pagesCount}}) zoom_out.title=Nagi'iaj li' zoom_out_label=Nagi'iaj li' zoom_in.title=Nagi'iaj niko' zoom_in_label=Nagi'iaj niko' zoom.title=dàj nìko ma'an presentation_mode.title=Naduno' daj ga ma presentation_mode_label=Daj gà ma open_file.title=Na'nïn' chrû ñanj open_file_label=Na'nïn print.title=Nari' ña du'ua print_label=Nari' ñadu'ua download.title=Nadunïnj download_label=Nadunïnj bookmark.title=Daj hua ma (Guxun' nej na'nïn' riña ventana nakàa) bookmark_label=Daj hua ma # Secondary toolbar and context menu tools.title=Rasun tools_label=Nej rasùun first_page.title=gun' riña pajina asiniin first_page.label=Gun' riña pajina asiniin first_page_label=Gun' riña pajina asiniin last_page.title=Gun' riña pajina rukù ni'in last_page.label=Gun' riña pajina rukù ni'inj last_page_label=Gun' riña pajina rukù ni'inj page_rotate_cw.title=Tanikaj ne' huat page_rotate_cw.label=Tanikaj ne' huat page_rotate_cw_label=Tanikaj ne' huat page_rotate_ccw.title=Tanikaj ne' chînt' page_rotate_ccw.label=Tanikaj ne' chint page_rotate_ccw_label=Tanikaj ne' chint cursor_text_select_tool.title=Dugi'iaj sun' sa ganahui texto cursor_text_select_tool_label=Nej rasun arajsun' da' nahui' texto cursor_hand_tool.title=Nachrun' nej rasun cursor_hand_tool_label=Sa rajsun ro'o' scroll_vertical.title=Garasun' dukuán runūu scroll_vertical_label=Dukuán runūu scroll_horizontal.title=Garasun' dukuán nikin' nahui scroll_horizontal_label=Dukuán nikin' nahui scroll_wrapped.title=Garasun' sa nachree scroll_wrapped_label=Sa nachree spread_none.title=Si nagi'iaj nugun'un' nej pagina hua ninin spread_none_label=Ni'io daj hua pagina spread_odd.title=Nagi'iaj nugua'ant nej pajina spread_odd_label=Ni'io' daj hua libro gurin spread_even.title=Nakāj dugui' ngà nej pajinâ ayi'ì ngà da' hùi hùi spread_even_label=Nahuin nìko nej # Document properties dialog box document_properties.title=Nej sa nikāj ñanj… document_properties_label=Nej sa nikāj ñanj… document_properties_file_name=Si yugui archîbo: document_properties_file_size=Dàj yachìj archîbo: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Si yugui: document_properties_author=Sí girirà: document_properties_subject=Dugui': document_properties_keywords=Nej nuguan' huìi: document_properties_creation_date=Gui gurugui' man: document_properties_modification_date=Nuguan' nahuin nakà: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Guiri ro' document_properties_producer=Sa ri PDF: document_properties_version=PDF Version: document_properties_page_count=Si Guendâ Pâjina: document_properties_page_size=Dàj yachìj pâjina: document_properties_page_size_unit_inches=riña document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=nadu'ua document_properties_page_size_orientation_landscape=dàj huaj document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Da'ngà'a document_properties_page_size_name_legal=Nuguan' a'nï'ïn # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Nanèt chre ni'iajt riña Web: document_properties_linearized_yes=Ga'ue document_properties_linearized_no=Si ga'ue document_properties_close=Narán # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Duyichin' # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Nadunā barrâ nù yi'nïn toggle_sidebar_label=Nadunā barrâ nù yi'nïn findbar_label=Narì' # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. # Find panel button title and messages find_input.title=Narì' find_previous_label=Sa gachîn find_next_label=Ne' ñaan find_highlight=Daran' sa ña'an find_match_case_label=Match case # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} si'iaj {{total}} guña gè huaj find_match_count[two]={{current}} si'iaj {{total}} guña gè huaj find_match_count[few]={{current}} si'iaj {{total}} guña gè huaj find_match_count[many]={{current}} si'iaj {{total}} guña gè huaj find_match_count[other]={{current}} of {{total}} matches # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Doj ngà da' {{limit}} nej sa nari' dugui'i find_match_count_limit[one]=Doj ngà da' {{limit}} sa nari' dugui'i find_match_count_limit[two]=Doj ngà da' {{limit}} nej sa nari' dugui'i find_match_count_limit[few]=Doj ngà da' {{limit}} nej sa nari' dugui'i find_match_count_limit[many]=Doj ngà da' {{limit}} nej sa nari' dugui'i find_match_count_limit[other]=Doj ngà da' {{limit}} nej sa nari' dugui'i find_not_found=Nu narì'ij nugua'anj # Error panel labels error_more_info=Doj nuguan' a'min rayi'î nan error_less_info=Dòj nuguan' a'min rayi'î nan error_close=Narán # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Message: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Naru'ui': {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Archîbo: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Lînia: {{line}} # Predefined zoom values page_scale_actual=Dàj yàchi akuan' nín # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Nitaj si hua hue'ej # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" password_ok=Ga'ue password_cancel=Duyichin' ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/uk/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Попередня сторінка previous_label=Попередня next.title=Наступна сторінка next_label=Наступна # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Сторінка # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=із {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} із {{pagesCount}}) zoom_out.title=Зменшити zoom_out_label=Зменшити zoom_in.title=Збільшити zoom_in_label=Збільшити zoom.title=Масштаб presentation_mode.title=Перейти в режим презентації presentation_mode_label=Режим презентації open_file.title=Відкрити файл open_file_label=Відкрити print.title=Друк print_label=Друк download.title=Завантажити download_label=Завантажити bookmark.title=Поточний вигляд (копіювати чи відкрити в новому вікні) bookmark_label=Поточний вигляд # Secondary toolbar and context menu tools.title=Інструменти tools_label=Інструменти first_page.title=На першу сторінку first_page.label=На першу сторінку first_page_label=На першу сторінку last_page.title=На останню сторінку last_page.label=На останню сторінку last_page_label=На останню сторінку page_rotate_cw.title=Повернути за годинниковою стрілкою page_rotate_cw.label=Повернути за годинниковою стрілкою page_rotate_cw_label=Повернути за годинниковою стрілкою page_rotate_ccw.title=Повернути проти годинникової стрілки page_rotate_ccw.label=Повернути проти годинникової стрілки page_rotate_ccw_label=Повернути проти годинникової стрілки cursor_text_select_tool.title=Увімкнути інструмент вибору тексту cursor_text_select_tool_label=Інструмент вибору тексту cursor_hand_tool.title=Увімкнути інструмент "Рука" cursor_hand_tool_label=Інструмент "Рука" scroll_vertical.title=Використовувати вертикальне прокручування scroll_vertical_label=Вертикальне прокручування scroll_horizontal.title=Використовувати горизонтальне прокручування scroll_horizontal_label=Горизонтальне прокручування scroll_wrapped.title=Використовувати масштабоване прокручування scroll_wrapped_label=Масштабоване прокручування spread_none.title=Не використовувати розгорнуті сторінки spread_none_label=Без розгорнутих сторінок spread_odd.title=Розгорнуті сторінки починаються з непарних номерів spread_odd_label=Непарні сторінки зліва spread_even.title=Розгорнуті сторінки починаються з парних номерів spread_even_label=Парні сторінки зліва # Document properties dialog box document_properties.title=Властивості документа… document_properties_label=Властивості документа… document_properties_file_name=Назва файла: document_properties_file_size=Розмір файла: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} КБ ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} МБ ({{size_b}} bytes) document_properties_title=Заголовок: document_properties_author=Автор: document_properties_subject=Тема: document_properties_keywords=Ключові слова: document_properties_creation_date=Дата створення: document_properties_modification_date=Дата зміни: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Створено: document_properties_producer=Виробник PDF: document_properties_version=Версія PDF: document_properties_page_count=Кількість сторінок: document_properties_page_size=Розмір сторінки: document_properties_page_size_unit_inches=дюймів document_properties_page_size_unit_millimeters=мм document_properties_page_size_orientation_portrait=книжкова document_properties_page_size_orientation_landscape=альбомна document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Швидкий перегляд в Інтернеті: document_properties_linearized_yes=Так document_properties_linearized_no=Ні document_properties_close=Закрити print_progress_message=Підготовка документу до друку… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Скасувати # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Бічна панель toggle_sidebar_notification.title=Перемкнути бічну панель (документ має вміст/вкладення) toggle_sidebar_notification2.title=Перемкнути бічну панель (документ містить ескіз/вкладення/шари) toggle_sidebar_label=Перемкнути бічну панель document_outline.title=Показати схему документу (подвійний клік для розгортання/згортання елементів) document_outline_label=Схема документа attachments.title=Показати прикріплення attachments_label=Прикріплення layers.title=Показати шари (двічі клацніть, щоб скинути всі шари до типового стану) layers_label=Шари thumbs.title=Показувати ескізи thumbs_label=Ескізи current_outline_item.title=Знайти поточний елемент змісту current_outline_item_label=Поточний елемент змісту findbar.title=Знайти в документі findbar_label=Знайти additional_layers=Додаткові шари # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Сторінка {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Сторінка {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Ескіз сторінки {{page}} # Find panel button title and messages find_input.title=Знайти find_input.placeholder=Знайти в документі… find_previous.title=Знайти попереднє входження фрази find_previous_label=Попереднє find_next.title=Знайти наступне входження фрази find_next_label=Наступне find_highlight=Підсвітити все find_match_case_label=З урахуванням регістру find_entire_word_label=Цілі слова find_reached_top=Досягнуто початку документу, продовжено з кінця find_reached_bottom=Досягнуто кінця документу, продовжено з початку # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} збіг із {{total}} find_match_count[two]={{current}} збіги з {{total}} find_match_count[few]={{current}} збігів із {{total}} find_match_count[many]={{current}} збігів із {{total}} find_match_count[other]={{current}} збігів із {{total}} # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Понад {{limit}} збігів find_match_count_limit[one]=Більше, ніж {{limit}} збіг find_match_count_limit[two]=Більше, ніж {{limit}} збіги find_match_count_limit[few]=Більше, ніж {{limit}} збігів find_match_count_limit[many]=Понад {{limit}} збігів find_match_count_limit[other]=Понад {{limit}} збігів find_not_found=Фразу не знайдено # Error panel labels error_more_info=Більше інформації error_less_info=Менше інформації error_close=Закрити # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Повідомлення: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Стек: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Файл: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Рядок: {{line}} rendering_error=Під час виведення сторінки сталася помилка. # Predefined zoom values page_scale_width=За шириною page_scale_fit=Вмістити page_scale_auto=Автомасштаб page_scale_actual=Дійсний розмір # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Помилка loading_error=Під час завантаження PDF сталася помилка. invalid_file_error=Недійсний або пошкоджений PDF-файл. missing_file_error=Відсутній PDF-файл. unexpected_response_error=Неочікувана відповідь сервера. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}}-аннотація] password_label=Введіть пароль для відкриття цього PDF-файла. password_invalid=Невірний пароль. Спробуйте ще. password_ok=Гаразд password_cancel=Скасувати printing_not_supported=Попередження: Цей браузер не повністю підтримує друк. printing_not_ready=Попередження: PDF не повністю завантажений для друку. web_fonts_disabled=Веб-шрифти вимкнено: неможливо використати вбудовані у PDF шрифти. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ur/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=پچھلا صفحہ previous_label=پچھلا next.title=اگلا صفحہ next_label=آگے # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=صفحہ # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages={{pagesCount}} کا # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} کا {{pagesCount}}) zoom_out.title=باہر زوم کریں zoom_out_label=باہر زوم کریں zoom_in.title=اندر زوم کریں zoom_in_label=اندر زوم کریں zoom.title=زوم presentation_mode.title=پیشکش موڈ میں چلے جائیں presentation_mode_label=پیشکش موڈ open_file.title=مسل کھولیں open_file_label=کھولیں print.title=چھاپیں print_label=چھاپیں download.title=ڈاؤن لوڈ download_label=ڈاؤن لوڈ bookmark.title=حالیہ نظارہ (نۓ دریچہ میں نقل کریں یا کھولیں) bookmark_label=حالیہ نظارہ # Secondary toolbar and context menu tools.title=آلات tools_label=آلات first_page.title=پہلے صفحہ پر جائیں first_page.label=پہلے صفحہ پر جائیں first_page_label=پہلے صفحہ پر جائیں last_page.title=آخری صفحہ پر جائیں last_page.label=آخری صفحہ پر جائیں last_page_label=آخری صفحہ پر جائیں page_rotate_cw.title=گھڑی وار گھمائیں page_rotate_cw.label=گھڑی وار گھمائیں page_rotate_cw_label=گھڑی وار گھمائیں page_rotate_ccw.title=ضد گھڑی وار گھمائیں page_rotate_ccw.label=ضد گھڑی وار گھمائیں page_rotate_ccw_label=ضد گھڑی وار گھمائیں cursor_text_select_tool.title=متن کے انتخاب کے ٹول کو فعال بناے cursor_text_select_tool_label=متن کے انتخاب کا آلہ cursor_hand_tool.title=ہینڈ ٹول کو فعال بناییں cursor_hand_tool_label=ہاتھ کا آلہ scroll_vertical.title=عمودی اسکرولنگ کا استعمال کریں scroll_vertical_label=عمودی اسکرولنگ scroll_horizontal.title=افقی سکرولنگ کا استعمال کریں scroll_horizontal_label=افقی سکرولنگ spread_none.title=صفحہ پھیلانے میں شامل نہ ہوں spread_none_label=کوئی پھیلاؤ نہیں spread_odd_label=تاک پھیلاؤ spread_even_label=جفت پھیلاؤ # Document properties dialog box document_properties.title=دستاویز خواص… document_properties_label=دستاویز خواص…\u0020 document_properties_file_name=نام مسل: document_properties_file_size=مسل سائز: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=عنوان: document_properties_author=تخلیق کار: document_properties_subject=موضوع: document_properties_keywords=کلیدی الفاظ: document_properties_creation_date=تخلیق کی تاریخ: document_properties_modification_date=ترمیم کی تاریخ: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}، {{time}} document_properties_creator=تخلیق کار: document_properties_producer=PDF پیدا کار: document_properties_version=PDF ورژن: document_properties_page_count=صفحہ شمار: document_properties_page_size=صفہ کی لمبائ: document_properties_page_size_unit_inches=میں document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=عمودی انداز document_properties_page_size_orientation_landscape=افقى انداز document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=خط document_properties_page_size_name_legal=قانونی # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} {{name}} {{orientation}} # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=تیز ویب دیکھیں: document_properties_linearized_yes=ہاں document_properties_linearized_no=نہیں document_properties_close=بند کریں print_progress_message=چھاپنے کرنے کے لیے دستاویز تیار کیے جا رھے ھیں # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent=*{{progress}}%* print_progress_close=منسوخ کریں # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=سلائیڈ ٹوگل کریں toggle_sidebar_label=سلائیڈ ٹوگل کریں document_outline.title=دستاویز کی سرخیاں دکھایں (تمام اشیاء وسیع / غائب کرنے کے لیے ڈبل کلک کریں) document_outline_label=دستاویز آؤٹ لائن attachments.title=منسلکات دکھائیں attachments_label=منسلکات thumbs.title=تھمبنیل دکھائیں thumbs_label=مجمل findbar.title=دستاویز میں ڈھونڈیں findbar_label=ڈھونڈیں # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=صفحہ {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=صفحہ {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=صفحے کا مجمل {{page}} # Find panel button title and messages find_input.title=ڈھونڈیں find_input.placeholder=دستاویز… میں ڈھونڈیں find_previous.title=فقرے کا پچھلا وقوع ڈھونڈیں find_previous_label=پچھلا find_next.title=فقرے کا اگلہ وقوع ڈھونڈیں find_next_label=آگے find_highlight=تمام نمایاں کریں find_match_case_label=حروف مشابہ کریں find_entire_word_label=تمام الفاظ find_reached_top=صفحہ کے شروع پر پہنچ گیا، نیچے سے جاری کیا find_reached_bottom=صفحہ کے اختتام پر پہنچ گیا، اوپر سے جاری کیا # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{total}} میچ کا {{current}} find_match_count[few]={{total}} میچوں میں سے {{current}} find_match_count[many]={{total}} میچوں میں سے {{current}} find_match_count[other]={{total}} میچوں میں سے {{current}} # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(total) ]} find_match_count_limit[zero]={{limit}} سے زیادہ میچ find_match_count_limit[one]={{limit}} سے زیادہ میچ find_match_count_limit[two]={{limit}} سے زیادہ میچ find_match_count_limit[few]={{limit}} سے زیادہ میچ find_match_count_limit[many]={{limit}} سے زیادہ میچ find_match_count_limit[other]={{limit}} سے زیادہ میچ find_not_found=فقرا نہیں ملا # Error panel labels error_more_info=مزید معلومات error_less_info=کم معلومات error_close=بند کریں # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=پیغام: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=سٹیک: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=مسل: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=لائن: {{line}} rendering_error=صفحہ بناتے ہوئے نقص آ گیا۔ # Predefined zoom values page_scale_width=صفحہ چوڑائی page_scale_fit=صفحہ فٹنگ page_scale_auto=خودکار زوم page_scale_actual=اصل سائز # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=نقص loading_error=PDF لوڈ کرتے وقت نقص آ گیا۔ invalid_file_error=ناجائز یا خراب PDF مسل missing_file_error=PDF مسل غائب ہے۔ unexpected_response_error=غیرمتوقع پیش کار جواب # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}.{{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} نوٹ] password_label=PDF مسل کھولنے کے لیے پاس ورڈ داخل کریں. password_invalid=ناجائز پاس ورڈ. براےؑ کرم دوبارہ کوشش کریں. password_ok=ٹھیک ہے password_cancel=منسوخ کریں printing_not_supported=تنبیہ:چھاپنا اس براؤزر پر پوری طرح معاونت شدہ نہیں ہے۔ printing_not_ready=تنبیہ: PDF چھپائی کے لیے پوری طرح لوڈ نہیں ہوئی۔ web_fonts_disabled=ویب فانٹ نا اہل ہیں: شامل PDF فانٹ استعمال کرنے میں ناکام۔ ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/uz/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Oldingi sahifa previous_label=Oldingi next.title=Keyingi sahifa next_label=Keyingi # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=/{{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. zoom_out.title=Kichiklashtirish zoom_out_label=Kichiklashtirish zoom_in.title=Kattalashtirish zoom_in_label=Kattalashtirish zoom.title=Masshtab presentation_mode.title=Namoyish usuliga oʻtish presentation_mode_label=Namoyish usuli open_file.title=Faylni ochish open_file_label=Ochish print.title=Chop qilish print_label=Chop qilish download.title=Yuklab olish download_label=Yuklab olish bookmark.title=Joriy koʻrinish (nusxa oling yoki yangi oynada oching) bookmark_label=Joriy koʻrinish # Secondary toolbar and context menu tools.title=Vositalar tools_label=Vositalar first_page.title=Birinchi sahifaga oʻtish first_page.label=Birinchi sahifaga oʻtish first_page_label=Birinchi sahifaga oʻtish last_page.title=Soʻnggi sahifaga oʻtish last_page.label=Soʻnggi sahifaga oʻtish last_page_label=Soʻnggi sahifaga oʻtish page_rotate_cw.title=Soat yoʻnalishi boʻyicha burish page_rotate_cw.label=Soat yoʻnalishi boʻyicha burish page_rotate_cw_label=Soat yoʻnalishi boʻyicha burish page_rotate_ccw.title=Soat yoʻnalishiga qarshi burish page_rotate_ccw.label=Soat yoʻnalishiga qarshi burish page_rotate_ccw_label=Soat yoʻnalishiga qarshi burish # Document properties dialog box document_properties.title=Hujjat xossalari document_properties_label=Hujjat xossalari document_properties_file_name=Fayl nomi: document_properties_file_size=Fayl hajmi: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} bytes) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} bytes) document_properties_title=Nomi: document_properties_author=Muallifi: document_properties_subject=Mavzusi: document_properties_keywords=Kalit so‘zlar document_properties_creation_date=Yaratilgan sanasi: document_properties_modification_date=O‘zgartirilgan sanasi # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Yaratuvchi: document_properties_producer=PDF ishlab chiqaruvchi: document_properties_version=PDF versiyasi: document_properties_page_count=Sahifa soni: document_properties_close=Yopish # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Yon panelni yoqib/oʻchirib qoʻyish toggle_sidebar_label=Yon panelni yoqib/oʻchirib qoʻyish document_outline_label=Hujjat tuzilishi attachments.title=Ilovalarni ko‘rsatish attachments_label=Ilovalar thumbs.title=Nishonchalarni koʻrsatish thumbs_label=Nishoncha findbar.title=Hujjat ichidan topish # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title={{page}} sahifa # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas={{page}} sahifa nishonchasi # Find panel button title and messages find_previous.title=Soʻzlardagi oldingi hodisani topish find_previous_label=Oldingi find_next.title=Iboradagi keyingi hodisani topish find_next_label=Keyingi find_highlight=Barchasini ajratib koʻrsatish find_match_case_label=Katta-kichik harflarni farqlash find_reached_top=Hujjatning boshigacha yetib keldik, pastdan davom ettiriladi find_reached_bottom=Hujjatning oxiriga yetib kelindi, yuqoridan davom ettirladi find_not_found=Soʻzlar topilmadi # Error panel labels error_more_info=Koʻproq ma`lumot error_less_info=Kamroq ma`lumot error_close=Yopish # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Xabar: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Toʻplam: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Fayl: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Satr: {{line}} rendering_error=Sahifa renderlanayotganda xato yuz berdi. # Predefined zoom values page_scale_width=Sahifa eni page_scale_fit=Sahifani moslashtirish page_scale_auto=Avtomatik masshtab page_scale_actual=Haqiqiy hajmi # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Xato loading_error=PDF yuklanayotganda xato yuz berdi. invalid_file_error=Xato yoki buzuq PDF fayli. missing_file_error=PDF fayl kerak. unexpected_response_error=Kutilmagan server javobi. # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Annotation] password_label=PDF faylni ochish uchun parolni kiriting. password_invalid=Parol - notoʻgʻri. Qaytadan urinib koʻring. password_ok=OK printing_not_supported=Diqqat: chop qilish bruzer tomonidan toʻliq qoʻllab-quvvatlanmaydi. printing_not_ready=Diqqat: PDF fayl chop qilish uchun toʻliq yuklanmadi. web_fonts_disabled=Veb shriftlar oʻchirilgan: ichki PDF shriftlardan foydalanib boʻlmmaydi. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/vi/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Trang trước previous_label=Trước next.title=Trang Sau next_label=Tiếp # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Trang # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=trên {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} trên {{pagesCount}}) zoom_out.title=Thu nhỏ zoom_out_label=Thu nhỏ zoom_in.title=Phóng to zoom_in_label=Phóng to zoom.title=Thu phóng presentation_mode.title=Chuyển sang chế độ trình chiếu presentation_mode_label=Chế độ trình chiếu open_file.title=Mở tập tin open_file_label=Mở tập tin print.title=In print_label=In download.title=Tải xuống download_label=Tải xuống bookmark.title=Chế độ xem hiện tại (sao chép hoặc mở trong cửa sổ mới) bookmark_label=Chế độ xem hiện tại # Secondary toolbar and context menu tools.title=Công cụ tools_label=Công cụ first_page.title=Về trang đầu first_page.label=Về trang đầu first_page_label=Về trang đầu last_page.title=Đến trang cuối last_page.label=Đến trang cuối last_page_label=Đến trang cuối page_rotate_cw.title=Xoay theo chiều kim đồng hồ page_rotate_cw.label=Xoay theo chiều kim đồng hồ page_rotate_cw_label=Xoay theo chiều kim đồng hồ page_rotate_ccw.title=Xoay ngược chiều kim đồng hồ page_rotate_ccw.label=Xoay ngược chiều kim đồng hồ page_rotate_ccw_label=Xoay ngược chiều kim đồng hồ cursor_text_select_tool.title=Kích hoạt công cụ chọn vùng văn bản cursor_text_select_tool_label=Công cụ chọn vùng văn bản cursor_hand_tool.title=Kích hoạt công cụ con trỏ cursor_hand_tool_label=Công cụ con trỏ scroll_vertical.title=Sử dụng cuộn dọc scroll_vertical_label=Cuộn dọc scroll_horizontal.title=Sử dụng cuộn ngang scroll_horizontal_label=Cuộn ngang scroll_wrapped.title=Sử dụng cuộn ngắt dòng scroll_wrapped_label=Cuộn ngắt dòng spread_none.title=Không nối rộng trang spread_none_label=Không có phân cách spread_odd.title=Nối trang bài bắt đầu với các trang được đánh số lẻ spread_odd_label=Phân cách theo số lẻ spread_even.title=Nối trang bài bắt đầu với các trang được đánh số chẵn spread_even_label=Phân cách theo số chẵn # Document properties dialog box document_properties.title=Thuộc tính của tài liệu… document_properties_label=Thuộc tính của tài liệu… document_properties_file_name=Tên tập tin: document_properties_file_size=Kích thước: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} byte) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} byte) document_properties_title=Tiêu đề: document_properties_author=Tác giả: document_properties_subject=Chủ đề: document_properties_keywords=Từ khóa: document_properties_creation_date=Ngày tạo: document_properties_modification_date=Ngày sửa đổi: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Người tạo: document_properties_producer=Phần mềm tạo PDF: document_properties_version=Phiên bản PDF: document_properties_page_count=Tổng số trang: document_properties_page_size=Kích thước trang: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=khổ dọc document_properties_page_size_orientation_landscape=khổ ngang document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Thư document_properties_page_size_name_legal=Pháp lý # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=Xem nhanh trên web: document_properties_linearized_yes=Có document_properties_linearized_no=Không document_properties_close=Ðóng print_progress_message=Chuẩn bị trang để in… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Hủy bỏ # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Bật/Tắt thanh lề toggle_sidebar_notification.title=Bật tắt thanh lề (tài liệu bao gồm bản phác thảo/tập tin đính kèm) toggle_sidebar_notification2.title=Bật tắt thanh lề (tài liệu bao gồm bản phác thảo/tập tin đính kèm/lớp) toggle_sidebar_label=Bật/Tắt thanh lề document_outline.title=Hiện tài liệu phác thảo (nhấp đúp vào để mở rộng/thu gọn tất cả các mục) document_outline_label=Bản phác tài liệu attachments.title=Hiện nội dung đính kèm attachments_label=Nội dung đính kèm layers.title=Hiển thị các lớp (nhấp đúp để đặt lại tất cả các lớp về trạng thái mặc định) layers_label=Lớp thumbs.title=Hiển thị ảnh thu nhỏ thumbs_label=Ảnh thu nhỏ current_outline_item.title=Tìm mục phác thảo hiện tại current_outline_item_label=Mục phác thảo hiện tại findbar.title=Tìm trong tài liệu findbar_label=Tìm additional_layers=Các lớp bổ sung # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=Trang {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Trang {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Ảnh thu nhỏ của trang {{page}} # Find panel button title and messages find_input.title=Tìm find_input.placeholder=Tìm trong tài liệu… find_previous.title=Tìm cụm từ ở phần trước find_previous_label=Trước find_next.title=Tìm cụm từ ở phần sau find_next_label=Tiếp find_highlight=Tô sáng tất cả find_match_case_label=Phân biệt hoa, thường find_entire_word_label=Toàn bộ từ find_reached_top=Đã đến phần đầu tài liệu, quay trở lại từ cuối find_reached_bottom=Đã đến phần cuối của tài liệu, quay trở lại từ đầu # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]={{current}} của {{total}} đã trùng find_match_count[two]={{current}} của {{total}} đã trùng find_match_count[few]={{current}} của {{total}} đã trùng find_match_count[many]={{current}} của {{total}} đã trùng find_match_count[other]={{current}} của {{total}} đã trùng # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=Nhiều hơn {{limit}} đã trùng find_match_count_limit[one]=Nhiều hơn {{limit}} đã trùng find_match_count_limit[two]=Nhiều hơn {{limit}} đã trùng find_match_count_limit[few]=Nhiều hơn {{limit}} đã trùng find_match_count_limit[many]=Nhiều hơn {{limit}} đã trùng find_match_count_limit[other]=Nhiều hơn {{limit}} đã trùng find_not_found=Không tìm thấy cụm từ này # Error panel labels error_more_info=Thông tin thêm error_less_info=Hiển thị ít thông tin hơn error_close=Đóng # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Thông điệp: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Stack: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Tập tin: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Dòng: {{line}} rendering_error=Lỗi khi hiển thị trang. # Predefined zoom values page_scale_width=Vừa chiều rộng page_scale_fit=Vừa chiều cao page_scale_auto=Tự động chọn kích thước page_scale_actual=Kích thước thực # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Lỗi loading_error=Lỗi khi tải tài liệu PDF. invalid_file_error=Tập tin PDF hỏng hoặc không hợp lệ. missing_file_error=Thiếu tập tin PDF. unexpected_response_error=Máy chủ có phản hồi lạ. # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}}, {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Chú thích] password_label=Nhập mật khẩu để mở tập tin PDF này. password_invalid=Mật khẩu không đúng. Vui lòng thử lại. password_ok=OK password_cancel=Hủy bỏ printing_not_supported=Cảnh báo: In ấn không được hỗ trợ đầy đủ ở trình duyệt này. printing_not_ready=Cảnh báo: PDF chưa được tải hết để in. web_fonts_disabled=Phông chữ Web bị vô hiệu hóa: không thể sử dụng các phông chữ PDF được nhúng. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/wo/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Xët wi jiitu previous_label=Bi jiitu next.title=Xët wi ci topp next_label=Bi ci topp # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. zoom_out.title=Wàññi zoom_out_label=Wàññi zoom_in.title=Yaatal zoom_in_label=Yaatal zoom.title=Yambalaŋ presentation_mode.title=Wañarñil ci anamu wone presentation_mode_label=Anamu Wone open_file.title=Ubbi benn dencukaay open_file_label=Ubbi print.title=Móol print_label=Móol download.title=Yeb yi download_label=Yeb yi bookmark.title=Wone bi taxaw (duppi walla ubbi palanteer bu bees) bookmark_label=Wone bi feeñ # Secondary toolbar and context menu # Document properties dialog box # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_title=Bopp: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) thumbs.title=Wone nataal yu ndaw yi thumbs_label=Nataal yu ndaw yi findbar.title=Gis ci biir jukki bi findbar_label=Wut # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Xët {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Wiñet bu xët {{page}} # Find panel button title and messages find_previous.title=Seet beneen kaddu bu ni mel te jiitu find_previous_label=Bi jiitu find_next.title=Seet beneen kaddu bu ni mel find_next_label=Bi ci topp find_highlight=Melaxal lépp find_match_case_label=Sàmm jëmmalin wi find_reached_top=Jot nañu ndorteel xët wi, kontine dale ko ci suuf find_reached_bottom=Jot nañu jeexitalu xët wi, kontine ci ndorte find_not_found=Gisiñu kaddu gi # Error panel labels error_more_info=Xibaar yu gën bari error_less_info=Xibaar yu gën bari # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Bataaxal: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Juug: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Dencukaay: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Rëdd : {{line}} rendering_error=Am njumte bu am bi xët bi di wonewu. # Predefined zoom values page_scale_width=Yaatuwaay bu mët page_scale_fit=Xët lëmm page_scale_auto=Yambalaŋ ci saa si page_scale_actual=Dayo bi am # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. # Loading indicator messages loading_error_indicator=Njumte loading_error=Am na njumte ci yebum dencukaay PDF bi. invalid_file_error=Dencukaay PDF bi baaxul walla mu sankar. # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[Karmat {{type}}] password_ok=OK password_cancel=Neenal printing_not_supported=Artu: Joowkat bii nanguwul lool mool. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/xh/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=Iphepha langaphambili previous_label=Okwangaphambili next.title=Iphepha elilandelayo next_label=Okulandelayo # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=Iphepha # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=kwali- {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} kwali {{pagesCount}}) zoom_out.title=Bhekelisela Kudana zoom_out_label=Bhekelisela Kudana zoom_in.title=Sondeza Kufuphi zoom_in_label=Sondeza Kufuphi zoom.title=Yandisa / Nciphisa presentation_mode.title=Tshintshela kwimo yonikezelo presentation_mode_label=Imo yonikezelo open_file.title=Vula Ifayile open_file_label=Vula print.title=Printa print_label=Printa download.title=Khuphela download_label=Khuphela bookmark.title=Imbonakalo ekhoyo (kopa okanye vula kwifestile entsha) bookmark_label=Imbonakalo ekhoyo # Secondary toolbar and context menu tools.title=Izixhobo zemiyalelo tools_label=Izixhobo zemiyalelo first_page.title=Yiya kwiphepha lokuqala first_page.label=Yiya kwiphepha lokuqala first_page_label=Yiya kwiphepha lokuqala last_page.title=Yiya kwiphepha lokugqibela last_page.label=Yiya kwiphepha lokugqibela last_page_label=Yiya kwiphepha lokugqibela page_rotate_cw.title=Jikelisa ngasekunene page_rotate_cw.label=Jikelisa ngasekunene page_rotate_cw_label=Jikelisa ngasekunene page_rotate_ccw.title=Jikelisa ngasekhohlo page_rotate_ccw.label=Jikelisa ngasekhohlo page_rotate_ccw_label=Jikelisa ngasekhohlo cursor_text_select_tool.title=Vumela iSixhobo sokuKhetha iTeksti cursor_text_select_tool_label=ISixhobo sokuKhetha iTeksti cursor_hand_tool.title=Yenza iSixhobo seSandla siSebenze cursor_hand_tool_label=ISixhobo seSandla # Document properties dialog box document_properties.title=Iipropati zoxwebhu… document_properties_label=Iipropati zoxwebhu… document_properties_file_name=Igama lefayile: document_properties_file_size=Isayizi yefayile: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB (iibhayiti{{size_b}}) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB (iibhayithi{{size_b}}) document_properties_title=Umxholo: document_properties_author=Umbhali: document_properties_subject=Umbandela: document_properties_keywords=Amagama aphambili: document_properties_creation_date=Umhla wokwenziwa kwayo: document_properties_modification_date=Umhla wokulungiswa kwayo: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=Umntu oyenzileyo: document_properties_producer=Umvelisi we-PDF: document_properties_version=Uhlelo lwe-PDF: document_properties_page_count=Inani lamaphepha: document_properties_close=Vala print_progress_message=Ilungisa uxwebhu ukuze iprinte… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=Rhoxisa # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=Togola ngebha eseCaleni toggle_sidebar_notification.title=ISidebar yeQhosha (uxwebhu lunolwandlalo/iziqhotyoshelwa) toggle_sidebar_label=Togola ngebha eseCaleni document_outline.title=Bonisa uLwandlalo loXwebhu (cofa kabini ukuze wandise/diliza zonke izinto) document_outline_label=Isishwankathelo soxwebhu attachments.title=Bonisa iziqhotyoshelwa attachments_label=Iziqhoboshelo thumbs.title=Bonisa ukrobiso kumfanekiso thumbs_label=Ukrobiso kumfanekiso findbar.title=Fumana kuXwebhu findbar_label=Fumana # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=Iphepha {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=Ukrobiso kumfanekiso wephepha {{page}} # Find panel button title and messages find_input.title=Fumana find_input.placeholder=Fumana kuXwebhu… find_previous.title=Fumanisa isenzeko sangaphambili sebinzana lamagama find_previous_label=Okwangaphambili find_next.title=Fumanisa isenzeko esilandelayo sebinzana lamagama find_next_label=Okulandelayo find_highlight=Qaqambisa konke find_match_case_label=Tshatisa ngobukhulu bukanobumba find_reached_top=Ufike ngaphezulu ephepheni, kusukwa ngezantsi find_reached_bottom=Ufike ekupheleni kwephepha, kusukwa ngaphezulu find_not_found=Ibinzana alifunyenwanga # Error panel labels error_more_info=Inkcazelo Engakumbi error_less_info=Inkcazelo Encinane error_close=Vala # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=I-PDF.js v{{version}} (yakha: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=Umyalezo: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=Imfumba: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=Ifayile: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=Umgca: {{line}} rendering_error=Imposiso yenzekile xa bekunikezelwa iphepha. # Predefined zoom values page_scale_width=Ububanzi bephepha page_scale_fit=Ukulinganiswa kwephepha page_scale_auto=Ukwandisa/Ukunciphisa Ngokwayo page_scale_actual=Ubungakanani bokwenene # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=Imposiso loading_error=Imposiso yenzekile xa kulayishwa i-PDF. invalid_file_error=Ifayile ye-PDF engeyiyo okanye eyonakalisiweyo. missing_file_error=Ifayile ye-PDF edukileyo. unexpected_response_error=Impendulo yeseva engalindelekanga. # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} Ubhalo-nqaku] password_label=Faka ipasiwedi ukuze uvule le fayile yePDF. password_invalid=Ipasiwedi ayisebenzi. Nceda uzame kwakhona. password_ok=KULUNGILE password_cancel=Rhoxisa printing_not_supported=Isilumkiso: Ukuprinta akuxhaswa ngokupheleleyo yile bhrawuza. printing_not_ready=Isilumkiso: IPDF ayihlohlwanga ngokupheleleyo ukwenzela ukuprinta. web_fonts_disabled=Iifonti zewebhu ziqhwalelisiwe: ayikwazi ukusebenzisa iifonti ze-PDF ezincanyathelisiweyo. ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/zh-CN/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=上一页 previous_label=上一页 next.title=下一页 next_label=下一页 # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=页面 # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=/ {{pagesCount}} # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=({{pageNumber}} / {{pagesCount}}) zoom_out.title=缩小 zoom_out_label=缩小 zoom_in.title=放大 zoom_in_label=放大 zoom.title=缩放 presentation_mode.title=切换到演示模式 presentation_mode_label=演示模式 open_file.title=打开文件 open_file_label=打开 print.title=打印 print_label=打印 download.title=下载 download_label=下载 bookmark.title=当前在看的内容(复制或在新窗口中打开) bookmark_label=当前在看 # Secondary toolbar and context menu tools.title=工具 tools_label=工具 first_page.title=转到第一页 first_page.label=转到第一页 first_page_label=转到第一页 last_page.title=转到最后一页 last_page.label=转到最后一页 last_page_label=转到最后一页 page_rotate_cw.title=顺时针旋转 page_rotate_cw.label=顺时针旋转 page_rotate_cw_label=顺时针旋转 page_rotate_ccw.title=逆时针旋转 page_rotate_ccw.label=逆时针旋转 page_rotate_ccw_label=逆时针旋转 cursor_text_select_tool.title=启用文本选择工具 cursor_text_select_tool_label=文本选择工具 cursor_hand_tool.title=启用手形工具 cursor_hand_tool_label=手形工具 scroll_vertical.title=使用垂直滚动 scroll_vertical_label=垂直滚动 scroll_horizontal.title=使用水平滚动 scroll_horizontal_label=水平滚动 scroll_wrapped.title=使用平铺滚动 scroll_wrapped_label=平铺滚动 spread_none.title=不加入衔接页 spread_none_label=单页视图 spread_odd.title=加入衔接页使奇数页作为起始页 spread_odd_label=双页视图 spread_even.title=加入衔接页使偶数页作为起始页 spread_even_label=书籍视图 # Document properties dialog box document_properties.title=文档属性… document_properties_label=文档属性… document_properties_file_name=文件名: document_properties_file_size=文件大小: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB ({{size_b}} 字节) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB ({{size_b}} 字节) document_properties_title=标题: document_properties_author=作者: document_properties_subject=主题: document_properties_keywords=关键词: document_properties_creation_date=创建日期: document_properties_modification_date=修改日期: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}}, {{time}} document_properties_creator=创建者: document_properties_producer=PDF 生成器: document_properties_version=PDF 版本: document_properties_page_count=页数: document_properties_page_size=页面大小: document_properties_page_size_unit_inches=英寸 document_properties_page_size_unit_millimeters=毫米 document_properties_page_size_orientation_portrait=纵向 document_properties_page_size_orientation_landscape=横向 document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=文本 document_properties_page_size_name_legal=法律 # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}}({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}}({{name}},{{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=快速 Web 视图: document_properties_linearized_yes=是 document_properties_linearized_no=否 document_properties_close=关闭 print_progress_message=正在准备打印文档… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=取消 # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=切换侧栏 toggle_sidebar_notification.title=切换侧栏(文档所含的大纲/附件) toggle_sidebar_notification2.title=切换侧栏(文档所含的大纲/附件/图层) toggle_sidebar_label=切换侧栏 document_outline.title=显示文档大纲(双击展开/折叠所有项) document_outline_label=文档大纲 attachments.title=显示附件 attachments_label=附件 layers.title=显示图层(双击即可将所有图层重置为默认状态) layers_label=图层 thumbs.title=显示缩略图 thumbs_label=缩略图 current_outline_item.title=查找当前大纲项目 current_outline_item_label=当前大纲项目 findbar.title=在文档中查找 findbar_label=查找 additional_layers=其他图层 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=页码 {{page}} # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=页码 {{page}} # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=页面 {{page}} 的缩略图 # Find panel button title and messages find_input.title=查找 find_input.placeholder=在文档中查找… find_previous.title=查找词语上一次出现的位置 find_previous_label=上一页 find_next.title=查找词语后一次出现的位置 find_next_label=下一页 find_highlight=全部高亮显示 find_match_case_label=区分大小写 find_entire_word_label=字词匹配 find_reached_top=到达文档开头,从末尾继续 find_reached_bottom=到达文档末尾,从开头继续 # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]=第 {{current}} 项,共匹配 {{total}} 项 find_match_count[two]=第 {{current}} 项,共匹配 {{total}} 项 find_match_count[few]=第 {{current}} 项,共匹配 {{total}} 项 find_match_count[many]=第 {{current}} 项,共匹配 {{total}} 项 find_match_count[other]=第 {{current}} 项,共匹配 {{total}} 项 # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=超过 {{limit}} 项匹配 find_match_count_limit[one]=超过 {{limit}} 项匹配 find_match_count_limit[two]=超过 {{limit}} 项匹配 find_match_count_limit[few]=超过 {{limit}} 项匹配 find_match_count_limit[many]=超过 {{limit}} 项匹配 find_match_count_limit[other]=超过 {{limit}} 项匹配 find_not_found=找不到指定词语 # Error panel labels error_more_info=更多信息 error_less_info=更少信息 error_close=关闭 # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=信息:{{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=堆栈:{{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=文件:{{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=行号:{{line}} rendering_error=渲染页面时发生错误。 # Predefined zoom values page_scale_width=适合页宽 page_scale_fit=适合页面 page_scale_auto=自动缩放 page_scale_actual=实际大小 # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=错误 loading_error=载入 PDF 时发生错误。 invalid_file_error=无效或损坏的 PDF 文件。 missing_file_error=缺少 PDF 文件。 unexpected_response_error=意外的服务器响应。 # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}},{{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} 注释] password_label=输入密码以打开此 PDF 文件。 password_invalid=密码无效。请重试。 password_ok=确定 password_cancel=取消 printing_not_supported=警告:此浏览器尚未完整支持打印功能。 printing_not_ready=警告:此 PDF 未完成载入,无法打印。 web_fonts_disabled=Web 字体已被禁用:无法使用嵌入的 PDF 字体。 ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/zh-TW/viewer.properties ================================================ # Copyright 2012 Mozilla Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Main toolbar buttons (tooltips and alt text for images) previous.title=上一頁 previous_label=上一頁 next.title=下一頁 next_label=下一頁 # LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. page.title=第 # LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number # representing the total number of pages in the document. of_pages=頁,共 {{pagesCount}} 頁 # LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" # will be replaced by a number representing the currently visible page, # respectively a number representing the total number of pages in the document. page_of_pages=(第 {{pageNumber}} 頁,共 {{pagesCount}} 頁) zoom_out.title=縮小 zoom_out_label=縮小 zoom_in.title=放大 zoom_in_label=放大 zoom.title=縮放 presentation_mode.title=切換至簡報模式 presentation_mode_label=簡報模式 open_file.title=開啟檔案 open_file_label=開啟 print.title=列印 print_label=列印 download.title=下載 download_label=下載 bookmark.title=目前畫面(複製或開啟於新視窗) bookmark_label=目前檢視 # Secondary toolbar and context menu tools.title=工具 tools_label=工具 first_page.title=跳到第一頁 first_page.label=跳到第一頁 first_page_label=跳到第一頁 last_page.title=跳到最後一頁 last_page.label=跳到最後一頁 last_page_label=跳到最後一頁 page_rotate_cw.title=順時針旋轉 page_rotate_cw.label=順時針旋轉 page_rotate_cw_label=順時針旋轉 page_rotate_ccw.title=逆時針旋轉 page_rotate_ccw.label=逆時針旋轉 page_rotate_ccw_label=逆時針旋轉 cursor_text_select_tool.title=開啟文字選擇工具 cursor_text_select_tool_label=文字選擇工具 cursor_hand_tool.title=開啟頁面移動工具 cursor_hand_tool_label=頁面移動工具 scroll_vertical.title=使用垂直捲動版面 scroll_vertical_label=垂直捲動 scroll_horizontal.title=使用水平捲動版面 scroll_horizontal_label=水平捲動 scroll_wrapped.title=使用多頁捲動版面 scroll_wrapped_label=多頁捲動 spread_none.title=不要進行跨頁顯示 spread_none_label=不跨頁 spread_odd.title=從奇數頁開始跨頁 spread_odd_label=奇數跨頁 spread_even.title=從偶數頁開始跨頁 spread_even_label=偶數跨頁 # Document properties dialog box document_properties.title=文件內容… document_properties_label=文件內容… document_properties_file_name=檔案名稱: document_properties_file_size=檔案大小: # LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" # will be replaced by the PDF file size in kilobytes, respectively in bytes. document_properties_kb={{size_kb}} KB({{size_b}} 位元組) # LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" # will be replaced by the PDF file size in megabytes, respectively in bytes. document_properties_mb={{size_mb}} MB({{size_b}} 位元組) document_properties_title=標題: document_properties_author=作者: document_properties_subject=主旨: document_properties_keywords=關鍵字: document_properties_creation_date=建立日期: document_properties_modification_date=修改日期: # LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" # will be replaced by the creation/modification date, and time, of the PDF file. document_properties_date_string={{date}} {{time}} document_properties_creator=建立者: document_properties_producer=PDF 產生器: document_properties_version=PDF 版本: document_properties_page_count=頁數: document_properties_page_size=頁面大小: document_properties_page_size_unit_inches=in document_properties_page_size_unit_millimeters=mm document_properties_page_size_orientation_portrait=垂直 document_properties_page_size_orientation_landscape=水平 document_properties_page_size_name_a3=A3 document_properties_page_size_name_a4=A4 document_properties_page_size_name_letter=Letter document_properties_page_size_name_legal=Legal # LOCALIZATION NOTE (document_properties_page_size_dimension_string): # "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement and orientation, of the (current) page. document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}}({{orientation}}) # LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): # "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by # the size, respectively their unit of measurement, name, and orientation, of the (current) page. document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}}({{name}},{{orientation}}) # LOCALIZATION NOTE (document_properties_linearized): The linearization status of # the document; usually called "Fast Web View" in English locales of Adobe software. document_properties_linearized=快速 Web 檢視: document_properties_linearized_yes=是 document_properties_linearized_no=否 document_properties_close=關閉 print_progress_message=正在準備列印文件… # LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by # a numerical per cent value. print_progress_percent={{progress}}% print_progress_close=取消 # Tooltips and alt text for side panel toolbar buttons # (the _label strings are alt text for the buttons, the .title strings are # tooltips) toggle_sidebar.title=切換側邊欄 toggle_sidebar_notification.title=切換側邊攔(文件包含大綱或附件) toggle_sidebar_notification2.title=切換側邊欄(包含大綱、附件、圖層的文件) toggle_sidebar_label=切換側邊欄 document_outline.title=顯示文件大綱(雙擊展開/摺疊所有項目) document_outline_label=文件大綱 attachments.title=顯示附件 attachments_label=附件 layers.title=顯示圖層(滑鼠雙擊即可將所有圖層重設為預設狀態) layers_label=圖層 thumbs.title=顯示縮圖 thumbs_label=縮圖 current_outline_item.title=尋找目前的大綱項目 current_outline_item_label=目前的大綱項目 findbar.title=在文件中尋找 findbar_label=尋找 additional_layers=其他圖層 # LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. page_canvas=第 {{page}} 頁 # Thumbnails panel item (tooltip and alt text for images) # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page # number. thumb_page_title=第 {{page}} 頁 # LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page # number. thumb_page_canvas=頁 {{page}} 的縮圖 # Find panel button title and messages find_input.title=尋找 find_input.placeholder=在文件中搜尋… find_previous.title=尋找文字前次出現的位置 find_previous_label=上一個 find_next.title=尋找文字下次出現的位置 find_next_label=下一個 find_highlight=全部強調標示 find_match_case_label=區分大小寫 find_entire_word_label=符合整個字 find_reached_top=已搜尋至文件頂端,自底端繼續搜尋 find_reached_bottom=已搜尋至文件底端,自頂端繼續搜尋 # LOCALIZATION NOTE (find_match_count): The supported plural forms are # [one|two|few|many|other], with [other] as the default value. # "{{current}}" and "{{total}}" will be replaced by a number representing the # index of the currently active find result, respectively a number representing # the total number of matches in the document. find_match_count={[ plural(total) ]} find_match_count[one]=第 {{current}} 筆,共找到 {{total}} 筆 find_match_count[two]=第 {{current}} 筆,共找到 {{total}} 筆 find_match_count[few]=第 {{current}} 筆,共找到 {{total}} 筆 find_match_count[many]=第 {{current}} 筆,共找到 {{total}} 筆 find_match_count[other]=第 {{current}} 筆,共找到 {{total}} 筆 # LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are # [zero|one|two|few|many|other], with [other] as the default value. # "{{limit}}" will be replaced by a numerical value. find_match_count_limit={[ plural(limit) ]} find_match_count_limit[zero]=找到超過 {{limit}} 筆 find_match_count_limit[one]=找到超過 {{limit}} 筆 find_match_count_limit[two]=找到超過 {{limit}} 筆 find_match_count_limit[few]=找到超過 {{limit}} 筆 find_match_count_limit[many]=找到超過 {{limit}} 筆 find_match_count_limit[other]=找到超過 {{limit}} 筆 find_not_found=找不到指定文字 # Error panel labels error_more_info=更多資訊 error_less_info=更少資訊 error_close=關閉 # LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be # replaced by the PDF.JS version and build ID. error_version_info=PDF.js v{{version}} (build: {{build}}) # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an # english string describing the error. error_message=訊息: {{message}} # LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack # trace. error_stack=堆疊: {{stack}} # LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename error_file=檔案: {{file}} # LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number error_line=行: {{line}} rendering_error=描繪頁面時發生錯誤。 # Predefined zoom values page_scale_width=頁面寬度 page_scale_fit=縮放至頁面大小 page_scale_auto=自動縮放 page_scale_actual=實際大小 # LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a # numerical scale value. page_scale_percent={{scale}}% # Loading indicator messages loading_error_indicator=錯誤 loading_error=載入 PDF 時發生錯誤。 invalid_file_error=無效或毀損的 PDF 檔案。 missing_file_error=找不到 PDF 檔案。 unexpected_response_error=伺服器回應未預期的內容。 # LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be # replaced by the modification date, and time, of the annotation. annotation_date_string={{date}} {{time}} # LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. # "{{type}}" will be replaced with an annotation type from a list defined in # the PDF spec (32000-1:2008 Table 169 – Annotation types). # Some common types are e.g.: "Check", "Text", "Comment", "Note" text_annotation_type.alt=[{{type}} 註解] password_label=請輸入用來開啟此 PDF 檔案的密碼。 password_invalid=密碼不正確,請再試一次。 password_ok=確定 password_cancel=取消 printing_not_supported=警告: 此瀏覽器未完整支援列印功能。 printing_not_ready=警告: 此 PDF 未完成下載以供列印。 web_fonts_disabled=已停用網路字型 (Web fonts): 無法使用 PDF 內嵌字型。 ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/pdf.js ================================================ /** * @licstart The following is the entire license notice for the * Javascript code in this page * * Copyright 2020 Mozilla Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * @licend The above is the entire license notice for the * Javascript code in this page */ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define("pdfjs-dist/build/pdf", [], factory); else if(typeof exports === 'object') exports["pdfjs-dist/build/pdf"] = factory(); else root["pdfjs-dist/build/pdf"] = root.pdfjsLib = factory(); })(this, function() { return /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ([ /* 0 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "addLinkAttributes", ({ enumerable: true, get: function get() { return _display_utils.addLinkAttributes; } })); Object.defineProperty(exports, "getFilenameFromUrl", ({ enumerable: true, get: function get() { return _display_utils.getFilenameFromUrl; } })); Object.defineProperty(exports, "LinkTarget", ({ enumerable: true, get: function get() { return _display_utils.LinkTarget; } })); Object.defineProperty(exports, "loadScript", ({ enumerable: true, get: function get() { return _display_utils.loadScript; } })); Object.defineProperty(exports, "PDFDateString", ({ enumerable: true, get: function get() { return _display_utils.PDFDateString; } })); Object.defineProperty(exports, "RenderingCancelledException", ({ enumerable: true, get: function get() { return _display_utils.RenderingCancelledException; } })); Object.defineProperty(exports, "build", ({ enumerable: true, get: function get() { return _api.build; } })); Object.defineProperty(exports, "getDocument", ({ enumerable: true, get: function get() { return _api.getDocument; } })); Object.defineProperty(exports, "LoopbackPort", ({ enumerable: true, get: function get() { return _api.LoopbackPort; } })); Object.defineProperty(exports, "PDFDataRangeTransport", ({ enumerable: true, get: function get() { return _api.PDFDataRangeTransport; } })); Object.defineProperty(exports, "PDFWorker", ({ enumerable: true, get: function get() { return _api.PDFWorker; } })); Object.defineProperty(exports, "version", ({ enumerable: true, get: function get() { return _api.version; } })); Object.defineProperty(exports, "CMapCompressionType", ({ enumerable: true, get: function get() { return _util.CMapCompressionType; } })); Object.defineProperty(exports, "createObjectURL", ({ enumerable: true, get: function get() { return _util.createObjectURL; } })); Object.defineProperty(exports, "createPromiseCapability", ({ enumerable: true, get: function get() { return _util.createPromiseCapability; } })); Object.defineProperty(exports, "createValidAbsoluteUrl", ({ enumerable: true, get: function get() { return _util.createValidAbsoluteUrl; } })); Object.defineProperty(exports, "InvalidPDFException", ({ enumerable: true, get: function get() { return _util.InvalidPDFException; } })); Object.defineProperty(exports, "MissingPDFException", ({ enumerable: true, get: function get() { return _util.MissingPDFException; } })); Object.defineProperty(exports, "OPS", ({ enumerable: true, get: function get() { return _util.OPS; } })); Object.defineProperty(exports, "PasswordResponses", ({ enumerable: true, get: function get() { return _util.PasswordResponses; } })); Object.defineProperty(exports, "PermissionFlag", ({ enumerable: true, get: function get() { return _util.PermissionFlag; } })); Object.defineProperty(exports, "removeNullCharacters", ({ enumerable: true, get: function get() { return _util.removeNullCharacters; } })); Object.defineProperty(exports, "shadow", ({ enumerable: true, get: function get() { return _util.shadow; } })); Object.defineProperty(exports, "UnexpectedResponseException", ({ enumerable: true, get: function get() { return _util.UnexpectedResponseException; } })); Object.defineProperty(exports, "UNSUPPORTED_FEATURES", ({ enumerable: true, get: function get() { return _util.UNSUPPORTED_FEATURES; } })); Object.defineProperty(exports, "Util", ({ enumerable: true, get: function get() { return _util.Util; } })); Object.defineProperty(exports, "VerbosityLevel", ({ enumerable: true, get: function get() { return _util.VerbosityLevel; } })); Object.defineProperty(exports, "AnnotationLayer", ({ enumerable: true, get: function get() { return _annotation_layer.AnnotationLayer; } })); Object.defineProperty(exports, "apiCompatibilityParams", ({ enumerable: true, get: function get() { return _api_compatibility.apiCompatibilityParams; } })); Object.defineProperty(exports, "GlobalWorkerOptions", ({ enumerable: true, get: function get() { return _worker_options.GlobalWorkerOptions; } })); Object.defineProperty(exports, "renderTextLayer", ({ enumerable: true, get: function get() { return _text_layer.renderTextLayer; } })); Object.defineProperty(exports, "SVGGraphics", ({ enumerable: true, get: function get() { return _svg.SVGGraphics; } })); var _display_utils = __w_pdfjs_require__(1); var _api = __w_pdfjs_require__(135); var _util = __w_pdfjs_require__(4); var _annotation_layer = __w_pdfjs_require__(149); var _api_compatibility = __w_pdfjs_require__(139); var _worker_options = __w_pdfjs_require__(142); var _text_layer = __w_pdfjs_require__(151); var _svg = __w_pdfjs_require__(152); var pdfjsVersion = '2.8.57'; var pdfjsBuild = '3d33313e4'; { var _require = __w_pdfjs_require__(6), isNodeJS = _require.isNodeJS; if (isNodeJS) { var PDFNodeStream = __w_pdfjs_require__(153).PDFNodeStream; (0, _api.setPDFNetworkStreamFactory)(function (params) { return new PDFNodeStream(params); }); } else { var PDFNetworkStream = __w_pdfjs_require__(156).PDFNetworkStream; var PDFFetchStream; if ((0, _display_utils.isFetchSupported)()) { PDFFetchStream = __w_pdfjs_require__(157).PDFFetchStream; } (0, _api.setPDFNetworkStreamFactory)(function (params) { if (PDFFetchStream && (0, _display_utils.isValidFetchUrl)(params.url)) { return new PDFFetchStream(params); } return new PDFNetworkStream(params); }); } } /***/ }), /* 1 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", ({ value: true })); exports.addLinkAttributes = addLinkAttributes; exports.deprecated = deprecated; exports.getFilenameFromUrl = getFilenameFromUrl; exports.isFetchSupported = isFetchSupported; exports.isValidFetchUrl = isValidFetchUrl; exports.loadScript = loadScript; exports.StatTimer = exports.RenderingCancelledException = exports.PDFDateString = exports.PageViewport = exports.LinkTarget = exports.DOMSVGFactory = exports.DOMCMapReaderFactory = exports.DOMCanvasFactory = exports.DEFAULT_LINK_REL = exports.BaseCMapReaderFactory = exports.BaseCanvasFactory = void 0; var _regenerator = _interopRequireDefault(__w_pdfjs_require__(2)); var _util = __w_pdfjs_require__(4); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var DEFAULT_LINK_REL = "noopener noreferrer nofollow"; exports.DEFAULT_LINK_REL = DEFAULT_LINK_REL; var SVG_NS = "http://www.w3.org/2000/svg"; var BaseCanvasFactory = /*#__PURE__*/function () { function BaseCanvasFactory() { _classCallCheck(this, BaseCanvasFactory); if (this.constructor === BaseCanvasFactory) { (0, _util.unreachable)("Cannot initialize BaseCanvasFactory."); } } _createClass(BaseCanvasFactory, [{ key: "create", value: function create(width, height) { (0, _util.unreachable)("Abstract method `create` called."); } }, { key: "reset", value: function reset(canvasAndContext, width, height) { if (!canvasAndContext.canvas) { throw new Error("Canvas is not specified"); } if (width <= 0 || height <= 0) { throw new Error("Invalid canvas size"); } canvasAndContext.canvas.width = width; canvasAndContext.canvas.height = height; } }, { key: "destroy", value: function destroy(canvasAndContext) { if (!canvasAndContext.canvas) { throw new Error("Canvas is not specified"); } canvasAndContext.canvas.width = 0; canvasAndContext.canvas.height = 0; canvasAndContext.canvas = null; canvasAndContext.context = null; } }]); return BaseCanvasFactory; }(); exports.BaseCanvasFactory = BaseCanvasFactory; var DOMCanvasFactory = /*#__PURE__*/function (_BaseCanvasFactory) { _inherits(DOMCanvasFactory, _BaseCanvasFactory); var _super = _createSuper(DOMCanvasFactory); function DOMCanvasFactory() { var _this; var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref$ownerDocument = _ref.ownerDocument, ownerDocument = _ref$ownerDocument === void 0 ? globalThis.document : _ref$ownerDocument; _classCallCheck(this, DOMCanvasFactory); _this = _super.call(this); _this._document = ownerDocument; return _this; } _createClass(DOMCanvasFactory, [{ key: "create", value: function create(width, height) { if (width <= 0 || height <= 0) { throw new Error("Invalid canvas size"); } var canvas = this._document.createElement("canvas"); var context = canvas.getContext("2d"); canvas.width = width; canvas.height = height; return { canvas: canvas, context: context }; } }]); return DOMCanvasFactory; }(BaseCanvasFactory); exports.DOMCanvasFactory = DOMCanvasFactory; var BaseCMapReaderFactory = /*#__PURE__*/function () { function BaseCMapReaderFactory(_ref2) { var _ref2$baseUrl = _ref2.baseUrl, baseUrl = _ref2$baseUrl === void 0 ? null : _ref2$baseUrl, _ref2$isCompressed = _ref2.isCompressed, isCompressed = _ref2$isCompressed === void 0 ? false : _ref2$isCompressed; _classCallCheck(this, BaseCMapReaderFactory); if (this.constructor === BaseCMapReaderFactory) { (0, _util.unreachable)("Cannot initialize BaseCMapReaderFactory."); } this.baseUrl = baseUrl; this.isCompressed = isCompressed; } _createClass(BaseCMapReaderFactory, [{ key: "fetch", value: function () { var _fetch = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(_ref3) { var _this2 = this; var name, url, compressionType; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: name = _ref3.name; if (this.baseUrl) { _context.next = 3; break; } throw new Error('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.'); case 3: if (name) { _context.next = 5; break; } throw new Error("CMap name must be specified."); case 5: url = this.baseUrl + name + (this.isCompressed ? ".bcmap" : ""); compressionType = this.isCompressed ? _util.CMapCompressionType.BINARY : _util.CMapCompressionType.NONE; return _context.abrupt("return", this._fetchData(url, compressionType)["catch"](function (reason) { throw new Error("Unable to load ".concat(_this2.isCompressed ? "binary " : "", "CMap at: ").concat(url)); })); case 8: case "end": return _context.stop(); } } }, _callee, this); })); function fetch(_x) { return _fetch.apply(this, arguments); } return fetch; }() }, { key: "_fetchData", value: function _fetchData(url, compressionType) { (0, _util.unreachable)("Abstract method `_fetchData` called."); } }]); return BaseCMapReaderFactory; }(); exports.BaseCMapReaderFactory = BaseCMapReaderFactory; var DOMCMapReaderFactory = /*#__PURE__*/function (_BaseCMapReaderFactor) { _inherits(DOMCMapReaderFactory, _BaseCMapReaderFactor); var _super2 = _createSuper(DOMCMapReaderFactory); function DOMCMapReaderFactory() { _classCallCheck(this, DOMCMapReaderFactory); return _super2.apply(this, arguments); } _createClass(DOMCMapReaderFactory, [{ key: "_fetchData", value: function _fetchData(url, compressionType) { var _this3 = this; if (isFetchSupported() && isValidFetchUrl(url, document.baseURI)) { return fetch(url).then( /*#__PURE__*/function () { var _ref4 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2(response) { var cMapData; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: if (response.ok) { _context2.next = 2; break; } throw new Error(response.statusText); case 2: if (!_this3.isCompressed) { _context2.next = 10; break; } _context2.t0 = Uint8Array; _context2.next = 6; return response.arrayBuffer(); case 6: _context2.t1 = _context2.sent; cMapData = new _context2.t0(_context2.t1); _context2.next = 15; break; case 10: _context2.t2 = _util.stringToBytes; _context2.next = 13; return response.text(); case 13: _context2.t3 = _context2.sent; cMapData = (0, _context2.t2)(_context2.t3); case 15: return _context2.abrupt("return", { cMapData: cMapData, compressionType: compressionType }); case 16: case "end": return _context2.stop(); } } }, _callee2); })); return function (_x2) { return _ref4.apply(this, arguments); }; }()); } return new Promise(function (resolve, reject) { var request = new XMLHttpRequest(); request.open("GET", url, true); if (_this3.isCompressed) { request.responseType = "arraybuffer"; } request.onreadystatechange = function () { if (request.readyState !== XMLHttpRequest.DONE) { return; } if (request.status === 200 || request.status === 0) { var cMapData; if (_this3.isCompressed && request.response) { cMapData = new Uint8Array(request.response); } else if (!_this3.isCompressed && request.responseText) { cMapData = (0, _util.stringToBytes)(request.responseText); } if (cMapData) { resolve({ cMapData: cMapData, compressionType: compressionType }); return; } } reject(new Error(request.statusText)); }; request.send(null); }); } }]); return DOMCMapReaderFactory; }(BaseCMapReaderFactory); exports.DOMCMapReaderFactory = DOMCMapReaderFactory; var DOMSVGFactory = /*#__PURE__*/function () { function DOMSVGFactory() { _classCallCheck(this, DOMSVGFactory); } _createClass(DOMSVGFactory, [{ key: "create", value: function create(width, height) { (0, _util.assert)(width > 0 && height > 0, "Invalid SVG dimensions"); var svg = document.createElementNS(SVG_NS, "svg:svg"); svg.setAttribute("version", "1.1"); svg.setAttribute("width", width + "px"); svg.setAttribute("height", height + "px"); svg.setAttribute("preserveAspectRatio", "none"); svg.setAttribute("viewBox", "0 0 " + width + " " + height); return svg; } }, { key: "createElement", value: function createElement(type) { (0, _util.assert)(typeof type === "string", "Invalid SVG element type"); return document.createElementNS(SVG_NS, type); } }]); return DOMSVGFactory; }(); exports.DOMSVGFactory = DOMSVGFactory; var PageViewport = /*#__PURE__*/function () { function PageViewport(_ref5) { var viewBox = _ref5.viewBox, scale = _ref5.scale, rotation = _ref5.rotation, _ref5$offsetX = _ref5.offsetX, offsetX = _ref5$offsetX === void 0 ? 0 : _ref5$offsetX, _ref5$offsetY = _ref5.offsetY, offsetY = _ref5$offsetY === void 0 ? 0 : _ref5$offsetY, _ref5$dontFlip = _ref5.dontFlip, dontFlip = _ref5$dontFlip === void 0 ? false : _ref5$dontFlip; _classCallCheck(this, PageViewport); this.viewBox = viewBox; this.scale = scale; this.rotation = rotation; this.offsetX = offsetX; this.offsetY = offsetY; var centerX = (viewBox[2] + viewBox[0]) / 2; var centerY = (viewBox[3] + viewBox[1]) / 2; var rotateA, rotateB, rotateC, rotateD; rotation = rotation % 360; rotation = rotation < 0 ? rotation + 360 : rotation; switch (rotation) { case 180: rotateA = -1; rotateB = 0; rotateC = 0; rotateD = 1; break; case 90: rotateA = 0; rotateB = 1; rotateC = 1; rotateD = 0; break; case 270: rotateA = 0; rotateB = -1; rotateC = -1; rotateD = 0; break; case 0: rotateA = 1; rotateB = 0; rotateC = 0; rotateD = -1; break; default: throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees."); } if (dontFlip) { rotateC = -rotateC; rotateD = -rotateD; } var offsetCanvasX, offsetCanvasY; var width, height; if (rotateA === 0) { offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX; offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY; width = Math.abs(viewBox[3] - viewBox[1]) * scale; height = Math.abs(viewBox[2] - viewBox[0]) * scale; } else { offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX; offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY; width = Math.abs(viewBox[2] - viewBox[0]) * scale; height = Math.abs(viewBox[3] - viewBox[1]) * scale; } this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY]; this.width = width; this.height = height; } _createClass(PageViewport, [{ key: "clone", value: function clone() { var _ref6 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref6$scale = _ref6.scale, scale = _ref6$scale === void 0 ? this.scale : _ref6$scale, _ref6$rotation = _ref6.rotation, rotation = _ref6$rotation === void 0 ? this.rotation : _ref6$rotation, _ref6$offsetX = _ref6.offsetX, offsetX = _ref6$offsetX === void 0 ? this.offsetX : _ref6$offsetX, _ref6$offsetY = _ref6.offsetY, offsetY = _ref6$offsetY === void 0 ? this.offsetY : _ref6$offsetY, _ref6$dontFlip = _ref6.dontFlip, dontFlip = _ref6$dontFlip === void 0 ? false : _ref6$dontFlip; return new PageViewport({ viewBox: this.viewBox.slice(), scale: scale, rotation: rotation, offsetX: offsetX, offsetY: offsetY, dontFlip: dontFlip }); } }, { key: "convertToViewportPoint", value: function convertToViewportPoint(x, y) { return _util.Util.applyTransform([x, y], this.transform); } }, { key: "convertToViewportRectangle", value: function convertToViewportRectangle(rect) { var topLeft = _util.Util.applyTransform([rect[0], rect[1]], this.transform); var bottomRight = _util.Util.applyTransform([rect[2], rect[3]], this.transform); return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]]; } }, { key: "convertToPdfPoint", value: function convertToPdfPoint(x, y) { return _util.Util.applyInverseTransform([x, y], this.transform); } }]); return PageViewport; }(); exports.PageViewport = PageViewport; var RenderingCancelledException = /*#__PURE__*/function (_BaseException) { _inherits(RenderingCancelledException, _BaseException); var _super3 = _createSuper(RenderingCancelledException); function RenderingCancelledException(msg, type) { var _this4; _classCallCheck(this, RenderingCancelledException); _this4 = _super3.call(this, msg); _this4.type = type; return _this4; } return RenderingCancelledException; }(_util.BaseException); exports.RenderingCancelledException = RenderingCancelledException; var LinkTarget = { NONE: 0, SELF: 1, BLANK: 2, PARENT: 3, TOP: 4 }; exports.LinkTarget = LinkTarget; function addLinkAttributes(link) { var _ref7 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, url = _ref7.url, target = _ref7.target, rel = _ref7.rel, _ref7$enabled = _ref7.enabled, enabled = _ref7$enabled === void 0 ? true : _ref7$enabled; (0, _util.assert)(url && typeof url === "string", 'addLinkAttributes: A valid "url" parameter must provided.'); var urlNullRemoved = (0, _util.removeNullCharacters)(url); if (enabled) { link.href = link.title = urlNullRemoved; } else { link.href = ""; link.title = "Disabled: ".concat(urlNullRemoved); link.onclick = function () { return false; }; } var targetStr = ""; switch (target) { case LinkTarget.NONE: break; case LinkTarget.SELF: targetStr = "_self"; break; case LinkTarget.BLANK: targetStr = "_blank"; break; case LinkTarget.PARENT: targetStr = "_parent"; break; case LinkTarget.TOP: targetStr = "_top"; break; } link.target = targetStr; link.rel = typeof rel === "string" ? rel : DEFAULT_LINK_REL; } function getFilenameFromUrl(url) { var anchor = url.indexOf("#"); var query = url.indexOf("?"); var end = Math.min(anchor > 0 ? anchor : url.length, query > 0 ? query : url.length); return url.substring(url.lastIndexOf("/", end) + 1, end); } var StatTimer = /*#__PURE__*/function () { function StatTimer() { _classCallCheck(this, StatTimer); this.started = Object.create(null); this.times = []; } _createClass(StatTimer, [{ key: "time", value: function time(name) { if (name in this.started) { (0, _util.warn)("Timer is already running for ".concat(name)); } this.started[name] = Date.now(); } }, { key: "timeEnd", value: function timeEnd(name) { if (!(name in this.started)) { (0, _util.warn)("Timer has not been started for ".concat(name)); } this.times.push({ name: name, start: this.started[name], end: Date.now() }); delete this.started[name]; } }, { key: "toString", value: function toString() { var outBuf = []; var longest = 0; var _iterator = _createForOfIteratorHelper(this.times), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var time = _step.value; var name = time.name; if (name.length > longest) { longest = name.length; } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } var _iterator2 = _createForOfIteratorHelper(this.times), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var _time = _step2.value; var duration = _time.end - _time.start; outBuf.push("".concat(_time.name.padEnd(longest), " ").concat(duration, "ms\n")); } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } return outBuf.join(""); } }]); return StatTimer; }(); exports.StatTimer = StatTimer; function isFetchSupported() { return typeof fetch !== "undefined" && typeof Response !== "undefined" && "body" in Response.prototype && typeof ReadableStream !== "undefined"; } function isValidFetchUrl(url, baseUrl) { try { var _ref8 = baseUrl ? new URL(url, baseUrl) : new URL(url), protocol = _ref8.protocol; return protocol === "http:" || protocol === "https:"; } catch (ex) { return false; } } function loadScript(src) { var removeScriptElement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; return new Promise(function (resolve, reject) { var script = document.createElement("script"); script.src = src; script.onload = function (evt) { if (removeScriptElement) { script.remove(); } resolve(evt); }; script.onerror = function () { reject(new Error("Cannot load script at: ".concat(script.src))); }; (document.head || document.documentElement).appendChild(script); }); } function deprecated(details) { console.log("Deprecated API usage: " + details); } var pdfDateStringRegex; var PDFDateString = /*#__PURE__*/function () { function PDFDateString() { _classCallCheck(this, PDFDateString); } _createClass(PDFDateString, null, [{ key: "toDateObject", value: function toDateObject(input) { if (!input || !(0, _util.isString)(input)) { return null; } if (!pdfDateStringRegex) { pdfDateStringRegex = new RegExp("^D:" + "(\\d{4})" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "([Z|+|-])?" + "(\\d{2})?" + "'?" + "(\\d{2})?" + "'?"); } var matches = pdfDateStringRegex.exec(input); if (!matches) { return null; } var year = parseInt(matches[1], 10); var month = parseInt(matches[2], 10); month = month >= 1 && month <= 12 ? month - 1 : 0; var day = parseInt(matches[3], 10); day = day >= 1 && day <= 31 ? day : 1; var hour = parseInt(matches[4], 10); hour = hour >= 0 && hour <= 23 ? hour : 0; var minute = parseInt(matches[5], 10); minute = minute >= 0 && minute <= 59 ? minute : 0; var second = parseInt(matches[6], 10); second = second >= 0 && second <= 59 ? second : 0; var universalTimeRelation = matches[7] || "Z"; var offsetHour = parseInt(matches[8], 10); offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0; var offsetMinute = parseInt(matches[9], 10) || 0; offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0; if (universalTimeRelation === "-") { hour += offsetHour; minute += offsetMinute; } else if (universalTimeRelation === "+") { hour -= offsetHour; minute -= offsetMinute; } return new Date(Date.UTC(year, month, day, hour, minute, second)); } }]); return PDFDateString; }(); exports.PDFDateString = PDFDateString; /***/ }), /* 2 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; module.exports = __w_pdfjs_require__(3); /***/ }), /* 3 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; /* module decorator */ module = __w_pdfjs_require__.nmd(module); function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var runtime = function (exports) { "use strict"; var Op = Object.prototype; var hasOwn = Op.hasOwnProperty; var undefined; var $Symbol = typeof Symbol === "function" ? Symbol : {}; var iteratorSymbol = $Symbol.iterator || "@@iterator"; var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); return obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; var generator = Object.create(protoGenerator.prototype); var context = new Context(tryLocsList || []); generator._invoke = makeInvokeMethod(innerFn, self, context); return generator; } exports.wrap = wrap; function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } var GenStateSuspendedStart = "suspendedStart"; var GenStateSuspendedYield = "suspendedYield"; var GenStateExecuting = "executing"; var GenStateCompleted = "completed"; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; IteratorPrototype[iteratorSymbol] = function () { return this; }; var getProto = Object.getPrototypeOf; var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { IteratorPrototype = NativeIteratorPrototype; } var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; GeneratorFunctionPrototype.constructor = GeneratorFunction; GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } exports.isGeneratorFunction = function (genFun) { var ctor = typeof genFun === "function" && genFun.constructor; return ctor ? ctor === GeneratorFunction || (ctor.displayName || ctor.name) === "GeneratorFunction" : false; }; exports.mark = function (genFun) { if (Object.setPrototypeOf) { Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); } else { genFun.__proto__ = GeneratorFunctionPrototype; define(genFun, toStringTagSymbol, "GeneratorFunction"); } genFun.prototype = Object.create(Gp); return genFun; }; exports.awrap = function (arg) { return { __await: arg }; }; function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if (record.type === "throw") { reject(record.arg); } else { var result = record.arg; var value = result.value; if (value && _typeof(value) === "object" && hasOwn.call(value, "__await")) { return PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }); } return PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped; resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } } var previousPromise; function enqueue(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } this._invoke = enqueue; } defineIteratorMethods(AsyncIterator.prototype); AsyncIterator.prototype[asyncIteratorSymbol] = function () { return this; }; exports.AsyncIterator = AsyncIterator; exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { if (PromiseImpl === void 0) PromiseImpl = Promise; var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }; function makeInvokeMethod(innerFn, self, context) { var state = GenStateSuspendedStart; return function invoke(method, arg) { if (state === GenStateExecuting) { throw new Error("Generator is already running"); } if (state === GenStateCompleted) { if (method === "throw") { throw arg; } return doneResult(); } context.method = method; context.arg = arg; while (true) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if (context.method === "next") { context.sent = context._sent = context.arg; } else if (context.method === "throw") { if (state === GenStateSuspendedStart) { state = GenStateCompleted; throw context.arg; } context.dispatchException(context.arg); } else if (context.method === "return") { context.abrupt("return", context.arg); } state = GenStateExecuting; var record = tryCatch(innerFn, self, context); if (record.type === "normal") { state = context.done ? GenStateCompleted : GenStateSuspendedYield; if (record.arg === ContinueSentinel) { continue; } return { value: record.arg, done: context.done }; } else if (record.type === "throw") { state = GenStateCompleted; context.method = "throw"; context.arg = record.arg; } } }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (method === undefined) { context.delegate = null; if (context.method === "throw") { if (delegate.iterator["return"]) { context.method = "return"; context.arg = undefined; maybeInvokeDelegate(delegate, context); if (context.method === "throw") { return ContinueSentinel; } } context.method = "throw"; context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if (record.type === "throw") { context.method = "throw"; context.arg = record.arg; context.delegate = null; return ContinueSentinel; } var info = record.arg; if (!info) { context.method = "throw"; context.arg = new TypeError("iterator result is not an object"); context.delegate = null; return ContinueSentinel; } if (info.done) { context[delegate.resultName] = info.value; context.next = delegate.nextLoc; if (context.method !== "return") { context.method = "next"; context.arg = undefined; } } else { return info; } context.delegate = null; return ContinueSentinel; } defineIteratorMethods(Gp); define(Gp, toStringTagSymbol, "Generator"); Gp[iteratorSymbol] = function () { return this; }; Gp.toString = function () { return "[object Generator]"; }; function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; if (1 in locs) { entry.catchLoc = locs[1]; } if (2 in locs) { entry.finallyLoc = locs[2]; entry.afterLoc = locs[3]; } this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal"; delete record.arg; entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }]; tryLocsList.forEach(pushTryEntry, this); this.reset(true); } exports.keys = function (object) { var keys = []; for (var key in object) { keys.push(key); } keys.reverse(); return function next() { while (keys.length) { var key = keys.pop(); if (key in object) { next.value = key; next.done = false; return next; } } next.done = true; return next; }; }; function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) { return iteratorMethod.call(iterable); } if (typeof iterable.next === "function") { return iterable; } if (!isNaN(iterable.length)) { var i = -1, next = function next() { while (++i < iterable.length) { if (hasOwn.call(iterable, i)) { next.value = iterable[i]; next.done = false; return next; } } next.value = undefined; next.done = true; return next; }; return next.next = next; } } return { next: doneResult }; } exports.values = values; function doneResult() { return { value: undefined, done: true }; } Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { this.prev = 0; this.next = 0; this.sent = this._sent = undefined; this.done = false; this.delegate = null; this.method = "next"; this.arg = undefined; this.tryEntries.forEach(resetTryEntry); if (!skipTempReset) { for (var name in this) { if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) { this[name] = undefined; } } } }, stop: function stop() { this.done = true; var rootEntry = this.tryEntries[0]; var rootRecord = rootEntry.completion; if (rootRecord.type === "throw") { throw rootRecord.arg; } return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) { throw exception; } var context = this; function handle(loc, caught) { record.type = "throw"; record.arg = exception; context.next = loc; if (caught) { context.method = "next"; context.arg = undefined; } return !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; var record = entry.completion; if (entry.tryLoc === "root") { return handle("end"); } if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"); var hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } else if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } } else if (hasCatch) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } } else if (hasFinally) { if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } } else { throw new Error("try statement without catch or finally"); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) { finallyEntry = null; } var record = finallyEntry ? finallyEntry.completion : {}; record.type = type; record.arg = arg; if (finallyEntry) { this.method = "next"; this.next = finallyEntry.finallyLoc; return ContinueSentinel; } return this.complete(record); }, complete: function complete(record, afterLoc) { if (record.type === "throw") { throw record.arg; } if (record.type === "break" || record.type === "continue") { this.next = record.arg; } else if (record.type === "return") { this.rval = this.arg = record.arg; this.method = "return"; this.next = "end"; } else if (record.type === "normal" && afterLoc) { this.next = afterLoc; } return ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) { this.complete(entry.completion, entry.afterLoc); resetTryEntry(entry); return ContinueSentinel; } } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if (record.type === "throw") { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }; if (this.method === "next") { this.arg = undefined; } return ContinueSentinel; } }; return exports; }(( false ? 0 : _typeof(module)) === "object" ? module.exports : {}); try { regeneratorRuntime = runtime; } catch (accidentalStrictMode) { Function("r", "regeneratorRuntime = r")(runtime); } /***/ }), /* 4 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.arrayByteLength = arrayByteLength; exports.arraysToBytes = arraysToBytes; exports.assert = assert; exports.bytesToString = bytesToString; exports.createPromiseCapability = createPromiseCapability; exports.createValidAbsoluteUrl = createValidAbsoluteUrl; exports.encodeToXmlString = encodeToXmlString; exports.escapeString = escapeString; exports.getModificationDate = getModificationDate; exports.getVerbosityLevel = getVerbosityLevel; exports.info = info; exports.isArrayBuffer = isArrayBuffer; exports.isArrayEqual = isArrayEqual; exports.isAscii = isAscii; exports.isBool = isBool; exports.isNum = isNum; exports.isSameOrigin = isSameOrigin; exports.isString = isString; exports.objectFromEntries = objectFromEntries; exports.objectSize = objectSize; exports.removeNullCharacters = removeNullCharacters; exports.setVerbosityLevel = setVerbosityLevel; exports.shadow = shadow; exports.string32 = string32; exports.stringToBytes = stringToBytes; exports.stringToPDFString = stringToPDFString; exports.stringToUTF16BEString = stringToUTF16BEString; exports.stringToUTF8String = stringToUTF8String; exports.unreachable = unreachable; exports.utf8StringToString = utf8StringToString; exports.warn = warn; exports.VerbosityLevel = exports.Util = exports.UNSUPPORTED_FEATURES = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.IsLittleEndianCached = exports.IsEvalSupportedCached = exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = exports.FontType = exports.FONT_IDENTITY_MATRIX = exports.DocumentActionEventType = exports.createObjectURL = exports.CMapCompressionType = exports.BaseException = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0; __w_pdfjs_require__(5); function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } var IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; exports.IDENTITY_MATRIX = IDENTITY_MATRIX; var FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX; var PermissionFlag = { PRINT: 0x04, MODIFY_CONTENTS: 0x08, COPY: 0x10, MODIFY_ANNOTATIONS: 0x20, FILL_INTERACTIVE_FORMS: 0x100, COPY_FOR_ACCESSIBILITY: 0x200, ASSEMBLE: 0x400, PRINT_HIGH_QUALITY: 0x800 }; exports.PermissionFlag = PermissionFlag; var TextRenderingMode = { FILL: 0, STROKE: 1, FILL_STROKE: 2, INVISIBLE: 3, FILL_ADD_TO_PATH: 4, STROKE_ADD_TO_PATH: 5, FILL_STROKE_ADD_TO_PATH: 6, ADD_TO_PATH: 7, FILL_STROKE_MASK: 3, ADD_TO_PATH_FLAG: 4 }; exports.TextRenderingMode = TextRenderingMode; var ImageKind = { GRAYSCALE_1BPP: 1, RGB_24BPP: 2, RGBA_32BPP: 3 }; exports.ImageKind = ImageKind; var AnnotationType = { TEXT: 1, LINK: 2, FREETEXT: 3, LINE: 4, SQUARE: 5, CIRCLE: 6, POLYGON: 7, POLYLINE: 8, HIGHLIGHT: 9, UNDERLINE: 10, SQUIGGLY: 11, STRIKEOUT: 12, STAMP: 13, CARET: 14, INK: 15, POPUP: 16, FILEATTACHMENT: 17, SOUND: 18, MOVIE: 19, WIDGET: 20, SCREEN: 21, PRINTERMARK: 22, TRAPNET: 23, WATERMARK: 24, THREED: 25, REDACT: 26 }; exports.AnnotationType = AnnotationType; var AnnotationStateModelType = { MARKED: "Marked", REVIEW: "Review" }; exports.AnnotationStateModelType = AnnotationStateModelType; var AnnotationMarkedState = { MARKED: "Marked", UNMARKED: "Unmarked" }; exports.AnnotationMarkedState = AnnotationMarkedState; var AnnotationReviewState = { ACCEPTED: "Accepted", REJECTED: "Rejected", CANCELLED: "Cancelled", COMPLETED: "Completed", NONE: "None" }; exports.AnnotationReviewState = AnnotationReviewState; var AnnotationReplyType = { GROUP: "Group", REPLY: "R" }; exports.AnnotationReplyType = AnnotationReplyType; var AnnotationFlag = { INVISIBLE: 0x01, HIDDEN: 0x02, PRINT: 0x04, NOZOOM: 0x08, NOROTATE: 0x10, NOVIEW: 0x20, READONLY: 0x40, LOCKED: 0x80, TOGGLENOVIEW: 0x100, LOCKEDCONTENTS: 0x200 }; exports.AnnotationFlag = AnnotationFlag; var AnnotationFieldFlag = { READONLY: 0x0000001, REQUIRED: 0x0000002, NOEXPORT: 0x0000004, MULTILINE: 0x0001000, PASSWORD: 0x0002000, NOTOGGLETOOFF: 0x0004000, RADIO: 0x0008000, PUSHBUTTON: 0x0010000, COMBO: 0x0020000, EDIT: 0x0040000, SORT: 0x0080000, FILESELECT: 0x0100000, MULTISELECT: 0x0200000, DONOTSPELLCHECK: 0x0400000, DONOTSCROLL: 0x0800000, COMB: 0x1000000, RICHTEXT: 0x2000000, RADIOSINUNISON: 0x2000000, COMMITONSELCHANGE: 0x4000000 }; exports.AnnotationFieldFlag = AnnotationFieldFlag; var AnnotationBorderStyleType = { SOLID: 1, DASHED: 2, BEVELED: 3, INSET: 4, UNDERLINE: 5 }; exports.AnnotationBorderStyleType = AnnotationBorderStyleType; var AnnotationActionEventType = { E: "Mouse Enter", X: "Mouse Exit", D: "Mouse Down", U: "Mouse Up", Fo: "Focus", Bl: "Blur", PO: "PageOpen", PC: "PageClose", PV: "PageVisible", PI: "PageInvisible", K: "Keystroke", F: "Format", V: "Validate", C: "Calculate" }; exports.AnnotationActionEventType = AnnotationActionEventType; var DocumentActionEventType = { WC: "WillClose", WS: "WillSave", DS: "DidSave", WP: "WillPrint", DP: "DidPrint" }; exports.DocumentActionEventType = DocumentActionEventType; var PageActionEventType = { O: "PageOpen", C: "PageClose" }; exports.PageActionEventType = PageActionEventType; var StreamType = { UNKNOWN: "UNKNOWN", FLATE: "FLATE", LZW: "LZW", DCT: "DCT", JPX: "JPX", JBIG: "JBIG", A85: "A85", AHX: "AHX", CCF: "CCF", RLX: "RLX" }; exports.StreamType = StreamType; var FontType = { UNKNOWN: "UNKNOWN", TYPE1: "TYPE1", TYPE1C: "TYPE1C", CIDFONTTYPE0: "CIDFONTTYPE0", CIDFONTTYPE0C: "CIDFONTTYPE0C", TRUETYPE: "TRUETYPE", CIDFONTTYPE2: "CIDFONTTYPE2", TYPE3: "TYPE3", OPENTYPE: "OPENTYPE", TYPE0: "TYPE0", MMTYPE1: "MMTYPE1" }; exports.FontType = FontType; var VerbosityLevel = { ERRORS: 0, WARNINGS: 1, INFOS: 5 }; exports.VerbosityLevel = VerbosityLevel; var CMapCompressionType = { NONE: 0, BINARY: 1, STREAM: 2 }; exports.CMapCompressionType = CMapCompressionType; var OPS = { dependency: 1, setLineWidth: 2, setLineCap: 3, setLineJoin: 4, setMiterLimit: 5, setDash: 6, setRenderingIntent: 7, setFlatness: 8, setGState: 9, save: 10, restore: 11, transform: 12, moveTo: 13, lineTo: 14, curveTo: 15, curveTo2: 16, curveTo3: 17, closePath: 18, rectangle: 19, stroke: 20, closeStroke: 21, fill: 22, eoFill: 23, fillStroke: 24, eoFillStroke: 25, closeFillStroke: 26, closeEOFillStroke: 27, endPath: 28, clip: 29, eoClip: 30, beginText: 31, endText: 32, setCharSpacing: 33, setWordSpacing: 34, setHScale: 35, setLeading: 36, setFont: 37, setTextRenderingMode: 38, setTextRise: 39, moveText: 40, setLeadingMoveText: 41, setTextMatrix: 42, nextLine: 43, showText: 44, showSpacedText: 45, nextLineShowText: 46, nextLineSetSpacingShowText: 47, setCharWidth: 48, setCharWidthAndBounds: 49, setStrokeColorSpace: 50, setFillColorSpace: 51, setStrokeColor: 52, setStrokeColorN: 53, setFillColor: 54, setFillColorN: 55, setStrokeGray: 56, setFillGray: 57, setStrokeRGBColor: 58, setFillRGBColor: 59, setStrokeCMYKColor: 60, setFillCMYKColor: 61, shadingFill: 62, beginInlineImage: 63, beginImageData: 64, endInlineImage: 65, paintXObject: 66, markPoint: 67, markPointProps: 68, beginMarkedContent: 69, beginMarkedContentProps: 70, endMarkedContent: 71, beginCompat: 72, endCompat: 73, paintFormXObjectBegin: 74, paintFormXObjectEnd: 75, beginGroup: 76, endGroup: 77, beginAnnotations: 78, endAnnotations: 79, beginAnnotation: 80, endAnnotation: 81, paintJpegXObject: 82, paintImageMaskXObject: 83, paintImageMaskXObjectGroup: 84, paintImageXObject: 85, paintInlineImageXObject: 86, paintInlineImageXObjectGroup: 87, paintImageXObjectRepeat: 88, paintImageMaskXObjectRepeat: 89, paintSolidColorImageMask: 90, constructPath: 91 }; exports.OPS = OPS; var UNSUPPORTED_FEATURES = { unknown: "unknown", forms: "forms", javaScript: "javaScript", smask: "smask", shadingPattern: "shadingPattern", font: "font", errorTilingPattern: "errorTilingPattern", errorExtGState: "errorExtGState", errorXObject: "errorXObject", errorFontLoadType3: "errorFontLoadType3", errorFontState: "errorFontState", errorFontMissing: "errorFontMissing", errorFontTranslate: "errorFontTranslate", errorColorSpace: "errorColorSpace", errorOperatorList: "errorOperatorList", errorFontToUnicode: "errorFontToUnicode", errorFontLoadNative: "errorFontLoadNative", errorFontGetPath: "errorFontGetPath", errorMarkedContent: "errorMarkedContent" }; exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES; var PasswordResponses = { NEED_PASSWORD: 1, INCORRECT_PASSWORD: 2 }; exports.PasswordResponses = PasswordResponses; var verbosity = VerbosityLevel.WARNINGS; function setVerbosityLevel(level) { if (Number.isInteger(level)) { verbosity = level; } } function getVerbosityLevel() { return verbosity; } function info(msg) { if (verbosity >= VerbosityLevel.INFOS) { console.log("Info: ".concat(msg)); } } function warn(msg) { if (verbosity >= VerbosityLevel.WARNINGS) { console.log("Warning: ".concat(msg)); } } function unreachable(msg) { throw new Error(msg); } function assert(cond, msg) { if (!cond) { unreachable(msg); } } function isSameOrigin(baseUrl, otherUrl) { var base; try { base = new URL(baseUrl); if (!base.origin || base.origin === "null") { return false; } } catch (e) { return false; } var other = new URL(otherUrl, base); return base.origin === other.origin; } function _isValidProtocol(url) { if (!url) { return false; } switch (url.protocol) { case "http:": case "https:": case "ftp:": case "mailto:": case "tel:": return true; default: return false; } } function createValidAbsoluteUrl(url, baseUrl) { if (!url) { return null; } try { var absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url); if (_isValidProtocol(absoluteUrl)) { return absoluteUrl; } } catch (ex) {} return null; } function shadow(obj, prop, value) { Object.defineProperty(obj, prop, { value: value, enumerable: true, configurable: true, writable: false }); return value; } var BaseException = function BaseExceptionClosure() { function BaseException(message) { if (this.constructor === BaseException) { unreachable("Cannot initialize BaseException."); } this.message = message; this.name = this.constructor.name; } BaseException.prototype = new Error(); BaseException.constructor = BaseException; return BaseException; }(); exports.BaseException = BaseException; var PasswordException = /*#__PURE__*/function (_BaseException) { _inherits(PasswordException, _BaseException); var _super = _createSuper(PasswordException); function PasswordException(msg, code) { var _this; _classCallCheck(this, PasswordException); _this = _super.call(this, msg); _this.code = code; return _this; } return PasswordException; }(BaseException); exports.PasswordException = PasswordException; var UnknownErrorException = /*#__PURE__*/function (_BaseException2) { _inherits(UnknownErrorException, _BaseException2); var _super2 = _createSuper(UnknownErrorException); function UnknownErrorException(msg, details) { var _this2; _classCallCheck(this, UnknownErrorException); _this2 = _super2.call(this, msg); _this2.details = details; return _this2; } return UnknownErrorException; }(BaseException); exports.UnknownErrorException = UnknownErrorException; var InvalidPDFException = /*#__PURE__*/function (_BaseException3) { _inherits(InvalidPDFException, _BaseException3); var _super3 = _createSuper(InvalidPDFException); function InvalidPDFException() { _classCallCheck(this, InvalidPDFException); return _super3.apply(this, arguments); } return InvalidPDFException; }(BaseException); exports.InvalidPDFException = InvalidPDFException; var MissingPDFException = /*#__PURE__*/function (_BaseException4) { _inherits(MissingPDFException, _BaseException4); var _super4 = _createSuper(MissingPDFException); function MissingPDFException() { _classCallCheck(this, MissingPDFException); return _super4.apply(this, arguments); } return MissingPDFException; }(BaseException); exports.MissingPDFException = MissingPDFException; var UnexpectedResponseException = /*#__PURE__*/function (_BaseException5) { _inherits(UnexpectedResponseException, _BaseException5); var _super5 = _createSuper(UnexpectedResponseException); function UnexpectedResponseException(msg, status) { var _this3; _classCallCheck(this, UnexpectedResponseException); _this3 = _super5.call(this, msg); _this3.status = status; return _this3; } return UnexpectedResponseException; }(BaseException); exports.UnexpectedResponseException = UnexpectedResponseException; var FormatError = /*#__PURE__*/function (_BaseException6) { _inherits(FormatError, _BaseException6); var _super6 = _createSuper(FormatError); function FormatError() { _classCallCheck(this, FormatError); return _super6.apply(this, arguments); } return FormatError; }(BaseException); exports.FormatError = FormatError; var AbortException = /*#__PURE__*/function (_BaseException7) { _inherits(AbortException, _BaseException7); var _super7 = _createSuper(AbortException); function AbortException() { _classCallCheck(this, AbortException); return _super7.apply(this, arguments); } return AbortException; }(BaseException); exports.AbortException = AbortException; var NullCharactersRegExp = /\x00/g; function removeNullCharacters(str) { if (typeof str !== "string") { warn("The argument for removeNullCharacters must be a string."); return str; } return str.replace(NullCharactersRegExp, ""); } function bytesToString(bytes) { assert(bytes !== null && _typeof(bytes) === "object" && bytes.length !== undefined, "Invalid argument for bytesToString"); var length = bytes.length; var MAX_ARGUMENT_COUNT = 8192; if (length < MAX_ARGUMENT_COUNT) { return String.fromCharCode.apply(null, bytes); } var strBuf = []; for (var i = 0; i < length; i += MAX_ARGUMENT_COUNT) { var chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length); var chunk = bytes.subarray(i, chunkEnd); strBuf.push(String.fromCharCode.apply(null, chunk)); } return strBuf.join(""); } function stringToBytes(str) { assert(typeof str === "string", "Invalid argument for stringToBytes"); var length = str.length; var bytes = new Uint8Array(length); for (var i = 0; i < length; ++i) { bytes[i] = str.charCodeAt(i) & 0xff; } return bytes; } function arrayByteLength(arr) { if (arr.length !== undefined) { return arr.length; } assert(arr.byteLength !== undefined, "arrayByteLength - invalid argument."); return arr.byteLength; } function arraysToBytes(arr) { var length = arr.length; if (length === 1 && arr[0] instanceof Uint8Array) { return arr[0]; } var resultLength = 0; for (var i = 0; i < length; i++) { resultLength += arrayByteLength(arr[i]); } var pos = 0; var data = new Uint8Array(resultLength); for (var _i = 0; _i < length; _i++) { var item = arr[_i]; if (!(item instanceof Uint8Array)) { if (typeof item === "string") { item = stringToBytes(item); } else { item = new Uint8Array(item); } } var itemLength = item.byteLength; data.set(item, pos); pos += itemLength; } return data; } function string32(value) { return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff); } function objectSize(obj) { return Object.keys(obj).length; } function objectFromEntries(iterable) { return Object.assign(Object.create(null), Object.fromEntries(iterable)); } function isLittleEndian() { var buffer8 = new Uint8Array(4); buffer8[0] = 1; var view32 = new Uint32Array(buffer8.buffer, 0, 1); return view32[0] === 1; } var IsLittleEndianCached = { get value() { return shadow(this, "value", isLittleEndian()); } }; exports.IsLittleEndianCached = IsLittleEndianCached; function isEvalSupported() { try { new Function(""); return true; } catch (e) { return false; } } var IsEvalSupportedCached = { get value() { return shadow(this, "value", isEvalSupported()); } }; exports.IsEvalSupportedCached = IsEvalSupportedCached; var hexNumbers = _toConsumableArray(Array(256).keys()).map(function (n) { return n.toString(16).padStart(2, "0"); }); var Util = /*#__PURE__*/function () { function Util() { _classCallCheck(this, Util); } _createClass(Util, null, [{ key: "makeHexColor", value: function makeHexColor(r, g, b) { return "#".concat(hexNumbers[r]).concat(hexNumbers[g]).concat(hexNumbers[b]); } }, { key: "transform", value: function transform(m1, m2) { return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]]; } }, { key: "applyTransform", value: function applyTransform(p, m) { var xt = p[0] * m[0] + p[1] * m[2] + m[4]; var yt = p[0] * m[1] + p[1] * m[3] + m[5]; return [xt, yt]; } }, { key: "applyInverseTransform", value: function applyInverseTransform(p, m) { var d = m[0] * m[3] - m[1] * m[2]; var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d; var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d; return [xt, yt]; } }, { key: "getAxialAlignedBoundingBox", value: function getAxialAlignedBoundingBox(r, m) { var p1 = Util.applyTransform(r, m); var p2 = Util.applyTransform(r.slice(2, 4), m); var p3 = Util.applyTransform([r[0], r[3]], m); var p4 = Util.applyTransform([r[2], r[1]], m); return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])]; } }, { key: "inverseTransform", value: function inverseTransform(m) { var d = m[0] * m[3] - m[1] * m[2]; return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d]; } }, { key: "apply3dTransform", value: function apply3dTransform(m, v) { return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]]; } }, { key: "singularValueDecompose2dScale", value: function singularValueDecompose2dScale(m) { var transpose = [m[0], m[2], m[1], m[3]]; var a = m[0] * transpose[0] + m[1] * transpose[2]; var b = m[0] * transpose[1] + m[1] * transpose[3]; var c = m[2] * transpose[0] + m[3] * transpose[2]; var d = m[2] * transpose[1] + m[3] * transpose[3]; var first = (a + d) / 2; var second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2; var sx = first + second || 1; var sy = first - second || 1; return [Math.sqrt(sx), Math.sqrt(sy)]; } }, { key: "normalizeRect", value: function normalizeRect(rect) { var r = rect.slice(0); if (rect[0] > rect[2]) { r[0] = rect[2]; r[2] = rect[0]; } if (rect[1] > rect[3]) { r[1] = rect[3]; r[3] = rect[1]; } return r; } }, { key: "intersect", value: function intersect(rect1, rect2) { function compare(a, b) { return a - b; } var orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare); var orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare); var result = []; rect1 = Util.normalizeRect(rect1); rect2 = Util.normalizeRect(rect2); if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) { result[0] = orderedX[1]; result[2] = orderedX[2]; } else { return null; } if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) { result[1] = orderedY[1]; result[3] = orderedY[2]; } else { return null; } return result; } }]); return Util; }(); exports.Util = Util; var PDFStringTranslateTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203A, 0x2212, 0x2030, 0x201E, 0x201C, 0x201D, 0x2018, 0x2019, 0x201A, 0x2122, 0xFB01, 0xFB02, 0x141, 0x152, 0x160, 0x178, 0x17D, 0x131, 0x142, 0x153, 0x161, 0x17E, 0, 0x20AC]; function stringToPDFString(str) { var length = str.length, strBuf = []; if (str[0] === "\xFE" && str[1] === "\xFF") { for (var i = 2; i < length; i += 2) { strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1))); } } else if (str[0] === "\xFF" && str[1] === "\xFE") { for (var _i2 = 2; _i2 < length; _i2 += 2) { strBuf.push(String.fromCharCode(str.charCodeAt(_i2 + 1) << 8 | str.charCodeAt(_i2))); } } else { for (var _i3 = 0; _i3 < length; ++_i3) { var code = PDFStringTranslateTable[str.charCodeAt(_i3)]; strBuf.push(code ? String.fromCharCode(code) : str.charAt(_i3)); } } return strBuf.join(""); } function escapeString(str) { return str.replace(/([()\\\n\r])/g, function (match) { if (match === "\n") { return "\\n"; } else if (match === "\r") { return "\\r"; } return "\\".concat(match); }); } function isAscii(str) { return /^[\x00-\x7F]*$/.test(str); } function stringToUTF16BEString(str) { var buf = ["\xFE\xFF"]; for (var i = 0, ii = str.length; i < ii; i++) { var _char = str.charCodeAt(i); buf.push(String.fromCharCode(_char >> 8 & 0xff)); buf.push(String.fromCharCode(_char & 0xff)); } return buf.join(""); } function stringToUTF8String(str) { return decodeURIComponent(escape(str)); } function utf8StringToString(str) { return unescape(encodeURIComponent(str)); } function isBool(v) { return typeof v === "boolean"; } function isNum(v) { return typeof v === "number"; } function isString(v) { return typeof v === "string"; } function isArrayBuffer(v) { return _typeof(v) === "object" && v !== null && v.byteLength !== undefined; } function isArrayEqual(arr1, arr2) { if (arr1.length !== arr2.length) { return false; } return arr1.every(function (element, index) { return element === arr2[index]; }); } function getModificationDate() { var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date(); var buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, "0"), date.getUTCDate().toString().padStart(2, "0"), date.getUTCHours().toString().padStart(2, "0"), date.getUTCMinutes().toString().padStart(2, "0"), date.getUTCSeconds().toString().padStart(2, "0")]; return buffer.join(""); } function createPromiseCapability() { var capability = Object.create(null); var isSettled = false; Object.defineProperty(capability, "settled", { get: function get() { return isSettled; } }); capability.promise = new Promise(function (resolve, reject) { capability.resolve = function (data) { isSettled = true; resolve(data); }; capability.reject = function (reason) { isSettled = true; reject(reason); }; }); return capability; } var createObjectURL = function createObjectURLClosure() { var digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; return function createObjectURL(data, contentType) { var forceDataSchema = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; if (!forceDataSchema && URL.createObjectURL) { var blob = new Blob([data], { type: contentType }); return URL.createObjectURL(blob); } var buffer = "data:".concat(contentType, ";base64,"); for (var i = 0, ii = data.length; i < ii; i += 3) { var b1 = data[i] & 0xff; var b2 = data[i + 1] & 0xff; var b3 = data[i + 2] & 0xff; var d1 = b1 >> 2, d2 = (b1 & 3) << 4 | b2 >> 4; var d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64; var d4 = i + 2 < ii ? b3 & 0x3f : 64; buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4]; } return buffer; }; }(); exports.createObjectURL = createObjectURL; var XMLEntities = { 0x3c: "<", 0x3e: ">", 0x26: "&", 0x22: """, 0x27: "'" }; function encodeToXmlString(str) { var buffer = []; var start = 0; for (var i = 0, ii = str.length; i < ii; i++) { var _char2 = str.codePointAt(i); if (0x20 <= _char2 && _char2 <= 0x7e) { var entity = XMLEntities[_char2]; if (entity) { if (start < i) { buffer.push(str.substring(start, i)); } buffer.push(entity); start = i + 1; } } else { if (start < i) { buffer.push(str.substring(start, i)); } buffer.push("&#x".concat(_char2.toString(16).toUpperCase(), ";")); if (_char2 > 0xd7ff && (_char2 < 0xe000 || _char2 > 0xfffd)) { i++; } start = i + 1; } } if (buffer.length === 0) { return str; } if (start < str.length) { buffer.push(str.substring(start, str.length)); } return buffer.join(""); } /***/ }), /* 5 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var _is_node = __w_pdfjs_require__(6); if (typeof globalThis === "undefined" || !globalThis._pdfjsCompatibilityChecked) { if (typeof globalThis === "undefined" || globalThis.Math !== Math) { globalThis = __w_pdfjs_require__(7); } globalThis._pdfjsCompatibilityChecked = true; (function checkNodeBtoa() { if (globalThis.btoa || !_is_node.isNodeJS) { return; } globalThis.btoa = function (chars) { return Buffer.from(chars, "binary").toString("base64"); }; })(); (function checkNodeAtob() { if (globalThis.atob || !_is_node.isNodeJS) { return; } globalThis.atob = function (input) { return Buffer.from(input, "base64").toString("binary"); }; })(); (function checkObjectFromEntries() { if (Object.fromEntries) { return; } __w_pdfjs_require__(52); })(); (function checkPromise() { if (globalThis.Promise.allSettled) { return; } globalThis.Promise = __w_pdfjs_require__(82); })(); (function checkURL() { globalThis.URL = __w_pdfjs_require__(111); })(); (function checkReadableStream() { var isReadableStreamSupported = false; if (typeof ReadableStream !== "undefined") { try { new ReadableStream({ start: function start(controller) { controller.close(); } }); isReadableStreamSupported = true; } catch (e) {} } if (isReadableStreamSupported) { return; } globalThis.ReadableStream = __w_pdfjs_require__(121).ReadableStream; })(); (function checkStringPadStart() { if (String.prototype.padStart) { return; } __w_pdfjs_require__(122); })(); (function checkStringPadEnd() { if (String.prototype.padEnd) { return; } __w_pdfjs_require__(128); })(); (function checkObjectValues() { if (Object.values) { return; } Object.values = __w_pdfjs_require__(130); })(); (function checkObjectEntries() { if (Object.entries) { return; } Object.entries = __w_pdfjs_require__(133); })(); } /***/ }), /* 6 */ /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.isNodeJS = void 0; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var isNodeJS = (typeof process === "undefined" ? "undefined" : _typeof(process)) === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser"); exports.isNodeJS = isNodeJS; /***/ }), /* 7 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { __w_pdfjs_require__(8); module.exports = __w_pdfjs_require__(10); /***/ }), /* 8 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { var $ = __w_pdfjs_require__(9); var global = __w_pdfjs_require__(10); $({ global: true }, { globalThis: global }); /***/ }), /* 9 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); var getOwnPropertyDescriptor = __w_pdfjs_require__(11).f; var createNonEnumerableProperty = __w_pdfjs_require__(25); var redefine = __w_pdfjs_require__(28); var setGlobal = __w_pdfjs_require__(29); var copyConstructorProperties = __w_pdfjs_require__(39); var isForced = __w_pdfjs_require__(51); module.exports = function (options, source) { var TARGET = options.target; var GLOBAL = options.global; var STATIC = options.stat; var FORCED, target, key, targetProperty, sourceProperty, descriptor; if (GLOBAL) { target = global; } else if (STATIC) { target = global[TARGET] || setGlobal(TARGET, {}); } else { target = (global[TARGET] || {}).prototype; } if (target) for (key in source) { sourceProperty = source[key]; if (options.noTargetGet) { descriptor = getOwnPropertyDescriptor(target, key); targetProperty = descriptor && descriptor.value; } else targetProperty = target[key]; FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); if (!FORCED && targetProperty !== undefined) { if (typeof sourceProperty === typeof targetProperty) continue; copyConstructorProperties(sourceProperty, targetProperty); } if (options.sham || targetProperty && targetProperty.sham) { createNonEnumerableProperty(sourceProperty, 'sham', true); } redefine(target, key, sourceProperty, options); } }; /***/ }), /* 10 */ /***/ ((module) => { var check = function (it) { return it && it.Math == Math && it; }; module.exports = check(typeof globalThis == 'object' && globalThis) || check(typeof window == 'object' && window) || check(typeof self == 'object' && self) || check(typeof global == 'object' && global) || function () { return this; }() || Function('return this')(); /***/ }), /* 11 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { var DESCRIPTORS = __w_pdfjs_require__(12); var propertyIsEnumerableModule = __w_pdfjs_require__(14); var createPropertyDescriptor = __w_pdfjs_require__(15); var toIndexedObject = __w_pdfjs_require__(16); var toPrimitive = __w_pdfjs_require__(20); var has = __w_pdfjs_require__(22); var IE8_DOM_DEFINE = __w_pdfjs_require__(23); var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { O = toIndexedObject(O); P = toPrimitive(P, true); if (IE8_DOM_DEFINE) try { return nativeGetOwnPropertyDescriptor(O, P); } catch (error) { } if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]); }; /***/ }), /* 12 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var fails = __w_pdfjs_require__(13); module.exports = !fails(function () { return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7; }); /***/ }), /* 13 */ /***/ ((module) => { module.exports = function (exec) { try { return !!exec(); } catch (error) { return true; } }; /***/ }), /* 14 */ /***/ ((__unused_webpack_module, exports) => { "use strict"; var nativePropertyIsEnumerable = {}.propertyIsEnumerable; var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1); exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { var descriptor = getOwnPropertyDescriptor(this, V); return !!descriptor && descriptor.enumerable; } : nativePropertyIsEnumerable; /***/ }), /* 15 */ /***/ ((module) => { module.exports = function (bitmap, value) { return { enumerable: !(bitmap & 1), configurable: !(bitmap & 2), writable: !(bitmap & 4), value: value }; }; /***/ }), /* 16 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var IndexedObject = __w_pdfjs_require__(17); var requireObjectCoercible = __w_pdfjs_require__(19); module.exports = function (it) { return IndexedObject(requireObjectCoercible(it)); }; /***/ }), /* 17 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var fails = __w_pdfjs_require__(13); var classof = __w_pdfjs_require__(18); var split = ''.split; module.exports = fails(function () { return !Object('z').propertyIsEnumerable(0); }) ? function (it) { return classof(it) == 'String' ? split.call(it, '') : Object(it); } : Object; /***/ }), /* 18 */ /***/ ((module) => { var toString = {}.toString; module.exports = function (it) { return toString.call(it).slice(8, -1); }; /***/ }), /* 19 */ /***/ ((module) => { module.exports = function (it) { if (it == undefined) throw TypeError("Can't call method on " + it); return it; }; /***/ }), /* 20 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var isObject = __w_pdfjs_require__(21); module.exports = function (input, PREFERRED_STRING) { if (!isObject(input)) return input; var fn, val; if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val; if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; throw TypeError("Can't convert object to primitive value"); }; /***/ }), /* 21 */ /***/ ((module) => { module.exports = function (it) { return typeof it === 'object' ? it !== null : typeof it === 'function'; }; /***/ }), /* 22 */ /***/ ((module) => { var hasOwnProperty = {}.hasOwnProperty; module.exports = function (it, key) { return hasOwnProperty.call(it, key); }; /***/ }), /* 23 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var DESCRIPTORS = __w_pdfjs_require__(12); var fails = __w_pdfjs_require__(13); var createElement = __w_pdfjs_require__(24); module.exports = !DESCRIPTORS && !fails(function () { return Object.defineProperty(createElement('div'), 'a', { get: function () { return 7; } }).a != 7; }); /***/ }), /* 24 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); var isObject = __w_pdfjs_require__(21); var document = global.document; var EXISTS = isObject(document) && isObject(document.createElement); module.exports = function (it) { return EXISTS ? document.createElement(it) : {}; }; /***/ }), /* 25 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var DESCRIPTORS = __w_pdfjs_require__(12); var definePropertyModule = __w_pdfjs_require__(26); var createPropertyDescriptor = __w_pdfjs_require__(15); module.exports = DESCRIPTORS ? function (object, key, value) { return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); } : function (object, key, value) { object[key] = value; return object; }; /***/ }), /* 26 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { var DESCRIPTORS = __w_pdfjs_require__(12); var IE8_DOM_DEFINE = __w_pdfjs_require__(23); var anObject = __w_pdfjs_require__(27); var toPrimitive = __w_pdfjs_require__(20); var nativeDefineProperty = Object.defineProperty; exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) { anObject(O); P = toPrimitive(P, true); anObject(Attributes); if (IE8_DOM_DEFINE) try { return nativeDefineProperty(O, P, Attributes); } catch (error) { } if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported'); if ('value' in Attributes) O[P] = Attributes.value; return O; }; /***/ }), /* 27 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var isObject = __w_pdfjs_require__(21); module.exports = function (it) { if (!isObject(it)) { throw TypeError(String(it) + ' is not an object'); } return it; }; /***/ }), /* 28 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); var createNonEnumerableProperty = __w_pdfjs_require__(25); var has = __w_pdfjs_require__(22); var setGlobal = __w_pdfjs_require__(29); var inspectSource = __w_pdfjs_require__(30); var InternalStateModule = __w_pdfjs_require__(32); var getInternalState = InternalStateModule.get; var enforceInternalState = InternalStateModule.enforce; var TEMPLATE = String(String).split('String'); (module.exports = function (O, key, value, options) { var unsafe = options ? !!options.unsafe : false; var simple = options ? !!options.enumerable : false; var noTargetGet = options ? !!options.noTargetGet : false; var state; if (typeof value == 'function') { if (typeof key == 'string' && !has(value, 'name')) { createNonEnumerableProperty(value, 'name', key); } state = enforceInternalState(value); if (!state.source) { state.source = TEMPLATE.join(typeof key == 'string' ? key : ''); } } if (O === global) { if (simple) O[key] = value; else setGlobal(key, value); return; } else if (!unsafe) { delete O[key]; } else if (!noTargetGet && O[key]) { simple = true; } if (simple) O[key] = value; else createNonEnumerableProperty(O, key, value); })(Function.prototype, 'toString', function toString() { return typeof this == 'function' && getInternalState(this).source || inspectSource(this); }); /***/ }), /* 29 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); var createNonEnumerableProperty = __w_pdfjs_require__(25); module.exports = function (key, value) { try { createNonEnumerableProperty(global, key, value); } catch (error) { global[key] = value; } return value; }; /***/ }), /* 30 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var store = __w_pdfjs_require__(31); var functionToString = Function.toString; if (typeof store.inspectSource != 'function') { store.inspectSource = function (it) { return functionToString.call(it); }; } module.exports = store.inspectSource; /***/ }), /* 31 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); var setGlobal = __w_pdfjs_require__(29); var SHARED = '__core-js_shared__'; var store = global[SHARED] || setGlobal(SHARED, {}); module.exports = store; /***/ }), /* 32 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var NATIVE_WEAK_MAP = __w_pdfjs_require__(33); var global = __w_pdfjs_require__(10); var isObject = __w_pdfjs_require__(21); var createNonEnumerableProperty = __w_pdfjs_require__(25); var objectHas = __w_pdfjs_require__(22); var shared = __w_pdfjs_require__(31); var sharedKey = __w_pdfjs_require__(34); var hiddenKeys = __w_pdfjs_require__(38); var WeakMap = global.WeakMap; var set, get, has; var enforce = function (it) { return has(it) ? get(it) : set(it, {}); }; var getterFor = function (TYPE) { return function (it) { var state; if (!isObject(it) || (state = get(it)).type !== TYPE) { throw TypeError('Incompatible receiver, ' + TYPE + ' required'); } return state; }; }; if (NATIVE_WEAK_MAP) { var store = shared.state || (shared.state = new WeakMap()); var wmget = store.get; var wmhas = store.has; var wmset = store.set; set = function (it, metadata) { metadata.facade = it; wmset.call(store, it, metadata); return metadata; }; get = function (it) { return wmget.call(store, it) || {}; }; has = function (it) { return wmhas.call(store, it); }; } else { var STATE = sharedKey('state'); hiddenKeys[STATE] = true; set = function (it, metadata) { metadata.facade = it; createNonEnumerableProperty(it, STATE, metadata); return metadata; }; get = function (it) { return objectHas(it, STATE) ? it[STATE] : {}; }; has = function (it) { return objectHas(it, STATE); }; } module.exports = { set: set, get: get, has: has, enforce: enforce, getterFor: getterFor }; /***/ }), /* 33 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); var inspectSource = __w_pdfjs_require__(30); var WeakMap = global.WeakMap; module.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap)); /***/ }), /* 34 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var shared = __w_pdfjs_require__(35); var uid = __w_pdfjs_require__(37); var keys = shared('keys'); module.exports = function (key) { return keys[key] || (keys[key] = uid(key)); }; /***/ }), /* 35 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var IS_PURE = __w_pdfjs_require__(36); var store = __w_pdfjs_require__(31); (module.exports = function (key, value) { return store[key] || (store[key] = value !== undefined ? value : {}); })('versions', []).push({ version: '3.8.3', mode: IS_PURE ? 'pure' : 'global', copyright: '© 2021 Denis Pushkarev (zloirock.ru)' }); /***/ }), /* 36 */ /***/ ((module) => { module.exports = false; /***/ }), /* 37 */ /***/ ((module) => { var id = 0; var postfix = Math.random(); module.exports = function (key) { return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36); }; /***/ }), /* 38 */ /***/ ((module) => { module.exports = {}; /***/ }), /* 39 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var has = __w_pdfjs_require__(22); var ownKeys = __w_pdfjs_require__(40); var getOwnPropertyDescriptorModule = __w_pdfjs_require__(11); var definePropertyModule = __w_pdfjs_require__(26); module.exports = function (target, source) { var keys = ownKeys(source); var defineProperty = definePropertyModule.f; var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; for (var i = 0; i < keys.length; i++) { var key = keys[i]; if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key)); } }; /***/ }), /* 40 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var getBuiltIn = __w_pdfjs_require__(41); var getOwnPropertyNamesModule = __w_pdfjs_require__(43); var getOwnPropertySymbolsModule = __w_pdfjs_require__(50); var anObject = __w_pdfjs_require__(27); module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { var keys = getOwnPropertyNamesModule.f(anObject(it)); var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys; }; /***/ }), /* 41 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var path = __w_pdfjs_require__(42); var global = __w_pdfjs_require__(10); var aFunction = function (variable) { return typeof variable == 'function' ? variable : undefined; }; module.exports = function (namespace, method) { return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace]) : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method]; }; /***/ }), /* 42 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); module.exports = global; /***/ }), /* 43 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { var internalObjectKeys = __w_pdfjs_require__(44); var enumBugKeys = __w_pdfjs_require__(49); var hiddenKeys = enumBugKeys.concat('length', 'prototype'); exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { return internalObjectKeys(O, hiddenKeys); }; /***/ }), /* 44 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var has = __w_pdfjs_require__(22); var toIndexedObject = __w_pdfjs_require__(16); var indexOf = __w_pdfjs_require__(45).indexOf; var hiddenKeys = __w_pdfjs_require__(38); module.exports = function (object, names) { var O = toIndexedObject(object); var i = 0; var result = []; var key; for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key); while (names.length > i) if (has(O, key = names[i++])) { ~indexOf(result, key) || result.push(key); } return result; }; /***/ }), /* 45 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var toIndexedObject = __w_pdfjs_require__(16); var toLength = __w_pdfjs_require__(46); var toAbsoluteIndex = __w_pdfjs_require__(48); var createMethod = function (IS_INCLUDES) { return function ($this, el, fromIndex) { var O = toIndexedObject($this); var length = toLength(O.length); var index = toAbsoluteIndex(fromIndex, length); var value; if (IS_INCLUDES && el != el) while (length > index) { value = O[index++]; if (value != value) return true; } else for (; length > index; index++) { if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; } return !IS_INCLUDES && -1; }; }; module.exports = { includes: createMethod(true), indexOf: createMethod(false) }; /***/ }), /* 46 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var toInteger = __w_pdfjs_require__(47); var min = Math.min; module.exports = function (argument) { return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; }; /***/ }), /* 47 */ /***/ ((module) => { var ceil = Math.ceil; var floor = Math.floor; module.exports = function (argument) { return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument); }; /***/ }), /* 48 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var toInteger = __w_pdfjs_require__(47); var max = Math.max; var min = Math.min; module.exports = function (index, length) { var integer = toInteger(index); return integer < 0 ? max(integer + length, 0) : min(integer, length); }; /***/ }), /* 49 */ /***/ ((module) => { module.exports = [ 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf' ]; /***/ }), /* 50 */ /***/ ((__unused_webpack_module, exports) => { exports.f = Object.getOwnPropertySymbols; /***/ }), /* 51 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var fails = __w_pdfjs_require__(13); var replacement = /#|\.prototype\./; var isForced = function (feature, detection) { var value = data[normalize(feature)]; return value == POLYFILL ? true : value == NATIVE ? false : typeof detection == 'function' ? fails(detection) : !!detection; }; var normalize = isForced.normalize = function (string) { return String(string).replace(replacement, '.').toLowerCase(); }; var data = isForced.data = {}; var NATIVE = isForced.NATIVE = 'N'; var POLYFILL = isForced.POLYFILL = 'P'; module.exports = isForced; /***/ }), /* 52 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { __w_pdfjs_require__(53); __w_pdfjs_require__(72); var path = __w_pdfjs_require__(42); module.exports = path.Object.fromEntries; /***/ }), /* 53 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var toIndexedObject = __w_pdfjs_require__(16); var addToUnscopables = __w_pdfjs_require__(54); var Iterators = __w_pdfjs_require__(62); var InternalStateModule = __w_pdfjs_require__(32); var defineIterator = __w_pdfjs_require__(63); var ARRAY_ITERATOR = 'Array Iterator'; var setInternalState = InternalStateModule.set; var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR); module.exports = defineIterator(Array, 'Array', function (iterated, kind) { setInternalState(this, { type: ARRAY_ITERATOR, target: toIndexedObject(iterated), index: 0, kind: kind }); }, function () { var state = getInternalState(this); var target = state.target; var kind = state.kind; var index = state.index++; if (!target || index >= target.length) { state.target = undefined; return { value: undefined, done: true }; } if (kind == 'keys') return { value: index, done: false }; if (kind == 'values') return { value: target[index], done: false }; return { value: [ index, target[index] ], done: false }; }, 'values'); Iterators.Arguments = Iterators.Array; addToUnscopables('keys'); addToUnscopables('values'); addToUnscopables('entries'); /***/ }), /* 54 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var wellKnownSymbol = __w_pdfjs_require__(55); var create = __w_pdfjs_require__(58); var definePropertyModule = __w_pdfjs_require__(26); var UNSCOPABLES = wellKnownSymbol('unscopables'); var ArrayPrototype = Array.prototype; if (ArrayPrototype[UNSCOPABLES] == undefined) { definePropertyModule.f(ArrayPrototype, UNSCOPABLES, { configurable: true, value: create(null) }); } module.exports = function (key) { ArrayPrototype[UNSCOPABLES][key] = true; }; /***/ }), /* 55 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); var shared = __w_pdfjs_require__(35); var has = __w_pdfjs_require__(22); var uid = __w_pdfjs_require__(37); var NATIVE_SYMBOL = __w_pdfjs_require__(56); var USE_SYMBOL_AS_UID = __w_pdfjs_require__(57); var WellKnownSymbolsStore = shared('wks'); var Symbol = global.Symbol; var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid; module.exports = function (name) { if (!has(WellKnownSymbolsStore, name)) { if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name]; else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name); } return WellKnownSymbolsStore[name]; }; /***/ }), /* 56 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var fails = __w_pdfjs_require__(13); module.exports = !!Object.getOwnPropertySymbols && !fails(function () { return !String(Symbol()); }); /***/ }), /* 57 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var NATIVE_SYMBOL = __w_pdfjs_require__(56); module.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == 'symbol'; /***/ }), /* 58 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var anObject = __w_pdfjs_require__(27); var defineProperties = __w_pdfjs_require__(59); var enumBugKeys = __w_pdfjs_require__(49); var hiddenKeys = __w_pdfjs_require__(38); var html = __w_pdfjs_require__(61); var documentCreateElement = __w_pdfjs_require__(24); var sharedKey = __w_pdfjs_require__(34); var GT = '>'; var LT = '<'; var PROTOTYPE = 'prototype'; var SCRIPT = 'script'; var IE_PROTO = sharedKey('IE_PROTO'); var EmptyConstructor = function () { }; var scriptTag = function (content) { return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; }; var NullProtoObjectViaActiveX = function (activeXDocument) { activeXDocument.write(scriptTag('')); activeXDocument.close(); var temp = activeXDocument.parentWindow.Object; activeXDocument = null; return temp; }; var NullProtoObjectViaIFrame = function () { var iframe = documentCreateElement('iframe'); var JS = 'java' + SCRIPT + ':'; var iframeDocument; iframe.style.display = 'none'; html.appendChild(iframe); iframe.src = String(JS); iframeDocument = iframe.contentWindow.document; iframeDocument.open(); iframeDocument.write(scriptTag('document.F=Object')); iframeDocument.close(); return iframeDocument.F; }; var activeXDocument; var NullProtoObject = function () { try { activeXDocument = document.domain && new ActiveXObject('htmlfile'); } catch (error) { } NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame(); var length = enumBugKeys.length; while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; return NullProtoObject(); }; hiddenKeys[IE_PROTO] = true; module.exports = Object.create || function create(O, Properties) { var result; if (O !== null) { EmptyConstructor[PROTOTYPE] = anObject(O); result = new EmptyConstructor(); EmptyConstructor[PROTOTYPE] = null; result[IE_PROTO] = O; } else result = NullProtoObject(); return Properties === undefined ? result : defineProperties(result, Properties); }; /***/ }), /* 59 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var DESCRIPTORS = __w_pdfjs_require__(12); var definePropertyModule = __w_pdfjs_require__(26); var anObject = __w_pdfjs_require__(27); var objectKeys = __w_pdfjs_require__(60); module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) { anObject(O); var keys = objectKeys(Properties); var length = keys.length; var index = 0; var key; while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]); return O; }; /***/ }), /* 60 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var internalObjectKeys = __w_pdfjs_require__(44); var enumBugKeys = __w_pdfjs_require__(49); module.exports = Object.keys || function keys(O) { return internalObjectKeys(O, enumBugKeys); }; /***/ }), /* 61 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var getBuiltIn = __w_pdfjs_require__(41); module.exports = getBuiltIn('document', 'documentElement'); /***/ }), /* 62 */ /***/ ((module) => { module.exports = {}; /***/ }), /* 63 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var $ = __w_pdfjs_require__(9); var createIteratorConstructor = __w_pdfjs_require__(64); var getPrototypeOf = __w_pdfjs_require__(66); var setPrototypeOf = __w_pdfjs_require__(70); var setToStringTag = __w_pdfjs_require__(69); var createNonEnumerableProperty = __w_pdfjs_require__(25); var redefine = __w_pdfjs_require__(28); var wellKnownSymbol = __w_pdfjs_require__(55); var IS_PURE = __w_pdfjs_require__(36); var Iterators = __w_pdfjs_require__(62); var IteratorsCore = __w_pdfjs_require__(65); var IteratorPrototype = IteratorsCore.IteratorPrototype; var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; var ITERATOR = wellKnownSymbol('iterator'); var KEYS = 'keys'; var VALUES = 'values'; var ENTRIES = 'entries'; var returnThis = function () { return this; }; module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { createIteratorConstructor(IteratorConstructor, NAME, next); var getIterationMethod = function (KIND) { if (KIND === DEFAULT && defaultIterator) return defaultIterator; if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND]; switch (KIND) { case KEYS: return function keys() { return new IteratorConstructor(this, KIND); }; case VALUES: return function values() { return new IteratorConstructor(this, KIND); }; case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); }; } return function () { return new IteratorConstructor(this); }; }; var TO_STRING_TAG = NAME + ' Iterator'; var INCORRECT_VALUES_NAME = false; var IterablePrototype = Iterable.prototype; var nativeIterator = IterablePrototype[ITERATOR] || IterablePrototype['@@iterator'] || DEFAULT && IterablePrototype[DEFAULT]; var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator; var CurrentIteratorPrototype, methods, KEY; if (anyNativeIterator) { CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable())); if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) { if (setPrototypeOf) { setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') { createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis); } } setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true); if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis; } } if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) { INCORRECT_VALUES_NAME = true; defaultIterator = function values() { return nativeIterator.call(this); }; } if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) { createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator); } Iterators[NAME] = defaultIterator; if (DEFAULT) { methods = { values: getIterationMethod(VALUES), keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), entries: getIterationMethod(ENTRIES) }; if (FORCED) for (KEY in methods) { if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { redefine(IterablePrototype, KEY, methods[KEY]); } } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods); } return methods; }; /***/ }), /* 64 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var IteratorPrototype = __w_pdfjs_require__(65).IteratorPrototype; var create = __w_pdfjs_require__(58); var createPropertyDescriptor = __w_pdfjs_require__(15); var setToStringTag = __w_pdfjs_require__(69); var Iterators = __w_pdfjs_require__(62); var returnThis = function () { return this; }; module.exports = function (IteratorConstructor, NAME, next) { var TO_STRING_TAG = NAME + ' Iterator'; IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) }); setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); Iterators[TO_STRING_TAG] = returnThis; return IteratorConstructor; }; /***/ }), /* 65 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var fails = __w_pdfjs_require__(13); var getPrototypeOf = __w_pdfjs_require__(66); var createNonEnumerableProperty = __w_pdfjs_require__(25); var has = __w_pdfjs_require__(22); var wellKnownSymbol = __w_pdfjs_require__(55); var IS_PURE = __w_pdfjs_require__(36); var ITERATOR = wellKnownSymbol('iterator'); var BUGGY_SAFARI_ITERATORS = false; var returnThis = function () { return this; }; var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator; if ([].keys) { arrayIterator = [].keys(); if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true; else { PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator)); if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype; } } var NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () { var test = {}; return IteratorPrototype[ITERATOR].call(test) !== test; }); if (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {}; if ((!IS_PURE || NEW_ITERATOR_PROTOTYPE) && !has(IteratorPrototype, ITERATOR)) { createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis); } module.exports = { IteratorPrototype: IteratorPrototype, BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS }; /***/ }), /* 66 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var has = __w_pdfjs_require__(22); var toObject = __w_pdfjs_require__(67); var sharedKey = __w_pdfjs_require__(34); var CORRECT_PROTOTYPE_GETTER = __w_pdfjs_require__(68); var IE_PROTO = sharedKey('IE_PROTO'); var ObjectPrototype = Object.prototype; module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) { O = toObject(O); if (has(O, IE_PROTO)) return O[IE_PROTO]; if (typeof O.constructor == 'function' && O instanceof O.constructor) { return O.constructor.prototype; } return O instanceof Object ? ObjectPrototype : null; }; /***/ }), /* 67 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var requireObjectCoercible = __w_pdfjs_require__(19); module.exports = function (argument) { return Object(requireObjectCoercible(argument)); }; /***/ }), /* 68 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var fails = __w_pdfjs_require__(13); module.exports = !fails(function () { function F() { } F.prototype.constructor = null; return Object.getPrototypeOf(new F()) !== F.prototype; }); /***/ }), /* 69 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var defineProperty = __w_pdfjs_require__(26).f; var has = __w_pdfjs_require__(22); var wellKnownSymbol = __w_pdfjs_require__(55); var TO_STRING_TAG = wellKnownSymbol('toStringTag'); module.exports = function (it, TAG, STATIC) { if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) { defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG }); } }; /***/ }), /* 70 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var anObject = __w_pdfjs_require__(27); var aPossiblePrototype = __w_pdfjs_require__(71); module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () { var CORRECT_SETTER = false; var test = {}; var setter; try { setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set; setter.call(test, []); CORRECT_SETTER = test instanceof Array; } catch (error) { } return function setPrototypeOf(O, proto) { anObject(O); aPossiblePrototype(proto); if (CORRECT_SETTER) setter.call(O, proto); else O.__proto__ = proto; return O; }; }() : undefined); /***/ }), /* 71 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var isObject = __w_pdfjs_require__(21); module.exports = function (it) { if (!isObject(it) && it !== null) { throw TypeError("Can't set " + String(it) + ' as a prototype'); } return it; }; /***/ }), /* 72 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { var $ = __w_pdfjs_require__(9); var iterate = __w_pdfjs_require__(73); var createProperty = __w_pdfjs_require__(81); $({ target: 'Object', stat: true }, { fromEntries: function fromEntries(iterable) { var obj = {}; iterate(iterable, function (k, v) { createProperty(obj, k, v); }, { AS_ENTRIES: true }); return obj; } }); /***/ }), /* 73 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var anObject = __w_pdfjs_require__(27); var isArrayIteratorMethod = __w_pdfjs_require__(74); var toLength = __w_pdfjs_require__(46); var bind = __w_pdfjs_require__(75); var getIteratorMethod = __w_pdfjs_require__(77); var iteratorClose = __w_pdfjs_require__(80); var Result = function (stopped, result) { this.stopped = stopped; this.result = result; }; module.exports = function (iterable, unboundFunction, options) { var that = options && options.that; var AS_ENTRIES = !!(options && options.AS_ENTRIES); var IS_ITERATOR = !!(options && options.IS_ITERATOR); var INTERRUPTED = !!(options && options.INTERRUPTED); var fn = bind(unboundFunction, that, 1 + AS_ENTRIES + INTERRUPTED); var iterator, iterFn, index, length, result, next, step; var stop = function (condition) { if (iterator) iteratorClose(iterator); return new Result(true, condition); }; var callFn = function (value) { if (AS_ENTRIES) { anObject(value); return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]); } return INTERRUPTED ? fn(value, stop) : fn(value); }; if (IS_ITERATOR) { iterator = iterable; } else { iterFn = getIteratorMethod(iterable); if (typeof iterFn != 'function') throw TypeError('Target is not iterable'); if (isArrayIteratorMethod(iterFn)) { for (index = 0, length = toLength(iterable.length); length > index; index++) { result = callFn(iterable[index]); if (result && result instanceof Result) return result; } return new Result(false); } iterator = iterFn.call(iterable); } next = iterator.next; while (!(step = next.call(iterator)).done) { try { result = callFn(step.value); } catch (error) { iteratorClose(iterator); throw error; } if (typeof result == 'object' && result && result instanceof Result) return result; } return new Result(false); }; /***/ }), /* 74 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var wellKnownSymbol = __w_pdfjs_require__(55); var Iterators = __w_pdfjs_require__(62); var ITERATOR = wellKnownSymbol('iterator'); var ArrayPrototype = Array.prototype; module.exports = function (it) { return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); }; /***/ }), /* 75 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var aFunction = __w_pdfjs_require__(76); module.exports = function (fn, that, length) { aFunction(fn); if (that === undefined) return fn; switch (length) { case 0: return function () { return fn.call(that); }; case 1: return function (a) { return fn.call(that, a); }; case 2: return function (a, b) { return fn.call(that, a, b); }; case 3: return function (a, b, c) { return fn.call(that, a, b, c); }; } return function () { return fn.apply(that, arguments); }; }; /***/ }), /* 76 */ /***/ ((module) => { module.exports = function (it) { if (typeof it != 'function') { throw TypeError(String(it) + ' is not a function'); } return it; }; /***/ }), /* 77 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var classof = __w_pdfjs_require__(78); var Iterators = __w_pdfjs_require__(62); var wellKnownSymbol = __w_pdfjs_require__(55); var ITERATOR = wellKnownSymbol('iterator'); module.exports = function (it) { if (it != undefined) return it[ITERATOR] || it['@@iterator'] || Iterators[classof(it)]; }; /***/ }), /* 78 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var TO_STRING_TAG_SUPPORT = __w_pdfjs_require__(79); var classofRaw = __w_pdfjs_require__(18); var wellKnownSymbol = __w_pdfjs_require__(55); var TO_STRING_TAG = wellKnownSymbol('toStringTag'); var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments'; var tryGet = function (it, key) { try { return it[key]; } catch (error) { } }; module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { var O, tag, result; return it === undefined ? 'Undefined' : it === null ? 'Null' : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag : CORRECT_ARGUMENTS ? classofRaw(O) : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result; }; /***/ }), /* 79 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var wellKnownSymbol = __w_pdfjs_require__(55); var TO_STRING_TAG = wellKnownSymbol('toStringTag'); var test = {}; test[TO_STRING_TAG] = 'z'; module.exports = String(test) === '[object z]'; /***/ }), /* 80 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var anObject = __w_pdfjs_require__(27); module.exports = function (iterator) { var returnMethod = iterator['return']; if (returnMethod !== undefined) { return anObject(returnMethod.call(iterator)).value; } }; /***/ }), /* 81 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var toPrimitive = __w_pdfjs_require__(20); var definePropertyModule = __w_pdfjs_require__(26); var createPropertyDescriptor = __w_pdfjs_require__(15); module.exports = function (object, key, value) { var propertyKey = toPrimitive(key); if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value)); else object[propertyKey] = value; }; /***/ }), /* 82 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { __w_pdfjs_require__(83); __w_pdfjs_require__(84); __w_pdfjs_require__(86); __w_pdfjs_require__(104); __w_pdfjs_require__(105); __w_pdfjs_require__(106); __w_pdfjs_require__(107); __w_pdfjs_require__(109); var path = __w_pdfjs_require__(42); module.exports = path.Promise; /***/ }), /* 83 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var $ = __w_pdfjs_require__(9); var getPrototypeOf = __w_pdfjs_require__(66); var setPrototypeOf = __w_pdfjs_require__(70); var create = __w_pdfjs_require__(58); var createNonEnumerableProperty = __w_pdfjs_require__(25); var createPropertyDescriptor = __w_pdfjs_require__(15); var iterate = __w_pdfjs_require__(73); var $AggregateError = function AggregateError(errors, message) { var that = this; if (!(that instanceof $AggregateError)) return new $AggregateError(errors, message); if (setPrototypeOf) { that = setPrototypeOf(new Error(undefined), getPrototypeOf(that)); } if (message !== undefined) createNonEnumerableProperty(that, 'message', String(message)); var errorsArray = []; iterate(errors, errorsArray.push, { that: errorsArray }); createNonEnumerableProperty(that, 'errors', errorsArray); return that; }; $AggregateError.prototype = create(Error.prototype, { constructor: createPropertyDescriptor(5, $AggregateError), message: createPropertyDescriptor(5, ''), name: createPropertyDescriptor(5, 'AggregateError') }); $({ global: true }, { AggregateError: $AggregateError }); /***/ }), /* 84 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { var TO_STRING_TAG_SUPPORT = __w_pdfjs_require__(79); var redefine = __w_pdfjs_require__(28); var toString = __w_pdfjs_require__(85); if (!TO_STRING_TAG_SUPPORT) { redefine(Object.prototype, 'toString', toString, { unsafe: true }); } /***/ }), /* 85 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var TO_STRING_TAG_SUPPORT = __w_pdfjs_require__(79); var classof = __w_pdfjs_require__(78); module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { return '[object ' + classof(this) + ']'; }; /***/ }), /* 86 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var $ = __w_pdfjs_require__(9); var IS_PURE = __w_pdfjs_require__(36); var global = __w_pdfjs_require__(10); var getBuiltIn = __w_pdfjs_require__(41); var NativePromise = __w_pdfjs_require__(87); var redefine = __w_pdfjs_require__(28); var redefineAll = __w_pdfjs_require__(88); var setToStringTag = __w_pdfjs_require__(69); var setSpecies = __w_pdfjs_require__(89); var isObject = __w_pdfjs_require__(21); var aFunction = __w_pdfjs_require__(76); var anInstance = __w_pdfjs_require__(90); var inspectSource = __w_pdfjs_require__(30); var iterate = __w_pdfjs_require__(73); var checkCorrectnessOfIteration = __w_pdfjs_require__(91); var speciesConstructor = __w_pdfjs_require__(92); var task = __w_pdfjs_require__(93).set; var microtask = __w_pdfjs_require__(97); var promiseResolve = __w_pdfjs_require__(99); var hostReportErrors = __w_pdfjs_require__(101); var newPromiseCapabilityModule = __w_pdfjs_require__(100); var perform = __w_pdfjs_require__(102); var InternalStateModule = __w_pdfjs_require__(32); var isForced = __w_pdfjs_require__(51); var wellKnownSymbol = __w_pdfjs_require__(55); var IS_NODE = __w_pdfjs_require__(96); var V8_VERSION = __w_pdfjs_require__(103); var SPECIES = wellKnownSymbol('species'); var PROMISE = 'Promise'; var getInternalState = InternalStateModule.get; var setInternalState = InternalStateModule.set; var getInternalPromiseState = InternalStateModule.getterFor(PROMISE); var PromiseConstructor = NativePromise; var TypeError = global.TypeError; var document = global.document; var process = global.process; var $fetch = getBuiltIn('fetch'); var newPromiseCapability = newPromiseCapabilityModule.f; var newGenericPromiseCapability = newPromiseCapability; var DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent); var NATIVE_REJECTION_EVENT = typeof PromiseRejectionEvent == 'function'; var UNHANDLED_REJECTION = 'unhandledrejection'; var REJECTION_HANDLED = 'rejectionhandled'; var PENDING = 0; var FULFILLED = 1; var REJECTED = 2; var HANDLED = 1; var UNHANDLED = 2; var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen; var FORCED = isForced(PROMISE, function () { var GLOBAL_CORE_JS_PROMISE = inspectSource(PromiseConstructor) !== String(PromiseConstructor); if (!GLOBAL_CORE_JS_PROMISE) { if (V8_VERSION === 66) return true; if (!IS_NODE && !NATIVE_REJECTION_EVENT) return true; } if (IS_PURE && !PromiseConstructor.prototype['finally']) return true; if (V8_VERSION >= 51 && /native code/.test(PromiseConstructor)) return false; var promise = PromiseConstructor.resolve(1); var FakePromise = function (exec) { exec(function () { }, function () { }); }; var constructor = promise.constructor = {}; constructor[SPECIES] = FakePromise; return !(promise.then(function () { }) instanceof FakePromise); }); var INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) { PromiseConstructor.all(iterable)['catch'](function () { }); }); var isThenable = function (it) { var then; return isObject(it) && typeof (then = it.then) == 'function' ? then : false; }; var notify = function (state, isReject) { if (state.notified) return; state.notified = true; var chain = state.reactions; microtask(function () { var value = state.value; var ok = state.state == FULFILLED; var index = 0; while (chain.length > index) { var reaction = chain[index++]; var handler = ok ? reaction.ok : reaction.fail; var resolve = reaction.resolve; var reject = reaction.reject; var domain = reaction.domain; var result, then, exited; try { if (handler) { if (!ok) { if (state.rejection === UNHANDLED) onHandleUnhandled(state); state.rejection = HANDLED; } if (handler === true) result = value; else { if (domain) domain.enter(); result = handler(value); if (domain) { domain.exit(); exited = true; } } if (result === reaction.promise) { reject(TypeError('Promise-chain cycle')); } else if (then = isThenable(result)) { then.call(result, resolve, reject); } else resolve(result); } else reject(value); } catch (error) { if (domain && !exited) domain.exit(); reject(error); } } state.reactions = []; state.notified = false; if (isReject && !state.rejection) onUnhandled(state); }); }; var dispatchEvent = function (name, promise, reason) { var event, handler; if (DISPATCH_EVENT) { event = document.createEvent('Event'); event.promise = promise; event.reason = reason; event.initEvent(name, false, true); global.dispatchEvent(event); } else event = { promise: promise, reason: reason }; if (!NATIVE_REJECTION_EVENT && (handler = global['on' + name])) handler(event); else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason); }; var onUnhandled = function (state) { task.call(global, function () { var promise = state.facade; var value = state.value; var IS_UNHANDLED = isUnhandled(state); var result; if (IS_UNHANDLED) { result = perform(function () { if (IS_NODE) { process.emit('unhandledRejection', value, promise); } else dispatchEvent(UNHANDLED_REJECTION, promise, value); }); state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED; if (result.error) throw result.value; } }); }; var isUnhandled = function (state) { return state.rejection !== HANDLED && !state.parent; }; var onHandleUnhandled = function (state) { task.call(global, function () { var promise = state.facade; if (IS_NODE) { process.emit('rejectionHandled', promise); } else dispatchEvent(REJECTION_HANDLED, promise, state.value); }); }; var bind = function (fn, state, unwrap) { return function (value) { fn(state, value, unwrap); }; }; var internalReject = function (state, value, unwrap) { if (state.done) return; state.done = true; if (unwrap) state = unwrap; state.value = value; state.state = REJECTED; notify(state, true); }; var internalResolve = function (state, value, unwrap) { if (state.done) return; state.done = true; if (unwrap) state = unwrap; try { if (state.facade === value) throw TypeError("Promise can't be resolved itself"); var then = isThenable(value); if (then) { microtask(function () { var wrapper = { done: false }; try { then.call(value, bind(internalResolve, wrapper, state), bind(internalReject, wrapper, state)); } catch (error) { internalReject(wrapper, error, state); } }); } else { state.value = value; state.state = FULFILLED; notify(state, false); } } catch (error) { internalReject({ done: false }, error, state); } }; if (FORCED) { PromiseConstructor = function Promise(executor) { anInstance(this, PromiseConstructor, PROMISE); aFunction(executor); Internal.call(this); var state = getInternalState(this); try { executor(bind(internalResolve, state), bind(internalReject, state)); } catch (error) { internalReject(state, error); } }; Internal = function Promise(executor) { setInternalState(this, { type: PROMISE, done: false, notified: false, parent: false, reactions: [], rejection: false, state: PENDING, value: undefined }); }; Internal.prototype = redefineAll(PromiseConstructor.prototype, { then: function then(onFulfilled, onRejected) { var state = getInternalPromiseState(this); var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor)); reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true; reaction.fail = typeof onRejected == 'function' && onRejected; reaction.domain = IS_NODE ? process.domain : undefined; state.parent = true; state.reactions.push(reaction); if (state.state != PENDING) notify(state, false); return reaction.promise; }, 'catch': function (onRejected) { return this.then(undefined, onRejected); } }); OwnPromiseCapability = function () { var promise = new Internal(); var state = getInternalState(promise); this.promise = promise; this.resolve = bind(internalResolve, state); this.reject = bind(internalReject, state); }; newPromiseCapabilityModule.f = newPromiseCapability = function (C) { return C === PromiseConstructor || C === PromiseWrapper ? new OwnPromiseCapability(C) : newGenericPromiseCapability(C); }; if (!IS_PURE && typeof NativePromise == 'function') { nativeThen = NativePromise.prototype.then; redefine(NativePromise.prototype, 'then', function then(onFulfilled, onRejected) { var that = this; return new PromiseConstructor(function (resolve, reject) { nativeThen.call(that, resolve, reject); }).then(onFulfilled, onRejected); }, { unsafe: true }); if (typeof $fetch == 'function') $({ global: true, enumerable: true, forced: true }, { fetch: function fetch(input) { return promiseResolve(PromiseConstructor, $fetch.apply(global, arguments)); } }); } } $({ global: true, wrap: true, forced: FORCED }, { Promise: PromiseConstructor }); setToStringTag(PromiseConstructor, PROMISE, false, true); setSpecies(PROMISE); PromiseWrapper = getBuiltIn(PROMISE); $({ target: PROMISE, stat: true, forced: FORCED }, { reject: function reject(r) { var capability = newPromiseCapability(this); capability.reject.call(undefined, r); return capability.promise; } }); $({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, { resolve: function resolve(x) { return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x); } }); $({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, { all: function all(iterable) { var C = this; var capability = newPromiseCapability(C); var resolve = capability.resolve; var reject = capability.reject; var result = perform(function () { var $promiseResolve = aFunction(C.resolve); var values = []; var counter = 0; var remaining = 1; iterate(iterable, function (promise) { var index = counter++; var alreadyCalled = false; values.push(undefined); remaining++; $promiseResolve.call(C, promise).then(function (value) { if (alreadyCalled) return; alreadyCalled = true; values[index] = value; --remaining || resolve(values); }, reject); }); --remaining || resolve(values); }); if (result.error) reject(result.value); return capability.promise; }, race: function race(iterable) { var C = this; var capability = newPromiseCapability(C); var reject = capability.reject; var result = perform(function () { var $promiseResolve = aFunction(C.resolve); iterate(iterable, function (promise) { $promiseResolve.call(C, promise).then(capability.resolve, reject); }); }); if (result.error) reject(result.value); return capability.promise; } }); /***/ }), /* 87 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); module.exports = global.Promise; /***/ }), /* 88 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var redefine = __w_pdfjs_require__(28); module.exports = function (target, src, options) { for (var key in src) redefine(target, key, src[key], options); return target; }; /***/ }), /* 89 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var getBuiltIn = __w_pdfjs_require__(41); var definePropertyModule = __w_pdfjs_require__(26); var wellKnownSymbol = __w_pdfjs_require__(55); var DESCRIPTORS = __w_pdfjs_require__(12); var SPECIES = wellKnownSymbol('species'); module.exports = function (CONSTRUCTOR_NAME) { var Constructor = getBuiltIn(CONSTRUCTOR_NAME); var defineProperty = definePropertyModule.f; if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) { defineProperty(Constructor, SPECIES, { configurable: true, get: function () { return this; } }); } }; /***/ }), /* 90 */ /***/ ((module) => { module.exports = function (it, Constructor, name) { if (!(it instanceof Constructor)) { throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation'); } return it; }; /***/ }), /* 91 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var wellKnownSymbol = __w_pdfjs_require__(55); var ITERATOR = wellKnownSymbol('iterator'); var SAFE_CLOSING = false; try { var called = 0; var iteratorWithReturn = { next: function () { return { done: !!called++ }; }, 'return': function () { SAFE_CLOSING = true; } }; iteratorWithReturn[ITERATOR] = function () { return this; }; Array.from(iteratorWithReturn, function () { throw 2; }); } catch (error) { } module.exports = function (exec, SKIP_CLOSING) { if (!SKIP_CLOSING && !SAFE_CLOSING) return false; var ITERATION_SUPPORT = false; try { var object = {}; object[ITERATOR] = function () { return { next: function () { return { done: ITERATION_SUPPORT = true }; } }; }; exec(object); } catch (error) { } return ITERATION_SUPPORT; }; /***/ }), /* 92 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var anObject = __w_pdfjs_require__(27); var aFunction = __w_pdfjs_require__(76); var wellKnownSymbol = __w_pdfjs_require__(55); var SPECIES = wellKnownSymbol('species'); module.exports = function (O, defaultConstructor) { var C = anObject(O).constructor; var S; return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S); }; /***/ }), /* 93 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); var fails = __w_pdfjs_require__(13); var bind = __w_pdfjs_require__(75); var html = __w_pdfjs_require__(61); var createElement = __w_pdfjs_require__(24); var IS_IOS = __w_pdfjs_require__(94); var IS_NODE = __w_pdfjs_require__(96); var location = global.location; var set = global.setImmediate; var clear = global.clearImmediate; var process = global.process; var MessageChannel = global.MessageChannel; var Dispatch = global.Dispatch; var counter = 0; var queue = {}; var ONREADYSTATECHANGE = 'onreadystatechange'; var defer, channel, port; var run = function (id) { if (queue.hasOwnProperty(id)) { var fn = queue[id]; delete queue[id]; fn(); } }; var runner = function (id) { return function () { run(id); }; }; var listener = function (event) { run(event.data); }; var post = function (id) { global.postMessage(id + '', location.protocol + '//' + location.host); }; if (!set || !clear) { set = function setImmediate(fn) { var args = []; var i = 1; while (arguments.length > i) args.push(arguments[i++]); queue[++counter] = function () { (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args); }; defer(counter); return counter; }; clear = function clearImmediate(id) { delete queue[id]; }; if (IS_NODE) { defer = function (id) { process.nextTick(runner(id)); }; } else if (Dispatch && Dispatch.now) { defer = function (id) { Dispatch.now(runner(id)); }; } else if (MessageChannel && !IS_IOS) { channel = new MessageChannel(); port = channel.port2; channel.port1.onmessage = listener; defer = bind(port.postMessage, port, 1); } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts && location && location.protocol !== 'file:' && !fails(post)) { defer = post; global.addEventListener('message', listener, false); } else if (ONREADYSTATECHANGE in createElement('script')) { defer = function (id) { html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () { html.removeChild(this); run(id); }; }; } else { defer = function (id) { setTimeout(runner(id), 0); }; } } module.exports = { set: set, clear: clear }; /***/ }), /* 94 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var userAgent = __w_pdfjs_require__(95); module.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent); /***/ }), /* 95 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var getBuiltIn = __w_pdfjs_require__(41); module.exports = getBuiltIn('navigator', 'userAgent') || ''; /***/ }), /* 96 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var classof = __w_pdfjs_require__(18); var global = __w_pdfjs_require__(10); module.exports = classof(global.process) == 'process'; /***/ }), /* 97 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); var getOwnPropertyDescriptor = __w_pdfjs_require__(11).f; var macrotask = __w_pdfjs_require__(93).set; var IS_IOS = __w_pdfjs_require__(94); var IS_WEBOS_WEBKIT = __w_pdfjs_require__(98); var IS_NODE = __w_pdfjs_require__(96); var MutationObserver = global.MutationObserver || global.WebKitMutationObserver; var document = global.document; var process = global.process; var Promise = global.Promise; var queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask'); var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value; var flush, head, last, notify, toggle, node, promise, then; if (!queueMicrotask) { flush = function () { var parent, fn; if (IS_NODE && (parent = process.domain)) parent.exit(); while (head) { fn = head.fn; head = head.next; try { fn(); } catch (error) { if (head) notify(); else last = undefined; throw error; } } last = undefined; if (parent) parent.enter(); }; if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) { toggle = true; node = document.createTextNode(''); new MutationObserver(flush).observe(node, { characterData: true }); notify = function () { node.data = toggle = !toggle; }; } else if (Promise && Promise.resolve) { promise = Promise.resolve(undefined); then = promise.then; notify = function () { then.call(promise, flush); }; } else if (IS_NODE) { notify = function () { process.nextTick(flush); }; } else { notify = function () { macrotask.call(global, flush); }; } } module.exports = queueMicrotask || function (fn) { var task = { fn: fn, next: undefined }; if (last) last.next = task; if (!head) { head = task; notify(); } last = task; }; /***/ }), /* 98 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var userAgent = __w_pdfjs_require__(95); module.exports = /web0s(?!.*chrome)/i.test(userAgent); /***/ }), /* 99 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var anObject = __w_pdfjs_require__(27); var isObject = __w_pdfjs_require__(21); var newPromiseCapability = __w_pdfjs_require__(100); module.exports = function (C, x) { anObject(C); if (isObject(x) && x.constructor === C) return x; var promiseCapability = newPromiseCapability.f(C); var resolve = promiseCapability.resolve; resolve(x); return promiseCapability.promise; }; /***/ }), /* 100 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var aFunction = __w_pdfjs_require__(76); var PromiseCapability = function (C) { var resolve, reject; this.promise = new C(function ($$resolve, $$reject) { if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); resolve = $$resolve; reject = $$reject; }); this.resolve = aFunction(resolve); this.reject = aFunction(reject); }; module.exports.f = function (C) { return new PromiseCapability(C); }; /***/ }), /* 101 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); module.exports = function (a, b) { var console = global.console; if (console && console.error) { arguments.length === 1 ? console.error(a) : console.error(a, b); } }; /***/ }), /* 102 */ /***/ ((module) => { module.exports = function (exec) { try { return { error: false, value: exec() }; } catch (error) { return { error: true, value: error }; } }; /***/ }), /* 103 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); var userAgent = __w_pdfjs_require__(95); var process = global.process; var versions = process && process.versions; var v8 = versions && versions.v8; var match, version; if (v8) { match = v8.split('.'); version = match[0] + match[1]; } else if (userAgent) { match = userAgent.match(/Edge\/(\d+)/); if (!match || match[1] >= 74) { match = userAgent.match(/Chrome\/(\d+)/); if (match) version = match[1]; } } module.exports = version && +version; /***/ }), /* 104 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var $ = __w_pdfjs_require__(9); var aFunction = __w_pdfjs_require__(76); var newPromiseCapabilityModule = __w_pdfjs_require__(100); var perform = __w_pdfjs_require__(102); var iterate = __w_pdfjs_require__(73); $({ target: 'Promise', stat: true }, { allSettled: function allSettled(iterable) { var C = this; var capability = newPromiseCapabilityModule.f(C); var resolve = capability.resolve; var reject = capability.reject; var result = perform(function () { var promiseResolve = aFunction(C.resolve); var values = []; var counter = 0; var remaining = 1; iterate(iterable, function (promise) { var index = counter++; var alreadyCalled = false; values.push(undefined); remaining++; promiseResolve.call(C, promise).then(function (value) { if (alreadyCalled) return; alreadyCalled = true; values[index] = { status: 'fulfilled', value: value }; --remaining || resolve(values); }, function (error) { if (alreadyCalled) return; alreadyCalled = true; values[index] = { status: 'rejected', reason: error }; --remaining || resolve(values); }); }); --remaining || resolve(values); }); if (result.error) reject(result.value); return capability.promise; } }); /***/ }), /* 105 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var $ = __w_pdfjs_require__(9); var aFunction = __w_pdfjs_require__(76); var getBuiltIn = __w_pdfjs_require__(41); var newPromiseCapabilityModule = __w_pdfjs_require__(100); var perform = __w_pdfjs_require__(102); var iterate = __w_pdfjs_require__(73); var PROMISE_ANY_ERROR = 'No one promise resolved'; $({ target: 'Promise', stat: true }, { any: function any(iterable) { var C = this; var capability = newPromiseCapabilityModule.f(C); var resolve = capability.resolve; var reject = capability.reject; var result = perform(function () { var promiseResolve = aFunction(C.resolve); var errors = []; var counter = 0; var remaining = 1; var alreadyResolved = false; iterate(iterable, function (promise) { var index = counter++; var alreadyRejected = false; errors.push(undefined); remaining++; promiseResolve.call(C, promise).then(function (value) { if (alreadyRejected || alreadyResolved) return; alreadyResolved = true; resolve(value); }, function (error) { if (alreadyRejected || alreadyResolved) return; alreadyRejected = true; errors[index] = error; --remaining || reject(new (getBuiltIn('AggregateError'))(errors, PROMISE_ANY_ERROR)); }); }); --remaining || reject(new (getBuiltIn('AggregateError'))(errors, PROMISE_ANY_ERROR)); }); if (result.error) reject(result.value); return capability.promise; } }); /***/ }), /* 106 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var $ = __w_pdfjs_require__(9); var IS_PURE = __w_pdfjs_require__(36); var NativePromise = __w_pdfjs_require__(87); var fails = __w_pdfjs_require__(13); var getBuiltIn = __w_pdfjs_require__(41); var speciesConstructor = __w_pdfjs_require__(92); var promiseResolve = __w_pdfjs_require__(99); var redefine = __w_pdfjs_require__(28); var NON_GENERIC = !!NativePromise && fails(function () { NativePromise.prototype['finally'].call({ then: function () { } }, function () { }); }); $({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, { 'finally': function (onFinally) { var C = speciesConstructor(this, getBuiltIn('Promise')); var isFunction = typeof onFinally == 'function'; return this.then(isFunction ? function (x) { return promiseResolve(C, onFinally()).then(function () { return x; }); } : onFinally, isFunction ? function (e) { return promiseResolve(C, onFinally()).then(function () { throw e; }); } : onFinally); } }); if (!IS_PURE && typeof NativePromise == 'function' && !NativePromise.prototype['finally']) { redefine(NativePromise.prototype, 'finally', getBuiltIn('Promise').prototype['finally']); } /***/ }), /* 107 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var charAt = __w_pdfjs_require__(108).charAt; var InternalStateModule = __w_pdfjs_require__(32); var defineIterator = __w_pdfjs_require__(63); var STRING_ITERATOR = 'String Iterator'; var setInternalState = InternalStateModule.set; var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR); defineIterator(String, 'String', function (iterated) { setInternalState(this, { type: STRING_ITERATOR, string: String(iterated), index: 0 }); }, function next() { var state = getInternalState(this); var string = state.string; var index = state.index; var point; if (index >= string.length) return { value: undefined, done: true }; point = charAt(string, index); state.index += point.length; return { value: point, done: false }; }); /***/ }), /* 108 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var toInteger = __w_pdfjs_require__(47); var requireObjectCoercible = __w_pdfjs_require__(19); var createMethod = function (CONVERT_TO_STRING) { return function ($this, pos) { var S = String(requireObjectCoercible($this)); var position = toInteger(pos); var size = S.length; var first, second; if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; first = S.charCodeAt(position); return first < 0xD800 || first > 0xDBFF || position + 1 === size || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF ? CONVERT_TO_STRING ? S.charAt(position) : first : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; }; }; module.exports = { codeAt: createMethod(false), charAt: createMethod(true) }; /***/ }), /* 109 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); var DOMIterables = __w_pdfjs_require__(110); var ArrayIteratorMethods = __w_pdfjs_require__(53); var createNonEnumerableProperty = __w_pdfjs_require__(25); var wellKnownSymbol = __w_pdfjs_require__(55); var ITERATOR = wellKnownSymbol('iterator'); var TO_STRING_TAG = wellKnownSymbol('toStringTag'); var ArrayValues = ArrayIteratorMethods.values; for (var COLLECTION_NAME in DOMIterables) { var Collection = global[COLLECTION_NAME]; var CollectionPrototype = Collection && Collection.prototype; if (CollectionPrototype) { if (CollectionPrototype[ITERATOR] !== ArrayValues) try { createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues); } catch (error) { CollectionPrototype[ITERATOR] = ArrayValues; } if (!CollectionPrototype[TO_STRING_TAG]) { createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME); } if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) { if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try { createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]); } catch (error) { CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME]; } } } } /***/ }), /* 110 */ /***/ ((module) => { module.exports = { CSSRuleList: 0, CSSStyleDeclaration: 0, CSSValueList: 0, ClientRectList: 0, DOMRectList: 0, DOMStringList: 0, DOMTokenList: 1, DataTransferItemList: 0, FileList: 0, HTMLAllCollection: 0, HTMLCollection: 0, HTMLFormElement: 0, HTMLSelectElement: 0, MediaList: 0, MimeTypeArray: 0, NamedNodeMap: 0, NodeList: 1, PaintRequestList: 0, Plugin: 0, PluginArray: 0, SVGLengthList: 0, SVGNumberList: 0, SVGPathSegList: 0, SVGPointList: 0, SVGStringList: 0, SVGTransformList: 0, SourceBufferList: 0, StyleSheetList: 0, TextTrackCueList: 0, TextTrackList: 0, TouchList: 0 }; /***/ }), /* 111 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { __w_pdfjs_require__(112); __w_pdfjs_require__(120); __w_pdfjs_require__(118); var path = __w_pdfjs_require__(42); module.exports = path.URL; /***/ }), /* 112 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; __w_pdfjs_require__(107); var $ = __w_pdfjs_require__(9); var DESCRIPTORS = __w_pdfjs_require__(12); var USE_NATIVE_URL = __w_pdfjs_require__(113); var global = __w_pdfjs_require__(10); var defineProperties = __w_pdfjs_require__(59); var redefine = __w_pdfjs_require__(28); var anInstance = __w_pdfjs_require__(90); var has = __w_pdfjs_require__(22); var assign = __w_pdfjs_require__(114); var arrayFrom = __w_pdfjs_require__(115); var codeAt = __w_pdfjs_require__(108).codeAt; var toASCII = __w_pdfjs_require__(117); var setToStringTag = __w_pdfjs_require__(69); var URLSearchParamsModule = __w_pdfjs_require__(118); var InternalStateModule = __w_pdfjs_require__(32); var NativeURL = global.URL; var URLSearchParams = URLSearchParamsModule.URLSearchParams; var getInternalSearchParamsState = URLSearchParamsModule.getState; var setInternalState = InternalStateModule.set; var getInternalURLState = InternalStateModule.getterFor('URL'); var floor = Math.floor; var pow = Math.pow; var INVALID_AUTHORITY = 'Invalid authority'; var INVALID_SCHEME = 'Invalid scheme'; var INVALID_HOST = 'Invalid host'; var INVALID_PORT = 'Invalid port'; var ALPHA = /[A-Za-z]/; var ALPHANUMERIC = /[\d+-.A-Za-z]/; var DIGIT = /\d/; var HEX_START = /^(0x|0X)/; var OCT = /^[0-7]+$/; var DEC = /^\d+$/; var HEX = /^[\dA-Fa-f]+$/; var FORBIDDEN_HOST_CODE_POINT = /[\u0000\u0009\u000A\u000D #%/:?@[\\]]/; var FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\u0000\u0009\u000A\u000D #/:?@[\\]]/; var LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\u0000-\u001F ]+|[\u0000-\u001F ]+$/g; var TAB_AND_NEW_LINE = /[\u0009\u000A\u000D]/g; var EOF; var parseHost = function (url, input) { var result, codePoints, index; if (input.charAt(0) == '[') { if (input.charAt(input.length - 1) != ']') return INVALID_HOST; result = parseIPv6(input.slice(1, -1)); if (!result) return INVALID_HOST; url.host = result; } else if (!isSpecial(url)) { if (FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT.test(input)) return INVALID_HOST; result = ''; codePoints = arrayFrom(input); for (index = 0; index < codePoints.length; index++) { result += percentEncode(codePoints[index], C0ControlPercentEncodeSet); } url.host = result; } else { input = toASCII(input); if (FORBIDDEN_HOST_CODE_POINT.test(input)) return INVALID_HOST; result = parseIPv4(input); if (result === null) return INVALID_HOST; url.host = result; } }; var parseIPv4 = function (input) { var parts = input.split('.'); var partsLength, numbers, index, part, radix, number, ipv4; if (parts.length && parts[parts.length - 1] == '') { parts.pop(); } partsLength = parts.length; if (partsLength > 4) return input; numbers = []; for (index = 0; index < partsLength; index++) { part = parts[index]; if (part == '') return input; radix = 10; if (part.length > 1 && part.charAt(0) == '0') { radix = HEX_START.test(part) ? 16 : 8; part = part.slice(radix == 8 ? 1 : 2); } if (part === '') { number = 0; } else { if (!(radix == 10 ? DEC : radix == 8 ? OCT : HEX).test(part)) return input; number = parseInt(part, radix); } numbers.push(number); } for (index = 0; index < partsLength; index++) { number = numbers[index]; if (index == partsLength - 1) { if (number >= pow(256, 5 - partsLength)) return null; } else if (number > 255) return null; } ipv4 = numbers.pop(); for (index = 0; index < numbers.length; index++) { ipv4 += numbers[index] * pow(256, 3 - index); } return ipv4; }; var parseIPv6 = function (input) { var address = [ 0, 0, 0, 0, 0, 0, 0, 0 ]; var pieceIndex = 0; var compress = null; var pointer = 0; var value, length, numbersSeen, ipv4Piece, number, swaps, swap; var char = function () { return input.charAt(pointer); }; if (char() == ':') { if (input.charAt(1) != ':') return; pointer += 2; pieceIndex++; compress = pieceIndex; } while (char()) { if (pieceIndex == 8) return; if (char() == ':') { if (compress !== null) return; pointer++; pieceIndex++; compress = pieceIndex; continue; } value = length = 0; while (length < 4 && HEX.test(char())) { value = value * 16 + parseInt(char(), 16); pointer++; length++; } if (char() == '.') { if (length == 0) return; pointer -= length; if (pieceIndex > 6) return; numbersSeen = 0; while (char()) { ipv4Piece = null; if (numbersSeen > 0) { if (char() == '.' && numbersSeen < 4) pointer++; else return; } if (!DIGIT.test(char())) return; while (DIGIT.test(char())) { number = parseInt(char(), 10); if (ipv4Piece === null) ipv4Piece = number; else if (ipv4Piece == 0) return; else ipv4Piece = ipv4Piece * 10 + number; if (ipv4Piece > 255) return; pointer++; } address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece; numbersSeen++; if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++; } if (numbersSeen != 4) return; break; } else if (char() == ':') { pointer++; if (!char()) return; } else if (char()) return; address[pieceIndex++] = value; } if (compress !== null) { swaps = pieceIndex - compress; pieceIndex = 7; while (pieceIndex != 0 && swaps > 0) { swap = address[pieceIndex]; address[pieceIndex--] = address[compress + swaps - 1]; address[compress + --swaps] = swap; } } else if (pieceIndex != 8) return; return address; }; var findLongestZeroSequence = function (ipv6) { var maxIndex = null; var maxLength = 1; var currStart = null; var currLength = 0; var index = 0; for (; index < 8; index++) { if (ipv6[index] !== 0) { if (currLength > maxLength) { maxIndex = currStart; maxLength = currLength; } currStart = null; currLength = 0; } else { if (currStart === null) currStart = index; ++currLength; } } if (currLength > maxLength) { maxIndex = currStart; maxLength = currLength; } return maxIndex; }; var serializeHost = function (host) { var result, index, compress, ignore0; if (typeof host == 'number') { result = []; for (index = 0; index < 4; index++) { result.unshift(host % 256); host = floor(host / 256); } return result.join('.'); } else if (typeof host == 'object') { result = ''; compress = findLongestZeroSequence(host); for (index = 0; index < 8; index++) { if (ignore0 && host[index] === 0) continue; if (ignore0) ignore0 = false; if (compress === index) { result += index ? ':' : '::'; ignore0 = true; } else { result += host[index].toString(16); if (index < 7) result += ':'; } } return '[' + result + ']'; } return host; }; var C0ControlPercentEncodeSet = {}; var fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, { ' ': 1, '"': 1, '<': 1, '>': 1, '`': 1 }); var pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, { '#': 1, '?': 1, '{': 1, '}': 1 }); var userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, { '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\': 1, ']': 1, '^': 1, '|': 1 }); var percentEncode = function (char, set) { var code = codeAt(char, 0); return code > 0x20 && code < 0x7F && !has(set, char) ? char : encodeURIComponent(char); }; var specialSchemes = { ftp: 21, file: null, http: 80, https: 443, ws: 80, wss: 443 }; var isSpecial = function (url) { return has(specialSchemes, url.scheme); }; var includesCredentials = function (url) { return url.username != '' || url.password != ''; }; var cannotHaveUsernamePasswordPort = function (url) { return !url.host || url.cannotBeABaseURL || url.scheme == 'file'; }; var isWindowsDriveLetter = function (string, normalized) { var second; return string.length == 2 && ALPHA.test(string.charAt(0)) && ((second = string.charAt(1)) == ':' || !normalized && second == '|'); }; var startsWithWindowsDriveLetter = function (string) { var third; return string.length > 1 && isWindowsDriveLetter(string.slice(0, 2)) && (string.length == 2 || ((third = string.charAt(2)) === '/' || third === '\\' || third === '?' || third === '#')); }; var shortenURLsPath = function (url) { var path = url.path; var pathSize = path.length; if (pathSize && (url.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) { path.pop(); } }; var isSingleDot = function (segment) { return segment === '.' || segment.toLowerCase() === '%2e'; }; var isDoubleDot = function (segment) { segment = segment.toLowerCase(); return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e'; }; var SCHEME_START = {}; var SCHEME = {}; var NO_SCHEME = {}; var SPECIAL_RELATIVE_OR_AUTHORITY = {}; var PATH_OR_AUTHORITY = {}; var RELATIVE = {}; var RELATIVE_SLASH = {}; var SPECIAL_AUTHORITY_SLASHES = {}; var SPECIAL_AUTHORITY_IGNORE_SLASHES = {}; var AUTHORITY = {}; var HOST = {}; var HOSTNAME = {}; var PORT = {}; var FILE = {}; var FILE_SLASH = {}; var FILE_HOST = {}; var PATH_START = {}; var PATH = {}; var CANNOT_BE_A_BASE_URL_PATH = {}; var QUERY = {}; var FRAGMENT = {}; var parseURL = function (url, input, stateOverride, base) { var state = stateOverride || SCHEME_START; var pointer = 0; var buffer = ''; var seenAt = false; var seenBracket = false; var seenPasswordToken = false; var codePoints, char, bufferCodePoints, failure; if (!stateOverride) { url.scheme = ''; url.username = ''; url.password = ''; url.host = null; url.port = null; url.path = []; url.query = null; url.fragment = null; url.cannotBeABaseURL = false; input = input.replace(LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, ''); } input = input.replace(TAB_AND_NEW_LINE, ''); codePoints = arrayFrom(input); while (pointer <= codePoints.length) { char = codePoints[pointer]; switch (state) { case SCHEME_START: if (char && ALPHA.test(char)) { buffer += char.toLowerCase(); state = SCHEME; } else if (!stateOverride) { state = NO_SCHEME; continue; } else return INVALID_SCHEME; break; case SCHEME: if (char && (ALPHANUMERIC.test(char) || char == '+' || char == '-' || char == '.')) { buffer += char.toLowerCase(); } else if (char == ':') { if (stateOverride && (isSpecial(url) != has(specialSchemes, buffer) || buffer == 'file' && (includesCredentials(url) || url.port !== null) || url.scheme == 'file' && !url.host)) return; url.scheme = buffer; if (stateOverride) { if (isSpecial(url) && specialSchemes[url.scheme] == url.port) url.port = null; return; } buffer = ''; if (url.scheme == 'file') { state = FILE; } else if (isSpecial(url) && base && base.scheme == url.scheme) { state = SPECIAL_RELATIVE_OR_AUTHORITY; } else if (isSpecial(url)) { state = SPECIAL_AUTHORITY_SLASHES; } else if (codePoints[pointer + 1] == '/') { state = PATH_OR_AUTHORITY; pointer++; } else { url.cannotBeABaseURL = true; url.path.push(''); state = CANNOT_BE_A_BASE_URL_PATH; } } else if (!stateOverride) { buffer = ''; state = NO_SCHEME; pointer = 0; continue; } else return INVALID_SCHEME; break; case NO_SCHEME: if (!base || base.cannotBeABaseURL && char != '#') return INVALID_SCHEME; if (base.cannotBeABaseURL && char == '#') { url.scheme = base.scheme; url.path = base.path.slice(); url.query = base.query; url.fragment = ''; url.cannotBeABaseURL = true; state = FRAGMENT; break; } state = base.scheme == 'file' ? FILE : RELATIVE; continue; case SPECIAL_RELATIVE_OR_AUTHORITY: if (char == '/' && codePoints[pointer + 1] == '/') { state = SPECIAL_AUTHORITY_IGNORE_SLASHES; pointer++; } else { state = RELATIVE; continue; } break; case PATH_OR_AUTHORITY: if (char == '/') { state = AUTHORITY; break; } else { state = PATH; continue; } case RELATIVE: url.scheme = base.scheme; if (char == EOF) { url.username = base.username; url.password = base.password; url.host = base.host; url.port = base.port; url.path = base.path.slice(); url.query = base.query; } else if (char == '/' || char == '\\' && isSpecial(url)) { state = RELATIVE_SLASH; } else if (char == '?') { url.username = base.username; url.password = base.password; url.host = base.host; url.port = base.port; url.path = base.path.slice(); url.query = ''; state = QUERY; } else if (char == '#') { url.username = base.username; url.password = base.password; url.host = base.host; url.port = base.port; url.path = base.path.slice(); url.query = base.query; url.fragment = ''; state = FRAGMENT; } else { url.username = base.username; url.password = base.password; url.host = base.host; url.port = base.port; url.path = base.path.slice(); url.path.pop(); state = PATH; continue; } break; case RELATIVE_SLASH: if (isSpecial(url) && (char == '/' || char == '\\')) { state = SPECIAL_AUTHORITY_IGNORE_SLASHES; } else if (char == '/') { state = AUTHORITY; } else { url.username = base.username; url.password = base.password; url.host = base.host; url.port = base.port; state = PATH; continue; } break; case SPECIAL_AUTHORITY_SLASHES: state = SPECIAL_AUTHORITY_IGNORE_SLASHES; if (char != '/' || buffer.charAt(pointer + 1) != '/') continue; pointer++; break; case SPECIAL_AUTHORITY_IGNORE_SLASHES: if (char != '/' && char != '\\') { state = AUTHORITY; continue; } break; case AUTHORITY: if (char == '@') { if (seenAt) buffer = '%40' + buffer; seenAt = true; bufferCodePoints = arrayFrom(buffer); for (var i = 0; i < bufferCodePoints.length; i++) { var codePoint = bufferCodePoints[i]; if (codePoint == ':' && !seenPasswordToken) { seenPasswordToken = true; continue; } var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet); if (seenPasswordToken) url.password += encodedCodePoints; else url.username += encodedCodePoints; } buffer = ''; } else if (char == EOF || char == '/' || char == '?' || char == '#' || char == '\\' && isSpecial(url)) { if (seenAt && buffer == '') return INVALID_AUTHORITY; pointer -= arrayFrom(buffer).length + 1; buffer = ''; state = HOST; } else buffer += char; break; case HOST: case HOSTNAME: if (stateOverride && url.scheme == 'file') { state = FILE_HOST; continue; } else if (char == ':' && !seenBracket) { if (buffer == '') return INVALID_HOST; failure = parseHost(url, buffer); if (failure) return failure; buffer = ''; state = PORT; if (stateOverride == HOSTNAME) return; } else if (char == EOF || char == '/' || char == '?' || char == '#' || char == '\\' && isSpecial(url)) { if (isSpecial(url) && buffer == '') return INVALID_HOST; if (stateOverride && buffer == '' && (includesCredentials(url) || url.port !== null)) return; failure = parseHost(url, buffer); if (failure) return failure; buffer = ''; state = PATH_START; if (stateOverride) return; continue; } else { if (char == '[') seenBracket = true; else if (char == ']') seenBracket = false; buffer += char; } break; case PORT: if (DIGIT.test(char)) { buffer += char; } else if (char == EOF || char == '/' || char == '?' || char == '#' || char == '\\' && isSpecial(url) || stateOverride) { if (buffer != '') { var port = parseInt(buffer, 10); if (port > 0xFFFF) return INVALID_PORT; url.port = isSpecial(url) && port === specialSchemes[url.scheme] ? null : port; buffer = ''; } if (stateOverride) return; state = PATH_START; continue; } else return INVALID_PORT; break; case FILE: url.scheme = 'file'; if (char == '/' || char == '\\') state = FILE_SLASH; else if (base && base.scheme == 'file') { if (char == EOF) { url.host = base.host; url.path = base.path.slice(); url.query = base.query; } else if (char == '?') { url.host = base.host; url.path = base.path.slice(); url.query = ''; state = QUERY; } else if (char == '#') { url.host = base.host; url.path = base.path.slice(); url.query = base.query; url.fragment = ''; state = FRAGMENT; } else { if (!startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) { url.host = base.host; url.path = base.path.slice(); shortenURLsPath(url); } state = PATH; continue; } } else { state = PATH; continue; } break; case FILE_SLASH: if (char == '/' || char == '\\') { state = FILE_HOST; break; } if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) { if (isWindowsDriveLetter(base.path[0], true)) url.path.push(base.path[0]); else url.host = base.host; } state = PATH; continue; case FILE_HOST: if (char == EOF || char == '/' || char == '\\' || char == '?' || char == '#') { if (!stateOverride && isWindowsDriveLetter(buffer)) { state = PATH; } else if (buffer == '') { url.host = ''; if (stateOverride) return; state = PATH_START; } else { failure = parseHost(url, buffer); if (failure) return failure; if (url.host == 'localhost') url.host = ''; if (stateOverride) return; buffer = ''; state = PATH_START; } continue; } else buffer += char; break; case PATH_START: if (isSpecial(url)) { state = PATH; if (char != '/' && char != '\\') continue; } else if (!stateOverride && char == '?') { url.query = ''; state = QUERY; } else if (!stateOverride && char == '#') { url.fragment = ''; state = FRAGMENT; } else if (char != EOF) { state = PATH; if (char != '/') continue; } break; case PATH: if (char == EOF || char == '/' || char == '\\' && isSpecial(url) || !stateOverride && (char == '?' || char == '#')) { if (isDoubleDot(buffer)) { shortenURLsPath(url); if (char != '/' && !(char == '\\' && isSpecial(url))) { url.path.push(''); } } else if (isSingleDot(buffer)) { if (char != '/' && !(char == '\\' && isSpecial(url))) { url.path.push(''); } } else { if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) { if (url.host) url.host = ''; buffer = buffer.charAt(0) + ':'; } url.path.push(buffer); } buffer = ''; if (url.scheme == 'file' && (char == EOF || char == '?' || char == '#')) { while (url.path.length > 1 && url.path[0] === '') { url.path.shift(); } } if (char == '?') { url.query = ''; state = QUERY; } else if (char == '#') { url.fragment = ''; state = FRAGMENT; } } else { buffer += percentEncode(char, pathPercentEncodeSet); } break; case CANNOT_BE_A_BASE_URL_PATH: if (char == '?') { url.query = ''; state = QUERY; } else if (char == '#') { url.fragment = ''; state = FRAGMENT; } else if (char != EOF) { url.path[0] += percentEncode(char, C0ControlPercentEncodeSet); } break; case QUERY: if (!stateOverride && char == '#') { url.fragment = ''; state = FRAGMENT; } else if (char != EOF) { if (char == "'" && isSpecial(url)) url.query += '%27'; else if (char == '#') url.query += '%23'; else url.query += percentEncode(char, C0ControlPercentEncodeSet); } break; case FRAGMENT: if (char != EOF) url.fragment += percentEncode(char, fragmentPercentEncodeSet); break; } pointer++; } }; var URLConstructor = function URL(url) { var that = anInstance(this, URLConstructor, 'URL'); var base = arguments.length > 1 ? arguments[1] : undefined; var urlString = String(url); var state = setInternalState(that, { type: 'URL' }); var baseState, failure; if (base !== undefined) { if (base instanceof URLConstructor) baseState = getInternalURLState(base); else { failure = parseURL(baseState = {}, String(base)); if (failure) throw TypeError(failure); } } failure = parseURL(state, urlString, null, baseState); if (failure) throw TypeError(failure); var searchParams = state.searchParams = new URLSearchParams(); var searchParamsState = getInternalSearchParamsState(searchParams); searchParamsState.updateSearchParams(state.query); searchParamsState.updateURL = function () { state.query = String(searchParams) || null; }; if (!DESCRIPTORS) { that.href = serializeURL.call(that); that.origin = getOrigin.call(that); that.protocol = getProtocol.call(that); that.username = getUsername.call(that); that.password = getPassword.call(that); that.host = getHost.call(that); that.hostname = getHostname.call(that); that.port = getPort.call(that); that.pathname = getPathname.call(that); that.search = getSearch.call(that); that.searchParams = getSearchParams.call(that); that.hash = getHash.call(that); } }; var URLPrototype = URLConstructor.prototype; var serializeURL = function () { var url = getInternalURLState(this); var scheme = url.scheme; var username = url.username; var password = url.password; var host = url.host; var port = url.port; var path = url.path; var query = url.query; var fragment = url.fragment; var output = scheme + ':'; if (host !== null) { output += '//'; if (includesCredentials(url)) { output += username + (password ? ':' + password : '') + '@'; } output += serializeHost(host); if (port !== null) output += ':' + port; } else if (scheme == 'file') output += '//'; output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : ''; if (query !== null) output += '?' + query; if (fragment !== null) output += '#' + fragment; return output; }; var getOrigin = function () { var url = getInternalURLState(this); var scheme = url.scheme; var port = url.port; if (scheme == 'blob') try { return new URL(scheme.path[0]).origin; } catch (error) { return 'null'; } if (scheme == 'file' || !isSpecial(url)) return 'null'; return scheme + '://' + serializeHost(url.host) + (port !== null ? ':' + port : ''); }; var getProtocol = function () { return getInternalURLState(this).scheme + ':'; }; var getUsername = function () { return getInternalURLState(this).username; }; var getPassword = function () { return getInternalURLState(this).password; }; var getHost = function () { var url = getInternalURLState(this); var host = url.host; var port = url.port; return host === null ? '' : port === null ? serializeHost(host) : serializeHost(host) + ':' + port; }; var getHostname = function () { var host = getInternalURLState(this).host; return host === null ? '' : serializeHost(host); }; var getPort = function () { var port = getInternalURLState(this).port; return port === null ? '' : String(port); }; var getPathname = function () { var url = getInternalURLState(this); var path = url.path; return url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : ''; }; var getSearch = function () { var query = getInternalURLState(this).query; return query ? '?' + query : ''; }; var getSearchParams = function () { return getInternalURLState(this).searchParams; }; var getHash = function () { var fragment = getInternalURLState(this).fragment; return fragment ? '#' + fragment : ''; }; var accessorDescriptor = function (getter, setter) { return { get: getter, set: setter, configurable: true, enumerable: true }; }; if (DESCRIPTORS) { defineProperties(URLPrototype, { href: accessorDescriptor(serializeURL, function (href) { var url = getInternalURLState(this); var urlString = String(href); var failure = parseURL(url, urlString); if (failure) throw TypeError(failure); getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query); }), origin: accessorDescriptor(getOrigin), protocol: accessorDescriptor(getProtocol, function (protocol) { var url = getInternalURLState(this); parseURL(url, String(protocol) + ':', SCHEME_START); }), username: accessorDescriptor(getUsername, function (username) { var url = getInternalURLState(this); var codePoints = arrayFrom(String(username)); if (cannotHaveUsernamePasswordPort(url)) return; url.username = ''; for (var i = 0; i < codePoints.length; i++) { url.username += percentEncode(codePoints[i], userinfoPercentEncodeSet); } }), password: accessorDescriptor(getPassword, function (password) { var url = getInternalURLState(this); var codePoints = arrayFrom(String(password)); if (cannotHaveUsernamePasswordPort(url)) return; url.password = ''; for (var i = 0; i < codePoints.length; i++) { url.password += percentEncode(codePoints[i], userinfoPercentEncodeSet); } }), host: accessorDescriptor(getHost, function (host) { var url = getInternalURLState(this); if (url.cannotBeABaseURL) return; parseURL(url, String(host), HOST); }), hostname: accessorDescriptor(getHostname, function (hostname) { var url = getInternalURLState(this); if (url.cannotBeABaseURL) return; parseURL(url, String(hostname), HOSTNAME); }), port: accessorDescriptor(getPort, function (port) { var url = getInternalURLState(this); if (cannotHaveUsernamePasswordPort(url)) return; port = String(port); if (port == '') url.port = null; else parseURL(url, port, PORT); }), pathname: accessorDescriptor(getPathname, function (pathname) { var url = getInternalURLState(this); if (url.cannotBeABaseURL) return; url.path = []; parseURL(url, pathname + '', PATH_START); }), search: accessorDescriptor(getSearch, function (search) { var url = getInternalURLState(this); search = String(search); if (search == '') { url.query = null; } else { if ('?' == search.charAt(0)) search = search.slice(1); url.query = ''; parseURL(url, search, QUERY); } getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query); }), searchParams: accessorDescriptor(getSearchParams), hash: accessorDescriptor(getHash, function (hash) { var url = getInternalURLState(this); hash = String(hash); if (hash == '') { url.fragment = null; return; } if ('#' == hash.charAt(0)) hash = hash.slice(1); url.fragment = ''; parseURL(url, hash, FRAGMENT); }) }); } redefine(URLPrototype, 'toJSON', function toJSON() { return serializeURL.call(this); }, { enumerable: true }); redefine(URLPrototype, 'toString', function toString() { return serializeURL.call(this); }, { enumerable: true }); if (NativeURL) { var nativeCreateObjectURL = NativeURL.createObjectURL; var nativeRevokeObjectURL = NativeURL.revokeObjectURL; if (nativeCreateObjectURL) redefine(URLConstructor, 'createObjectURL', function createObjectURL(blob) { return nativeCreateObjectURL.apply(NativeURL, arguments); }); if (nativeRevokeObjectURL) redefine(URLConstructor, 'revokeObjectURL', function revokeObjectURL(url) { return nativeRevokeObjectURL.apply(NativeURL, arguments); }); } setToStringTag(URLConstructor, 'URL'); $({ global: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, { URL: URLConstructor }); /***/ }), /* 113 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var fails = __w_pdfjs_require__(13); var wellKnownSymbol = __w_pdfjs_require__(55); var IS_PURE = __w_pdfjs_require__(36); var ITERATOR = wellKnownSymbol('iterator'); module.exports = !fails(function () { var url = new URL('b?a=1&b=2&c=3', 'http://a'); var searchParams = url.searchParams; var result = ''; url.pathname = 'c%20d'; searchParams.forEach(function (value, key) { searchParams['delete']('b'); result += key + value; }); return IS_PURE && !url.toJSON || !searchParams.sort || url.href !== 'http://a/c%20d?a=1&c=3' || searchParams.get('c') !== '3' || String(new URLSearchParams('?a=1')) !== 'a=1' || !searchParams[ITERATOR] || new URL('https://a@b').username !== 'a' || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b' || new URL('http://тест').host !== 'xn--e1aybc' || new URL('http://a#б').hash !== '#%D0%B1' || result !== 'a1c3' || new URL('http://x', undefined).host !== 'x'; }); /***/ }), /* 114 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var DESCRIPTORS = __w_pdfjs_require__(12); var fails = __w_pdfjs_require__(13); var objectKeys = __w_pdfjs_require__(60); var getOwnPropertySymbolsModule = __w_pdfjs_require__(50); var propertyIsEnumerableModule = __w_pdfjs_require__(14); var toObject = __w_pdfjs_require__(67); var IndexedObject = __w_pdfjs_require__(17); var nativeAssign = Object.assign; var defineProperty = Object.defineProperty; module.exports = !nativeAssign || fails(function () { if (DESCRIPTORS && nativeAssign({ b: 1 }, nativeAssign(defineProperty({}, 'a', { enumerable: true, get: function () { defineProperty(this, 'b', { value: 3, enumerable: false }); } }), { b: 2 })).b !== 1) return true; var A = {}; var B = {}; var symbol = Symbol(); var alphabet = 'abcdefghijklmnopqrst'; A[symbol] = 7; alphabet.split('').forEach(function (chr) { B[chr] = chr; }); return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet; }) ? function assign(target, source) { var T = toObject(target); var argumentsLength = arguments.length; var index = 1; var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; var propertyIsEnumerable = propertyIsEnumerableModule.f; while (argumentsLength > index) { var S = IndexedObject(arguments[index++]); var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S); var length = keys.length; var j = 0; var key; while (length > j) { key = keys[j++]; if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key]; } } return T; } : nativeAssign; /***/ }), /* 115 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var bind = __w_pdfjs_require__(75); var toObject = __w_pdfjs_require__(67); var callWithSafeIterationClosing = __w_pdfjs_require__(116); var isArrayIteratorMethod = __w_pdfjs_require__(74); var toLength = __w_pdfjs_require__(46); var createProperty = __w_pdfjs_require__(81); var getIteratorMethod = __w_pdfjs_require__(77); module.exports = function from(arrayLike) { var O = toObject(arrayLike); var C = typeof this == 'function' ? this : Array; var argumentsLength = arguments.length; var mapfn = argumentsLength > 1 ? arguments[1] : undefined; var mapping = mapfn !== undefined; var iteratorMethod = getIteratorMethod(O); var index = 0; var length, result, step, iterator, next, value; if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2); if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) { iterator = iteratorMethod.call(O); next = iterator.next; result = new C(); for (; !(step = next.call(iterator)).done; index++) { value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [ step.value, index ], true) : step.value; createProperty(result, index, value); } } else { length = toLength(O.length); result = new C(length); for (; length > index; index++) { value = mapping ? mapfn(O[index], index) : O[index]; createProperty(result, index, value); } } result.length = index; return result; }; /***/ }), /* 116 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var anObject = __w_pdfjs_require__(27); var iteratorClose = __w_pdfjs_require__(80); module.exports = function (iterator, fn, value, ENTRIES) { try { return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); } catch (error) { iteratorClose(iterator); throw error; } }; /***/ }), /* 117 */ /***/ ((module) => { "use strict"; var maxInt = 2147483647; var base = 36; var tMin = 1; var tMax = 26; var skew = 38; var damp = 700; var initialBias = 72; var initialN = 128; var delimiter = '-'; var regexNonASCII = /[^\0-\u007E]/; var regexSeparators = /[.\u3002\uFF0E\uFF61]/g; var OVERFLOW_ERROR = 'Overflow: input needs wider integers to process'; var baseMinusTMin = base - tMin; var floor = Math.floor; var stringFromCharCode = String.fromCharCode; var ucs2decode = function (string) { var output = []; var counter = 0; var length = string.length; while (counter < length) { var value = string.charCodeAt(counter++); if (value >= 0xD800 && value <= 0xDBFF && counter < length) { var extra = string.charCodeAt(counter++); if ((extra & 0xFC00) == 0xDC00) { output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); } else { output.push(value); counter--; } } else { output.push(value); } } return output; }; var digitToBasic = function (digit) { return digit + 22 + 75 * (digit < 26); }; var adapt = function (delta, numPoints, firstTime) { var k = 0; delta = firstTime ? floor(delta / damp) : delta >> 1; delta += floor(delta / numPoints); for (; delta > baseMinusTMin * tMax >> 1; k += base) { delta = floor(delta / baseMinusTMin); } return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); }; var encode = function (input) { var output = []; input = ucs2decode(input); var inputLength = input.length; var n = initialN; var delta = 0; var bias = initialBias; var i, currentValue; for (i = 0; i < input.length; i++) { currentValue = input[i]; if (currentValue < 0x80) { output.push(stringFromCharCode(currentValue)); } } var basicLength = output.length; var handledCPCount = basicLength; if (basicLength) { output.push(delimiter); } while (handledCPCount < inputLength) { var m = maxInt; for (i = 0; i < input.length; i++) { currentValue = input[i]; if (currentValue >= n && currentValue < m) { m = currentValue; } } var handledCPCountPlusOne = handledCPCount + 1; if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { throw RangeError(OVERFLOW_ERROR); } delta += (m - n) * handledCPCountPlusOne; n = m; for (i = 0; i < input.length; i++) { currentValue = input[i]; if (currentValue < n && ++delta > maxInt) { throw RangeError(OVERFLOW_ERROR); } if (currentValue == n) { var q = delta; for (var k = base;; k += base) { var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias; if (q < t) break; var qMinusT = q - t; var baseMinusT = base - t; output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT))); q = floor(qMinusT / baseMinusT); } output.push(stringFromCharCode(digitToBasic(q))); bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); delta = 0; ++handledCPCount; } } ++delta; ++n; } return output.join(''); }; module.exports = function (input) { var encoded = []; var labels = input.toLowerCase().replace(regexSeparators, '\u002E').split('.'); var i, label; for (i = 0; i < labels.length; i++) { label = labels[i]; encoded.push(regexNonASCII.test(label) ? 'xn--' + encode(label) : label); } return encoded.join('.'); }; /***/ }), /* 118 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; __w_pdfjs_require__(53); var $ = __w_pdfjs_require__(9); var getBuiltIn = __w_pdfjs_require__(41); var USE_NATIVE_URL = __w_pdfjs_require__(113); var redefine = __w_pdfjs_require__(28); var redefineAll = __w_pdfjs_require__(88); var setToStringTag = __w_pdfjs_require__(69); var createIteratorConstructor = __w_pdfjs_require__(64); var InternalStateModule = __w_pdfjs_require__(32); var anInstance = __w_pdfjs_require__(90); var hasOwn = __w_pdfjs_require__(22); var bind = __w_pdfjs_require__(75); var classof = __w_pdfjs_require__(78); var anObject = __w_pdfjs_require__(27); var isObject = __w_pdfjs_require__(21); var create = __w_pdfjs_require__(58); var createPropertyDescriptor = __w_pdfjs_require__(15); var getIterator = __w_pdfjs_require__(119); var getIteratorMethod = __w_pdfjs_require__(77); var wellKnownSymbol = __w_pdfjs_require__(55); var $fetch = getBuiltIn('fetch'); var Headers = getBuiltIn('Headers'); var ITERATOR = wellKnownSymbol('iterator'); var URL_SEARCH_PARAMS = 'URLSearchParams'; var URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator'; var setInternalState = InternalStateModule.set; var getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS); var getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR); var plus = /\+/g; var sequences = Array(4); var percentSequence = function (bytes) { return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\da-f]{2}){' + bytes + '})', 'gi')); }; var percentDecode = function (sequence) { try { return decodeURIComponent(sequence); } catch (error) { return sequence; } }; var deserialize = function (it) { var result = it.replace(plus, ' '); var bytes = 4; try { return decodeURIComponent(result); } catch (error) { while (bytes) { result = result.replace(percentSequence(bytes--), percentDecode); } return result; } }; var find = /[!'()~]|%20/g; var replace = { '!': '%21', "'": '%27', '(': '%28', ')': '%29', '~': '%7E', '%20': '+' }; var replacer = function (match) { return replace[match]; }; var serialize = function (it) { return encodeURIComponent(it).replace(find, replacer); }; var parseSearchParams = function (result, query) { if (query) { var attributes = query.split('&'); var index = 0; var attribute, entry; while (index < attributes.length) { attribute = attributes[index++]; if (attribute.length) { entry = attribute.split('='); result.push({ key: deserialize(entry.shift()), value: deserialize(entry.join('=')) }); } } } }; var updateSearchParams = function (query) { this.entries.length = 0; parseSearchParams(this.entries, query); }; var validateArgumentsLength = function (passed, required) { if (passed < required) throw TypeError('Not enough arguments'); }; var URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) { setInternalState(this, { type: URL_SEARCH_PARAMS_ITERATOR, iterator: getIterator(getInternalParamsState(params).entries), kind: kind }); }, 'Iterator', function next() { var state = getInternalIteratorState(this); var kind = state.kind; var step = state.iterator.next(); var entry = step.value; if (!step.done) { step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [ entry.key, entry.value ]; } return step; }); var URLSearchParamsConstructor = function URLSearchParams() { anInstance(this, URLSearchParamsConstructor, URL_SEARCH_PARAMS); var init = arguments.length > 0 ? arguments[0] : undefined; var that = this; var entries = []; var iteratorMethod, iterator, next, step, entryIterator, entryNext, first, second, key; setInternalState(that, { type: URL_SEARCH_PARAMS, entries: entries, updateURL: function () { }, updateSearchParams: updateSearchParams }); if (init !== undefined) { if (isObject(init)) { iteratorMethod = getIteratorMethod(init); if (typeof iteratorMethod === 'function') { iterator = iteratorMethod.call(init); next = iterator.next; while (!(step = next.call(iterator)).done) { entryIterator = getIterator(anObject(step.value)); entryNext = entryIterator.next; if ((first = entryNext.call(entryIterator)).done || (second = entryNext.call(entryIterator)).done || !entryNext.call(entryIterator).done) throw TypeError('Expected sequence with length 2'); entries.push({ key: first.value + '', value: second.value + '' }); } } else for (key in init) if (hasOwn(init, key)) entries.push({ key: key, value: init[key] + '' }); } else { parseSearchParams(entries, typeof init === 'string' ? init.charAt(0) === '?' ? init.slice(1) : init : init + ''); } } }; var URLSearchParamsPrototype = URLSearchParamsConstructor.prototype; redefineAll(URLSearchParamsPrototype, { append: function append(name, value) { validateArgumentsLength(arguments.length, 2); var state = getInternalParamsState(this); state.entries.push({ key: name + '', value: value + '' }); state.updateURL(); }, 'delete': function (name) { validateArgumentsLength(arguments.length, 1); var state = getInternalParamsState(this); var entries = state.entries; var key = name + ''; var index = 0; while (index < entries.length) { if (entries[index].key === key) entries.splice(index, 1); else index++; } state.updateURL(); }, get: function get(name) { validateArgumentsLength(arguments.length, 1); var entries = getInternalParamsState(this).entries; var key = name + ''; var index = 0; for (; index < entries.length; index++) { if (entries[index].key === key) return entries[index].value; } return null; }, getAll: function getAll(name) { validateArgumentsLength(arguments.length, 1); var entries = getInternalParamsState(this).entries; var key = name + ''; var result = []; var index = 0; for (; index < entries.length; index++) { if (entries[index].key === key) result.push(entries[index].value); } return result; }, has: function has(name) { validateArgumentsLength(arguments.length, 1); var entries = getInternalParamsState(this).entries; var key = name + ''; var index = 0; while (index < entries.length) { if (entries[index++].key === key) return true; } return false; }, set: function set(name, value) { validateArgumentsLength(arguments.length, 1); var state = getInternalParamsState(this); var entries = state.entries; var found = false; var key = name + ''; var val = value + ''; var index = 0; var entry; for (; index < entries.length; index++) { entry = entries[index]; if (entry.key === key) { if (found) entries.splice(index--, 1); else { found = true; entry.value = val; } } } if (!found) entries.push({ key: key, value: val }); state.updateURL(); }, sort: function sort() { var state = getInternalParamsState(this); var entries = state.entries; var slice = entries.slice(); var entry, entriesIndex, sliceIndex; entries.length = 0; for (sliceIndex = 0; sliceIndex < slice.length; sliceIndex++) { entry = slice[sliceIndex]; for (entriesIndex = 0; entriesIndex < sliceIndex; entriesIndex++) { if (entries[entriesIndex].key > entry.key) { entries.splice(entriesIndex, 0, entry); break; } } if (entriesIndex === sliceIndex) entries.push(entry); } state.updateURL(); }, forEach: function forEach(callback) { var entries = getInternalParamsState(this).entries; var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined, 3); var index = 0; var entry; while (index < entries.length) { entry = entries[index++]; boundFunction(entry.value, entry.key, this); } }, keys: function keys() { return new URLSearchParamsIterator(this, 'keys'); }, values: function values() { return new URLSearchParamsIterator(this, 'values'); }, entries: function entries() { return new URLSearchParamsIterator(this, 'entries'); } }, { enumerable: true }); redefine(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries); redefine(URLSearchParamsPrototype, 'toString', function toString() { var entries = getInternalParamsState(this).entries; var result = []; var index = 0; var entry; while (index < entries.length) { entry = entries[index++]; result.push(serialize(entry.key) + '=' + serialize(entry.value)); } return result.join('&'); }, { enumerable: true }); setToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS); $({ global: true, forced: !USE_NATIVE_URL }, { URLSearchParams: URLSearchParamsConstructor }); if (!USE_NATIVE_URL && typeof $fetch == 'function' && typeof Headers == 'function') { $({ global: true, enumerable: true, forced: true }, { fetch: function fetch(input) { var args = [input]; var init, body, headers; if (arguments.length > 1) { init = arguments[1]; if (isObject(init)) { body = init.body; if (classof(body) === URL_SEARCH_PARAMS) { headers = init.headers ? new Headers(init.headers) : new Headers(); if (!headers.has('content-type')) { headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8'); } init = create(init, { body: createPropertyDescriptor(0, String(body)), headers: createPropertyDescriptor(0, headers) }); } } args.push(init); } return $fetch.apply(this, args); } }); } module.exports = { URLSearchParams: URLSearchParamsConstructor, getState: getInternalParamsState }; /***/ }), /* 119 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var anObject = __w_pdfjs_require__(27); var getIteratorMethod = __w_pdfjs_require__(77); module.exports = function (it) { var iteratorMethod = getIteratorMethod(it); if (typeof iteratorMethod != 'function') { throw TypeError(String(it) + ' is not iterable'); } return anObject(iteratorMethod.call(it)); }; /***/ }), /* 120 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var $ = __w_pdfjs_require__(9); $({ target: 'URL', proto: true, enumerable: true }, { toJSON: function toJSON() { return URL.prototype.toString.call(this); } }); /***/ }), /* 121 */ /***/ (function(__unused_webpack_module, exports) { (function (global, factory) { true ? factory(exports) : 0; }(this, function (exports) { 'use strict'; var SymbolPolyfill = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol : function (description) { return "Symbol(" + description + ")"; }; function noop() { } function getGlobals() { if (typeof self !== 'undefined') { return self; } else if (typeof window !== 'undefined') { return window; } else if (typeof global !== 'undefined') { return global; } return undefined; } var globals = getGlobals(); function typeIsObject(x) { return typeof x === 'object' && x !== null || typeof x === 'function'; } var rethrowAssertionErrorRejection = noop; var originalPromise = Promise; var originalPromiseThen = Promise.prototype.then; var originalPromiseResolve = Promise.resolve.bind(originalPromise); var originalPromiseReject = Promise.reject.bind(originalPromise); function newPromise(executor) { return new originalPromise(executor); } function promiseResolvedWith(value) { return originalPromiseResolve(value); } function promiseRejectedWith(reason) { return originalPromiseReject(reason); } function PerformPromiseThen(promise, onFulfilled, onRejected) { return originalPromiseThen.call(promise, onFulfilled, onRejected); } function uponPromise(promise, onFulfilled, onRejected) { PerformPromiseThen(PerformPromiseThen(promise, onFulfilled, onRejected), undefined, rethrowAssertionErrorRejection); } function uponFulfillment(promise, onFulfilled) { uponPromise(promise, onFulfilled); } function uponRejection(promise, onRejected) { uponPromise(promise, undefined, onRejected); } function transformPromiseWith(promise, fulfillmentHandler, rejectionHandler) { return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler); } function setPromiseIsHandledToTrue(promise) { PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection); } var queueMicrotask = function () { var globalQueueMicrotask = globals && globals.queueMicrotask; if (typeof globalQueueMicrotask === 'function') { return globalQueueMicrotask; } var resolvedPromise = promiseResolvedWith(undefined); return function (fn) { return PerformPromiseThen(resolvedPromise, fn); }; }(); function reflectCall(F, V, args) { if (typeof F !== 'function') { throw new TypeError('Argument is not a function'); } return Function.prototype.apply.call(F, V, args); } function promiseCall(F, V, args) { try { return promiseResolvedWith(reflectCall(F, V, args)); } catch (value) { return promiseRejectedWith(value); } } var QUEUE_MAX_ARRAY_SIZE = 16384; var SimpleQueue = function () { function SimpleQueue() { this._cursor = 0; this._size = 0; this._front = { _elements: [], _next: undefined }; this._back = this._front; this._cursor = 0; this._size = 0; } Object.defineProperty(SimpleQueue.prototype, "length", { get: function () { return this._size; }, enumerable: false, configurable: true }); SimpleQueue.prototype.push = function (element) { var oldBack = this._back; var newBack = oldBack; if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) { newBack = { _elements: [], _next: undefined }; } oldBack._elements.push(element); if (newBack !== oldBack) { this._back = newBack; oldBack._next = newBack; } ++this._size; }; SimpleQueue.prototype.shift = function () { var oldFront = this._front; var newFront = oldFront; var oldCursor = this._cursor; var newCursor = oldCursor + 1; var elements = oldFront._elements; var element = elements[oldCursor]; if (newCursor === QUEUE_MAX_ARRAY_SIZE) { newFront = oldFront._next; newCursor = 0; } --this._size; this._cursor = newCursor; if (oldFront !== newFront) { this._front = newFront; } elements[oldCursor] = undefined; return element; }; SimpleQueue.prototype.forEach = function (callback) { var i = this._cursor; var node = this._front; var elements = node._elements; while (i !== elements.length || node._next !== undefined) { if (i === elements.length) { node = node._next; elements = node._elements; i = 0; if (elements.length === 0) { break; } } callback(elements[i]); ++i; } }; SimpleQueue.prototype.peek = function () { var front = this._front; var cursor = this._cursor; return front._elements[cursor]; }; return SimpleQueue; }(); function ReadableStreamReaderGenericInitialize(reader, stream) { reader._ownerReadableStream = stream; stream._reader = reader; if (stream._state === 'readable') { defaultReaderClosedPromiseInitialize(reader); } else if (stream._state === 'closed') { defaultReaderClosedPromiseInitializeAsResolved(reader); } else { defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError); } } function ReadableStreamReaderGenericCancel(reader, reason) { var stream = reader._ownerReadableStream; return ReadableStreamCancel(stream, reason); } function ReadableStreamReaderGenericRelease(reader) { if (reader._ownerReadableStream._state === 'readable') { defaultReaderClosedPromiseReject(reader, new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")); } else { defaultReaderClosedPromiseResetToRejected(reader, new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")); } reader._ownerReadableStream._reader = undefined; reader._ownerReadableStream = undefined; } function readerLockException(name) { return new TypeError('Cannot ' + name + ' a stream using a released reader'); } function defaultReaderClosedPromiseInitialize(reader) { reader._closedPromise = newPromise(function (resolve, reject) { reader._closedPromise_resolve = resolve; reader._closedPromise_reject = reject; }); } function defaultReaderClosedPromiseInitializeAsRejected(reader, reason) { defaultReaderClosedPromiseInitialize(reader); defaultReaderClosedPromiseReject(reader, reason); } function defaultReaderClosedPromiseInitializeAsResolved(reader) { defaultReaderClosedPromiseInitialize(reader); defaultReaderClosedPromiseResolve(reader); } function defaultReaderClosedPromiseReject(reader, reason) { if (reader._closedPromise_reject === undefined) { return; } setPromiseIsHandledToTrue(reader._closedPromise); reader._closedPromise_reject(reason); reader._closedPromise_resolve = undefined; reader._closedPromise_reject = undefined; } function defaultReaderClosedPromiseResetToRejected(reader, reason) { defaultReaderClosedPromiseInitializeAsRejected(reader, reason); } function defaultReaderClosedPromiseResolve(reader) { if (reader._closedPromise_resolve === undefined) { return; } reader._closedPromise_resolve(undefined); reader._closedPromise_resolve = undefined; reader._closedPromise_reject = undefined; } var AbortSteps = SymbolPolyfill('[[AbortSteps]]'); var ErrorSteps = SymbolPolyfill('[[ErrorSteps]]'); var CancelSteps = SymbolPolyfill('[[CancelSteps]]'); var PullSteps = SymbolPolyfill('[[PullSteps]]'); var NumberIsFinite = Number.isFinite || function (x) { return typeof x === 'number' && isFinite(x); }; var MathTrunc = Math.trunc || function (v) { return v < 0 ? Math.ceil(v) : Math.floor(v); }; function isDictionary(x) { return typeof x === 'object' || typeof x === 'function'; } function assertDictionary(obj, context) { if (obj !== undefined && !isDictionary(obj)) { throw new TypeError(context + " is not an object."); } } function assertFunction(x, context) { if (typeof x !== 'function') { throw new TypeError(context + " is not a function."); } } function isObject(x) { return typeof x === 'object' && x !== null || typeof x === 'function'; } function assertObject(x, context) { if (!isObject(x)) { throw new TypeError(context + " is not an object."); } } function assertRequiredArgument(x, position, context) { if (x === undefined) { throw new TypeError("Parameter " + position + " is required in '" + context + "'."); } } function assertRequiredField(x, field, context) { if (x === undefined) { throw new TypeError(field + " is required in '" + context + "'."); } } function convertUnrestrictedDouble(value) { return Number(value); } function censorNegativeZero(x) { return x === 0 ? 0 : x; } function integerPart(x) { return censorNegativeZero(MathTrunc(x)); } function convertUnsignedLongLongWithEnforceRange(value, context) { var lowerBound = 0; var upperBound = Number.MAX_SAFE_INTEGER; var x = Number(value); x = censorNegativeZero(x); if (!NumberIsFinite(x)) { throw new TypeError(context + " is not a finite number"); } x = integerPart(x); if (x < lowerBound || x > upperBound) { throw new TypeError(context + " is outside the accepted range of " + lowerBound + " to " + upperBound + ", inclusive"); } if (!NumberIsFinite(x) || x === 0) { return 0; } return x; } function assertReadableStream(x, context) { if (!IsReadableStream(x)) { throw new TypeError(context + " is not a ReadableStream."); } } function AcquireReadableStreamDefaultReader(stream) { return new ReadableStreamDefaultReader(stream); } function ReadableStreamAddReadRequest(stream, readRequest) { stream._reader._readRequests.push(readRequest); } function ReadableStreamFulfillReadRequest(stream, chunk, done) { var reader = stream._reader; var readRequest = reader._readRequests.shift(); if (done) { readRequest._closeSteps(); } else { readRequest._chunkSteps(chunk); } } function ReadableStreamGetNumReadRequests(stream) { return stream._reader._readRequests.length; } function ReadableStreamHasDefaultReader(stream) { var reader = stream._reader; if (reader === undefined) { return false; } if (!IsReadableStreamDefaultReader(reader)) { return false; } return true; } var ReadableStreamDefaultReader = function () { function ReadableStreamDefaultReader(stream) { assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader'); assertReadableStream(stream, 'First parameter'); if (IsReadableStreamLocked(stream)) { throw new TypeError('This stream has already been locked for exclusive reading by another reader'); } ReadableStreamReaderGenericInitialize(this, stream); this._readRequests = new SimpleQueue(); } Object.defineProperty(ReadableStreamDefaultReader.prototype, "closed", { get: function () { if (!IsReadableStreamDefaultReader(this)) { return promiseRejectedWith(defaultReaderBrandCheckException('closed')); } return this._closedPromise; }, enumerable: false, configurable: true }); ReadableStreamDefaultReader.prototype.cancel = function (reason) { if (reason === void 0) { reason = undefined; } if (!IsReadableStreamDefaultReader(this)) { return promiseRejectedWith(defaultReaderBrandCheckException('cancel')); } if (this._ownerReadableStream === undefined) { return promiseRejectedWith(readerLockException('cancel')); } return ReadableStreamReaderGenericCancel(this, reason); }; ReadableStreamDefaultReader.prototype.read = function () { if (!IsReadableStreamDefaultReader(this)) { return promiseRejectedWith(defaultReaderBrandCheckException('read')); } if (this._ownerReadableStream === undefined) { return promiseRejectedWith(readerLockException('read from')); } var resolvePromise; var rejectPromise; var promise = newPromise(function (resolve, reject) { resolvePromise = resolve; rejectPromise = reject; }); var readRequest = { _chunkSteps: function (chunk) { return resolvePromise({ value: chunk, done: false }); }, _closeSteps: function () { return resolvePromise({ value: undefined, done: true }); }, _errorSteps: function (e) { return rejectPromise(e); } }; ReadableStreamDefaultReaderRead(this, readRequest); return promise; }; ReadableStreamDefaultReader.prototype.releaseLock = function () { if (!IsReadableStreamDefaultReader(this)) { throw defaultReaderBrandCheckException('releaseLock'); } if (this._ownerReadableStream === undefined) { return; } if (this._readRequests.length > 0) { throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled'); } ReadableStreamReaderGenericRelease(this); }; return ReadableStreamDefaultReader; }(); Object.defineProperties(ReadableStreamDefaultReader.prototype, { cancel: { enumerable: true }, read: { enumerable: true }, releaseLock: { enumerable: true }, closed: { enumerable: true } }); if (typeof SymbolPolyfill.toStringTag === 'symbol') { Object.defineProperty(ReadableStreamDefaultReader.prototype, SymbolPolyfill.toStringTag, { value: 'ReadableStreamDefaultReader', configurable: true }); } function IsReadableStreamDefaultReader(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) { return false; } return true; } function ReadableStreamDefaultReaderRead(reader, readRequest) { var stream = reader._ownerReadableStream; stream._disturbed = true; if (stream._state === 'closed') { readRequest._closeSteps(); } else if (stream._state === 'errored') { readRequest._errorSteps(stream._storedError); } else { stream._readableStreamController[PullSteps](readRequest); } } function defaultReaderBrandCheckException(name) { return new TypeError("ReadableStreamDefaultReader.prototype." + name + " can only be used on a ReadableStreamDefaultReader"); } var _a; var AsyncIteratorPrototype; if (typeof SymbolPolyfill.asyncIterator === 'symbol') { AsyncIteratorPrototype = (_a = {}, _a[SymbolPolyfill.asyncIterator] = function () { return this; }, _a); Object.defineProperty(AsyncIteratorPrototype, SymbolPolyfill.asyncIterator, { enumerable: false }); } var ReadableStreamAsyncIteratorImpl = function () { function ReadableStreamAsyncIteratorImpl(reader, preventCancel) { this._ongoingPromise = undefined; this._isFinished = false; this._reader = reader; this._preventCancel = preventCancel; } ReadableStreamAsyncIteratorImpl.prototype.next = function () { var _this = this; var nextSteps = function () { return _this._nextSteps(); }; this._ongoingPromise = this._ongoingPromise ? transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) : nextSteps(); return this._ongoingPromise; }; ReadableStreamAsyncIteratorImpl.prototype.return = function (value) { var _this = this; var returnSteps = function () { return _this._returnSteps(value); }; return this._ongoingPromise ? transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) : returnSteps(); }; ReadableStreamAsyncIteratorImpl.prototype._nextSteps = function () { var _this = this; if (this._isFinished) { return Promise.resolve({ value: undefined, done: true }); } var reader = this._reader; if (reader._ownerReadableStream === undefined) { return promiseRejectedWith(readerLockException('iterate')); } var resolvePromise; var rejectPromise; var promise = newPromise(function (resolve, reject) { resolvePromise = resolve; rejectPromise = reject; }); var readRequest = { _chunkSteps: function (chunk) { _this._ongoingPromise = undefined; queueMicrotask(function () { return resolvePromise({ value: chunk, done: false }); }); }, _closeSteps: function () { _this._ongoingPromise = undefined; _this._isFinished = true; ReadableStreamReaderGenericRelease(reader); resolvePromise({ value: undefined, done: true }); }, _errorSteps: function (reason) { _this._ongoingPromise = undefined; _this._isFinished = true; ReadableStreamReaderGenericRelease(reader); rejectPromise(reason); } }; ReadableStreamDefaultReaderRead(reader, readRequest); return promise; }; ReadableStreamAsyncIteratorImpl.prototype._returnSteps = function (value) { if (this._isFinished) { return Promise.resolve({ value: value, done: true }); } this._isFinished = true; var reader = this._reader; if (reader._ownerReadableStream === undefined) { return promiseRejectedWith(readerLockException('finish iterating')); } if (!this._preventCancel) { var result = ReadableStreamReaderGenericCancel(reader, value); ReadableStreamReaderGenericRelease(reader); return transformPromiseWith(result, function () { return { value: value, done: true }; }); } ReadableStreamReaderGenericRelease(reader); return promiseResolvedWith({ value: value, done: true }); }; return ReadableStreamAsyncIteratorImpl; }(); var ReadableStreamAsyncIteratorPrototype = { next: function () { if (!IsReadableStreamAsyncIterator(this)) { return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next')); } return this._asyncIteratorImpl.next(); }, return: function (value) { if (!IsReadableStreamAsyncIterator(this)) { return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return')); } return this._asyncIteratorImpl.return(value); } }; if (AsyncIteratorPrototype !== undefined) { Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype); } function AcquireReadableStreamAsyncIterator(stream, preventCancel) { var reader = AcquireReadableStreamDefaultReader(stream); var impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel); var iterator = Object.create(ReadableStreamAsyncIteratorPrototype); iterator._asyncIteratorImpl = impl; return iterator; } function IsReadableStreamAsyncIterator(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) { return false; } return true; } function streamAsyncIteratorBrandCheckException(name) { return new TypeError("ReadableStreamAsyncIterator." + name + " can only be used on a ReadableSteamAsyncIterator"); } var NumberIsNaN = Number.isNaN || function (x) { return x !== x; }; function IsFiniteNonNegativeNumber(v) { if (!IsNonNegativeNumber(v)) { return false; } if (v === Infinity) { return false; } return true; } function IsNonNegativeNumber(v) { if (typeof v !== 'number') { return false; } if (NumberIsNaN(v)) { return false; } if (v < 0) { return false; } return true; } function DequeueValue(container) { var pair = container._queue.shift(); container._queueTotalSize -= pair.size; if (container._queueTotalSize < 0) { container._queueTotalSize = 0; } return pair.value; } function EnqueueValueWithSize(container, value, size) { size = Number(size); if (!IsFiniteNonNegativeNumber(size)) { throw new RangeError('Size must be a finite, non-NaN, non-negative number.'); } container._queue.push({ value: value, size: size }); container._queueTotalSize += size; } function PeekQueueValue(container) { var pair = container._queue.peek(); return pair.value; } function ResetQueue(container) { container._queue = new SimpleQueue(); container._queueTotalSize = 0; } function CreateArrayFromList(elements) { return elements.slice(); } function CopyDataBlockBytes(dest, destOffset, src, srcOffset, n) { new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset); } function TransferArrayBuffer(O) { return O; } function IsDetachedBuffer(O) { return false; } var ReadableStreamBYOBRequest = function () { function ReadableStreamBYOBRequest() { throw new TypeError('Illegal constructor'); } Object.defineProperty(ReadableStreamBYOBRequest.prototype, "view", { get: function () { if (!IsReadableStreamBYOBRequest(this)) { throw byobRequestBrandCheckException('view'); } return this._view; }, enumerable: false, configurable: true }); ReadableStreamBYOBRequest.prototype.respond = function (bytesWritten) { if (!IsReadableStreamBYOBRequest(this)) { throw byobRequestBrandCheckException('respond'); } assertRequiredArgument(bytesWritten, 1, 'respond'); bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter'); if (this._associatedReadableByteStreamController === undefined) { throw new TypeError('This BYOB request has been invalidated'); } if (IsDetachedBuffer(this._view.buffer)); ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten); }; ReadableStreamBYOBRequest.prototype.respondWithNewView = function (view) { if (!IsReadableStreamBYOBRequest(this)) { throw byobRequestBrandCheckException('respondWithNewView'); } assertRequiredArgument(view, 1, 'respondWithNewView'); if (!ArrayBuffer.isView(view)) { throw new TypeError('You can only respond with array buffer views'); } if (view.byteLength === 0) { throw new TypeError('chunk must have non-zero byteLength'); } if (view.buffer.byteLength === 0) { throw new TypeError("chunk's buffer must have non-zero byteLength"); } if (this._associatedReadableByteStreamController === undefined) { throw new TypeError('This BYOB request has been invalidated'); } ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view); }; return ReadableStreamBYOBRequest; }(); Object.defineProperties(ReadableStreamBYOBRequest.prototype, { respond: { enumerable: true }, respondWithNewView: { enumerable: true }, view: { enumerable: true } }); if (typeof SymbolPolyfill.toStringTag === 'symbol') { Object.defineProperty(ReadableStreamBYOBRequest.prototype, SymbolPolyfill.toStringTag, { value: 'ReadableStreamBYOBRequest', configurable: true }); } var ReadableByteStreamController = function () { function ReadableByteStreamController() { throw new TypeError('Illegal constructor'); } Object.defineProperty(ReadableByteStreamController.prototype, "byobRequest", { get: function () { if (!IsReadableByteStreamController(this)) { throw byteStreamControllerBrandCheckException('byobRequest'); } if (this._byobRequest === null && this._pendingPullIntos.length > 0) { var firstDescriptor = this._pendingPullIntos.peek(); var view = new Uint8Array(firstDescriptor.buffer, firstDescriptor.byteOffset + firstDescriptor.bytesFilled, firstDescriptor.byteLength - firstDescriptor.bytesFilled); var byobRequest = Object.create(ReadableStreamBYOBRequest.prototype); SetUpReadableStreamBYOBRequest(byobRequest, this, view); this._byobRequest = byobRequest; } return this._byobRequest; }, enumerable: false, configurable: true }); Object.defineProperty(ReadableByteStreamController.prototype, "desiredSize", { get: function () { if (!IsReadableByteStreamController(this)) { throw byteStreamControllerBrandCheckException('desiredSize'); } return ReadableByteStreamControllerGetDesiredSize(this); }, enumerable: false, configurable: true }); ReadableByteStreamController.prototype.close = function () { if (!IsReadableByteStreamController(this)) { throw byteStreamControllerBrandCheckException('close'); } if (this._closeRequested) { throw new TypeError('The stream has already been closed; do not close it again!'); } var state = this._controlledReadableByteStream._state; if (state !== 'readable') { throw new TypeError("The stream (in " + state + " state) is not in the readable state and cannot be closed"); } ReadableByteStreamControllerClose(this); }; ReadableByteStreamController.prototype.enqueue = function (chunk) { if (!IsReadableByteStreamController(this)) { throw byteStreamControllerBrandCheckException('enqueue'); } assertRequiredArgument(chunk, 1, 'enqueue'); if (!ArrayBuffer.isView(chunk)) { throw new TypeError('chunk must be an array buffer view'); } if (chunk.byteLength === 0) { throw new TypeError('chunk must have non-zero byteLength'); } if (chunk.buffer.byteLength === 0) { throw new TypeError("chunk's buffer must have non-zero byteLength"); } if (this._closeRequested) { throw new TypeError('stream is closed or draining'); } var state = this._controlledReadableByteStream._state; if (state !== 'readable') { throw new TypeError("The stream (in " + state + " state) is not in the readable state and cannot be enqueued to"); } ReadableByteStreamControllerEnqueue(this, chunk); }; ReadableByteStreamController.prototype.error = function (e) { if (e === void 0) { e = undefined; } if (!IsReadableByteStreamController(this)) { throw byteStreamControllerBrandCheckException('error'); } ReadableByteStreamControllerError(this, e); }; ReadableByteStreamController.prototype[CancelSteps] = function (reason) { if (this._pendingPullIntos.length > 0) { var firstDescriptor = this._pendingPullIntos.peek(); firstDescriptor.bytesFilled = 0; } ResetQueue(this); var result = this._cancelAlgorithm(reason); ReadableByteStreamControllerClearAlgorithms(this); return result; }; ReadableByteStreamController.prototype[PullSteps] = function (readRequest) { var stream = this._controlledReadableByteStream; if (this._queueTotalSize > 0) { var entry = this._queue.shift(); this._queueTotalSize -= entry.byteLength; ReadableByteStreamControllerHandleQueueDrain(this); var view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength); readRequest._chunkSteps(view); return; } var autoAllocateChunkSize = this._autoAllocateChunkSize; if (autoAllocateChunkSize !== undefined) { var buffer = void 0; try { buffer = new ArrayBuffer(autoAllocateChunkSize); } catch (bufferE) { readRequest._errorSteps(bufferE); return; } var pullIntoDescriptor = { buffer: buffer, byteOffset: 0, byteLength: autoAllocateChunkSize, bytesFilled: 0, elementSize: 1, viewConstructor: Uint8Array, readerType: 'default' }; this._pendingPullIntos.push(pullIntoDescriptor); } ReadableStreamAddReadRequest(stream, readRequest); ReadableByteStreamControllerCallPullIfNeeded(this); }; return ReadableByteStreamController; }(); Object.defineProperties(ReadableByteStreamController.prototype, { close: { enumerable: true }, enqueue: { enumerable: true }, error: { enumerable: true }, byobRequest: { enumerable: true }, desiredSize: { enumerable: true } }); if (typeof SymbolPolyfill.toStringTag === 'symbol') { Object.defineProperty(ReadableByteStreamController.prototype, SymbolPolyfill.toStringTag, { value: 'ReadableByteStreamController', configurable: true }); } function IsReadableByteStreamController(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) { return false; } return true; } function IsReadableStreamBYOBRequest(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) { return false; } return true; } function ReadableByteStreamControllerCallPullIfNeeded(controller) { var shouldPull = ReadableByteStreamControllerShouldCallPull(controller); if (!shouldPull) { return; } if (controller._pulling) { controller._pullAgain = true; return; } controller._pulling = true; var pullPromise = controller._pullAlgorithm(); uponPromise(pullPromise, function () { controller._pulling = false; if (controller._pullAgain) { controller._pullAgain = false; ReadableByteStreamControllerCallPullIfNeeded(controller); } }, function (e) { ReadableByteStreamControllerError(controller, e); }); } function ReadableByteStreamControllerClearPendingPullIntos(controller) { ReadableByteStreamControllerInvalidateBYOBRequest(controller); controller._pendingPullIntos = new SimpleQueue(); } function ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor) { var done = false; if (stream._state === 'closed') { done = true; } var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor); if (pullIntoDescriptor.readerType === 'default') { ReadableStreamFulfillReadRequest(stream, filledView, done); } else { ReadableStreamFulfillReadIntoRequest(stream, filledView, done); } } function ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor) { var bytesFilled = pullIntoDescriptor.bytesFilled; var elementSize = pullIntoDescriptor.elementSize; return new pullIntoDescriptor.viewConstructor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize); } function ReadableByteStreamControllerEnqueueChunkToQueue(controller, buffer, byteOffset, byteLength) { controller._queue.push({ buffer: buffer, byteOffset: byteOffset, byteLength: byteLength }); controller._queueTotalSize += byteLength; } function ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) { var elementSize = pullIntoDescriptor.elementSize; var currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize; var maxBytesToCopy = Math.min(controller._queueTotalSize, pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled); var maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy; var maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize; var totalBytesToCopyRemaining = maxBytesToCopy; var ready = false; if (maxAlignedBytes > currentAlignedBytes) { totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled; ready = true; } var queue = controller._queue; while (totalBytesToCopyRemaining > 0) { var headOfQueue = queue.peek(); var bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength); var destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled; CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy); if (headOfQueue.byteLength === bytesToCopy) { queue.shift(); } else { headOfQueue.byteOffset += bytesToCopy; headOfQueue.byteLength -= bytesToCopy; } controller._queueTotalSize -= bytesToCopy; ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor); totalBytesToCopyRemaining -= bytesToCopy; } return ready; } function ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, size, pullIntoDescriptor) { ReadableByteStreamControllerInvalidateBYOBRequest(controller); pullIntoDescriptor.bytesFilled += size; } function ReadableByteStreamControllerHandleQueueDrain(controller) { if (controller._queueTotalSize === 0 && controller._closeRequested) { ReadableByteStreamControllerClearAlgorithms(controller); ReadableStreamClose(controller._controlledReadableByteStream); } else { ReadableByteStreamControllerCallPullIfNeeded(controller); } } function ReadableByteStreamControllerInvalidateBYOBRequest(controller) { if (controller._byobRequest === null) { return; } controller._byobRequest._associatedReadableByteStreamController = undefined; controller._byobRequest._view = null; controller._byobRequest = null; } function ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller) { while (controller._pendingPullIntos.length > 0) { if (controller._queueTotalSize === 0) { return; } var pullIntoDescriptor = controller._pendingPullIntos.peek(); if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) { ReadableByteStreamControllerShiftPendingPullInto(controller); ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor); } } } function ReadableByteStreamControllerPullInto(controller, view, readIntoRequest) { var stream = controller._controlledReadableByteStream; var elementSize = 1; if (view.constructor !== DataView) { elementSize = view.constructor.BYTES_PER_ELEMENT; } var ctor = view.constructor; var buffer = TransferArrayBuffer(view.buffer); var pullIntoDescriptor = { buffer: buffer, byteOffset: view.byteOffset, byteLength: view.byteLength, bytesFilled: 0, elementSize: elementSize, viewConstructor: ctor, readerType: 'byob' }; if (controller._pendingPullIntos.length > 0) { controller._pendingPullIntos.push(pullIntoDescriptor); ReadableStreamAddReadIntoRequest(stream, readIntoRequest); return; } if (stream._state === 'closed') { var emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0); readIntoRequest._closeSteps(emptyView); return; } if (controller._queueTotalSize > 0) { if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) { var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor); ReadableByteStreamControllerHandleQueueDrain(controller); readIntoRequest._chunkSteps(filledView); return; } if (controller._closeRequested) { var e = new TypeError('Insufficient bytes to fill elements in the given buffer'); ReadableByteStreamControllerError(controller, e); readIntoRequest._errorSteps(e); return; } } controller._pendingPullIntos.push(pullIntoDescriptor); ReadableStreamAddReadIntoRequest(stream, readIntoRequest); ReadableByteStreamControllerCallPullIfNeeded(controller); } function ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor) { firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer); var stream = controller._controlledReadableByteStream; if (ReadableStreamHasBYOBReader(stream)) { while (ReadableStreamGetNumReadIntoRequests(stream) > 0) { var pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller); ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor); } } } function ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, pullIntoDescriptor) { if (pullIntoDescriptor.bytesFilled + bytesWritten > pullIntoDescriptor.byteLength) { throw new RangeError('bytesWritten out of range'); } ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor); if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) { return; } ReadableByteStreamControllerShiftPendingPullInto(controller); var remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize; if (remainderSize > 0) { var end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled; var remainder = pullIntoDescriptor.buffer.slice(end - remainderSize, end); ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength); } pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer); pullIntoDescriptor.bytesFilled -= remainderSize; ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor); ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller); } function ReadableByteStreamControllerRespondInternal(controller, bytesWritten) { var firstDescriptor = controller._pendingPullIntos.peek(); var state = controller._controlledReadableByteStream._state; if (state === 'closed') { if (bytesWritten !== 0) { throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream'); } ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor); } else { ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor); } ReadableByteStreamControllerCallPullIfNeeded(controller); } function ReadableByteStreamControllerShiftPendingPullInto(controller) { var descriptor = controller._pendingPullIntos.shift(); ReadableByteStreamControllerInvalidateBYOBRequest(controller); return descriptor; } function ReadableByteStreamControllerShouldCallPull(controller) { var stream = controller._controlledReadableByteStream; if (stream._state !== 'readable') { return false; } if (controller._closeRequested) { return false; } if (!controller._started) { return false; } if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) { return true; } if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) { return true; } var desiredSize = ReadableByteStreamControllerGetDesiredSize(controller); if (desiredSize > 0) { return true; } return false; } function ReadableByteStreamControllerClearAlgorithms(controller) { controller._pullAlgorithm = undefined; controller._cancelAlgorithm = undefined; } function ReadableByteStreamControllerClose(controller) { var stream = controller._controlledReadableByteStream; if (controller._closeRequested || stream._state !== 'readable') { return; } if (controller._queueTotalSize > 0) { controller._closeRequested = true; return; } if (controller._pendingPullIntos.length > 0) { var firstPendingPullInto = controller._pendingPullIntos.peek(); if (firstPendingPullInto.bytesFilled > 0) { var e = new TypeError('Insufficient bytes to fill elements in the given buffer'); ReadableByteStreamControllerError(controller, e); throw e; } } ReadableByteStreamControllerClearAlgorithms(controller); ReadableStreamClose(stream); } function ReadableByteStreamControllerEnqueue(controller, chunk) { var stream = controller._controlledReadableByteStream; if (controller._closeRequested || stream._state !== 'readable') { return; } var buffer = chunk.buffer; var byteOffset = chunk.byteOffset; var byteLength = chunk.byteLength; var transferredBuffer = TransferArrayBuffer(buffer); if (ReadableStreamHasDefaultReader(stream)) { if (ReadableStreamGetNumReadRequests(stream) === 0) { ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength); } else { var transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength); ReadableStreamFulfillReadRequest(stream, transferredView, false); } } else if (ReadableStreamHasBYOBReader(stream)) { ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength); ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller); } else { ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength); } ReadableByteStreamControllerCallPullIfNeeded(controller); } function ReadableByteStreamControllerError(controller, e) { var stream = controller._controlledReadableByteStream; if (stream._state !== 'readable') { return; } ReadableByteStreamControllerClearPendingPullIntos(controller); ResetQueue(controller); ReadableByteStreamControllerClearAlgorithms(controller); ReadableStreamError(stream, e); } function ReadableByteStreamControllerGetDesiredSize(controller) { var state = controller._controlledReadableByteStream._state; if (state === 'errored') { return null; } if (state === 'closed') { return 0; } return controller._strategyHWM - controller._queueTotalSize; } function ReadableByteStreamControllerRespond(controller, bytesWritten) { bytesWritten = Number(bytesWritten); if (!IsFiniteNonNegativeNumber(bytesWritten)) { throw new RangeError('bytesWritten must be a finite'); } ReadableByteStreamControllerRespondInternal(controller, bytesWritten); } function ReadableByteStreamControllerRespondWithNewView(controller, view) { var firstDescriptor = controller._pendingPullIntos.peek(); if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) { throw new RangeError('The region specified by view does not match byobRequest'); } if (firstDescriptor.byteLength !== view.byteLength) { throw new RangeError('The buffer of view has different capacity than byobRequest'); } firstDescriptor.buffer = view.buffer; ReadableByteStreamControllerRespondInternal(controller, view.byteLength); } function SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize) { controller._controlledReadableByteStream = stream; controller._pullAgain = false; controller._pulling = false; controller._byobRequest = null; controller._queue = controller._queueTotalSize = undefined; ResetQueue(controller); controller._closeRequested = false; controller._started = false; controller._strategyHWM = highWaterMark; controller._pullAlgorithm = pullAlgorithm; controller._cancelAlgorithm = cancelAlgorithm; controller._autoAllocateChunkSize = autoAllocateChunkSize; controller._pendingPullIntos = new SimpleQueue(); stream._readableStreamController = controller; var startResult = startAlgorithm(); uponPromise(promiseResolvedWith(startResult), function () { controller._started = true; ReadableByteStreamControllerCallPullIfNeeded(controller); }, function (r) { ReadableByteStreamControllerError(controller, r); }); } function SetUpReadableByteStreamControllerFromUnderlyingSource(stream, underlyingByteSource, highWaterMark) { var controller = Object.create(ReadableByteStreamController.prototype); var startAlgorithm = function () { return undefined; }; var pullAlgorithm = function () { return promiseResolvedWith(undefined); }; var cancelAlgorithm = function () { return promiseResolvedWith(undefined); }; if (underlyingByteSource.start !== undefined) { startAlgorithm = function () { return underlyingByteSource.start(controller); }; } if (underlyingByteSource.pull !== undefined) { pullAlgorithm = function () { return underlyingByteSource.pull(controller); }; } if (underlyingByteSource.cancel !== undefined) { cancelAlgorithm = function (reason) { return underlyingByteSource.cancel(reason); }; } var autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize; SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize); } function SetUpReadableStreamBYOBRequest(request, controller, view) { request._associatedReadableByteStreamController = controller; request._view = view; } function byobRequestBrandCheckException(name) { return new TypeError("ReadableStreamBYOBRequest.prototype." + name + " can only be used on a ReadableStreamBYOBRequest"); } function byteStreamControllerBrandCheckException(name) { return new TypeError("ReadableByteStreamController.prototype." + name + " can only be used on a ReadableByteStreamController"); } function AcquireReadableStreamBYOBReader(stream) { return new ReadableStreamBYOBReader(stream); } function ReadableStreamAddReadIntoRequest(stream, readIntoRequest) { stream._reader._readIntoRequests.push(readIntoRequest); } function ReadableStreamFulfillReadIntoRequest(stream, chunk, done) { var reader = stream._reader; var readIntoRequest = reader._readIntoRequests.shift(); if (done) { readIntoRequest._closeSteps(chunk); } else { readIntoRequest._chunkSteps(chunk); } } function ReadableStreamGetNumReadIntoRequests(stream) { return stream._reader._readIntoRequests.length; } function ReadableStreamHasBYOBReader(stream) { var reader = stream._reader; if (reader === undefined) { return false; } if (!IsReadableStreamBYOBReader(reader)) { return false; } return true; } var ReadableStreamBYOBReader = function () { function ReadableStreamBYOBReader(stream) { assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader'); assertReadableStream(stream, 'First parameter'); if (IsReadableStreamLocked(stream)) { throw new TypeError('This stream has already been locked for exclusive reading by another reader'); } if (!IsReadableByteStreamController(stream._readableStreamController)) { throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' + 'source'); } ReadableStreamReaderGenericInitialize(this, stream); this._readIntoRequests = new SimpleQueue(); } Object.defineProperty(ReadableStreamBYOBReader.prototype, "closed", { get: function () { if (!IsReadableStreamBYOBReader(this)) { return promiseRejectedWith(byobReaderBrandCheckException('closed')); } return this._closedPromise; }, enumerable: false, configurable: true }); ReadableStreamBYOBReader.prototype.cancel = function (reason) { if (reason === void 0) { reason = undefined; } if (!IsReadableStreamBYOBReader(this)) { return promiseRejectedWith(byobReaderBrandCheckException('cancel')); } if (this._ownerReadableStream === undefined) { return promiseRejectedWith(readerLockException('cancel')); } return ReadableStreamReaderGenericCancel(this, reason); }; ReadableStreamBYOBReader.prototype.read = function (view) { if (!IsReadableStreamBYOBReader(this)) { return promiseRejectedWith(byobReaderBrandCheckException('read')); } if (!ArrayBuffer.isView(view)) { return promiseRejectedWith(new TypeError('view must be an array buffer view')); } if (view.byteLength === 0) { return promiseRejectedWith(new TypeError('view must have non-zero byteLength')); } if (view.buffer.byteLength === 0) { return promiseRejectedWith(new TypeError("view's buffer must have non-zero byteLength")); } if (this._ownerReadableStream === undefined) { return promiseRejectedWith(readerLockException('read from')); } var resolvePromise; var rejectPromise; var promise = newPromise(function (resolve, reject) { resolvePromise = resolve; rejectPromise = reject; }); var readIntoRequest = { _chunkSteps: function (chunk) { return resolvePromise({ value: chunk, done: false }); }, _closeSteps: function (chunk) { return resolvePromise({ value: chunk, done: true }); }, _errorSteps: function (e) { return rejectPromise(e); } }; ReadableStreamBYOBReaderRead(this, view, readIntoRequest); return promise; }; ReadableStreamBYOBReader.prototype.releaseLock = function () { if (!IsReadableStreamBYOBReader(this)) { throw byobReaderBrandCheckException('releaseLock'); } if (this._ownerReadableStream === undefined) { return; } if (this._readIntoRequests.length > 0) { throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled'); } ReadableStreamReaderGenericRelease(this); }; return ReadableStreamBYOBReader; }(); Object.defineProperties(ReadableStreamBYOBReader.prototype, { cancel: { enumerable: true }, read: { enumerable: true }, releaseLock: { enumerable: true }, closed: { enumerable: true } }); if (typeof SymbolPolyfill.toStringTag === 'symbol') { Object.defineProperty(ReadableStreamBYOBReader.prototype, SymbolPolyfill.toStringTag, { value: 'ReadableStreamBYOBReader', configurable: true }); } function IsReadableStreamBYOBReader(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) { return false; } return true; } function ReadableStreamBYOBReaderRead(reader, view, readIntoRequest) { var stream = reader._ownerReadableStream; stream._disturbed = true; if (stream._state === 'errored') { readIntoRequest._errorSteps(stream._storedError); } else { ReadableByteStreamControllerPullInto(stream._readableStreamController, view, readIntoRequest); } } function byobReaderBrandCheckException(name) { return new TypeError("ReadableStreamBYOBReader.prototype." + name + " can only be used on a ReadableStreamBYOBReader"); } function ExtractHighWaterMark(strategy, defaultHWM) { var highWaterMark = strategy.highWaterMark; if (highWaterMark === undefined) { return defaultHWM; } if (NumberIsNaN(highWaterMark) || highWaterMark < 0) { throw new RangeError('Invalid highWaterMark'); } return highWaterMark; } function ExtractSizeAlgorithm(strategy) { var size = strategy.size; if (!size) { return function () { return 1; }; } return size; } function convertQueuingStrategy(init, context) { assertDictionary(init, context); var highWaterMark = init === null || init === void 0 ? void 0 : init.highWaterMark; var size = init === null || init === void 0 ? void 0 : init.size; return { highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark), size: size === undefined ? undefined : convertQueuingStrategySize(size, context + " has member 'size' that") }; } function convertQueuingStrategySize(fn, context) { assertFunction(fn, context); return function (chunk) { return convertUnrestrictedDouble(fn(chunk)); }; } function convertUnderlyingSink(original, context) { assertDictionary(original, context); var abort = original === null || original === void 0 ? void 0 : original.abort; var close = original === null || original === void 0 ? void 0 : original.close; var start = original === null || original === void 0 ? void 0 : original.start; var type = original === null || original === void 0 ? void 0 : original.type; var write = original === null || original === void 0 ? void 0 : original.write; return { abort: abort === undefined ? undefined : convertUnderlyingSinkAbortCallback(abort, original, context + " has member 'abort' that"), close: close === undefined ? undefined : convertUnderlyingSinkCloseCallback(close, original, context + " has member 'close' that"), start: start === undefined ? undefined : convertUnderlyingSinkStartCallback(start, original, context + " has member 'start' that"), write: write === undefined ? undefined : convertUnderlyingSinkWriteCallback(write, original, context + " has member 'write' that"), type: type }; } function convertUnderlyingSinkAbortCallback(fn, original, context) { assertFunction(fn, context); return function (reason) { return promiseCall(fn, original, [reason]); }; } function convertUnderlyingSinkCloseCallback(fn, original, context) { assertFunction(fn, context); return function () { return promiseCall(fn, original, []); }; } function convertUnderlyingSinkStartCallback(fn, original, context) { assertFunction(fn, context); return function (controller) { return reflectCall(fn, original, [controller]); }; } function convertUnderlyingSinkWriteCallback(fn, original, context) { assertFunction(fn, context); return function (chunk, controller) { return promiseCall(fn, original, [ chunk, controller ]); }; } function assertWritableStream(x, context) { if (!IsWritableStream(x)) { throw new TypeError(context + " is not a WritableStream."); } } var WritableStream = function () { function WritableStream(rawUnderlyingSink, rawStrategy) { if (rawUnderlyingSink === void 0) { rawUnderlyingSink = {}; } if (rawStrategy === void 0) { rawStrategy = {}; } if (rawUnderlyingSink === undefined) { rawUnderlyingSink = null; } else { assertObject(rawUnderlyingSink, 'First parameter'); } var strategy = convertQueuingStrategy(rawStrategy, 'Second parameter'); var underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter'); InitializeWritableStream(this); var type = underlyingSink.type; if (type !== undefined) { throw new RangeError('Invalid type is specified'); } var sizeAlgorithm = ExtractSizeAlgorithm(strategy); var highWaterMark = ExtractHighWaterMark(strategy, 1); SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm); } Object.defineProperty(WritableStream.prototype, "locked", { get: function () { if (!IsWritableStream(this)) { throw streamBrandCheckException('locked'); } return IsWritableStreamLocked(this); }, enumerable: false, configurable: true }); WritableStream.prototype.abort = function (reason) { if (reason === void 0) { reason = undefined; } if (!IsWritableStream(this)) { return promiseRejectedWith(streamBrandCheckException('abort')); } if (IsWritableStreamLocked(this)) { return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer')); } return WritableStreamAbort(this, reason); }; WritableStream.prototype.close = function () { if (!IsWritableStream(this)) { return promiseRejectedWith(streamBrandCheckException('close')); } if (IsWritableStreamLocked(this)) { return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer')); } if (WritableStreamCloseQueuedOrInFlight(this)) { return promiseRejectedWith(new TypeError('Cannot close an already-closing stream')); } return WritableStreamClose(this); }; WritableStream.prototype.getWriter = function () { if (!IsWritableStream(this)) { throw streamBrandCheckException('getWriter'); } return AcquireWritableStreamDefaultWriter(this); }; return WritableStream; }(); Object.defineProperties(WritableStream.prototype, { abort: { enumerable: true }, close: { enumerable: true }, getWriter: { enumerable: true }, locked: { enumerable: true } }); if (typeof SymbolPolyfill.toStringTag === 'symbol') { Object.defineProperty(WritableStream.prototype, SymbolPolyfill.toStringTag, { value: 'WritableStream', configurable: true }); } function AcquireWritableStreamDefaultWriter(stream) { return new WritableStreamDefaultWriter(stream); } function CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm) { if (highWaterMark === void 0) { highWaterMark = 1; } if (sizeAlgorithm === void 0) { sizeAlgorithm = function () { return 1; }; } var stream = Object.create(WritableStream.prototype); InitializeWritableStream(stream); var controller = Object.create(WritableStreamDefaultController.prototype); SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm); return stream; } function InitializeWritableStream(stream) { stream._state = 'writable'; stream._storedError = undefined; stream._writer = undefined; stream._writableStreamController = undefined; stream._writeRequests = new SimpleQueue(); stream._inFlightWriteRequest = undefined; stream._closeRequest = undefined; stream._inFlightCloseRequest = undefined; stream._pendingAbortRequest = undefined; stream._backpressure = false; } function IsWritableStream(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) { return false; } return true; } function IsWritableStreamLocked(stream) { if (stream._writer === undefined) { return false; } return true; } function WritableStreamAbort(stream, reason) { var state = stream._state; if (state === 'closed' || state === 'errored') { return promiseResolvedWith(undefined); } if (stream._pendingAbortRequest !== undefined) { return stream._pendingAbortRequest._promise; } var wasAlreadyErroring = false; if (state === 'erroring') { wasAlreadyErroring = true; reason = undefined; } var promise = newPromise(function (resolve, reject) { stream._pendingAbortRequest = { _promise: undefined, _resolve: resolve, _reject: reject, _reason: reason, _wasAlreadyErroring: wasAlreadyErroring }; }); stream._pendingAbortRequest._promise = promise; if (!wasAlreadyErroring) { WritableStreamStartErroring(stream, reason); } return promise; } function WritableStreamClose(stream) { var state = stream._state; if (state === 'closed' || state === 'errored') { return promiseRejectedWith(new TypeError("The stream (in " + state + " state) is not in the writable state and cannot be closed")); } var promise = newPromise(function (resolve, reject) { var closeRequest = { _resolve: resolve, _reject: reject }; stream._closeRequest = closeRequest; }); var writer = stream._writer; if (writer !== undefined && stream._backpressure && state === 'writable') { defaultWriterReadyPromiseResolve(writer); } WritableStreamDefaultControllerClose(stream._writableStreamController); return promise; } function WritableStreamAddWriteRequest(stream) { var promise = newPromise(function (resolve, reject) { var writeRequest = { _resolve: resolve, _reject: reject }; stream._writeRequests.push(writeRequest); }); return promise; } function WritableStreamDealWithRejection(stream, error) { var state = stream._state; if (state === 'writable') { WritableStreamStartErroring(stream, error); return; } WritableStreamFinishErroring(stream); } function WritableStreamStartErroring(stream, reason) { var controller = stream._writableStreamController; stream._state = 'erroring'; stream._storedError = reason; var writer = stream._writer; if (writer !== undefined) { WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason); } if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) { WritableStreamFinishErroring(stream); } } function WritableStreamFinishErroring(stream) { stream._state = 'errored'; stream._writableStreamController[ErrorSteps](); var storedError = stream._storedError; stream._writeRequests.forEach(function (writeRequest) { writeRequest._reject(storedError); }); stream._writeRequests = new SimpleQueue(); if (stream._pendingAbortRequest === undefined) { WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); return; } var abortRequest = stream._pendingAbortRequest; stream._pendingAbortRequest = undefined; if (abortRequest._wasAlreadyErroring) { abortRequest._reject(storedError); WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); return; } var promise = stream._writableStreamController[AbortSteps](abortRequest._reason); uponPromise(promise, function () { abortRequest._resolve(); WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); }, function (reason) { abortRequest._reject(reason); WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); }); } function WritableStreamFinishInFlightWrite(stream) { stream._inFlightWriteRequest._resolve(undefined); stream._inFlightWriteRequest = undefined; } function WritableStreamFinishInFlightWriteWithError(stream, error) { stream._inFlightWriteRequest._reject(error); stream._inFlightWriteRequest = undefined; WritableStreamDealWithRejection(stream, error); } function WritableStreamFinishInFlightClose(stream) { stream._inFlightCloseRequest._resolve(undefined); stream._inFlightCloseRequest = undefined; var state = stream._state; if (state === 'erroring') { stream._storedError = undefined; if (stream._pendingAbortRequest !== undefined) { stream._pendingAbortRequest._resolve(); stream._pendingAbortRequest = undefined; } } stream._state = 'closed'; var writer = stream._writer; if (writer !== undefined) { defaultWriterClosedPromiseResolve(writer); } } function WritableStreamFinishInFlightCloseWithError(stream, error) { stream._inFlightCloseRequest._reject(error); stream._inFlightCloseRequest = undefined; if (stream._pendingAbortRequest !== undefined) { stream._pendingAbortRequest._reject(error); stream._pendingAbortRequest = undefined; } WritableStreamDealWithRejection(stream, error); } function WritableStreamCloseQueuedOrInFlight(stream) { if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) { return false; } return true; } function WritableStreamHasOperationMarkedInFlight(stream) { if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) { return false; } return true; } function WritableStreamMarkCloseRequestInFlight(stream) { stream._inFlightCloseRequest = stream._closeRequest; stream._closeRequest = undefined; } function WritableStreamMarkFirstWriteRequestInFlight(stream) { stream._inFlightWriteRequest = stream._writeRequests.shift(); } function WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream) { if (stream._closeRequest !== undefined) { stream._closeRequest._reject(stream._storedError); stream._closeRequest = undefined; } var writer = stream._writer; if (writer !== undefined) { defaultWriterClosedPromiseReject(writer, stream._storedError); } } function WritableStreamUpdateBackpressure(stream, backpressure) { var writer = stream._writer; if (writer !== undefined && backpressure !== stream._backpressure) { if (backpressure) { defaultWriterReadyPromiseReset(writer); } else { defaultWriterReadyPromiseResolve(writer); } } stream._backpressure = backpressure; } var WritableStreamDefaultWriter = function () { function WritableStreamDefaultWriter(stream) { assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter'); assertWritableStream(stream, 'First parameter'); if (IsWritableStreamLocked(stream)) { throw new TypeError('This stream has already been locked for exclusive writing by another writer'); } this._ownerWritableStream = stream; stream._writer = this; var state = stream._state; if (state === 'writable') { if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) { defaultWriterReadyPromiseInitialize(this); } else { defaultWriterReadyPromiseInitializeAsResolved(this); } defaultWriterClosedPromiseInitialize(this); } else if (state === 'erroring') { defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError); defaultWriterClosedPromiseInitialize(this); } else if (state === 'closed') { defaultWriterReadyPromiseInitializeAsResolved(this); defaultWriterClosedPromiseInitializeAsResolved(this); } else { var storedError = stream._storedError; defaultWriterReadyPromiseInitializeAsRejected(this, storedError); defaultWriterClosedPromiseInitializeAsRejected(this, storedError); } } Object.defineProperty(WritableStreamDefaultWriter.prototype, "closed", { get: function () { if (!IsWritableStreamDefaultWriter(this)) { return promiseRejectedWith(defaultWriterBrandCheckException('closed')); } return this._closedPromise; }, enumerable: false, configurable: true }); Object.defineProperty(WritableStreamDefaultWriter.prototype, "desiredSize", { get: function () { if (!IsWritableStreamDefaultWriter(this)) { throw defaultWriterBrandCheckException('desiredSize'); } if (this._ownerWritableStream === undefined) { throw defaultWriterLockException('desiredSize'); } return WritableStreamDefaultWriterGetDesiredSize(this); }, enumerable: false, configurable: true }); Object.defineProperty(WritableStreamDefaultWriter.prototype, "ready", { get: function () { if (!IsWritableStreamDefaultWriter(this)) { return promiseRejectedWith(defaultWriterBrandCheckException('ready')); } return this._readyPromise; }, enumerable: false, configurable: true }); WritableStreamDefaultWriter.prototype.abort = function (reason) { if (reason === void 0) { reason = undefined; } if (!IsWritableStreamDefaultWriter(this)) { return promiseRejectedWith(defaultWriterBrandCheckException('abort')); } if (this._ownerWritableStream === undefined) { return promiseRejectedWith(defaultWriterLockException('abort')); } return WritableStreamDefaultWriterAbort(this, reason); }; WritableStreamDefaultWriter.prototype.close = function () { if (!IsWritableStreamDefaultWriter(this)) { return promiseRejectedWith(defaultWriterBrandCheckException('close')); } var stream = this._ownerWritableStream; if (stream === undefined) { return promiseRejectedWith(defaultWriterLockException('close')); } if (WritableStreamCloseQueuedOrInFlight(stream)) { return promiseRejectedWith(new TypeError('Cannot close an already-closing stream')); } return WritableStreamDefaultWriterClose(this); }; WritableStreamDefaultWriter.prototype.releaseLock = function () { if (!IsWritableStreamDefaultWriter(this)) { throw defaultWriterBrandCheckException('releaseLock'); } var stream = this._ownerWritableStream; if (stream === undefined) { return; } WritableStreamDefaultWriterRelease(this); }; WritableStreamDefaultWriter.prototype.write = function (chunk) { if (chunk === void 0) { chunk = undefined; } if (!IsWritableStreamDefaultWriter(this)) { return promiseRejectedWith(defaultWriterBrandCheckException('write')); } if (this._ownerWritableStream === undefined) { return promiseRejectedWith(defaultWriterLockException('write to')); } return WritableStreamDefaultWriterWrite(this, chunk); }; return WritableStreamDefaultWriter; }(); Object.defineProperties(WritableStreamDefaultWriter.prototype, { abort: { enumerable: true }, close: { enumerable: true }, releaseLock: { enumerable: true }, write: { enumerable: true }, closed: { enumerable: true }, desiredSize: { enumerable: true }, ready: { enumerable: true } }); if (typeof SymbolPolyfill.toStringTag === 'symbol') { Object.defineProperty(WritableStreamDefaultWriter.prototype, SymbolPolyfill.toStringTag, { value: 'WritableStreamDefaultWriter', configurable: true }); } function IsWritableStreamDefaultWriter(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) { return false; } return true; } function WritableStreamDefaultWriterAbort(writer, reason) { var stream = writer._ownerWritableStream; return WritableStreamAbort(stream, reason); } function WritableStreamDefaultWriterClose(writer) { var stream = writer._ownerWritableStream; return WritableStreamClose(stream); } function WritableStreamDefaultWriterCloseWithErrorPropagation(writer) { var stream = writer._ownerWritableStream; var state = stream._state; if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') { return promiseResolvedWith(undefined); } if (state === 'errored') { return promiseRejectedWith(stream._storedError); } return WritableStreamDefaultWriterClose(writer); } function WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, error) { if (writer._closedPromiseState === 'pending') { defaultWriterClosedPromiseReject(writer, error); } else { defaultWriterClosedPromiseResetToRejected(writer, error); } } function WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, error) { if (writer._readyPromiseState === 'pending') { defaultWriterReadyPromiseReject(writer, error); } else { defaultWriterReadyPromiseResetToRejected(writer, error); } } function WritableStreamDefaultWriterGetDesiredSize(writer) { var stream = writer._ownerWritableStream; var state = stream._state; if (state === 'errored' || state === 'erroring') { return null; } if (state === 'closed') { return 0; } return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController); } function WritableStreamDefaultWriterRelease(writer) { var stream = writer._ownerWritableStream; var releasedError = new TypeError("Writer was released and can no longer be used to monitor the stream's closedness"); WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError); WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError); stream._writer = undefined; writer._ownerWritableStream = undefined; } function WritableStreamDefaultWriterWrite(writer, chunk) { var stream = writer._ownerWritableStream; var controller = stream._writableStreamController; var chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk); if (stream !== writer._ownerWritableStream) { return promiseRejectedWith(defaultWriterLockException('write to')); } var state = stream._state; if (state === 'errored') { return promiseRejectedWith(stream._storedError); } if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') { return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to')); } if (state === 'erroring') { return promiseRejectedWith(stream._storedError); } var promise = WritableStreamAddWriteRequest(stream); WritableStreamDefaultControllerWrite(controller, chunk, chunkSize); return promise; } var closeSentinel = {}; var WritableStreamDefaultController = function () { function WritableStreamDefaultController() { throw new TypeError('Illegal constructor'); } WritableStreamDefaultController.prototype.error = function (e) { if (e === void 0) { e = undefined; } if (!IsWritableStreamDefaultController(this)) { throw new TypeError('WritableStreamDefaultController.prototype.error can only be used on a WritableStreamDefaultController'); } var state = this._controlledWritableStream._state; if (state !== 'writable') { return; } WritableStreamDefaultControllerError(this, e); }; WritableStreamDefaultController.prototype[AbortSteps] = function (reason) { var result = this._abortAlgorithm(reason); WritableStreamDefaultControllerClearAlgorithms(this); return result; }; WritableStreamDefaultController.prototype[ErrorSteps] = function () { ResetQueue(this); }; return WritableStreamDefaultController; }(); Object.defineProperties(WritableStreamDefaultController.prototype, { error: { enumerable: true } }); if (typeof SymbolPolyfill.toStringTag === 'symbol') { Object.defineProperty(WritableStreamDefaultController.prototype, SymbolPolyfill.toStringTag, { value: 'WritableStreamDefaultController', configurable: true }); } function IsWritableStreamDefaultController(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) { return false; } return true; } function SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm) { controller._controlledWritableStream = stream; stream._writableStreamController = controller; controller._queue = undefined; controller._queueTotalSize = undefined; ResetQueue(controller); controller._started = false; controller._strategySizeAlgorithm = sizeAlgorithm; controller._strategyHWM = highWaterMark; controller._writeAlgorithm = writeAlgorithm; controller._closeAlgorithm = closeAlgorithm; controller._abortAlgorithm = abortAlgorithm; var backpressure = WritableStreamDefaultControllerGetBackpressure(controller); WritableStreamUpdateBackpressure(stream, backpressure); var startResult = startAlgorithm(); var startPromise = promiseResolvedWith(startResult); uponPromise(startPromise, function () { controller._started = true; WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); }, function (r) { controller._started = true; WritableStreamDealWithRejection(stream, r); }); } function SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream, underlyingSink, highWaterMark, sizeAlgorithm) { var controller = Object.create(WritableStreamDefaultController.prototype); var startAlgorithm = function () { return undefined; }; var writeAlgorithm = function () { return promiseResolvedWith(undefined); }; var closeAlgorithm = function () { return promiseResolvedWith(undefined); }; var abortAlgorithm = function () { return promiseResolvedWith(undefined); }; if (underlyingSink.start !== undefined) { startAlgorithm = function () { return underlyingSink.start(controller); }; } if (underlyingSink.write !== undefined) { writeAlgorithm = function (chunk) { return underlyingSink.write(chunk, controller); }; } if (underlyingSink.close !== undefined) { closeAlgorithm = function () { return underlyingSink.close(); }; } if (underlyingSink.abort !== undefined) { abortAlgorithm = function (reason) { return underlyingSink.abort(reason); }; } SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm); } function WritableStreamDefaultControllerClearAlgorithms(controller) { controller._writeAlgorithm = undefined; controller._closeAlgorithm = undefined; controller._abortAlgorithm = undefined; controller._strategySizeAlgorithm = undefined; } function WritableStreamDefaultControllerClose(controller) { EnqueueValueWithSize(controller, closeSentinel, 0); WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); } function WritableStreamDefaultControllerGetChunkSize(controller, chunk) { try { return controller._strategySizeAlgorithm(chunk); } catch (chunkSizeE) { WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE); return 1; } } function WritableStreamDefaultControllerGetDesiredSize(controller) { return controller._strategyHWM - controller._queueTotalSize; } function WritableStreamDefaultControllerWrite(controller, chunk, chunkSize) { try { EnqueueValueWithSize(controller, chunk, chunkSize); } catch (enqueueE) { WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE); return; } var stream = controller._controlledWritableStream; if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') { var backpressure = WritableStreamDefaultControllerGetBackpressure(controller); WritableStreamUpdateBackpressure(stream, backpressure); } WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); } function WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller) { var stream = controller._controlledWritableStream; if (!controller._started) { return; } if (stream._inFlightWriteRequest !== undefined) { return; } var state = stream._state; if (state === 'erroring') { WritableStreamFinishErroring(stream); return; } if (controller._queue.length === 0) { return; } var value = PeekQueueValue(controller); if (value === closeSentinel) { WritableStreamDefaultControllerProcessClose(controller); } else { WritableStreamDefaultControllerProcessWrite(controller, value); } } function WritableStreamDefaultControllerErrorIfNeeded(controller, error) { if (controller._controlledWritableStream._state === 'writable') { WritableStreamDefaultControllerError(controller, error); } } function WritableStreamDefaultControllerProcessClose(controller) { var stream = controller._controlledWritableStream; WritableStreamMarkCloseRequestInFlight(stream); DequeueValue(controller); var sinkClosePromise = controller._closeAlgorithm(); WritableStreamDefaultControllerClearAlgorithms(controller); uponPromise(sinkClosePromise, function () { WritableStreamFinishInFlightClose(stream); }, function (reason) { WritableStreamFinishInFlightCloseWithError(stream, reason); }); } function WritableStreamDefaultControllerProcessWrite(controller, chunk) { var stream = controller._controlledWritableStream; WritableStreamMarkFirstWriteRequestInFlight(stream); var sinkWritePromise = controller._writeAlgorithm(chunk); uponPromise(sinkWritePromise, function () { WritableStreamFinishInFlightWrite(stream); var state = stream._state; DequeueValue(controller); if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') { var backpressure = WritableStreamDefaultControllerGetBackpressure(controller); WritableStreamUpdateBackpressure(stream, backpressure); } WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); }, function (reason) { if (stream._state === 'writable') { WritableStreamDefaultControllerClearAlgorithms(controller); } WritableStreamFinishInFlightWriteWithError(stream, reason); }); } function WritableStreamDefaultControllerGetBackpressure(controller) { var desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller); return desiredSize <= 0; } function WritableStreamDefaultControllerError(controller, error) { var stream = controller._controlledWritableStream; WritableStreamDefaultControllerClearAlgorithms(controller); WritableStreamStartErroring(stream, error); } function streamBrandCheckException(name) { return new TypeError("WritableStream.prototype." + name + " can only be used on a WritableStream"); } function defaultWriterBrandCheckException(name) { return new TypeError("WritableStreamDefaultWriter.prototype." + name + " can only be used on a WritableStreamDefaultWriter"); } function defaultWriterLockException(name) { return new TypeError('Cannot ' + name + ' a stream using a released writer'); } function defaultWriterClosedPromiseInitialize(writer) { writer._closedPromise = newPromise(function (resolve, reject) { writer._closedPromise_resolve = resolve; writer._closedPromise_reject = reject; writer._closedPromiseState = 'pending'; }); } function defaultWriterClosedPromiseInitializeAsRejected(writer, reason) { defaultWriterClosedPromiseInitialize(writer); defaultWriterClosedPromiseReject(writer, reason); } function defaultWriterClosedPromiseInitializeAsResolved(writer) { defaultWriterClosedPromiseInitialize(writer); defaultWriterClosedPromiseResolve(writer); } function defaultWriterClosedPromiseReject(writer, reason) { if (writer._closedPromise_reject === undefined) { return; } setPromiseIsHandledToTrue(writer._closedPromise); writer._closedPromise_reject(reason); writer._closedPromise_resolve = undefined; writer._closedPromise_reject = undefined; writer._closedPromiseState = 'rejected'; } function defaultWriterClosedPromiseResetToRejected(writer, reason) { defaultWriterClosedPromiseInitializeAsRejected(writer, reason); } function defaultWriterClosedPromiseResolve(writer) { if (writer._closedPromise_resolve === undefined) { return; } writer._closedPromise_resolve(undefined); writer._closedPromise_resolve = undefined; writer._closedPromise_reject = undefined; writer._closedPromiseState = 'resolved'; } function defaultWriterReadyPromiseInitialize(writer) { writer._readyPromise = newPromise(function (resolve, reject) { writer._readyPromise_resolve = resolve; writer._readyPromise_reject = reject; }); writer._readyPromiseState = 'pending'; } function defaultWriterReadyPromiseInitializeAsRejected(writer, reason) { defaultWriterReadyPromiseInitialize(writer); defaultWriterReadyPromiseReject(writer, reason); } function defaultWriterReadyPromiseInitializeAsResolved(writer) { defaultWriterReadyPromiseInitialize(writer); defaultWriterReadyPromiseResolve(writer); } function defaultWriterReadyPromiseReject(writer, reason) { if (writer._readyPromise_reject === undefined) { return; } setPromiseIsHandledToTrue(writer._readyPromise); writer._readyPromise_reject(reason); writer._readyPromise_resolve = undefined; writer._readyPromise_reject = undefined; writer._readyPromiseState = 'rejected'; } function defaultWriterReadyPromiseReset(writer) { defaultWriterReadyPromiseInitialize(writer); } function defaultWriterReadyPromiseResetToRejected(writer, reason) { defaultWriterReadyPromiseInitializeAsRejected(writer, reason); } function defaultWriterReadyPromiseResolve(writer) { if (writer._readyPromise_resolve === undefined) { return; } writer._readyPromise_resolve(undefined); writer._readyPromise_resolve = undefined; writer._readyPromise_reject = undefined; writer._readyPromiseState = 'fulfilled'; } function isAbortSignal(value) { if (typeof value !== 'object' || value === null) { return false; } try { return typeof value.aborted === 'boolean'; } catch (_a) { return false; } } var NativeDOMException = typeof DOMException !== 'undefined' ? DOMException : undefined; function isDOMExceptionConstructor(ctor) { if (!(typeof ctor === 'function' || typeof ctor === 'object')) { return false; } try { new ctor(); return true; } catch (_a) { return false; } } function createDOMExceptionPolyfill() { var ctor = function DOMException(message, name) { this.message = message || ''; this.name = name || 'Error'; if (Error.captureStackTrace) { Error.captureStackTrace(this, this.constructor); } }; ctor.prototype = Object.create(Error.prototype); Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true }); return ctor; } var DOMException$1 = isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill(); function ReadableStreamPipeTo(source, dest, preventClose, preventAbort, preventCancel, signal) { var reader = AcquireReadableStreamDefaultReader(source); var writer = AcquireWritableStreamDefaultWriter(dest); source._disturbed = true; var shuttingDown = false; var currentWrite = promiseResolvedWith(undefined); return newPromise(function (resolve, reject) { var abortAlgorithm; if (signal !== undefined) { abortAlgorithm = function () { var error = new DOMException$1('Aborted', 'AbortError'); var actions = []; if (!preventAbort) { actions.push(function () { if (dest._state === 'writable') { return WritableStreamAbort(dest, error); } return promiseResolvedWith(undefined); }); } if (!preventCancel) { actions.push(function () { if (source._state === 'readable') { return ReadableStreamCancel(source, error); } return promiseResolvedWith(undefined); }); } shutdownWithAction(function () { return Promise.all(actions.map(function (action) { return action(); })); }, true, error); }; if (signal.aborted) { abortAlgorithm(); return; } signal.addEventListener('abort', abortAlgorithm); } function pipeLoop() { return newPromise(function (resolveLoop, rejectLoop) { function next(done) { if (done) { resolveLoop(); } else { PerformPromiseThen(pipeStep(), next, rejectLoop); } } next(false); }); } function pipeStep() { if (shuttingDown) { return promiseResolvedWith(true); } return PerformPromiseThen(writer._readyPromise, function () { return newPromise(function (resolveRead, rejectRead) { ReadableStreamDefaultReaderRead(reader, { _chunkSteps: function (chunk) { currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop); resolveRead(false); }, _closeSteps: function () { return resolveRead(true); }, _errorSteps: rejectRead }); }); }); } isOrBecomesErrored(source, reader._closedPromise, function (storedError) { if (!preventAbort) { shutdownWithAction(function () { return WritableStreamAbort(dest, storedError); }, true, storedError); } else { shutdown(true, storedError); } }); isOrBecomesErrored(dest, writer._closedPromise, function (storedError) { if (!preventCancel) { shutdownWithAction(function () { return ReadableStreamCancel(source, storedError); }, true, storedError); } else { shutdown(true, storedError); } }); isOrBecomesClosed(source, reader._closedPromise, function () { if (!preventClose) { shutdownWithAction(function () { return WritableStreamDefaultWriterCloseWithErrorPropagation(writer); }); } else { shutdown(); } }); if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') { var destClosed_1 = new TypeError('the destination writable stream closed before all data could be piped to it'); if (!preventCancel) { shutdownWithAction(function () { return ReadableStreamCancel(source, destClosed_1); }, true, destClosed_1); } else { shutdown(true, destClosed_1); } } setPromiseIsHandledToTrue(pipeLoop()); function waitForWritesToFinish() { var oldCurrentWrite = currentWrite; return PerformPromiseThen(currentWrite, function () { return oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined; }); } function isOrBecomesErrored(stream, promise, action) { if (stream._state === 'errored') { action(stream._storedError); } else { uponRejection(promise, action); } } function isOrBecomesClosed(stream, promise, action) { if (stream._state === 'closed') { action(); } else { uponFulfillment(promise, action); } } function shutdownWithAction(action, originalIsError, originalError) { if (shuttingDown) { return; } shuttingDown = true; if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) { uponFulfillment(waitForWritesToFinish(), doTheRest); } else { doTheRest(); } function doTheRest() { uponPromise(action(), function () { return finalize(originalIsError, originalError); }, function (newError) { return finalize(true, newError); }); } } function shutdown(isError, error) { if (shuttingDown) { return; } shuttingDown = true; if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) { uponFulfillment(waitForWritesToFinish(), function () { return finalize(isError, error); }); } else { finalize(isError, error); } } function finalize(isError, error) { WritableStreamDefaultWriterRelease(writer); ReadableStreamReaderGenericRelease(reader); if (signal !== undefined) { signal.removeEventListener('abort', abortAlgorithm); } if (isError) { reject(error); } else { resolve(undefined); } } }); } var ReadableStreamDefaultController = function () { function ReadableStreamDefaultController() { throw new TypeError('Illegal constructor'); } Object.defineProperty(ReadableStreamDefaultController.prototype, "desiredSize", { get: function () { if (!IsReadableStreamDefaultController(this)) { throw defaultControllerBrandCheckException('desiredSize'); } return ReadableStreamDefaultControllerGetDesiredSize(this); }, enumerable: false, configurable: true }); ReadableStreamDefaultController.prototype.close = function () { if (!IsReadableStreamDefaultController(this)) { throw defaultControllerBrandCheckException('close'); } if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) { throw new TypeError('The stream is not in a state that permits close'); } ReadableStreamDefaultControllerClose(this); }; ReadableStreamDefaultController.prototype.enqueue = function (chunk) { if (chunk === void 0) { chunk = undefined; } if (!IsReadableStreamDefaultController(this)) { throw defaultControllerBrandCheckException('enqueue'); } if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) { throw new TypeError('The stream is not in a state that permits enqueue'); } return ReadableStreamDefaultControllerEnqueue(this, chunk); }; ReadableStreamDefaultController.prototype.error = function (e) { if (e === void 0) { e = undefined; } if (!IsReadableStreamDefaultController(this)) { throw defaultControllerBrandCheckException('error'); } ReadableStreamDefaultControllerError(this, e); }; ReadableStreamDefaultController.prototype[CancelSteps] = function (reason) { ResetQueue(this); var result = this._cancelAlgorithm(reason); ReadableStreamDefaultControllerClearAlgorithms(this); return result; }; ReadableStreamDefaultController.prototype[PullSteps] = function (readRequest) { var stream = this._controlledReadableStream; if (this._queue.length > 0) { var chunk = DequeueValue(this); if (this._closeRequested && this._queue.length === 0) { ReadableStreamDefaultControllerClearAlgorithms(this); ReadableStreamClose(stream); } else { ReadableStreamDefaultControllerCallPullIfNeeded(this); } readRequest._chunkSteps(chunk); } else { ReadableStreamAddReadRequest(stream, readRequest); ReadableStreamDefaultControllerCallPullIfNeeded(this); } }; return ReadableStreamDefaultController; }(); Object.defineProperties(ReadableStreamDefaultController.prototype, { close: { enumerable: true }, enqueue: { enumerable: true }, error: { enumerable: true }, desiredSize: { enumerable: true } }); if (typeof SymbolPolyfill.toStringTag === 'symbol') { Object.defineProperty(ReadableStreamDefaultController.prototype, SymbolPolyfill.toStringTag, { value: 'ReadableStreamDefaultController', configurable: true }); } function IsReadableStreamDefaultController(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) { return false; } return true; } function ReadableStreamDefaultControllerCallPullIfNeeded(controller) { var shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller); if (!shouldPull) { return; } if (controller._pulling) { controller._pullAgain = true; return; } controller._pulling = true; var pullPromise = controller._pullAlgorithm(); uponPromise(pullPromise, function () { controller._pulling = false; if (controller._pullAgain) { controller._pullAgain = false; ReadableStreamDefaultControllerCallPullIfNeeded(controller); } }, function (e) { ReadableStreamDefaultControllerError(controller, e); }); } function ReadableStreamDefaultControllerShouldCallPull(controller) { var stream = controller._controlledReadableStream; if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) { return false; } if (!controller._started) { return false; } if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) { return true; } var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller); if (desiredSize > 0) { return true; } return false; } function ReadableStreamDefaultControllerClearAlgorithms(controller) { controller._pullAlgorithm = undefined; controller._cancelAlgorithm = undefined; controller._strategySizeAlgorithm = undefined; } function ReadableStreamDefaultControllerClose(controller) { if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) { return; } var stream = controller._controlledReadableStream; controller._closeRequested = true; if (controller._queue.length === 0) { ReadableStreamDefaultControllerClearAlgorithms(controller); ReadableStreamClose(stream); } } function ReadableStreamDefaultControllerEnqueue(controller, chunk) { if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) { return; } var stream = controller._controlledReadableStream; if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) { ReadableStreamFulfillReadRequest(stream, chunk, false); } else { var chunkSize = void 0; try { chunkSize = controller._strategySizeAlgorithm(chunk); } catch (chunkSizeE) { ReadableStreamDefaultControllerError(controller, chunkSizeE); throw chunkSizeE; } try { EnqueueValueWithSize(controller, chunk, chunkSize); } catch (enqueueE) { ReadableStreamDefaultControllerError(controller, enqueueE); throw enqueueE; } } ReadableStreamDefaultControllerCallPullIfNeeded(controller); } function ReadableStreamDefaultControllerError(controller, e) { var stream = controller._controlledReadableStream; if (stream._state !== 'readable') { return; } ResetQueue(controller); ReadableStreamDefaultControllerClearAlgorithms(controller); ReadableStreamError(stream, e); } function ReadableStreamDefaultControllerGetDesiredSize(controller) { var state = controller._controlledReadableStream._state; if (state === 'errored') { return null; } if (state === 'closed') { return 0; } return controller._strategyHWM - controller._queueTotalSize; } function ReadableStreamDefaultControllerHasBackpressure(controller) { if (ReadableStreamDefaultControllerShouldCallPull(controller)) { return false; } return true; } function ReadableStreamDefaultControllerCanCloseOrEnqueue(controller) { var state = controller._controlledReadableStream._state; if (!controller._closeRequested && state === 'readable') { return true; } return false; } function SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm) { controller._controlledReadableStream = stream; controller._queue = undefined; controller._queueTotalSize = undefined; ResetQueue(controller); controller._started = false; controller._closeRequested = false; controller._pullAgain = false; controller._pulling = false; controller._strategySizeAlgorithm = sizeAlgorithm; controller._strategyHWM = highWaterMark; controller._pullAlgorithm = pullAlgorithm; controller._cancelAlgorithm = cancelAlgorithm; stream._readableStreamController = controller; var startResult = startAlgorithm(); uponPromise(promiseResolvedWith(startResult), function () { controller._started = true; ReadableStreamDefaultControllerCallPullIfNeeded(controller); }, function (r) { ReadableStreamDefaultControllerError(controller, r); }); } function SetUpReadableStreamDefaultControllerFromUnderlyingSource(stream, underlyingSource, highWaterMark, sizeAlgorithm) { var controller = Object.create(ReadableStreamDefaultController.prototype); var startAlgorithm = function () { return undefined; }; var pullAlgorithm = function () { return promiseResolvedWith(undefined); }; var cancelAlgorithm = function () { return promiseResolvedWith(undefined); }; if (underlyingSource.start !== undefined) { startAlgorithm = function () { return underlyingSource.start(controller); }; } if (underlyingSource.pull !== undefined) { pullAlgorithm = function () { return underlyingSource.pull(controller); }; } if (underlyingSource.cancel !== undefined) { cancelAlgorithm = function (reason) { return underlyingSource.cancel(reason); }; } SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm); } function defaultControllerBrandCheckException(name) { return new TypeError("ReadableStreamDefaultController.prototype." + name + " can only be used on a ReadableStreamDefaultController"); } function ReadableStreamTee(stream, cloneForBranch2) { var reader = AcquireReadableStreamDefaultReader(stream); var reading = false; var canceled1 = false; var canceled2 = false; var reason1; var reason2; var branch1; var branch2; var resolveCancelPromise; var cancelPromise = newPromise(function (resolve) { resolveCancelPromise = resolve; }); function pullAlgorithm() { if (reading) { return promiseResolvedWith(undefined); } reading = true; var readRequest = { _chunkSteps: function (value) { queueMicrotask(function () { reading = false; var value1 = value; var value2 = value; if (!canceled1) { ReadableStreamDefaultControllerEnqueue(branch1._readableStreamController, value1); } if (!canceled2) { ReadableStreamDefaultControllerEnqueue(branch2._readableStreamController, value2); } resolveCancelPromise(undefined); }); }, _closeSteps: function () { reading = false; if (!canceled1) { ReadableStreamDefaultControllerClose(branch1._readableStreamController); } if (!canceled2) { ReadableStreamDefaultControllerClose(branch2._readableStreamController); } }, _errorSteps: function () { reading = false; } }; ReadableStreamDefaultReaderRead(reader, readRequest); return promiseResolvedWith(undefined); } function cancel1Algorithm(reason) { canceled1 = true; reason1 = reason; if (canceled2) { var compositeReason = CreateArrayFromList([ reason1, reason2 ]); var cancelResult = ReadableStreamCancel(stream, compositeReason); resolveCancelPromise(cancelResult); } return cancelPromise; } function cancel2Algorithm(reason) { canceled2 = true; reason2 = reason; if (canceled1) { var compositeReason = CreateArrayFromList([ reason1, reason2 ]); var cancelResult = ReadableStreamCancel(stream, compositeReason); resolveCancelPromise(cancelResult); } return cancelPromise; } function startAlgorithm() { } branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm); branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm); uponRejection(reader._closedPromise, function (r) { ReadableStreamDefaultControllerError(branch1._readableStreamController, r); ReadableStreamDefaultControllerError(branch2._readableStreamController, r); resolveCancelPromise(undefined); }); return [ branch1, branch2 ]; } function convertUnderlyingDefaultOrByteSource(source, context) { assertDictionary(source, context); var original = source; var autoAllocateChunkSize = original === null || original === void 0 ? void 0 : original.autoAllocateChunkSize; var cancel = original === null || original === void 0 ? void 0 : original.cancel; var pull = original === null || original === void 0 ? void 0 : original.pull; var start = original === null || original === void 0 ? void 0 : original.start; var type = original === null || original === void 0 ? void 0 : original.type; return { autoAllocateChunkSize: autoAllocateChunkSize === undefined ? undefined : convertUnsignedLongLongWithEnforceRange(autoAllocateChunkSize, context + " has member 'autoAllocateChunkSize' that"), cancel: cancel === undefined ? undefined : convertUnderlyingSourceCancelCallback(cancel, original, context + " has member 'cancel' that"), pull: pull === undefined ? undefined : convertUnderlyingSourcePullCallback(pull, original, context + " has member 'pull' that"), start: start === undefined ? undefined : convertUnderlyingSourceStartCallback(start, original, context + " has member 'start' that"), type: type === undefined ? undefined : convertReadableStreamType(type, context + " has member 'type' that") }; } function convertUnderlyingSourceCancelCallback(fn, original, context) { assertFunction(fn, context); return function (reason) { return promiseCall(fn, original, [reason]); }; } function convertUnderlyingSourcePullCallback(fn, original, context) { assertFunction(fn, context); return function (controller) { return promiseCall(fn, original, [controller]); }; } function convertUnderlyingSourceStartCallback(fn, original, context) { assertFunction(fn, context); return function (controller) { return reflectCall(fn, original, [controller]); }; } function convertReadableStreamType(type, context) { type = "" + type; if (type !== 'bytes') { throw new TypeError(context + " '" + type + "' is not a valid enumeration value for ReadableStreamType"); } return type; } function convertReaderOptions(options, context) { assertDictionary(options, context); var mode = options === null || options === void 0 ? void 0 : options.mode; return { mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, context + " has member 'mode' that") }; } function convertReadableStreamReaderMode(mode, context) { mode = "" + mode; if (mode !== 'byob') { throw new TypeError(context + " '" + mode + "' is not a valid enumeration value for ReadableStreamReaderMode"); } return mode; } function convertIteratorOptions(options, context) { assertDictionary(options, context); var preventCancel = options === null || options === void 0 ? void 0 : options.preventCancel; return { preventCancel: Boolean(preventCancel) }; } function convertPipeOptions(options, context) { assertDictionary(options, context); var preventAbort = options === null || options === void 0 ? void 0 : options.preventAbort; var preventCancel = options === null || options === void 0 ? void 0 : options.preventCancel; var preventClose = options === null || options === void 0 ? void 0 : options.preventClose; var signal = options === null || options === void 0 ? void 0 : options.signal; if (signal !== undefined) { assertAbortSignal(signal, context + " has member 'signal' that"); } return { preventAbort: Boolean(preventAbort), preventCancel: Boolean(preventCancel), preventClose: Boolean(preventClose), signal: signal }; } function assertAbortSignal(signal, context) { if (!isAbortSignal(signal)) { throw new TypeError(context + " is not an AbortSignal."); } } function convertReadableWritablePair(pair, context) { assertDictionary(pair, context); var readable = pair === null || pair === void 0 ? void 0 : pair.readable; assertRequiredField(readable, 'readable', 'ReadableWritablePair'); assertReadableStream(readable, context + " has member 'readable' that"); var writable = pair === null || pair === void 0 ? void 0 : pair.writable; assertRequiredField(writable, 'writable', 'ReadableWritablePair'); assertWritableStream(writable, context + " has member 'writable' that"); return { readable: readable, writable: writable }; } var ReadableStream = function () { function ReadableStream(rawUnderlyingSource, rawStrategy) { if (rawUnderlyingSource === void 0) { rawUnderlyingSource = {}; } if (rawStrategy === void 0) { rawStrategy = {}; } if (rawUnderlyingSource === undefined) { rawUnderlyingSource = null; } else { assertObject(rawUnderlyingSource, 'First parameter'); } var strategy = convertQueuingStrategy(rawStrategy, 'Second parameter'); var underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter'); InitializeReadableStream(this); if (underlyingSource.type === 'bytes') { if (strategy.size !== undefined) { throw new RangeError('The strategy for a byte stream cannot have a size function'); } var highWaterMark = ExtractHighWaterMark(strategy, 0); SetUpReadableByteStreamControllerFromUnderlyingSource(this, underlyingSource, highWaterMark); } else { var sizeAlgorithm = ExtractSizeAlgorithm(strategy); var highWaterMark = ExtractHighWaterMark(strategy, 1); SetUpReadableStreamDefaultControllerFromUnderlyingSource(this, underlyingSource, highWaterMark, sizeAlgorithm); } } Object.defineProperty(ReadableStream.prototype, "locked", { get: function () { if (!IsReadableStream(this)) { throw streamBrandCheckException$1('locked'); } return IsReadableStreamLocked(this); }, enumerable: false, configurable: true }); ReadableStream.prototype.cancel = function (reason) { if (reason === void 0) { reason = undefined; } if (!IsReadableStream(this)) { return promiseRejectedWith(streamBrandCheckException$1('cancel')); } if (IsReadableStreamLocked(this)) { return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader')); } return ReadableStreamCancel(this, reason); }; ReadableStream.prototype.getReader = function (rawOptions) { if (rawOptions === void 0) { rawOptions = undefined; } if (!IsReadableStream(this)) { throw streamBrandCheckException$1('getReader'); } var options = convertReaderOptions(rawOptions, 'First parameter'); if (options.mode === undefined) { return AcquireReadableStreamDefaultReader(this); } return AcquireReadableStreamBYOBReader(this); }; ReadableStream.prototype.pipeThrough = function (rawTransform, rawOptions) { if (rawOptions === void 0) { rawOptions = {}; } if (!IsReadableStream(this)) { throw streamBrandCheckException$1('pipeThrough'); } assertRequiredArgument(rawTransform, 1, 'pipeThrough'); var transform = convertReadableWritablePair(rawTransform, 'First parameter'); var options = convertPipeOptions(rawOptions, 'Second parameter'); if (IsReadableStreamLocked(this)) { throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream'); } if (IsWritableStreamLocked(transform.writable)) { throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream'); } var promise = ReadableStreamPipeTo(this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal); setPromiseIsHandledToTrue(promise); return transform.readable; }; ReadableStream.prototype.pipeTo = function (destination, rawOptions) { if (rawOptions === void 0) { rawOptions = {}; } if (!IsReadableStream(this)) { return promiseRejectedWith(streamBrandCheckException$1('pipeTo')); } if (destination === undefined) { return promiseRejectedWith("Parameter 1 is required in 'pipeTo'."); } if (!IsWritableStream(destination)) { return promiseRejectedWith(new TypeError("ReadableStream.prototype.pipeTo's first argument must be a WritableStream")); } var options; try { options = convertPipeOptions(rawOptions, 'Second parameter'); } catch (e) { return promiseRejectedWith(e); } if (IsReadableStreamLocked(this)) { return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')); } if (IsWritableStreamLocked(destination)) { return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')); } return ReadableStreamPipeTo(this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal); }; ReadableStream.prototype.tee = function () { if (!IsReadableStream(this)) { throw streamBrandCheckException$1('tee'); } var branches = ReadableStreamTee(this); return CreateArrayFromList(branches); }; ReadableStream.prototype.values = function (rawOptions) { if (rawOptions === void 0) { rawOptions = undefined; } if (!IsReadableStream(this)) { throw streamBrandCheckException$1('values'); } var options = convertIteratorOptions(rawOptions, 'First parameter'); return AcquireReadableStreamAsyncIterator(this, options.preventCancel); }; return ReadableStream; }(); Object.defineProperties(ReadableStream.prototype, { cancel: { enumerable: true }, getReader: { enumerable: true }, pipeThrough: { enumerable: true }, pipeTo: { enumerable: true }, tee: { enumerable: true }, values: { enumerable: true }, locked: { enumerable: true } }); if (typeof SymbolPolyfill.toStringTag === 'symbol') { Object.defineProperty(ReadableStream.prototype, SymbolPolyfill.toStringTag, { value: 'ReadableStream', configurable: true }); } if (typeof SymbolPolyfill.asyncIterator === 'symbol') { Object.defineProperty(ReadableStream.prototype, SymbolPolyfill.asyncIterator, { value: ReadableStream.prototype.values, writable: true, configurable: true }); } function CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm) { if (highWaterMark === void 0) { highWaterMark = 1; } if (sizeAlgorithm === void 0) { sizeAlgorithm = function () { return 1; }; } var stream = Object.create(ReadableStream.prototype); InitializeReadableStream(stream); var controller = Object.create(ReadableStreamDefaultController.prototype); SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm); return stream; } function InitializeReadableStream(stream) { stream._state = 'readable'; stream._reader = undefined; stream._storedError = undefined; stream._disturbed = false; } function IsReadableStream(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) { return false; } return true; } function IsReadableStreamLocked(stream) { if (stream._reader === undefined) { return false; } return true; } function ReadableStreamCancel(stream, reason) { stream._disturbed = true; if (stream._state === 'closed') { return promiseResolvedWith(undefined); } if (stream._state === 'errored') { return promiseRejectedWith(stream._storedError); } ReadableStreamClose(stream); var sourceCancelPromise = stream._readableStreamController[CancelSteps](reason); return transformPromiseWith(sourceCancelPromise, noop); } function ReadableStreamClose(stream) { stream._state = 'closed'; var reader = stream._reader; if (reader === undefined) { return; } if (IsReadableStreamDefaultReader(reader)) { reader._readRequests.forEach(function (readRequest) { readRequest._closeSteps(); }); reader._readRequests = new SimpleQueue(); } defaultReaderClosedPromiseResolve(reader); } function ReadableStreamError(stream, e) { stream._state = 'errored'; stream._storedError = e; var reader = stream._reader; if (reader === undefined) { return; } if (IsReadableStreamDefaultReader(reader)) { reader._readRequests.forEach(function (readRequest) { readRequest._errorSteps(e); }); reader._readRequests = new SimpleQueue(); } else { reader._readIntoRequests.forEach(function (readIntoRequest) { readIntoRequest._errorSteps(e); }); reader._readIntoRequests = new SimpleQueue(); } defaultReaderClosedPromiseReject(reader, e); } function streamBrandCheckException$1(name) { return new TypeError("ReadableStream.prototype." + name + " can only be used on a ReadableStream"); } function convertQueuingStrategyInit(init, context) { assertDictionary(init, context); var highWaterMark = init === null || init === void 0 ? void 0 : init.highWaterMark; assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit'); return { highWaterMark: convertUnrestrictedDouble(highWaterMark) }; } var byteLengthSizeFunction = function size(chunk) { return chunk.byteLength; }; var ByteLengthQueuingStrategy = function () { function ByteLengthQueuingStrategy(options) { assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy'); options = convertQueuingStrategyInit(options, 'First parameter'); this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark; } Object.defineProperty(ByteLengthQueuingStrategy.prototype, "highWaterMark", { get: function () { if (!IsByteLengthQueuingStrategy(this)) { throw byteLengthBrandCheckException('highWaterMark'); } return this._byteLengthQueuingStrategyHighWaterMark; }, enumerable: false, configurable: true }); Object.defineProperty(ByteLengthQueuingStrategy.prototype, "size", { get: function () { if (!IsByteLengthQueuingStrategy(this)) { throw byteLengthBrandCheckException('size'); } return byteLengthSizeFunction; }, enumerable: false, configurable: true }); return ByteLengthQueuingStrategy; }(); Object.defineProperties(ByteLengthQueuingStrategy.prototype, { highWaterMark: { enumerable: true }, size: { enumerable: true } }); if (typeof SymbolPolyfill.toStringTag === 'symbol') { Object.defineProperty(ByteLengthQueuingStrategy.prototype, SymbolPolyfill.toStringTag, { value: 'ByteLengthQueuingStrategy', configurable: true }); } function byteLengthBrandCheckException(name) { return new TypeError("ByteLengthQueuingStrategy.prototype." + name + " can only be used on a ByteLengthQueuingStrategy"); } function IsByteLengthQueuingStrategy(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) { return false; } return true; } var countSizeFunction = function size() { return 1; }; var CountQueuingStrategy = function () { function CountQueuingStrategy(options) { assertRequiredArgument(options, 1, 'CountQueuingStrategy'); options = convertQueuingStrategyInit(options, 'First parameter'); this._countQueuingStrategyHighWaterMark = options.highWaterMark; } Object.defineProperty(CountQueuingStrategy.prototype, "highWaterMark", { get: function () { if (!IsCountQueuingStrategy(this)) { throw countBrandCheckException('highWaterMark'); } return this._countQueuingStrategyHighWaterMark; }, enumerable: false, configurable: true }); Object.defineProperty(CountQueuingStrategy.prototype, "size", { get: function () { if (!IsCountQueuingStrategy(this)) { throw countBrandCheckException('size'); } return countSizeFunction; }, enumerable: false, configurable: true }); return CountQueuingStrategy; }(); Object.defineProperties(CountQueuingStrategy.prototype, { highWaterMark: { enumerable: true }, size: { enumerable: true } }); if (typeof SymbolPolyfill.toStringTag === 'symbol') { Object.defineProperty(CountQueuingStrategy.prototype, SymbolPolyfill.toStringTag, { value: 'CountQueuingStrategy', configurable: true }); } function countBrandCheckException(name) { return new TypeError("CountQueuingStrategy.prototype." + name + " can only be used on a CountQueuingStrategy"); } function IsCountQueuingStrategy(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) { return false; } return true; } function convertTransformer(original, context) { assertDictionary(original, context); var flush = original === null || original === void 0 ? void 0 : original.flush; var readableType = original === null || original === void 0 ? void 0 : original.readableType; var start = original === null || original === void 0 ? void 0 : original.start; var transform = original === null || original === void 0 ? void 0 : original.transform; var writableType = original === null || original === void 0 ? void 0 : original.writableType; return { flush: flush === undefined ? undefined : convertTransformerFlushCallback(flush, original, context + " has member 'flush' that"), readableType: readableType, start: start === undefined ? undefined : convertTransformerStartCallback(start, original, context + " has member 'start' that"), transform: transform === undefined ? undefined : convertTransformerTransformCallback(transform, original, context + " has member 'transform' that"), writableType: writableType }; } function convertTransformerFlushCallback(fn, original, context) { assertFunction(fn, context); return function (controller) { return promiseCall(fn, original, [controller]); }; } function convertTransformerStartCallback(fn, original, context) { assertFunction(fn, context); return function (controller) { return reflectCall(fn, original, [controller]); }; } function convertTransformerTransformCallback(fn, original, context) { assertFunction(fn, context); return function (chunk, controller) { return promiseCall(fn, original, [ chunk, controller ]); }; } var TransformStream = function () { function TransformStream(rawTransformer, rawWritableStrategy, rawReadableStrategy) { if (rawTransformer === void 0) { rawTransformer = {}; } if (rawWritableStrategy === void 0) { rawWritableStrategy = {}; } if (rawReadableStrategy === void 0) { rawReadableStrategy = {}; } if (rawTransformer === undefined) { rawTransformer = null; } var writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter'); var readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter'); var transformer = convertTransformer(rawTransformer, 'First parameter'); if (transformer.readableType !== undefined) { throw new RangeError('Invalid readableType specified'); } if (transformer.writableType !== undefined) { throw new RangeError('Invalid writableType specified'); } var readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0); var readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy); var writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1); var writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy); var startPromise_resolve; var startPromise = newPromise(function (resolve) { startPromise_resolve = resolve; }); InitializeTransformStream(this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm); SetUpTransformStreamDefaultControllerFromTransformer(this, transformer); if (transformer.start !== undefined) { startPromise_resolve(transformer.start(this._transformStreamController)); } else { startPromise_resolve(undefined); } } Object.defineProperty(TransformStream.prototype, "readable", { get: function () { if (!IsTransformStream(this)) { throw streamBrandCheckException$2('readable'); } return this._readable; }, enumerable: false, configurable: true }); Object.defineProperty(TransformStream.prototype, "writable", { get: function () { if (!IsTransformStream(this)) { throw streamBrandCheckException$2('writable'); } return this._writable; }, enumerable: false, configurable: true }); return TransformStream; }(); Object.defineProperties(TransformStream.prototype, { readable: { enumerable: true }, writable: { enumerable: true } }); if (typeof SymbolPolyfill.toStringTag === 'symbol') { Object.defineProperty(TransformStream.prototype, SymbolPolyfill.toStringTag, { value: 'TransformStream', configurable: true }); } function InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm) { function startAlgorithm() { return startPromise; } function writeAlgorithm(chunk) { return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk); } function abortAlgorithm(reason) { return TransformStreamDefaultSinkAbortAlgorithm(stream, reason); } function closeAlgorithm() { return TransformStreamDefaultSinkCloseAlgorithm(stream); } stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, writableHighWaterMark, writableSizeAlgorithm); function pullAlgorithm() { return TransformStreamDefaultSourcePullAlgorithm(stream); } function cancelAlgorithm(reason) { TransformStreamErrorWritableAndUnblockWrite(stream, reason); return promiseResolvedWith(undefined); } stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark, readableSizeAlgorithm); stream._backpressure = undefined; stream._backpressureChangePromise = undefined; stream._backpressureChangePromise_resolve = undefined; TransformStreamSetBackpressure(stream, true); stream._transformStreamController = undefined; } function IsTransformStream(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) { return false; } return true; } function TransformStreamError(stream, e) { ReadableStreamDefaultControllerError(stream._readable._readableStreamController, e); TransformStreamErrorWritableAndUnblockWrite(stream, e); } function TransformStreamErrorWritableAndUnblockWrite(stream, e) { TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController); WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e); if (stream._backpressure) { TransformStreamSetBackpressure(stream, false); } } function TransformStreamSetBackpressure(stream, backpressure) { if (stream._backpressureChangePromise !== undefined) { stream._backpressureChangePromise_resolve(); } stream._backpressureChangePromise = newPromise(function (resolve) { stream._backpressureChangePromise_resolve = resolve; }); stream._backpressure = backpressure; } var TransformStreamDefaultController = function () { function TransformStreamDefaultController() { throw new TypeError('Illegal constructor'); } Object.defineProperty(TransformStreamDefaultController.prototype, "desiredSize", { get: function () { if (!IsTransformStreamDefaultController(this)) { throw defaultControllerBrandCheckException$1('desiredSize'); } var readableController = this._controlledTransformStream._readable._readableStreamController; return ReadableStreamDefaultControllerGetDesiredSize(readableController); }, enumerable: false, configurable: true }); TransformStreamDefaultController.prototype.enqueue = function (chunk) { if (chunk === void 0) { chunk = undefined; } if (!IsTransformStreamDefaultController(this)) { throw defaultControllerBrandCheckException$1('enqueue'); } TransformStreamDefaultControllerEnqueue(this, chunk); }; TransformStreamDefaultController.prototype.error = function (reason) { if (reason === void 0) { reason = undefined; } if (!IsTransformStreamDefaultController(this)) { throw defaultControllerBrandCheckException$1('error'); } TransformStreamDefaultControllerError(this, reason); }; TransformStreamDefaultController.prototype.terminate = function () { if (!IsTransformStreamDefaultController(this)) { throw defaultControllerBrandCheckException$1('terminate'); } TransformStreamDefaultControllerTerminate(this); }; return TransformStreamDefaultController; }(); Object.defineProperties(TransformStreamDefaultController.prototype, { enqueue: { enumerable: true }, error: { enumerable: true }, terminate: { enumerable: true }, desiredSize: { enumerable: true } }); if (typeof SymbolPolyfill.toStringTag === 'symbol') { Object.defineProperty(TransformStreamDefaultController.prototype, SymbolPolyfill.toStringTag, { value: 'TransformStreamDefaultController', configurable: true }); } function IsTransformStreamDefaultController(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) { return false; } return true; } function SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm) { controller._controlledTransformStream = stream; stream._transformStreamController = controller; controller._transformAlgorithm = transformAlgorithm; controller._flushAlgorithm = flushAlgorithm; } function SetUpTransformStreamDefaultControllerFromTransformer(stream, transformer) { var controller = Object.create(TransformStreamDefaultController.prototype); var transformAlgorithm = function (chunk) { try { TransformStreamDefaultControllerEnqueue(controller, chunk); return promiseResolvedWith(undefined); } catch (transformResultE) { return promiseRejectedWith(transformResultE); } }; var flushAlgorithm = function () { return promiseResolvedWith(undefined); }; if (transformer.transform !== undefined) { transformAlgorithm = function (chunk) { return transformer.transform(chunk, controller); }; } if (transformer.flush !== undefined) { flushAlgorithm = function () { return transformer.flush(controller); }; } SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm); } function TransformStreamDefaultControllerClearAlgorithms(controller) { controller._transformAlgorithm = undefined; controller._flushAlgorithm = undefined; } function TransformStreamDefaultControllerEnqueue(controller, chunk) { var stream = controller._controlledTransformStream; var readableController = stream._readable._readableStreamController; if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) { throw new TypeError('Readable side is not in a state that permits enqueue'); } try { ReadableStreamDefaultControllerEnqueue(readableController, chunk); } catch (e) { TransformStreamErrorWritableAndUnblockWrite(stream, e); throw stream._readable._storedError; } var backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController); if (backpressure !== stream._backpressure) { TransformStreamSetBackpressure(stream, true); } } function TransformStreamDefaultControllerError(controller, e) { TransformStreamError(controller._controlledTransformStream, e); } function TransformStreamDefaultControllerPerformTransform(controller, chunk) { var transformPromise = controller._transformAlgorithm(chunk); return transformPromiseWith(transformPromise, undefined, function (r) { TransformStreamError(controller._controlledTransformStream, r); throw r; }); } function TransformStreamDefaultControllerTerminate(controller) { var stream = controller._controlledTransformStream; var readableController = stream._readable._readableStreamController; ReadableStreamDefaultControllerClose(readableController); var error = new TypeError('TransformStream terminated'); TransformStreamErrorWritableAndUnblockWrite(stream, error); } function TransformStreamDefaultSinkWriteAlgorithm(stream, chunk) { var controller = stream._transformStreamController; if (stream._backpressure) { var backpressureChangePromise = stream._backpressureChangePromise; return transformPromiseWith(backpressureChangePromise, function () { var writable = stream._writable; var state = writable._state; if (state === 'erroring') { throw writable._storedError; } return TransformStreamDefaultControllerPerformTransform(controller, chunk); }); } return TransformStreamDefaultControllerPerformTransform(controller, chunk); } function TransformStreamDefaultSinkAbortAlgorithm(stream, reason) { TransformStreamError(stream, reason); return promiseResolvedWith(undefined); } function TransformStreamDefaultSinkCloseAlgorithm(stream) { var readable = stream._readable; var controller = stream._transformStreamController; var flushPromise = controller._flushAlgorithm(); TransformStreamDefaultControllerClearAlgorithms(controller); return transformPromiseWith(flushPromise, function () { if (readable._state === 'errored') { throw readable._storedError; } ReadableStreamDefaultControllerClose(readable._readableStreamController); }, function (r) { TransformStreamError(stream, r); throw readable._storedError; }); } function TransformStreamDefaultSourcePullAlgorithm(stream) { TransformStreamSetBackpressure(stream, false); return stream._backpressureChangePromise; } function defaultControllerBrandCheckException$1(name) { return new TypeError("TransformStreamDefaultController.prototype." + name + " can only be used on a TransformStreamDefaultController"); } function streamBrandCheckException$2(name) { return new TypeError("TransformStream.prototype." + name + " can only be used on a TransformStream"); } exports.ByteLengthQueuingStrategy = ByteLengthQueuingStrategy; exports.CountQueuingStrategy = CountQueuingStrategy; exports.ReadableByteStreamController = ReadableByteStreamController; exports.ReadableStream = ReadableStream; exports.ReadableStreamBYOBReader = ReadableStreamBYOBReader; exports.ReadableStreamBYOBRequest = ReadableStreamBYOBRequest; exports.ReadableStreamDefaultController = ReadableStreamDefaultController; exports.ReadableStreamDefaultReader = ReadableStreamDefaultReader; exports.TransformStream = TransformStream; exports.TransformStreamDefaultController = TransformStreamDefaultController; exports.WritableStream = WritableStream; exports.WritableStreamDefaultController = WritableStreamDefaultController; exports.WritableStreamDefaultWriter = WritableStreamDefaultWriter; Object.defineProperty(exports, '__esModule', { value: true }); })); /***/ }), /* 122 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { __w_pdfjs_require__(123); var entryUnbind = __w_pdfjs_require__(127); module.exports = entryUnbind('String', 'padStart'); /***/ }), /* 123 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var $ = __w_pdfjs_require__(9); var $padStart = __w_pdfjs_require__(124).start; var WEBKIT_BUG = __w_pdfjs_require__(126); $({ target: 'String', proto: true, forced: WEBKIT_BUG }, { padStart: function padStart(maxLength) { return $padStart(this, maxLength, arguments.length > 1 ? arguments[1] : undefined); } }); /***/ }), /* 124 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var toLength = __w_pdfjs_require__(46); var repeat = __w_pdfjs_require__(125); var requireObjectCoercible = __w_pdfjs_require__(19); var ceil = Math.ceil; var createMethod = function (IS_END) { return function ($this, maxLength, fillString) { var S = String(requireObjectCoercible($this)); var stringLength = S.length; var fillStr = fillString === undefined ? ' ' : String(fillString); var intMaxLength = toLength(maxLength); var fillLen, stringFiller; if (intMaxLength <= stringLength || fillStr == '') return S; fillLen = intMaxLength - stringLength; stringFiller = repeat.call(fillStr, ceil(fillLen / fillStr.length)); if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen); return IS_END ? S + stringFiller : stringFiller + S; }; }; module.exports = { start: createMethod(false), end: createMethod(true) }; /***/ }), /* 125 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var toInteger = __w_pdfjs_require__(47); var requireObjectCoercible = __w_pdfjs_require__(19); module.exports = ''.repeat || function repeat(count) { var str = String(requireObjectCoercible(this)); var result = ''; var n = toInteger(count); if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions'); for (; n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str; return result; }; /***/ }), /* 126 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var userAgent = __w_pdfjs_require__(95); module.exports = /Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(userAgent); /***/ }), /* 127 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); var bind = __w_pdfjs_require__(75); var call = Function.call; module.exports = function (CONSTRUCTOR, METHOD, length) { return bind(call, global[CONSTRUCTOR].prototype[METHOD], length); }; /***/ }), /* 128 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { __w_pdfjs_require__(129); var entryUnbind = __w_pdfjs_require__(127); module.exports = entryUnbind('String', 'padEnd'); /***/ }), /* 129 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var $ = __w_pdfjs_require__(9); var $padEnd = __w_pdfjs_require__(124).end; var WEBKIT_BUG = __w_pdfjs_require__(126); $({ target: 'String', proto: true, forced: WEBKIT_BUG }, { padEnd: function padEnd(maxLength) { return $padEnd(this, maxLength, arguments.length > 1 ? arguments[1] : undefined); } }); /***/ }), /* 130 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { __w_pdfjs_require__(131); var path = __w_pdfjs_require__(42); module.exports = path.Object.values; /***/ }), /* 131 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { var $ = __w_pdfjs_require__(9); var $values = __w_pdfjs_require__(132).values; $({ target: 'Object', stat: true }, { values: function values(O) { return $values(O); } }); /***/ }), /* 132 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var DESCRIPTORS = __w_pdfjs_require__(12); var objectKeys = __w_pdfjs_require__(60); var toIndexedObject = __w_pdfjs_require__(16); var propertyIsEnumerable = __w_pdfjs_require__(14).f; var createMethod = function (TO_ENTRIES) { return function (it) { var O = toIndexedObject(it); var keys = objectKeys(O); var length = keys.length; var i = 0; var result = []; var key; while (length > i) { key = keys[i++]; if (!DESCRIPTORS || propertyIsEnumerable.call(O, key)) { result.push(TO_ENTRIES ? [ key, O[key] ] : O[key]); } } return result; }; }; module.exports = { entries: createMethod(true), values: createMethod(false) }; /***/ }), /* 133 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { __w_pdfjs_require__(134); var path = __w_pdfjs_require__(42); module.exports = path.Object.entries; /***/ }), /* 134 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { var $ = __w_pdfjs_require__(9); var $entries = __w_pdfjs_require__(132).entries; $({ target: 'Object', stat: true }, { entries: function entries(O) { return $entries(O); } }); /***/ }), /* 135 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getDocument = getDocument; exports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory; exports.version = exports.PDFWorker = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFDataRangeTransport = exports.LoopbackPort = exports.DefaultCMapReaderFactory = exports.DefaultCanvasFactory = exports.build = void 0; var _regenerator = _interopRequireDefault(__w_pdfjs_require__(2)); var _util = __w_pdfjs_require__(4); var _display_utils = __w_pdfjs_require__(1); var _font_loader = __w_pdfjs_require__(136); var _node_utils = __w_pdfjs_require__(137); var _annotation_storage = __w_pdfjs_require__(138); var _api_compatibility = __w_pdfjs_require__(139); var _canvas = __w_pdfjs_require__(140); var _worker_options = __w_pdfjs_require__(142); var _is_node = __w_pdfjs_require__(6); var _message_handler = __w_pdfjs_require__(143); var _metadata = __w_pdfjs_require__(144); var _optional_content_config = __w_pdfjs_require__(146); var _transport_stream = __w_pdfjs_require__(147); var _webgl = __w_pdfjs_require__(148); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var DEFAULT_RANGE_CHUNK_SIZE = 65536; var RENDERING_CANCELLED_TIMEOUT = 100; var DefaultCanvasFactory = _is_node.isNodeJS ? _node_utils.NodeCanvasFactory : _display_utils.DOMCanvasFactory; exports.DefaultCanvasFactory = DefaultCanvasFactory; var DefaultCMapReaderFactory = _is_node.isNodeJS ? _node_utils.NodeCMapReaderFactory : _display_utils.DOMCMapReaderFactory; exports.DefaultCMapReaderFactory = DefaultCMapReaderFactory; var createPDFNetworkStream; function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) { createPDFNetworkStream = pdfNetworkStreamFactory; } function getDocument(src) { var task = new PDFDocumentLoadingTask(); var source; if (typeof src === "string") { source = { url: src }; } else if ((0, _util.isArrayBuffer)(src)) { source = { data: src }; } else if (src instanceof PDFDataRangeTransport) { source = { range: src }; } else { if (_typeof(src) !== "object") { throw new Error("Invalid parameter in getDocument, " + "need either Uint8Array, string or a parameter object"); } if (!src.url && !src.data && !src.range) { throw new Error("Invalid parameter object: need either .data, .range or .url"); } source = src; } var params = Object.create(null); var rangeTransport = null, worker = null; for (var key in source) { if (key === "url" && typeof window !== "undefined") { params[key] = new URL(source[key], window.location).href; continue; } else if (key === "range") { rangeTransport = source[key]; continue; } else if (key === "worker") { worker = source[key]; continue; } else if (key === "data" && !(source[key] instanceof Uint8Array)) { var pdfBytes = source[key]; if (typeof pdfBytes === "string") { params[key] = (0, _util.stringToBytes)(pdfBytes); } else if (_typeof(pdfBytes) === "object" && pdfBytes !== null && !isNaN(pdfBytes.length)) { params[key] = new Uint8Array(pdfBytes); } else if ((0, _util.isArrayBuffer)(pdfBytes)) { params[key] = new Uint8Array(pdfBytes); } else { throw new Error("Invalid PDF binary data: either typed array, " + "string or array-like object is expected in the " + "data property."); } continue; } params[key] = source[key]; } params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE; params.CMapReaderFactory = params.CMapReaderFactory || DefaultCMapReaderFactory; params.ignoreErrors = params.stopAtErrors !== true; params.fontExtraProperties = params.fontExtraProperties === true; params.pdfBug = params.pdfBug === true; if (!Number.isInteger(params.maxImageSize)) { params.maxImageSize = -1; } if (typeof params.isEvalSupported !== "boolean") { params.isEvalSupported = true; } if (typeof params.disableFontFace !== "boolean") { params.disableFontFace = _api_compatibility.apiCompatibilityParams.disableFontFace || false; } if (typeof params.ownerDocument === "undefined") { params.ownerDocument = globalThis.document; } if (typeof params.disableRange !== "boolean") { params.disableRange = false; } if (typeof params.disableStream !== "boolean") { params.disableStream = false; } if (typeof params.disableAutoFetch !== "boolean") { params.disableAutoFetch = false; } (0, _util.setVerbosityLevel)(params.verbosity); if (!worker) { var workerParams = { verbosity: params.verbosity, port: _worker_options.GlobalWorkerOptions.workerPort }; worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams); task._worker = worker; } var docId = task.docId; worker.promise.then(function () { if (task.destroyed) { throw new Error("Loading aborted"); } var workerIdPromise = _fetchDocument(worker, params, rangeTransport, docId); var networkStreamPromise = new Promise(function (resolve) { var networkStream; if (rangeTransport) { networkStream = new _transport_stream.PDFDataTransportStream({ length: params.length, initialData: params.initialData, progressiveDone: params.progressiveDone, disableRange: params.disableRange, disableStream: params.disableStream }, rangeTransport); } else if (!params.data) { networkStream = createPDFNetworkStream({ url: params.url, length: params.length, httpHeaders: params.httpHeaders, withCredentials: params.withCredentials, rangeChunkSize: params.rangeChunkSize, disableRange: params.disableRange, disableStream: params.disableStream }); } resolve(networkStream); }); return Promise.all([workerIdPromise, networkStreamPromise]).then(function (_ref) { var _ref2 = _slicedToArray(_ref, 2), workerId = _ref2[0], networkStream = _ref2[1]; if (task.destroyed) { throw new Error("Loading aborted"); } var messageHandler = new _message_handler.MessageHandler(docId, workerId, worker.port); messageHandler.postMessageTransfers = worker.postMessageTransfers; var transport = new WorkerTransport(messageHandler, task, networkStream, params); task._transport = transport; messageHandler.send("Ready", null); }); })["catch"](task._capability.reject); return task; } function _fetchDocument(worker, source, pdfDataRangeTransport, docId) { if (worker.destroyed) { return Promise.reject(new Error("Worker was destroyed")); } if (pdfDataRangeTransport) { source.length = pdfDataRangeTransport.length; source.initialData = pdfDataRangeTransport.initialData; source.progressiveDone = pdfDataRangeTransport.progressiveDone; } return worker.messageHandler.sendWithPromise("GetDocRequest", { docId: docId, apiVersion: '2.8.57', source: { data: source.data, url: source.url, password: source.password, disableAutoFetch: source.disableAutoFetch, rangeChunkSize: source.rangeChunkSize, length: source.length }, maxImageSize: source.maxImageSize, disableFontFace: source.disableFontFace, postMessageTransfers: worker.postMessageTransfers, docBaseUrl: source.docBaseUrl, ignoreErrors: source.ignoreErrors, isEvalSupported: source.isEvalSupported, fontExtraProperties: source.fontExtraProperties }).then(function (workerId) { if (worker.destroyed) { throw new Error("Worker was destroyed"); } return workerId; }); } var PDFDocumentLoadingTask = function PDFDocumentLoadingTaskClosure() { var nextDocumentId = 0; var PDFDocumentLoadingTask = /*#__PURE__*/function () { function PDFDocumentLoadingTask() { _classCallCheck(this, PDFDocumentLoadingTask); this._capability = (0, _util.createPromiseCapability)(); this._transport = null; this._worker = null; this.docId = "d" + nextDocumentId++; this.destroyed = false; this.onPassword = null; this.onProgress = null; this.onUnsupportedFeature = null; } _createClass(PDFDocumentLoadingTask, [{ key: "promise", get: function get() { return this._capability.promise; } }, { key: "destroy", value: function destroy() { var _this = this; this.destroyed = true; var transportDestroyed = !this._transport ? Promise.resolve() : this._transport.destroy(); return transportDestroyed.then(function () { _this._transport = null; if (_this._worker) { _this._worker.destroy(); _this._worker = null; } }); } }]); return PDFDocumentLoadingTask; }(); return PDFDocumentLoadingTask; }(); var PDFDataRangeTransport = /*#__PURE__*/function () { function PDFDataRangeTransport(length, initialData) { var progressiveDone = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; _classCallCheck(this, PDFDataRangeTransport); this.length = length; this.initialData = initialData; this.progressiveDone = progressiveDone; this._rangeListeners = []; this._progressListeners = []; this._progressiveReadListeners = []; this._progressiveDoneListeners = []; this._readyCapability = (0, _util.createPromiseCapability)(); } _createClass(PDFDataRangeTransport, [{ key: "addRangeListener", value: function addRangeListener(listener) { this._rangeListeners.push(listener); } }, { key: "addProgressListener", value: function addProgressListener(listener) { this._progressListeners.push(listener); } }, { key: "addProgressiveReadListener", value: function addProgressiveReadListener(listener) { this._progressiveReadListeners.push(listener); } }, { key: "addProgressiveDoneListener", value: function addProgressiveDoneListener(listener) { this._progressiveDoneListeners.push(listener); } }, { key: "onDataRange", value: function onDataRange(begin, chunk) { var _iterator = _createForOfIteratorHelper(this._rangeListeners), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var listener = _step.value; listener(begin, chunk); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } } }, { key: "onDataProgress", value: function onDataProgress(loaded, total) { var _this2 = this; this._readyCapability.promise.then(function () { var _iterator2 = _createForOfIteratorHelper(_this2._progressListeners), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var listener = _step2.value; listener(loaded, total); } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } }); } }, { key: "onDataProgressiveRead", value: function onDataProgressiveRead(chunk) { var _this3 = this; this._readyCapability.promise.then(function () { var _iterator3 = _createForOfIteratorHelper(_this3._progressiveReadListeners), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var listener = _step3.value; listener(chunk); } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } }); } }, { key: "onDataProgressiveDone", value: function onDataProgressiveDone() { var _this4 = this; this._readyCapability.promise.then(function () { var _iterator4 = _createForOfIteratorHelper(_this4._progressiveDoneListeners), _step4; try { for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { var listener = _step4.value; listener(); } } catch (err) { _iterator4.e(err); } finally { _iterator4.f(); } }); } }, { key: "transportReady", value: function transportReady() { this._readyCapability.resolve(); } }, { key: "requestDataRange", value: function requestDataRange(begin, end) { (0, _util.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange"); } }, { key: "abort", value: function abort() {} }]); return PDFDataRangeTransport; }(); exports.PDFDataRangeTransport = PDFDataRangeTransport; var PDFDocumentProxy = /*#__PURE__*/function () { function PDFDocumentProxy(pdfInfo, transport) { _classCallCheck(this, PDFDocumentProxy); this._pdfInfo = pdfInfo; this._transport = transport; } _createClass(PDFDocumentProxy, [{ key: "annotationStorage", get: function get() { return (0, _util.shadow)(this, "annotationStorage", new _annotation_storage.AnnotationStorage()); } }, { key: "numPages", get: function get() { return this._pdfInfo.numPages; } }, { key: "fingerprint", get: function get() { return this._pdfInfo.fingerprint; } }, { key: "getPage", value: function getPage(pageNumber) { return this._transport.getPage(pageNumber); } }, { key: "getPageIndex", value: function getPageIndex(ref) { return this._transport.getPageIndex(ref); } }, { key: "getDestinations", value: function getDestinations() { return this._transport.getDestinations(); } }, { key: "getDestination", value: function getDestination(id) { return this._transport.getDestination(id); } }, { key: "getPageLabels", value: function getPageLabels() { return this._transport.getPageLabels(); } }, { key: "getPageLayout", value: function getPageLayout() { return this._transport.getPageLayout(); } }, { key: "getPageMode", value: function getPageMode() { return this._transport.getPageMode(); } }, { key: "getViewerPreferences", value: function getViewerPreferences() { return this._transport.getViewerPreferences(); } }, { key: "getOpenAction", value: function getOpenAction() { return this._transport.getOpenAction(); } }, { key: "getAttachments", value: function getAttachments() { return this._transport.getAttachments(); } }, { key: "getJavaScript", value: function getJavaScript() { return this._transport.getJavaScript(); } }, { key: "getJSActions", value: function getJSActions() { return this._transport.getDocJSActions(); } }, { key: "getOutline", value: function getOutline() { return this._transport.getOutline(); } }, { key: "getOptionalContentConfig", value: function getOptionalContentConfig() { return this._transport.getOptionalContentConfig(); } }, { key: "getPermissions", value: function getPermissions() { return this._transport.getPermissions(); } }, { key: "getMetadata", value: function getMetadata() { return this._transport.getMetadata(); } }, { key: "getMarkInfo", value: function getMarkInfo() { return this._transport.getMarkInfo(); } }, { key: "getData", value: function getData() { return this._transport.getData(); } }, { key: "getDownloadInfo", value: function getDownloadInfo() { return this._transport.downloadInfoCapability.promise; } }, { key: "getStats", value: function getStats() { return this._transport.getStats(); } }, { key: "cleanup", value: function cleanup() { return this._transport.startCleanup(); } }, { key: "destroy", value: function destroy() { return this.loadingTask.destroy(); } }, { key: "loadingParams", get: function get() { return this._transport.loadingParams; } }, { key: "loadingTask", get: function get() { return this._transport.loadingTask; } }, { key: "saveDocument", value: function saveDocument(annotationStorage) { return this._transport.saveDocument(annotationStorage); } }, { key: "getFieldObjects", value: function getFieldObjects() { return this._transport.getFieldObjects(); } }, { key: "hasJSActions", value: function hasJSActions() { return this._transport.hasJSActions(); } }, { key: "getCalculationOrderIds", value: function getCalculationOrderIds() { return this._transport.getCalculationOrderIds(); } }]); return PDFDocumentProxy; }(); exports.PDFDocumentProxy = PDFDocumentProxy; var PDFPageProxy = /*#__PURE__*/function () { function PDFPageProxy(pageIndex, pageInfo, transport, ownerDocument) { var pdfBug = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; _classCallCheck(this, PDFPageProxy); this._pageIndex = pageIndex; this._pageInfo = pageInfo; this._ownerDocument = ownerDocument; this._transport = transport; this._stats = pdfBug ? new _display_utils.StatTimer() : null; this._pdfBug = pdfBug; this.commonObjs = transport.commonObjs; this.objs = new PDFObjects(); this.cleanupAfterRender = false; this.pendingCleanup = false; this._intentStates = new Map(); this.destroyed = false; } _createClass(PDFPageProxy, [{ key: "pageNumber", get: function get() { return this._pageIndex + 1; } }, { key: "rotate", get: function get() { return this._pageInfo.rotate; } }, { key: "ref", get: function get() { return this._pageInfo.ref; } }, { key: "userUnit", get: function get() { return this._pageInfo.userUnit; } }, { key: "view", get: function get() { return this._pageInfo.view; } }, { key: "getViewport", value: function getViewport() { var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, scale = _ref3.scale, _ref3$rotation = _ref3.rotation, rotation = _ref3$rotation === void 0 ? this.rotate : _ref3$rotation, _ref3$offsetX = _ref3.offsetX, offsetX = _ref3$offsetX === void 0 ? 0 : _ref3$offsetX, _ref3$offsetY = _ref3.offsetY, offsetY = _ref3$offsetY === void 0 ? 0 : _ref3$offsetY, _ref3$dontFlip = _ref3.dontFlip, dontFlip = _ref3$dontFlip === void 0 ? false : _ref3$dontFlip; return new _display_utils.PageViewport({ viewBox: this.view, scale: scale, rotation: rotation, offsetX: offsetX, offsetY: offsetY, dontFlip: dontFlip }); } }, { key: "getAnnotations", value: function getAnnotations() { var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref4$intent = _ref4.intent, intent = _ref4$intent === void 0 ? null : _ref4$intent; if (!this.annotationsPromise || this.annotationsIntent !== intent) { this.annotationsPromise = this._transport.getAnnotations(this._pageIndex, intent); this.annotationsIntent = intent; } return this.annotationsPromise; } }, { key: "getJSActions", value: function getJSActions() { return this._jsActionsPromise || (this._jsActionsPromise = this._transport.getPageJSActions(this._pageIndex)); } }, { key: "render", value: function render(_ref5) { var _this5 = this; var canvasContext = _ref5.canvasContext, viewport = _ref5.viewport, _ref5$intent = _ref5.intent, intent = _ref5$intent === void 0 ? "display" : _ref5$intent, _ref5$enableWebGL = _ref5.enableWebGL, enableWebGL = _ref5$enableWebGL === void 0 ? false : _ref5$enableWebGL, _ref5$renderInteracti = _ref5.renderInteractiveForms, renderInteractiveForms = _ref5$renderInteracti === void 0 ? false : _ref5$renderInteracti, _ref5$transform = _ref5.transform, transform = _ref5$transform === void 0 ? null : _ref5$transform, _ref5$imageLayer = _ref5.imageLayer, imageLayer = _ref5$imageLayer === void 0 ? null : _ref5$imageLayer, _ref5$canvasFactory = _ref5.canvasFactory, canvasFactory = _ref5$canvasFactory === void 0 ? null : _ref5$canvasFactory, _ref5$background = _ref5.background, background = _ref5$background === void 0 ? null : _ref5$background, _ref5$annotationStora = _ref5.annotationStorage, annotationStorage = _ref5$annotationStora === void 0 ? null : _ref5$annotationStora, _ref5$optionalContent = _ref5.optionalContentConfigPromise, optionalContentConfigPromise = _ref5$optionalContent === void 0 ? null : _ref5$optionalContent; if (this._stats) { this._stats.time("Overall"); } var renderingIntent = intent === "print" ? "print" : "display"; this.pendingCleanup = false; if (!optionalContentConfigPromise) { optionalContentConfigPromise = this._transport.getOptionalContentConfig(); } var intentState = this._intentStates.get(renderingIntent); if (!intentState) { intentState = Object.create(null); this._intentStates.set(renderingIntent, intentState); } if (intentState.streamReaderCancelTimeout) { clearTimeout(intentState.streamReaderCancelTimeout); intentState.streamReaderCancelTimeout = null; } var canvasFactoryInstance = canvasFactory || new DefaultCanvasFactory({ ownerDocument: this._ownerDocument }); var webGLContext = new _webgl.WebGLContext({ enable: enableWebGL }); if (!intentState.displayReadyCapability) { intentState.displayReadyCapability = (0, _util.createPromiseCapability)(); intentState.operatorList = { fnArray: [], argsArray: [], lastChunk: false }; if (this._stats) { this._stats.time("Page Request"); } this._pumpOperatorList({ pageIndex: this._pageIndex, intent: renderingIntent, renderInteractiveForms: renderInteractiveForms === true, annotationStorage: (annotationStorage === null || annotationStorage === void 0 ? void 0 : annotationStorage.getAll()) || null }); } var complete = function complete(error) { var i = intentState.renderTasks.indexOf(internalRenderTask); if (i >= 0) { intentState.renderTasks.splice(i, 1); } if (_this5.cleanupAfterRender || renderingIntent === "print") { _this5.pendingCleanup = true; } _this5._tryCleanup(); if (error) { internalRenderTask.capability.reject(error); _this5._abortOperatorList({ intentState: intentState, reason: error }); } else { internalRenderTask.capability.resolve(); } if (_this5._stats) { _this5._stats.timeEnd("Rendering"); _this5._stats.timeEnd("Overall"); } }; var internalRenderTask = new InternalRenderTask({ callback: complete, params: { canvasContext: canvasContext, viewport: viewport, transform: transform, imageLayer: imageLayer, background: background }, objs: this.objs, commonObjs: this.commonObjs, operatorList: intentState.operatorList, pageIndex: this._pageIndex, canvasFactory: canvasFactoryInstance, webGLContext: webGLContext, useRequestAnimationFrame: renderingIntent !== "print", pdfBug: this._pdfBug }); if (!intentState.renderTasks) { intentState.renderTasks = []; } intentState.renderTasks.push(internalRenderTask); var renderTask = internalRenderTask.task; Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(function (_ref6) { var _ref7 = _slicedToArray(_ref6, 2), transparency = _ref7[0], optionalContentConfig = _ref7[1]; if (_this5.pendingCleanup) { complete(); return; } if (_this5._stats) { _this5._stats.time("Rendering"); } internalRenderTask.initializeGraphics({ transparency: transparency, optionalContentConfig: optionalContentConfig }); internalRenderTask.operatorListChanged(); })["catch"](complete); return renderTask; } }, { key: "getOperatorList", value: function getOperatorList() { function operatorListChanged() { if (intentState.operatorList.lastChunk) { intentState.opListReadCapability.resolve(intentState.operatorList); var i = intentState.renderTasks.indexOf(opListTask); if (i >= 0) { intentState.renderTasks.splice(i, 1); } } } var renderingIntent = "oplist"; var intentState = this._intentStates.get(renderingIntent); if (!intentState) { intentState = Object.create(null); this._intentStates.set(renderingIntent, intentState); } var opListTask; if (!intentState.opListReadCapability) { opListTask = Object.create(null); opListTask.operatorListChanged = operatorListChanged; intentState.opListReadCapability = (0, _util.createPromiseCapability)(); intentState.renderTasks = []; intentState.renderTasks.push(opListTask); intentState.operatorList = { fnArray: [], argsArray: [], lastChunk: false }; if (this._stats) { this._stats.time("Page Request"); } this._pumpOperatorList({ pageIndex: this._pageIndex, intent: renderingIntent }); } return intentState.opListReadCapability.promise; } }, { key: "streamTextContent", value: function streamTextContent() { var _ref8 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref8$normalizeWhites = _ref8.normalizeWhitespace, normalizeWhitespace = _ref8$normalizeWhites === void 0 ? false : _ref8$normalizeWhites, _ref8$disableCombineT = _ref8.disableCombineTextItems, disableCombineTextItems = _ref8$disableCombineT === void 0 ? false : _ref8$disableCombineT; var TEXT_CONTENT_CHUNK_SIZE = 100; return this._transport.messageHandler.sendWithStream("GetTextContent", { pageIndex: this._pageIndex, normalizeWhitespace: normalizeWhitespace === true, combineTextItems: disableCombineTextItems !== true }, { highWaterMark: TEXT_CONTENT_CHUNK_SIZE, size: function size(textContent) { return textContent.items.length; } }); } }, { key: "getTextContent", value: function getTextContent() { var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var readableStream = this.streamTextContent(params); return new Promise(function (resolve, reject) { function pump() { reader.read().then(function (_ref9) { var _textContent$items; var value = _ref9.value, done = _ref9.done; if (done) { resolve(textContent); return; } Object.assign(textContent.styles, value.styles); (_textContent$items = textContent.items).push.apply(_textContent$items, _toConsumableArray(value.items)); pump(); }, reject); } var reader = readableStream.getReader(); var textContent = { items: [], styles: Object.create(null) }; pump(); }); } }, { key: "_destroy", value: function _destroy() { this.destroyed = true; this._transport.pageCache[this._pageIndex] = null; var waitOn = []; var _iterator5 = _createForOfIteratorHelper(this._intentStates), _step5; try { for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { var _step5$value = _slicedToArray(_step5.value, 2), intent = _step5$value[0], intentState = _step5$value[1]; this._abortOperatorList({ intentState: intentState, reason: new Error("Page was destroyed."), force: true }); if (intent === "oplist") { continue; } var _iterator6 = _createForOfIteratorHelper(intentState.renderTasks), _step6; try { for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) { var internalRenderTask = _step6.value; waitOn.push(internalRenderTask.completed); internalRenderTask.cancel(); } } catch (err) { _iterator6.e(err); } finally { _iterator6.f(); } } } catch (err) { _iterator5.e(err); } finally { _iterator5.f(); } this.objs.clear(); this.annotationsPromise = null; this._jsActionsPromise = null; this.pendingCleanup = false; return Promise.all(waitOn); } }, { key: "cleanup", value: function cleanup() { var resetStats = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; this.pendingCleanup = true; return this._tryCleanup(resetStats); } }, { key: "_tryCleanup", value: function _tryCleanup() { var resetStats = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; if (!this.pendingCleanup) { return false; } var _iterator7 = _createForOfIteratorHelper(this._intentStates.values()), _step7; try { for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) { var _step7$value = _step7.value, renderTasks = _step7$value.renderTasks, operatorList = _step7$value.operatorList; if (renderTasks.length !== 0 || !operatorList.lastChunk) { return false; } } } catch (err) { _iterator7.e(err); } finally { _iterator7.f(); } this._intentStates.clear(); this.objs.clear(); this.annotationsPromise = null; this._jsActionsPromise = null; if (resetStats && this._stats) { this._stats = new _display_utils.StatTimer(); } this.pendingCleanup = false; return true; } }, { key: "_startRenderPage", value: function _startRenderPage(transparency, intent) { var intentState = this._intentStates.get(intent); if (!intentState) { return; } if (this._stats) { this._stats.timeEnd("Page Request"); } if (intentState.displayReadyCapability) { intentState.displayReadyCapability.resolve(transparency); } } }, { key: "_renderPageChunk", value: function _renderPageChunk(operatorListChunk, intentState) { for (var i = 0, ii = operatorListChunk.length; i < ii; i++) { intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]); intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]); } intentState.operatorList.lastChunk = operatorListChunk.lastChunk; for (var _i2 = 0; _i2 < intentState.renderTasks.length; _i2++) { intentState.renderTasks[_i2].operatorListChanged(); } if (operatorListChunk.lastChunk) { this._tryCleanup(); } } }, { key: "_pumpOperatorList", value: function _pumpOperatorList(args) { var _this6 = this; (0, _util.assert)(args.intent, 'PDFPageProxy._pumpOperatorList: Expected "intent" argument.'); var readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", args); var reader = readableStream.getReader(); var intentState = this._intentStates.get(args.intent); intentState.streamReader = reader; var pump = function pump() { reader.read().then(function (_ref10) { var value = _ref10.value, done = _ref10.done; if (done) { intentState.streamReader = null; return; } if (_this6._transport.destroyed) { return; } _this6._renderPageChunk(value, intentState); pump(); }, function (reason) { intentState.streamReader = null; if (_this6._transport.destroyed) { return; } if (intentState.operatorList) { intentState.operatorList.lastChunk = true; for (var i = 0; i < intentState.renderTasks.length; i++) { intentState.renderTasks[i].operatorListChanged(); } _this6._tryCleanup(); } if (intentState.displayReadyCapability) { intentState.displayReadyCapability.reject(reason); } else if (intentState.opListReadCapability) { intentState.opListReadCapability.reject(reason); } else { throw reason; } }); }; pump(); } }, { key: "_abortOperatorList", value: function _abortOperatorList(_ref11) { var _this7 = this; var intentState = _ref11.intentState, reason = _ref11.reason, _ref11$force = _ref11.force, force = _ref11$force === void 0 ? false : _ref11$force; (0, _util.assert)(reason instanceof Error || _typeof(reason) === "object" && reason !== null, 'PDFPageProxy._abortOperatorList: Expected "reason" argument.'); if (!intentState.streamReader) { return; } if (!force) { if (intentState.renderTasks.length !== 0) { return; } if (reason instanceof _display_utils.RenderingCancelledException) { intentState.streamReaderCancelTimeout = setTimeout(function () { _this7._abortOperatorList({ intentState: intentState, reason: reason, force: true }); intentState.streamReaderCancelTimeout = null; }, RENDERING_CANCELLED_TIMEOUT); return; } } intentState.streamReader.cancel(new _util.AbortException(reason === null || reason === void 0 ? void 0 : reason.message)); intentState.streamReader = null; if (this._transport.destroyed) { return; } var _iterator8 = _createForOfIteratorHelper(this._intentStates), _step8; try { for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) { var _step8$value = _slicedToArray(_step8.value, 2), intent = _step8$value[0], curIntentState = _step8$value[1]; if (curIntentState === intentState) { this._intentStates["delete"](intent); break; } } } catch (err) { _iterator8.e(err); } finally { _iterator8.f(); } this.cleanup(); } }, { key: "stats", get: function get() { return this._stats; } }]); return PDFPageProxy; }(); exports.PDFPageProxy = PDFPageProxy; var LoopbackPort = /*#__PURE__*/function () { function LoopbackPort() { var defer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; _classCallCheck(this, LoopbackPort); this._listeners = []; this._defer = defer; this._deferred = Promise.resolve(undefined); } _createClass(LoopbackPort, [{ key: "postMessage", value: function postMessage(obj, transfers) { var _this8 = this; function cloneValue(value) { if (_typeof(value) !== "object" || value === null) { return value; } if (cloned.has(value)) { return cloned.get(value); } var buffer, result; if ((buffer = value.buffer) && (0, _util.isArrayBuffer)(buffer)) { if (transfers !== null && transfers !== void 0 && transfers.includes(buffer)) { result = new value.constructor(buffer, value.byteOffset, value.byteLength); } else { result = new value.constructor(value); } cloned.set(value, result); return result; } result = Array.isArray(value) ? [] : {}; cloned.set(value, result); for (var i in value) { var desc = void 0, p = value; while (!(desc = Object.getOwnPropertyDescriptor(p, i))) { p = Object.getPrototypeOf(p); } if (typeof desc.value === "undefined") { continue; } if (typeof desc.value === "function") { if (value.hasOwnProperty && value.hasOwnProperty(i)) { throw new Error("LoopbackPort.postMessage - cannot clone: ".concat(value[i])); } continue; } result[i] = cloneValue(desc.value); } return result; } if (!this._defer) { this._listeners.forEach(function (listener) { listener.call(_this8, { data: obj }); }); return; } var cloned = new WeakMap(); var e = { data: cloneValue(obj) }; this._deferred.then(function () { _this8._listeners.forEach(function (listener) { listener.call(_this8, e); }); }); } }, { key: "addEventListener", value: function addEventListener(name, listener) { this._listeners.push(listener); } }, { key: "removeEventListener", value: function removeEventListener(name, listener) { var i = this._listeners.indexOf(listener); this._listeners.splice(i, 1); } }, { key: "terminate", value: function terminate() { this._listeners.length = 0; } }]); return LoopbackPort; }(); exports.LoopbackPort = LoopbackPort; var PDFWorker = function PDFWorkerClosure() { var pdfWorkerPorts = new WeakMap(); var isWorkerDisabled = false; var fallbackWorkerSrc; var nextFakeWorkerId = 0; var fakeWorkerCapability; if (_is_node.isNodeJS && typeof require === "function") { isWorkerDisabled = true; fallbackWorkerSrc = "./pdf.worker.js"; } else if ((typeof document === "undefined" ? "undefined" : _typeof(document)) === "object" && "currentScript" in document) { var _document$currentScri; var pdfjsFilePath = (_document$currentScri = document.currentScript) === null || _document$currentScri === void 0 ? void 0 : _document$currentScri.src; if (pdfjsFilePath) { fallbackWorkerSrc = pdfjsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, ".worker$1$2"); } } function _getWorkerSrc() { if (_worker_options.GlobalWorkerOptions.workerSrc) { return _worker_options.GlobalWorkerOptions.workerSrc; } if (typeof fallbackWorkerSrc !== "undefined") { if (!_is_node.isNodeJS) { (0, _display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.'); } return fallbackWorkerSrc; } throw new Error('No "GlobalWorkerOptions.workerSrc" specified.'); } function getMainThreadWorkerMessageHandler() { var mainWorkerMessageHandler; try { var _globalThis$pdfjsWork; mainWorkerMessageHandler = (_globalThis$pdfjsWork = globalThis.pdfjsWorker) === null || _globalThis$pdfjsWork === void 0 ? void 0 : _globalThis$pdfjsWork.WorkerMessageHandler; } catch (ex) {} return mainWorkerMessageHandler || null; } function setupFakeWorkerGlobal() { if (fakeWorkerCapability) { return fakeWorkerCapability.promise; } fakeWorkerCapability = (0, _util.createPromiseCapability)(); var loader = /*#__PURE__*/function () { var _ref12 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() { var mainWorkerMessageHandler, worker; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: mainWorkerMessageHandler = getMainThreadWorkerMessageHandler(); if (!mainWorkerMessageHandler) { _context.next = 3; break; } return _context.abrupt("return", mainWorkerMessageHandler); case 3: if (!(_is_node.isNodeJS && typeof require === "function")) { _context.next = 6; break; } worker = eval("require")(_getWorkerSrc()); return _context.abrupt("return", worker.WorkerMessageHandler); case 6: _context.next = 8; return (0, _display_utils.loadScript)(_getWorkerSrc()); case 8: return _context.abrupt("return", window.pdfjsWorker.WorkerMessageHandler); case 9: case "end": return _context.stop(); } } }, _callee); })); return function loader() { return _ref12.apply(this, arguments); }; }(); loader().then(fakeWorkerCapability.resolve, fakeWorkerCapability.reject); return fakeWorkerCapability.promise; } function createCDNWrapper(url) { var wrapper = "importScripts('" + url + "');"; return URL.createObjectURL(new Blob([wrapper])); } var PDFWorker = /*#__PURE__*/function () { function PDFWorker() { var _ref13 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref13$name = _ref13.name, name = _ref13$name === void 0 ? null : _ref13$name, _ref13$port = _ref13.port, port = _ref13$port === void 0 ? null : _ref13$port, _ref13$verbosity = _ref13.verbosity, verbosity = _ref13$verbosity === void 0 ? (0, _util.getVerbosityLevel)() : _ref13$verbosity; _classCallCheck(this, PDFWorker); if (port && pdfWorkerPorts.has(port)) { throw new Error("Cannot use more than one PDFWorker per port"); } this.name = name; this.destroyed = false; this.postMessageTransfers = true; this.verbosity = verbosity; this._readyCapability = (0, _util.createPromiseCapability)(); this._port = null; this._webWorker = null; this._messageHandler = null; if (port) { pdfWorkerPorts.set(port, this); this._initializeFromPort(port); return; } this._initialize(); } _createClass(PDFWorker, [{ key: "promise", get: function get() { return this._readyCapability.promise; } }, { key: "port", get: function get() { return this._port; } }, { key: "messageHandler", get: function get() { return this._messageHandler; } }, { key: "_initializeFromPort", value: function _initializeFromPort(port) { this._port = port; this._messageHandler = new _message_handler.MessageHandler("main", "worker", port); this._messageHandler.on("ready", function () {}); this._readyCapability.resolve(); } }, { key: "_initialize", value: function _initialize() { var _this9 = this; if (typeof Worker !== "undefined" && !isWorkerDisabled && !getMainThreadWorkerMessageHandler()) { var workerSrc = _getWorkerSrc(); try { if (!(0, _util.isSameOrigin)(window.location.href, workerSrc)) { workerSrc = createCDNWrapper(new URL(workerSrc, window.location).href); } var worker = new Worker(workerSrc); var messageHandler = new _message_handler.MessageHandler("main", "worker", worker); var terminateEarly = function terminateEarly() { worker.removeEventListener("error", onWorkerError); messageHandler.destroy(); worker.terminate(); if (_this9.destroyed) { _this9._readyCapability.reject(new Error("Worker was destroyed")); } else { _this9._setupFakeWorker(); } }; var onWorkerError = function onWorkerError() { if (!_this9._webWorker) { terminateEarly(); } }; worker.addEventListener("error", onWorkerError); messageHandler.on("test", function (data) { worker.removeEventListener("error", onWorkerError); if (_this9.destroyed) { terminateEarly(); return; } if (data) { _this9._messageHandler = messageHandler; _this9._port = worker; _this9._webWorker = worker; if (!data.supportTransfers) { _this9.postMessageTransfers = false; } _this9._readyCapability.resolve(); messageHandler.send("configure", { verbosity: _this9.verbosity }); } else { _this9._setupFakeWorker(); messageHandler.destroy(); worker.terminate(); } }); messageHandler.on("ready", function (data) { worker.removeEventListener("error", onWorkerError); if (_this9.destroyed) { terminateEarly(); return; } try { sendTest(); } catch (e) { _this9._setupFakeWorker(); } }); var sendTest = function sendTest() { var testObj = new Uint8Array([_this9.postMessageTransfers ? 255 : 0]); try { messageHandler.send("test", testObj, [testObj.buffer]); } catch (ex) { (0, _util.warn)("Cannot use postMessage transfers."); testObj[0] = 0; messageHandler.send("test", testObj); } }; sendTest(); return; } catch (e) { (0, _util.info)("The worker has been disabled."); } } this._setupFakeWorker(); } }, { key: "_setupFakeWorker", value: function _setupFakeWorker() { var _this10 = this; if (!isWorkerDisabled) { (0, _util.warn)("Setting up fake worker."); isWorkerDisabled = true; } setupFakeWorkerGlobal().then(function (WorkerMessageHandler) { if (_this10.destroyed) { _this10._readyCapability.reject(new Error("Worker was destroyed")); return; } var port = new LoopbackPort(); _this10._port = port; var id = "fake" + nextFakeWorkerId++; var workerHandler = new _message_handler.MessageHandler(id + "_worker", id, port); WorkerMessageHandler.setup(workerHandler, port); var messageHandler = new _message_handler.MessageHandler(id, id + "_worker", port); _this10._messageHandler = messageHandler; _this10._readyCapability.resolve(); messageHandler.send("configure", { verbosity: _this10.verbosity }); })["catch"](function (reason) { _this10._readyCapability.reject(new Error("Setting up fake worker failed: \"".concat(reason.message, "\"."))); }); } }, { key: "destroy", value: function destroy() { this.destroyed = true; if (this._webWorker) { this._webWorker.terminate(); this._webWorker = null; } pdfWorkerPorts["delete"](this._port); this._port = null; if (this._messageHandler) { this._messageHandler.destroy(); this._messageHandler = null; } } }], [{ key: "fromPort", value: function fromPort(params) { if (!params || !params.port) { throw new Error("PDFWorker.fromPort - invalid method signature."); } if (pdfWorkerPorts.has(params.port)) { return pdfWorkerPorts.get(params.port); } return new PDFWorker(params); } }, { key: "getWorkerSrc", value: function getWorkerSrc() { return _getWorkerSrc(); } }]); return PDFWorker; }(); return PDFWorker; }(); exports.PDFWorker = PDFWorker; var WorkerTransport = /*#__PURE__*/function () { function WorkerTransport(messageHandler, loadingTask, networkStream, params) { _classCallCheck(this, WorkerTransport); this.messageHandler = messageHandler; this.loadingTask = loadingTask; this.commonObjs = new PDFObjects(); this.fontLoader = new _font_loader.FontLoader({ docId: loadingTask.docId, onUnsupportedFeature: this._onUnsupportedFeature.bind(this), ownerDocument: params.ownerDocument }); this._params = params; this.CMapReaderFactory = new params.CMapReaderFactory({ baseUrl: params.cMapUrl, isCompressed: params.cMapPacked }); this.destroyed = false; this.destroyCapability = null; this._passwordCapability = null; this._networkStream = networkStream; this._fullReader = null; this._lastProgress = null; this.pageCache = []; this.pagePromises = []; this.downloadInfoCapability = (0, _util.createPromiseCapability)(); this.setupMessageHandler(); } _createClass(WorkerTransport, [{ key: "loadingTaskSettled", get: function get() { return this.loadingTask._capability.settled; } }, { key: "destroy", value: function destroy() { var _this11 = this; if (this.destroyCapability) { return this.destroyCapability.promise; } this.destroyed = true; this.destroyCapability = (0, _util.createPromiseCapability)(); if (this._passwordCapability) { this._passwordCapability.reject(new Error("Worker was destroyed during onPassword callback")); } var waitOn = []; this.pageCache.forEach(function (page) { if (page) { waitOn.push(page._destroy()); } }); this.pageCache.length = 0; this.pagePromises.length = 0; var terminated = this.messageHandler.sendWithPromise("Terminate", null); waitOn.push(terminated); if (this.loadingTaskSettled) { var annotationStorageResetModified = this.loadingTask.promise.then(function (pdfDocument) { if (pdfDocument.hasOwnProperty("annotationStorage")) { pdfDocument.annotationStorage.resetModified(); } })["catch"](function () {}); waitOn.push(annotationStorageResetModified); } Promise.all(waitOn).then(function () { _this11.commonObjs.clear(); _this11.fontLoader.clear(); _this11._hasJSActionsPromise = null; if (_this11._networkStream) { _this11._networkStream.cancelAllRequests(new _util.AbortException("Worker was terminated.")); } if (_this11.messageHandler) { _this11.messageHandler.destroy(); _this11.messageHandler = null; } _this11.destroyCapability.resolve(); }, this.destroyCapability.reject); return this.destroyCapability.promise; } }, { key: "setupMessageHandler", value: function setupMessageHandler() { var _this12 = this; var messageHandler = this.messageHandler, loadingTask = this.loadingTask; messageHandler.on("GetReader", function (data, sink) { (0, _util.assert)(_this12._networkStream, "GetReader - no `IPDFStream` instance available."); _this12._fullReader = _this12._networkStream.getFullReader(); _this12._fullReader.onProgress = function (evt) { _this12._lastProgress = { loaded: evt.loaded, total: evt.total }; }; sink.onPull = function () { _this12._fullReader.read().then(function (_ref14) { var value = _ref14.value, done = _ref14.done; if (done) { sink.close(); return; } (0, _util.assert)((0, _util.isArrayBuffer)(value), "GetReader - expected an ArrayBuffer."); sink.enqueue(new Uint8Array(value), 1, [value]); })["catch"](function (reason) { sink.error(reason); }); }; sink.onCancel = function (reason) { _this12._fullReader.cancel(reason); sink.ready["catch"](function (readyReason) { if (_this12.destroyed) { return; } throw readyReason; }); }; }); messageHandler.on("ReaderHeadersReady", function (data) { var headersCapability = (0, _util.createPromiseCapability)(); var fullReader = _this12._fullReader; fullReader.headersReady.then(function () { if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) { if (_this12._lastProgress && loadingTask.onProgress) { loadingTask.onProgress(_this12._lastProgress); } fullReader.onProgress = function (evt) { if (loadingTask.onProgress) { loadingTask.onProgress({ loaded: evt.loaded, total: evt.total }); } }; } headersCapability.resolve({ isStreamingSupported: fullReader.isStreamingSupported, isRangeSupported: fullReader.isRangeSupported, contentLength: fullReader.contentLength }); }, headersCapability.reject); return headersCapability.promise; }); messageHandler.on("GetRangeReader", function (data, sink) { (0, _util.assert)(_this12._networkStream, "GetRangeReader - no `IPDFStream` instance available."); var rangeReader = _this12._networkStream.getRangeReader(data.begin, data.end); if (!rangeReader) { sink.close(); return; } sink.onPull = function () { rangeReader.read().then(function (_ref15) { var value = _ref15.value, done = _ref15.done; if (done) { sink.close(); return; } (0, _util.assert)((0, _util.isArrayBuffer)(value), "GetRangeReader - expected an ArrayBuffer."); sink.enqueue(new Uint8Array(value), 1, [value]); })["catch"](function (reason) { sink.error(reason); }); }; sink.onCancel = function (reason) { rangeReader.cancel(reason); sink.ready["catch"](function (readyReason) { if (_this12.destroyed) { return; } throw readyReason; }); }; }); messageHandler.on("GetDoc", function (_ref16) { var pdfInfo = _ref16.pdfInfo; _this12._numPages = pdfInfo.numPages; loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, _this12)); }); messageHandler.on("DocException", function (ex) { var reason; switch (ex.name) { case "PasswordException": reason = new _util.PasswordException(ex.message, ex.code); break; case "InvalidPDFException": reason = new _util.InvalidPDFException(ex.message); break; case "MissingPDFException": reason = new _util.MissingPDFException(ex.message); break; case "UnexpectedResponseException": reason = new _util.UnexpectedResponseException(ex.message, ex.status); break; case "UnknownErrorException": reason = new _util.UnknownErrorException(ex.message, ex.details); break; } if (!(reason instanceof Error)) { var msg = "DocException - expected a valid Error."; (0, _util.warn)(msg); } loadingTask._capability.reject(reason); }); messageHandler.on("PasswordRequest", function (exception) { _this12._passwordCapability = (0, _util.createPromiseCapability)(); if (loadingTask.onPassword) { var updatePassword = function updatePassword(password) { _this12._passwordCapability.resolve({ password: password }); }; try { loadingTask.onPassword(updatePassword, exception.code); } catch (ex) { _this12._passwordCapability.reject(ex); } } else { _this12._passwordCapability.reject(new _util.PasswordException(exception.message, exception.code)); } return _this12._passwordCapability.promise; }); messageHandler.on("DataLoaded", function (data) { if (loadingTask.onProgress) { loadingTask.onProgress({ loaded: data.length, total: data.length }); } _this12.downloadInfoCapability.resolve(data); }); messageHandler.on("StartRenderPage", function (data) { if (_this12.destroyed) { return; } var page = _this12.pageCache[data.pageIndex]; page._startRenderPage(data.transparency, data.intent); }); messageHandler.on("commonobj", function (data) { var _globalThis$FontInspe; if (_this12.destroyed) { return; } var _data = _slicedToArray(data, 3), id = _data[0], type = _data[1], exportedData = _data[2]; if (_this12.commonObjs.has(id)) { return; } switch (type) { case "Font": var params = _this12._params; if ("error" in exportedData) { var exportedError = exportedData.error; (0, _util.warn)("Error during font loading: ".concat(exportedError)); _this12.commonObjs.resolve(id, exportedError); break; } var fontRegistry = null; if (params.pdfBug && (_globalThis$FontInspe = globalThis.FontInspector) !== null && _globalThis$FontInspe !== void 0 && _globalThis$FontInspe.enabled) { fontRegistry = { registerFont: function registerFont(font, url) { globalThis.FontInspector.fontAdded(font, url); } }; } var font = new _font_loader.FontFaceObject(exportedData, { isEvalSupported: params.isEvalSupported, disableFontFace: params.disableFontFace, ignoreErrors: params.ignoreErrors, onUnsupportedFeature: _this12._onUnsupportedFeature.bind(_this12), fontRegistry: fontRegistry }); _this12.fontLoader.bind(font)["catch"](function (reason) { return messageHandler.sendWithPromise("FontFallback", { id: id }); })["finally"](function () { if (!params.fontExtraProperties && font.data) { font.data = null; } _this12.commonObjs.resolve(id, font); }); break; case "FontPath": case "Image": _this12.commonObjs.resolve(id, exportedData); break; default: throw new Error("Got unknown common object type ".concat(type)); } }); messageHandler.on("obj", function (data) { var _imageData$data; if (_this12.destroyed) { return undefined; } var _data2 = _slicedToArray(data, 4), id = _data2[0], pageIndex = _data2[1], type = _data2[2], imageData = _data2[3]; var pageProxy = _this12.pageCache[pageIndex]; if (pageProxy.objs.has(id)) { return undefined; } switch (type) { case "Image": pageProxy.objs.resolve(id, imageData); var MAX_IMAGE_SIZE_TO_STORE = 8000000; if ((imageData === null || imageData === void 0 ? void 0 : (_imageData$data = imageData.data) === null || _imageData$data === void 0 ? void 0 : _imageData$data.length) > MAX_IMAGE_SIZE_TO_STORE) { pageProxy.cleanupAfterRender = true; } break; default: throw new Error("Got unknown object type ".concat(type)); } return undefined; }); messageHandler.on("DocProgress", function (data) { if (_this12.destroyed) { return; } if (loadingTask.onProgress) { loadingTask.onProgress({ loaded: data.loaded, total: data.total }); } }); messageHandler.on("UnsupportedFeature", this._onUnsupportedFeature.bind(this)); messageHandler.on("FetchBuiltInCMap", function (data, sink) { if (_this12.destroyed) { sink.error(new Error("Worker was destroyed")); return; } var fetched = false; sink.onPull = function () { if (fetched) { sink.close(); return; } fetched = true; _this12.CMapReaderFactory.fetch(data).then(function (builtInCMap) { sink.enqueue(builtInCMap, 1, [builtInCMap.cMapData.buffer]); })["catch"](function (reason) { sink.error(reason); }); }; }); } }, { key: "_onUnsupportedFeature", value: function _onUnsupportedFeature(_ref17) { var featureId = _ref17.featureId; if (this.destroyed) { return; } if (this.loadingTask.onUnsupportedFeature) { this.loadingTask.onUnsupportedFeature(featureId); } } }, { key: "getData", value: function getData() { return this.messageHandler.sendWithPromise("GetData", null); } }, { key: "getPage", value: function getPage(pageNumber) { var _this13 = this; if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) { return Promise.reject(new Error("Invalid page request")); } var pageIndex = pageNumber - 1; if (pageIndex in this.pagePromises) { return this.pagePromises[pageIndex]; } var promise = this.messageHandler.sendWithPromise("GetPage", { pageIndex: pageIndex }).then(function (pageInfo) { if (_this13.destroyed) { throw new Error("Transport destroyed"); } var page = new PDFPageProxy(pageIndex, pageInfo, _this13, _this13._params.ownerDocument, _this13._params.pdfBug); _this13.pageCache[pageIndex] = page; return page; }); this.pagePromises[pageIndex] = promise; return promise; } }, { key: "getPageIndex", value: function getPageIndex(ref) { return this.messageHandler.sendWithPromise("GetPageIndex", { ref: ref })["catch"](function (reason) { return Promise.reject(new Error(reason)); }); } }, { key: "getAnnotations", value: function getAnnotations(pageIndex, intent) { return this.messageHandler.sendWithPromise("GetAnnotations", { pageIndex: pageIndex, intent: intent }); } }, { key: "saveDocument", value: function saveDocument(annotationStorage) { var _this$_fullReader$fil, _this$_fullReader; return this.messageHandler.sendWithPromise("SaveDocument", { numPages: this._numPages, annotationStorage: (annotationStorage === null || annotationStorage === void 0 ? void 0 : annotationStorage.getAll()) || null, filename: (_this$_fullReader$fil = (_this$_fullReader = this._fullReader) === null || _this$_fullReader === void 0 ? void 0 : _this$_fullReader.filename) !== null && _this$_fullReader$fil !== void 0 ? _this$_fullReader$fil : null })["finally"](function () { if (annotationStorage) { annotationStorage.resetModified(); } }); } }, { key: "getFieldObjects", value: function getFieldObjects() { return this.messageHandler.sendWithPromise("GetFieldObjects", null); } }, { key: "hasJSActions", value: function hasJSActions() { return this._hasJSActionsPromise || (this._hasJSActionsPromise = this.messageHandler.sendWithPromise("HasJSActions", null)); } }, { key: "getCalculationOrderIds", value: function getCalculationOrderIds() { return this.messageHandler.sendWithPromise("GetCalculationOrderIds", null); } }, { key: "getDestinations", value: function getDestinations() { return this.messageHandler.sendWithPromise("GetDestinations", null); } }, { key: "getDestination", value: function getDestination(id) { if (typeof id !== "string") { return Promise.reject(new Error("Invalid destination request.")); } return this.messageHandler.sendWithPromise("GetDestination", { id: id }); } }, { key: "getPageLabels", value: function getPageLabels() { return this.messageHandler.sendWithPromise("GetPageLabels", null); } }, { key: "getPageLayout", value: function getPageLayout() { return this.messageHandler.sendWithPromise("GetPageLayout", null); } }, { key: "getPageMode", value: function getPageMode() { return this.messageHandler.sendWithPromise("GetPageMode", null); } }, { key: "getViewerPreferences", value: function getViewerPreferences() { return this.messageHandler.sendWithPromise("GetViewerPreferences", null); } }, { key: "getOpenAction", value: function getOpenAction() { return this.messageHandler.sendWithPromise("GetOpenAction", null); } }, { key: "getAttachments", value: function getAttachments() { return this.messageHandler.sendWithPromise("GetAttachments", null); } }, { key: "getJavaScript", value: function getJavaScript() { return this.messageHandler.sendWithPromise("GetJavaScript", null); } }, { key: "getDocJSActions", value: function getDocJSActions() { return this.messageHandler.sendWithPromise("GetDocJSActions", null); } }, { key: "getPageJSActions", value: function getPageJSActions(pageIndex) { return this.messageHandler.sendWithPromise("GetPageJSActions", { pageIndex: pageIndex }); } }, { key: "getOutline", value: function getOutline() { return this.messageHandler.sendWithPromise("GetOutline", null); } }, { key: "getOptionalContentConfig", value: function getOptionalContentConfig() { return this.messageHandler.sendWithPromise("GetOptionalContentConfig", null).then(function (results) { return new _optional_content_config.OptionalContentConfig(results); }); } }, { key: "getPermissions", value: function getPermissions() { return this.messageHandler.sendWithPromise("GetPermissions", null); } }, { key: "getMetadata", value: function getMetadata() { var _this14 = this; return this.messageHandler.sendWithPromise("GetMetadata", null).then(function (results) { var _this14$_fullReader$f, _this14$_fullReader, _this14$_fullReader$c, _this14$_fullReader2; return { info: results[0], metadata: results[1] ? new _metadata.Metadata(results[1]) : null, contentDispositionFilename: (_this14$_fullReader$f = (_this14$_fullReader = _this14._fullReader) === null || _this14$_fullReader === void 0 ? void 0 : _this14$_fullReader.filename) !== null && _this14$_fullReader$f !== void 0 ? _this14$_fullReader$f : null, contentLength: (_this14$_fullReader$c = (_this14$_fullReader2 = _this14._fullReader) === null || _this14$_fullReader2 === void 0 ? void 0 : _this14$_fullReader2.contentLength) !== null && _this14$_fullReader$c !== void 0 ? _this14$_fullReader$c : null }; }); } }, { key: "getMarkInfo", value: function getMarkInfo() { return this.messageHandler.sendWithPromise("GetMarkInfo", null); } }, { key: "getStats", value: function getStats() { return this.messageHandler.sendWithPromise("GetStats", null); } }, { key: "startCleanup", value: function startCleanup() { var _this15 = this; return this.messageHandler.sendWithPromise("Cleanup", null).then(function () { for (var i = 0, ii = _this15.pageCache.length; i < ii; i++) { var page = _this15.pageCache[i]; if (page) { var cleanupSuccessful = page.cleanup(); if (!cleanupSuccessful) { throw new Error("startCleanup: Page ".concat(i + 1, " is currently rendering.")); } } } _this15.commonObjs.clear(); _this15.fontLoader.clear(); _this15._hasJSActionsPromise = null; }); } }, { key: "loadingParams", get: function get() { var params = this._params; return (0, _util.shadow)(this, "loadingParams", { disableAutoFetch: params.disableAutoFetch, disableFontFace: params.disableFontFace }); } }]); return WorkerTransport; }(); var PDFObjects = /*#__PURE__*/function () { function PDFObjects() { _classCallCheck(this, PDFObjects); this._objs = Object.create(null); } _createClass(PDFObjects, [{ key: "_ensureObj", value: function _ensureObj(objId) { if (this._objs[objId]) { return this._objs[objId]; } return this._objs[objId] = { capability: (0, _util.createPromiseCapability)(), data: null, resolved: false }; } }, { key: "get", value: function get(objId) { var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; if (callback) { this._ensureObj(objId).capability.promise.then(callback); return null; } var obj = this._objs[objId]; if (!obj || !obj.resolved) { throw new Error("Requesting object that isn't resolved yet ".concat(objId, ".")); } return obj.data; } }, { key: "has", value: function has(objId) { var obj = this._objs[objId]; return (obj === null || obj === void 0 ? void 0 : obj.resolved) || false; } }, { key: "resolve", value: function resolve(objId, data) { var obj = this._ensureObj(objId); obj.resolved = true; obj.data = data; obj.capability.resolve(data); } }, { key: "clear", value: function clear() { this._objs = Object.create(null); } }]); return PDFObjects; }(); var RenderTask = /*#__PURE__*/function () { function RenderTask(internalRenderTask) { _classCallCheck(this, RenderTask); this._internalRenderTask = internalRenderTask; this.onContinue = null; } _createClass(RenderTask, [{ key: "promise", get: function get() { return this._internalRenderTask.capability.promise; } }, { key: "cancel", value: function cancel() { this._internalRenderTask.cancel(); } }]); return RenderTask; }(); var InternalRenderTask = function InternalRenderTaskClosure() { var canvasInRendering = new WeakSet(); var InternalRenderTask = /*#__PURE__*/function () { function InternalRenderTask(_ref18) { var callback = _ref18.callback, params = _ref18.params, objs = _ref18.objs, commonObjs = _ref18.commonObjs, operatorList = _ref18.operatorList, pageIndex = _ref18.pageIndex, canvasFactory = _ref18.canvasFactory, webGLContext = _ref18.webGLContext, _ref18$useRequestAnim = _ref18.useRequestAnimationFrame, useRequestAnimationFrame = _ref18$useRequestAnim === void 0 ? false : _ref18$useRequestAnim, _ref18$pdfBug = _ref18.pdfBug, pdfBug = _ref18$pdfBug === void 0 ? false : _ref18$pdfBug; _classCallCheck(this, InternalRenderTask); this.callback = callback; this.params = params; this.objs = objs; this.commonObjs = commonObjs; this.operatorListIdx = null; this.operatorList = operatorList; this._pageIndex = pageIndex; this.canvasFactory = canvasFactory; this.webGLContext = webGLContext; this._pdfBug = pdfBug; this.running = false; this.graphicsReadyCallback = null; this.graphicsReady = false; this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined"; this.cancelled = false; this.capability = (0, _util.createPromiseCapability)(); this.task = new RenderTask(this); this._continueBound = this._continue.bind(this); this._scheduleNextBound = this._scheduleNext.bind(this); this._nextBound = this._next.bind(this); this._canvas = params.canvasContext.canvas; } _createClass(InternalRenderTask, [{ key: "completed", get: function get() { return this.capability.promise["catch"](function () {}); } }, { key: "initializeGraphics", value: function initializeGraphics(_ref19) { var _globalThis$StepperMa; var _ref19$transparency = _ref19.transparency, transparency = _ref19$transparency === void 0 ? false : _ref19$transparency, optionalContentConfig = _ref19.optionalContentConfig; if (this.cancelled) { return; } if (this._canvas) { if (canvasInRendering.has(this._canvas)) { throw new Error("Cannot use the same canvas during multiple render() operations. " + "Use different canvas or ensure previous operations were " + "cancelled or completed."); } canvasInRendering.add(this._canvas); } if (this._pdfBug && (_globalThis$StepperMa = globalThis.StepperManager) !== null && _globalThis$StepperMa !== void 0 && _globalThis$StepperMa.enabled) { this.stepper = globalThis.StepperManager.create(this._pageIndex); this.stepper.init(this.operatorList); this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint(); } var _this$params = this.params, canvasContext = _this$params.canvasContext, viewport = _this$params.viewport, transform = _this$params.transform, imageLayer = _this$params.imageLayer, background = _this$params.background; this.gfx = new _canvas.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.webGLContext, imageLayer, optionalContentConfig); this.gfx.beginDrawing({ transform: transform, viewport: viewport, transparency: transparency, background: background }); this.operatorListIdx = 0; this.graphicsReady = true; if (this.graphicsReadyCallback) { this.graphicsReadyCallback(); } } }, { key: "cancel", value: function cancel() { var error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; this.running = false; this.cancelled = true; if (this.gfx) { this.gfx.endDrawing(); } if (this._canvas) { canvasInRendering["delete"](this._canvas); } this.callback(error || new _display_utils.RenderingCancelledException("Rendering cancelled, page ".concat(this._pageIndex + 1), "canvas")); } }, { key: "operatorListChanged", value: function operatorListChanged() { if (!this.graphicsReady) { if (!this.graphicsReadyCallback) { this.graphicsReadyCallback = this._continueBound; } return; } if (this.stepper) { this.stepper.updateOperatorList(this.operatorList); } if (this.running) { return; } this._continue(); } }, { key: "_continue", value: function _continue() { this.running = true; if (this.cancelled) { return; } if (this.task.onContinue) { this.task.onContinue(this._scheduleNextBound); } else { this._scheduleNext(); } } }, { key: "_scheduleNext", value: function _scheduleNext() { var _this16 = this; if (this._useRequestAnimationFrame) { window.requestAnimationFrame(function () { _this16._nextBound()["catch"](_this16.cancel.bind(_this16)); }); } else { Promise.resolve().then(this._nextBound)["catch"](this.cancel.bind(this)); } } }, { key: "_next", value: function () { var _next2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: if (!this.cancelled) { _context2.next = 2; break; } return _context2.abrupt("return"); case 2: this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper); if (this.operatorListIdx === this.operatorList.argsArray.length) { this.running = false; if (this.operatorList.lastChunk) { this.gfx.endDrawing(); if (this._canvas) { canvasInRendering["delete"](this._canvas); } this.callback(); } } case 4: case "end": return _context2.stop(); } } }, _callee2, this); })); function _next() { return _next2.apply(this, arguments); } return _next; }() }]); return InternalRenderTask; }(); return InternalRenderTask; }(); var version = '2.8.57'; exports.version = version; var build = '3d33313e4'; exports.build = build; /***/ }), /* 136 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", ({ value: true })); exports.FontLoader = exports.FontFaceObject = void 0; var _regenerator = _interopRequireDefault(__w_pdfjs_require__(2)); var _util = __w_pdfjs_require__(4); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var BaseFontLoader = /*#__PURE__*/function () { function BaseFontLoader(_ref) { var docId = _ref.docId, onUnsupportedFeature = _ref.onUnsupportedFeature, _ref$ownerDocument = _ref.ownerDocument, ownerDocument = _ref$ownerDocument === void 0 ? globalThis.document : _ref$ownerDocument; _classCallCheck(this, BaseFontLoader); if (this.constructor === BaseFontLoader) { (0, _util.unreachable)("Cannot initialize BaseFontLoader."); } this.docId = docId; this._onUnsupportedFeature = onUnsupportedFeature; this._document = ownerDocument; this.nativeFontFaces = []; this.styleElement = null; } _createClass(BaseFontLoader, [{ key: "addNativeFontFace", value: function addNativeFontFace(nativeFontFace) { this.nativeFontFaces.push(nativeFontFace); this._document.fonts.add(nativeFontFace); } }, { key: "insertRule", value: function insertRule(rule) { var styleElement = this.styleElement; if (!styleElement) { styleElement = this.styleElement = this._document.createElement("style"); styleElement.id = "PDFJS_FONT_STYLE_TAG_".concat(this.docId); this._document.documentElement.getElementsByTagName("head")[0].appendChild(styleElement); } var styleSheet = styleElement.sheet; styleSheet.insertRule(rule, styleSheet.cssRules.length); } }, { key: "clear", value: function clear() { var _this = this; this.nativeFontFaces.forEach(function (nativeFontFace) { _this._document.fonts["delete"](nativeFontFace); }); this.nativeFontFaces.length = 0; if (this.styleElement) { this.styleElement.remove(); this.styleElement = null; } } }, { key: "bind", value: function () { var _bind = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(font) { var _this2 = this; var nativeFontFace, rule; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (!(font.attached || font.missingFile)) { _context.next = 2; break; } return _context.abrupt("return"); case 2: font.attached = true; if (!this.isFontLoadingAPISupported) { _context.next = 19; break; } nativeFontFace = font.createNativeFontFace(); if (!nativeFontFace) { _context.next = 18; break; } this.addNativeFontFace(nativeFontFace); _context.prev = 7; _context.next = 10; return nativeFontFace.loaded; case 10: _context.next = 18; break; case 12: _context.prev = 12; _context.t0 = _context["catch"](7); this._onUnsupportedFeature({ featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadNative }); (0, _util.warn)("Failed to load font '".concat(nativeFontFace.family, "': '").concat(_context.t0, "'.")); font.disableFontFace = true; throw _context.t0; case 18: return _context.abrupt("return"); case 19: rule = font.createFontFaceRule(); if (!rule) { _context.next = 26; break; } this.insertRule(rule); if (!this.isSyncFontLoadingSupported) { _context.next = 24; break; } return _context.abrupt("return"); case 24: _context.next = 26; return new Promise(function (resolve) { var request = _this2._queueLoadingCallback(resolve); _this2._prepareFontLoadEvent([rule], [font], request); }); case 26: case "end": return _context.stop(); } } }, _callee, this, [[7, 12]]); })); function bind(_x) { return _bind.apply(this, arguments); } return bind; }() }, { key: "_queueLoadingCallback", value: function _queueLoadingCallback(callback) { (0, _util.unreachable)("Abstract method `_queueLoadingCallback`."); } }, { key: "isFontLoadingAPISupported", get: function get() { var _this$_document; return (0, _util.shadow)(this, "isFontLoadingAPISupported", !!((_this$_document = this._document) !== null && _this$_document !== void 0 && _this$_document.fonts)); } }, { key: "isSyncFontLoadingSupported", get: function get() { (0, _util.unreachable)("Abstract method `isSyncFontLoadingSupported`."); } }, { key: "_loadTestFont", get: function get() { (0, _util.unreachable)("Abstract method `_loadTestFont`."); } }, { key: "_prepareFontLoadEvent", value: function _prepareFontLoadEvent(rules, fontsToLoad, request) { (0, _util.unreachable)("Abstract method `_prepareFontLoadEvent`."); } }]); return BaseFontLoader; }(); var FontLoader; exports.FontLoader = FontLoader; { exports.FontLoader = FontLoader = /*#__PURE__*/function (_BaseFontLoader) { _inherits(GenericFontLoader, _BaseFontLoader); var _super = _createSuper(GenericFontLoader); function GenericFontLoader(params) { var _this3; _classCallCheck(this, GenericFontLoader); _this3 = _super.call(this, params); _this3.loadingContext = { requests: [], nextRequestId: 0 }; _this3.loadTestFontId = 0; return _this3; } _createClass(GenericFontLoader, [{ key: "isSyncFontLoadingSupported", get: function get() { var supported = false; if (typeof navigator === "undefined") { supported = true; } else { var m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(navigator.userAgent); if ((m === null || m === void 0 ? void 0 : m[1]) >= 14) { supported = true; } } return (0, _util.shadow)(this, "isSyncFontLoadingSupported", supported); } }, { key: "_queueLoadingCallback", value: function _queueLoadingCallback(callback) { function completeRequest() { (0, _util.assert)(!request.done, "completeRequest() cannot be called twice."); request.done = true; while (context.requests.length > 0 && context.requests[0].done) { var otherRequest = context.requests.shift(); setTimeout(otherRequest.callback, 0); } } var context = this.loadingContext; var request = { id: "pdfjs-font-loading-".concat(context.nextRequestId++), done: false, complete: completeRequest, callback: callback }; context.requests.push(request); return request; } }, { key: "_loadTestFont", get: function get() { var getLoadTestFont = function getLoadTestFont() { return atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA" + "FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA" + "ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA" + "AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1" + "AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD" + "6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM" + "AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D" + "IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA" + "AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA" + "AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB" + "AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY" + "AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA" + "AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA" + "AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC" + "AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3" + "Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj" + "FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA=="); }; return (0, _util.shadow)(this, "_loadTestFont", getLoadTestFont()); } }, { key: "_prepareFontLoadEvent", value: function _prepareFontLoadEvent(rules, fonts, request) { var _this4 = this; function int32(data, offset) { return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff; } function spliceString(s, offset, remove, insert) { var chunk1 = s.substring(0, offset); var chunk2 = s.substring(offset + remove); return chunk1 + insert + chunk2; } var i, ii; var canvas = this._document.createElement("canvas"); canvas.width = 1; canvas.height = 1; var ctx = canvas.getContext("2d"); var called = 0; function isFontReady(name, callback) { called++; if (called > 30) { (0, _util.warn)("Load test font never loaded."); callback(); return; } ctx.font = "30px " + name; ctx.fillText(".", 0, 20); var imageData = ctx.getImageData(0, 0, 1, 1); if (imageData.data[3] > 0) { callback(); return; } setTimeout(isFontReady.bind(null, name, callback)); } var loadTestFontId = "lt".concat(Date.now()).concat(this.loadTestFontId++); var data = this._loadTestFont; var COMMENT_OFFSET = 976; data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId); var CFF_CHECKSUM_OFFSET = 16; var XXXX_VALUE = 0x58585858; var checksum = int32(data, CFF_CHECKSUM_OFFSET); for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) { checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0; } if (i < loadTestFontId.length) { checksum = checksum - XXXX_VALUE + int32(loadTestFontId + "XXX", i) | 0; } data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, (0, _util.string32)(checksum)); var url = "url(data:font/opentype;base64,".concat(btoa(data), ");"); var rule = "@font-face {font-family:\"".concat(loadTestFontId, "\";src:").concat(url, "}"); this.insertRule(rule); var names = []; for (i = 0, ii = fonts.length; i < ii; i++) { names.push(fonts[i].loadedName); } names.push(loadTestFontId); var div = this._document.createElement("div"); div.style.visibility = "hidden"; div.style.width = div.style.height = "10px"; div.style.position = "absolute"; div.style.top = div.style.left = "0px"; for (i = 0, ii = names.length; i < ii; ++i) { var span = this._document.createElement("span"); span.textContent = "Hi"; span.style.fontFamily = names[i]; div.appendChild(span); } this._document.body.appendChild(div); isFontReady(loadTestFontId, function () { _this4._document.body.removeChild(div); request.complete(); }); } }]); return GenericFontLoader; }(BaseFontLoader); } var FontFaceObject = /*#__PURE__*/function () { function FontFaceObject(translatedData, _ref2) { var _ref2$isEvalSupported = _ref2.isEvalSupported, isEvalSupported = _ref2$isEvalSupported === void 0 ? true : _ref2$isEvalSupported, _ref2$disableFontFace = _ref2.disableFontFace, disableFontFace = _ref2$disableFontFace === void 0 ? false : _ref2$disableFontFace, _ref2$ignoreErrors = _ref2.ignoreErrors, ignoreErrors = _ref2$ignoreErrors === void 0 ? false : _ref2$ignoreErrors, onUnsupportedFeature = _ref2.onUnsupportedFeature, _ref2$fontRegistry = _ref2.fontRegistry, fontRegistry = _ref2$fontRegistry === void 0 ? null : _ref2$fontRegistry; _classCallCheck(this, FontFaceObject); this.compiledGlyphs = Object.create(null); for (var i in translatedData) { this[i] = translatedData[i]; } this.isEvalSupported = isEvalSupported !== false; this.disableFontFace = disableFontFace === true; this.ignoreErrors = ignoreErrors === true; this._onUnsupportedFeature = onUnsupportedFeature; this.fontRegistry = fontRegistry; } _createClass(FontFaceObject, [{ key: "createNativeFontFace", value: function createNativeFontFace() { if (!this.data || this.disableFontFace) { return null; } var nativeFontFace = new FontFace(this.loadedName, this.data, {}); if (this.fontRegistry) { this.fontRegistry.registerFont(this); } return nativeFontFace; } }, { key: "createFontFaceRule", value: function createFontFaceRule() { if (!this.data || this.disableFontFace) { return null; } var data = (0, _util.bytesToString)(new Uint8Array(this.data)); var url = "url(data:".concat(this.mimetype, ";base64,").concat(btoa(data), ");"); var rule = "@font-face {font-family:\"".concat(this.loadedName, "\";src:").concat(url, "}"); if (this.fontRegistry) { this.fontRegistry.registerFont(this, url); } return rule; } }, { key: "getPathGenerator", value: function getPathGenerator(objs, character) { if (this.compiledGlyphs[character] !== undefined) { return this.compiledGlyphs[character]; } var cmds, current; try { cmds = objs.get(this.loadedName + "_path_" + character); } catch (ex) { if (!this.ignoreErrors) { throw ex; } this._onUnsupportedFeature({ featureId: _util.UNSUPPORTED_FEATURES.errorFontGetPath }); (0, _util.warn)("getPathGenerator - ignoring character: \"".concat(ex, "\".")); return this.compiledGlyphs[character] = function (c, size) {}; } if (this.isEvalSupported && _util.IsEvalSupportedCached.value) { var args, js = ""; for (var i = 0, ii = cmds.length; i < ii; i++) { current = cmds[i]; if (current.args !== undefined) { args = current.args.join(","); } else { args = ""; } js += "c." + current.cmd + "(" + args + ");\n"; } return this.compiledGlyphs[character] = new Function("c", "size", js); } return this.compiledGlyphs[character] = function (c, size) { for (var _i = 0, _ii = cmds.length; _i < _ii; _i++) { current = cmds[_i]; if (current.cmd === "scale") { current.args = [size, -size]; } c[current.cmd].apply(c, current.args); } }; } }]); return FontFaceObject; }(); exports.FontFaceObject = FontFaceObject; /***/ }), /* 137 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", ({ value: true })); exports.NodeCMapReaderFactory = exports.NodeCanvasFactory = void 0; var _display_utils = __w_pdfjs_require__(1); var _is_node = __w_pdfjs_require__(6); var _util = __w_pdfjs_require__(4); function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var NodeCanvasFactory = function NodeCanvasFactory() { _classCallCheck(this, NodeCanvasFactory); (0, _util.unreachable)("Not implemented: NodeCanvasFactory"); }; exports.NodeCanvasFactory = NodeCanvasFactory; var NodeCMapReaderFactory = function NodeCMapReaderFactory() { _classCallCheck(this, NodeCMapReaderFactory); (0, _util.unreachable)("Not implemented: NodeCMapReaderFactory"); }; exports.NodeCMapReaderFactory = NodeCMapReaderFactory; if (_is_node.isNodeJS) { exports.NodeCanvasFactory = NodeCanvasFactory = /*#__PURE__*/function (_BaseCanvasFactory) { _inherits(NodeCanvasFactory, _BaseCanvasFactory); var _super = _createSuper(NodeCanvasFactory); function NodeCanvasFactory() { _classCallCheck(this, NodeCanvasFactory); return _super.apply(this, arguments); } _createClass(NodeCanvasFactory, [{ key: "create", value: function create(width, height) { if (width <= 0 || height <= 0) { throw new Error("Invalid canvas size"); } var Canvas = require("canvas"); var canvas = Canvas.createCanvas(width, height); return { canvas: canvas, context: canvas.getContext("2d") }; } }]); return NodeCanvasFactory; }(_display_utils.BaseCanvasFactory); exports.NodeCMapReaderFactory = NodeCMapReaderFactory = /*#__PURE__*/function (_BaseCMapReaderFactor) { _inherits(NodeCMapReaderFactory, _BaseCMapReaderFactor); var _super2 = _createSuper(NodeCMapReaderFactory); function NodeCMapReaderFactory() { _classCallCheck(this, NodeCMapReaderFactory); return _super2.apply(this, arguments); } _createClass(NodeCMapReaderFactory, [{ key: "_fetchData", value: function _fetchData(url, compressionType) { return new Promise(function (resolve, reject) { var fs = require("fs"); fs.readFile(url, function (error, data) { if (error || !data) { reject(new Error(error)); return; } resolve({ cMapData: new Uint8Array(data), compressionType: compressionType }); }); }); } }]); return NodeCMapReaderFactory; }(_display_utils.BaseCMapReaderFactory); } /***/ }), /* 138 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.AnnotationStorage = void 0; var _util = __w_pdfjs_require__(4); function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var AnnotationStorage = /*#__PURE__*/function () { function AnnotationStorage() { _classCallCheck(this, AnnotationStorage); this._storage = new Map(); this._modified = false; this.onSetModified = null; this.onResetModified = null; } _createClass(AnnotationStorage, [{ key: "getOrCreateValue", value: function getOrCreateValue(key, defaultValue) { if (this._storage.has(key)) { return this._storage.get(key); } this._storage.set(key, defaultValue); return defaultValue; } }, { key: "setValue", value: function setValue(key, value) { var obj = this._storage.get(key); var modified = false; if (obj !== undefined) { for (var _i = 0, _Object$entries = Object.entries(value); _i < _Object$entries.length; _i++) { var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2), entry = _Object$entries$_i[0], val = _Object$entries$_i[1]; if (obj[entry] !== val) { modified = true; obj[entry] = val; } } } else { this._storage.set(key, value); modified = true; } if (modified) { this._setModified(); } } }, { key: "getAll", value: function getAll() { if (this._storage.size === 0) { return null; } return (0, _util.objectFromEntries)(this._storage); } }, { key: "size", get: function get() { return this._storage.size; } }, { key: "_setModified", value: function _setModified() { if (!this._modified) { this._modified = true; if (typeof this.onSetModified === "function") { this.onSetModified(); } } } }, { key: "resetModified", value: function resetModified() { if (this._modified) { this._modified = false; if (typeof this.onResetModified === "function") { this.onResetModified(); } } } }]); return AnnotationStorage; }(); exports.AnnotationStorage = AnnotationStorage; /***/ }), /* 139 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.apiCompatibilityParams = void 0; var _is_node = __w_pdfjs_require__(6); var compatibilityParams = Object.create(null); { (function checkFontFace() { if (_is_node.isNodeJS) { compatibilityParams.disableFontFace = true; } })(); } var apiCompatibilityParams = Object.freeze(compatibilityParams); exports.apiCompatibilityParams = apiCompatibilityParams; /***/ }), /* 140 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.CanvasGraphics = void 0; var _util = __w_pdfjs_require__(4); var _pattern_helper = __w_pdfjs_require__(141); function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } var MIN_FONT_SIZE = 16; var MAX_FONT_SIZE = 100; var MAX_GROUP_SIZE = 4096; var COMPILE_TYPE3_GLYPHS = true; var MAX_SIZE_TO_COMPILE = 1000; var FULL_CHUNK_HEIGHT = 16; function addContextCurrentTransform(ctx) { if (!ctx.mozCurrentTransform) { ctx._originalSave = ctx.save; ctx._originalRestore = ctx.restore; ctx._originalRotate = ctx.rotate; ctx._originalScale = ctx.scale; ctx._originalTranslate = ctx.translate; ctx._originalTransform = ctx.transform; ctx._originalSetTransform = ctx.setTransform; ctx._transformMatrix = ctx._transformMatrix || [1, 0, 0, 1, 0, 0]; ctx._transformStack = []; Object.defineProperty(ctx, "mozCurrentTransform", { get: function getCurrentTransform() { return this._transformMatrix; } }); Object.defineProperty(ctx, "mozCurrentTransformInverse", { get: function getCurrentTransformInverse() { var m = this._transformMatrix; var a = m[0], b = m[1], c = m[2], d = m[3], e = m[4], f = m[5]; var ad_bc = a * d - b * c; var bc_ad = b * c - a * d; return [d / ad_bc, b / bc_ad, c / bc_ad, a / ad_bc, (d * e - c * f) / bc_ad, (b * e - a * f) / ad_bc]; } }); ctx.save = function ctxSave() { var old = this._transformMatrix; this._transformStack.push(old); this._transformMatrix = old.slice(0, 6); this._originalSave(); }; ctx.restore = function ctxRestore() { var prev = this._transformStack.pop(); if (prev) { this._transformMatrix = prev; this._originalRestore(); } }; ctx.translate = function ctxTranslate(x, y) { var m = this._transformMatrix; m[4] = m[0] * x + m[2] * y + m[4]; m[5] = m[1] * x + m[3] * y + m[5]; this._originalTranslate(x, y); }; ctx.scale = function ctxScale(x, y) { var m = this._transformMatrix; m[0] = m[0] * x; m[1] = m[1] * x; m[2] = m[2] * y; m[3] = m[3] * y; this._originalScale(x, y); }; ctx.transform = function ctxTransform(a, b, c, d, e, f) { var m = this._transformMatrix; this._transformMatrix = [m[0] * a + m[2] * b, m[1] * a + m[3] * b, m[0] * c + m[2] * d, m[1] * c + m[3] * d, m[0] * e + m[2] * f + m[4], m[1] * e + m[3] * f + m[5]]; ctx._originalTransform(a, b, c, d, e, f); }; ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) { this._transformMatrix = [a, b, c, d, e, f]; ctx._originalSetTransform(a, b, c, d, e, f); }; ctx.rotate = function ctxRotate(angle) { var cosValue = Math.cos(angle); var sinValue = Math.sin(angle); var m = this._transformMatrix; this._transformMatrix = [m[0] * cosValue + m[2] * sinValue, m[1] * cosValue + m[3] * sinValue, m[0] * -sinValue + m[2] * cosValue, m[1] * -sinValue + m[3] * cosValue, m[4], m[5]]; this._originalRotate(angle); }; } } var CachedCanvases = function CachedCanvasesClosure() { function CachedCanvases(canvasFactory) { this.canvasFactory = canvasFactory; this.cache = Object.create(null); } CachedCanvases.prototype = { getCanvas: function CachedCanvases_getCanvas(id, width, height, trackTransform) { var canvasEntry; if (this.cache[id] !== undefined) { canvasEntry = this.cache[id]; this.canvasFactory.reset(canvasEntry, width, height); canvasEntry.context.setTransform(1, 0, 0, 1, 0, 0); } else { canvasEntry = this.canvasFactory.create(width, height); this.cache[id] = canvasEntry; } if (trackTransform) { addContextCurrentTransform(canvasEntry.context); } return canvasEntry; }, clear: function clear() { for (var id in this.cache) { var canvasEntry = this.cache[id]; this.canvasFactory.destroy(canvasEntry); delete this.cache[id]; } } }; return CachedCanvases; }(); function compileType3Glyph(imgData) { var POINT_TO_PROCESS_LIMIT = 1000; var width = imgData.width, height = imgData.height, width1 = width + 1; var i, ii, j, j0; var points = new Uint8Array(width1 * (height + 1)); var POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]); var lineSize = width + 7 & ~7, data0 = imgData.data; var data = new Uint8Array(lineSize * height); var pos = 0; for (i = 0, ii = data0.length; i < ii; i++) { var elem = data0[i]; var mask = 128; while (mask > 0) { data[pos++] = elem & mask ? 0 : 255; mask >>= 1; } } var count = 0; pos = 0; if (data[pos] !== 0) { points[0] = 1; ++count; } for (j = 1; j < width; j++) { if (data[pos] !== data[pos + 1]) { points[j] = data[pos] ? 2 : 1; ++count; } pos++; } if (data[pos] !== 0) { points[j] = 2; ++count; } for (i = 1; i < height; i++) { pos = i * lineSize; j0 = i * width1; if (data[pos - lineSize] !== data[pos]) { points[j0] = data[pos] ? 1 : 8; ++count; } var sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0); for (j = 1; j < width; j++) { sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0); if (POINT_TYPES[sum]) { points[j0 + j] = POINT_TYPES[sum]; ++count; } pos++; } if (data[pos - lineSize] !== data[pos]) { points[j0 + j] = data[pos] ? 2 : 4; ++count; } if (count > POINT_TO_PROCESS_LIMIT) { return null; } } pos = lineSize * (height - 1); j0 = i * width1; if (data[pos] !== 0) { points[j0] = 8; ++count; } for (j = 1; j < width; j++) { if (data[pos] !== data[pos + 1]) { points[j0 + j] = data[pos] ? 4 : 8; ++count; } pos++; } if (data[pos] !== 0) { points[j0 + j] = 4; ++count; } if (count > POINT_TO_PROCESS_LIMIT) { return null; } var steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]); var outlines = []; for (i = 0; count && i <= height; i++) { var p = i * width1; var end = p + width; while (p < end && !points[p]) { p++; } if (p === end) { continue; } var coords = [p % width1, i]; var p0 = p; var type = points[p]; do { var step = steps[type]; do { p += step; } while (!points[p]); var pp = points[p]; if (pp !== 5 && pp !== 10) { type = pp; points[p] = 0; } else { type = pp & 0x33 * type >> 4; points[p] &= type >> 2 | type << 2; } coords.push(p % width1); coords.push(p / width1 | 0); if (!points[p]) { --count; } } while (p0 !== p); outlines.push(coords); --i; } var drawOutline = function drawOutline(c) { c.save(); c.scale(1 / width, -1 / height); c.translate(0, -height); c.beginPath(); for (var k = 0, kk = outlines.length; k < kk; k++) { var o = outlines[k]; c.moveTo(o[0], o[1]); for (var l = 2, ll = o.length; l < ll; l += 2) { c.lineTo(o[l], o[l + 1]); } } c.fill(); c.beginPath(); c.restore(); }; return drawOutline; } var CanvasExtraState = function CanvasExtraStateClosure() { function CanvasExtraState() { this.alphaIsShape = false; this.fontSize = 0; this.fontSizeScale = 1; this.textMatrix = _util.IDENTITY_MATRIX; this.textMatrixScale = 1; this.fontMatrix = _util.FONT_IDENTITY_MATRIX; this.leading = 0; this.x = 0; this.y = 0; this.lineX = 0; this.lineY = 0; this.charSpacing = 0; this.wordSpacing = 0; this.textHScale = 1; this.textRenderingMode = _util.TextRenderingMode.FILL; this.textRise = 0; this.fillColor = "#000000"; this.strokeColor = "#000000"; this.patternFill = false; this.fillAlpha = 1; this.strokeAlpha = 1; this.lineWidth = 1; this.activeSMask = null; this.resumeSMaskCtx = null; this.transferMaps = null; } CanvasExtraState.prototype = { clone: function CanvasExtraState_clone() { return Object.create(this); }, setCurrentPoint: function CanvasExtraState_setCurrentPoint(x, y) { this.x = x; this.y = y; } }; return CanvasExtraState; }(); var CanvasGraphics = function CanvasGraphicsClosure() { var EXECUTION_TIME = 15; var EXECUTION_STEPS = 10; function CanvasGraphics(canvasCtx, commonObjs, objs, canvasFactory, webGLContext, imageLayer, optionalContentConfig) { this.ctx = canvasCtx; this.current = new CanvasExtraState(); this.stateStack = []; this.pendingClip = null; this.pendingEOFill = false; this.res = null; this.xobjs = null; this.commonObjs = commonObjs; this.objs = objs; this.canvasFactory = canvasFactory; this.webGLContext = webGLContext; this.imageLayer = imageLayer; this.groupStack = []; this.processingType3 = null; this.baseTransform = null; this.baseTransformStack = []; this.groupLevel = 0; this.smaskStack = []; this.smaskCounter = 0; this.tempSMask = null; this.contentVisible = true; this.markedContentStack = []; this.optionalContentConfig = optionalContentConfig; this.cachedCanvases = new CachedCanvases(this.canvasFactory); if (canvasCtx) { addContextCurrentTransform(canvasCtx); } this._cachedGetSinglePixelWidth = null; } function putBinaryImageData(ctx, imgData) { var transferMaps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; if (typeof ImageData !== "undefined" && imgData instanceof ImageData) { ctx.putImageData(imgData, 0, 0); return; } var height = imgData.height, width = imgData.width; var partialChunkHeight = height % FULL_CHUNK_HEIGHT; var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); var srcPos = 0, destPos; var src = imgData.data; var dest = chunkImgData.data; var i, j, thisChunkHeight, elemsInThisChunk; var transferMapRed, transferMapGreen, transferMapBlue, transferMapGray; if (transferMaps) { switch (transferMaps.length) { case 1: transferMapRed = transferMaps[0]; transferMapGreen = transferMaps[0]; transferMapBlue = transferMaps[0]; transferMapGray = transferMaps[0]; break; case 4: transferMapRed = transferMaps[0]; transferMapGreen = transferMaps[1]; transferMapBlue = transferMaps[2]; transferMapGray = transferMaps[3]; break; } } if (imgData.kind === _util.ImageKind.GRAYSCALE_1BPP) { var srcLength = src.byteLength; var dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2); var dest32DataLength = dest32.length; var fullSrcDiff = width + 7 >> 3; var white = 0xffffffff; var black = _util.IsLittleEndianCached.value ? 0xff000000 : 0x000000ff; if (transferMapGray) { if (transferMapGray[0] === 0xff && transferMapGray[0xff] === 0) { var _ref = [black, white]; white = _ref[0]; black = _ref[1]; } } for (i = 0; i < totalChunks; i++) { thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; destPos = 0; for (j = 0; j < thisChunkHeight; j++) { var srcDiff = srcLength - srcPos; var k = 0; var kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7; var kEndUnrolled = kEnd & ~7; var mask = 0; var srcByte = 0; for (; k < kEndUnrolled; k += 8) { srcByte = src[srcPos++]; dest32[destPos++] = srcByte & 128 ? white : black; dest32[destPos++] = srcByte & 64 ? white : black; dest32[destPos++] = srcByte & 32 ? white : black; dest32[destPos++] = srcByte & 16 ? white : black; dest32[destPos++] = srcByte & 8 ? white : black; dest32[destPos++] = srcByte & 4 ? white : black; dest32[destPos++] = srcByte & 2 ? white : black; dest32[destPos++] = srcByte & 1 ? white : black; } for (; k < kEnd; k++) { if (mask === 0) { srcByte = src[srcPos++]; mask = 128; } dest32[destPos++] = srcByte & mask ? white : black; mask >>= 1; } } while (destPos < dest32DataLength) { dest32[destPos++] = 0; } ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); } } else if (imgData.kind === _util.ImageKind.RGBA_32BPP) { var hasTransferMaps = !!(transferMapRed || transferMapGreen || transferMapBlue); j = 0; elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4; for (i = 0; i < fullChunks; i++) { dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); srcPos += elemsInThisChunk; if (hasTransferMaps) { for (var _k = 0; _k < elemsInThisChunk; _k += 4) { if (transferMapRed) { dest[_k + 0] = transferMapRed[dest[_k + 0]]; } if (transferMapGreen) { dest[_k + 1] = transferMapGreen[dest[_k + 1]]; } if (transferMapBlue) { dest[_k + 2] = transferMapBlue[dest[_k + 2]]; } } } ctx.putImageData(chunkImgData, 0, j); j += FULL_CHUNK_HEIGHT; } if (i < totalChunks) { elemsInThisChunk = width * partialChunkHeight * 4; dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); if (hasTransferMaps) { for (var _k2 = 0; _k2 < elemsInThisChunk; _k2 += 4) { if (transferMapRed) { dest[_k2 + 0] = transferMapRed[dest[_k2 + 0]]; } if (transferMapGreen) { dest[_k2 + 1] = transferMapGreen[dest[_k2 + 1]]; } if (transferMapBlue) { dest[_k2 + 2] = transferMapBlue[dest[_k2 + 2]]; } } } ctx.putImageData(chunkImgData, 0, j); } } else if (imgData.kind === _util.ImageKind.RGB_24BPP) { var _hasTransferMaps = !!(transferMapRed || transferMapGreen || transferMapBlue); thisChunkHeight = FULL_CHUNK_HEIGHT; elemsInThisChunk = width * thisChunkHeight; for (i = 0; i < totalChunks; i++) { if (i >= fullChunks) { thisChunkHeight = partialChunkHeight; elemsInThisChunk = width * thisChunkHeight; } destPos = 0; for (j = elemsInThisChunk; j--;) { dest[destPos++] = src[srcPos++]; dest[destPos++] = src[srcPos++]; dest[destPos++] = src[srcPos++]; dest[destPos++] = 255; } if (_hasTransferMaps) { for (var _k3 = 0; _k3 < destPos; _k3 += 4) { if (transferMapRed) { dest[_k3 + 0] = transferMapRed[dest[_k3 + 0]]; } if (transferMapGreen) { dest[_k3 + 1] = transferMapGreen[dest[_k3 + 1]]; } if (transferMapBlue) { dest[_k3 + 2] = transferMapBlue[dest[_k3 + 2]]; } } } ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); } } else { throw new Error("bad image kind: ".concat(imgData.kind)); } } function putBinaryImageMask(ctx, imgData) { var height = imgData.height, width = imgData.width; var partialChunkHeight = height % FULL_CHUNK_HEIGHT; var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); var srcPos = 0; var src = imgData.data; var dest = chunkImgData.data; for (var i = 0; i < totalChunks; i++) { var thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; var destPos = 3; for (var j = 0; j < thisChunkHeight; j++) { var elem = void 0, mask = 0; for (var k = 0; k < width; k++) { if (!mask) { elem = src[srcPos++]; mask = 128; } dest[destPos] = elem & mask ? 0 : 255; destPos += 4; mask >>= 1; } } ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); } } function copyCtxState(sourceCtx, destCtx) { var properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font"]; for (var i = 0, ii = properties.length; i < ii; i++) { var property = properties[i]; if (sourceCtx[property] !== undefined) { destCtx[property] = sourceCtx[property]; } } if (sourceCtx.setLineDash !== undefined) { destCtx.setLineDash(sourceCtx.getLineDash()); destCtx.lineDashOffset = sourceCtx.lineDashOffset; } } function resetCtxToDefault(ctx) { ctx.strokeStyle = "#000000"; ctx.fillStyle = "#000000"; ctx.fillRule = "nonzero"; ctx.globalAlpha = 1; ctx.lineWidth = 1; ctx.lineCap = "butt"; ctx.lineJoin = "miter"; ctx.miterLimit = 10; ctx.globalCompositeOperation = "source-over"; ctx.font = "10px sans-serif"; if (ctx.setLineDash !== undefined) { ctx.setLineDash([]); ctx.lineDashOffset = 0; } } function composeSMaskBackdrop(bytes, r0, g0, b0) { var length = bytes.length; for (var i = 3; i < length; i += 4) { var alpha = bytes[i]; if (alpha === 0) { bytes[i - 3] = r0; bytes[i - 2] = g0; bytes[i - 1] = b0; } else if (alpha < 255) { var alpha_ = 255 - alpha; bytes[i - 3] = bytes[i - 3] * alpha + r0 * alpha_ >> 8; bytes[i - 2] = bytes[i - 2] * alpha + g0 * alpha_ >> 8; bytes[i - 1] = bytes[i - 1] * alpha + b0 * alpha_ >> 8; } } } function composeSMaskAlpha(maskData, layerData, transferMap) { var length = maskData.length; var scale = 1 / 255; for (var i = 3; i < length; i += 4) { var alpha = transferMap ? transferMap[maskData[i]] : maskData[i]; layerData[i] = layerData[i] * alpha * scale | 0; } } function composeSMaskLuminosity(maskData, layerData, transferMap) { var length = maskData.length; for (var i = 3; i < length; i += 4) { var y = maskData[i - 3] * 77 + maskData[i - 2] * 152 + maskData[i - 1] * 28; layerData[i] = transferMap ? layerData[i] * transferMap[y >> 8] >> 8 : layerData[i] * y >> 16; } } function genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap) { var hasBackdrop = !!backdrop; var r0 = hasBackdrop ? backdrop[0] : 0; var g0 = hasBackdrop ? backdrop[1] : 0; var b0 = hasBackdrop ? backdrop[2] : 0; var composeFn; if (subtype === "Luminosity") { composeFn = composeSMaskLuminosity; } else { composeFn = composeSMaskAlpha; } var PIXELS_TO_PROCESS = 1048576; var chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width)); for (var row = 0; row < height; row += chunkSize) { var chunkHeight = Math.min(chunkSize, height - row); var maskData = maskCtx.getImageData(0, row, width, chunkHeight); var layerData = layerCtx.getImageData(0, row, width, chunkHeight); if (hasBackdrop) { composeSMaskBackdrop(maskData.data, r0, g0, b0); } composeFn(maskData.data, layerData.data, transferMap); maskCtx.putImageData(layerData, 0, row); } } function composeSMask(ctx, smask, layerCtx, webGLContext) { var mask = smask.canvas; var maskCtx = smask.context; ctx.setTransform(smask.scaleX, 0, 0, smask.scaleY, smask.offsetX, smask.offsetY); var backdrop = smask.backdrop || null; if (!smask.transferMap && webGLContext.isEnabled) { var composed = webGLContext.composeSMask({ layer: layerCtx.canvas, mask: mask, properties: { subtype: smask.subtype, backdrop: backdrop } }); ctx.setTransform(1, 0, 0, 1, 0, 0); ctx.drawImage(composed, smask.offsetX, smask.offsetY); return; } genericComposeSMask(maskCtx, layerCtx, mask.width, mask.height, smask.subtype, backdrop, smask.transferMap); ctx.drawImage(mask, 0, 0); } var LINE_CAP_STYLES = ["butt", "round", "square"]; var LINE_JOIN_STYLES = ["miter", "round", "bevel"]; var NORMAL_CLIP = {}; var EO_CLIP = {}; CanvasGraphics.prototype = { beginDrawing: function beginDrawing(_ref2) { var transform = _ref2.transform, viewport = _ref2.viewport, _ref2$transparency = _ref2.transparency, transparency = _ref2$transparency === void 0 ? false : _ref2$transparency, _ref2$background = _ref2.background, background = _ref2$background === void 0 ? null : _ref2$background; var width = this.ctx.canvas.width; var height = this.ctx.canvas.height; this.ctx.save(); this.ctx.fillStyle = background || "rgb(255, 255, 255)"; this.ctx.fillRect(0, 0, width, height); this.ctx.restore(); if (transparency) { var transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height, true); this.compositeCtx = this.ctx; this.transparentCanvas = transparentCanvas.canvas; this.ctx = transparentCanvas.context; this.ctx.save(); this.ctx.transform.apply(this.ctx, this.compositeCtx.mozCurrentTransform); } this.ctx.save(); resetCtxToDefault(this.ctx); if (transform) { this.ctx.transform.apply(this.ctx, transform); } this.ctx.transform.apply(this.ctx, viewport.transform); this.baseTransform = this.ctx.mozCurrentTransform.slice(); this._combinedScaleFactor = Math.hypot(this.baseTransform[0], this.baseTransform[2]); if (this.imageLayer) { this.imageLayer.beginLayout(); } }, executeOperatorList: function CanvasGraphics_executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) { var argsArray = operatorList.argsArray; var fnArray = operatorList.fnArray; var i = executionStartIdx || 0; var argsArrayLen = argsArray.length; if (argsArrayLen === i) { return i; } var chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === "function"; var endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0; var steps = 0; var commonObjs = this.commonObjs; var objs = this.objs; var fnId; while (true) { if (stepper !== undefined && i === stepper.nextBreakPoint) { stepper.breakIt(i, continueCallback); return i; } fnId = fnArray[i]; if (fnId !== _util.OPS.dependency) { this[fnId].apply(this, argsArray[i]); } else { var _iterator = _createForOfIteratorHelper(argsArray[i]), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var depObjId = _step.value; var objsPool = depObjId.startsWith("g_") ? commonObjs : objs; if (!objsPool.has(depObjId)) { objsPool.get(depObjId, continueCallback); return i; } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } } i++; if (i === argsArrayLen) { return i; } if (chunkOperations && ++steps > EXECUTION_STEPS) { if (Date.now() > endTime) { continueCallback(); return i; } steps = 0; } } }, endDrawing: function CanvasGraphics_endDrawing() { while (this.stateStack.length || this.current.activeSMask !== null) { this.restore(); } this.ctx.restore(); if (this.transparentCanvas) { this.ctx = this.compositeCtx; this.ctx.save(); this.ctx.setTransform(1, 0, 0, 1, 0, 0); this.ctx.drawImage(this.transparentCanvas, 0, 0); this.ctx.restore(); this.transparentCanvas = null; } this.cachedCanvases.clear(); this.webGLContext.clear(); if (this.imageLayer) { this.imageLayer.endLayout(); } }, setLineWidth: function CanvasGraphics_setLineWidth(width) { this.current.lineWidth = width; this.ctx.lineWidth = width; }, setLineCap: function CanvasGraphics_setLineCap(style) { this.ctx.lineCap = LINE_CAP_STYLES[style]; }, setLineJoin: function CanvasGraphics_setLineJoin(style) { this.ctx.lineJoin = LINE_JOIN_STYLES[style]; }, setMiterLimit: function CanvasGraphics_setMiterLimit(limit) { this.ctx.miterLimit = limit; }, setDash: function CanvasGraphics_setDash(dashArray, dashPhase) { var ctx = this.ctx; if (ctx.setLineDash !== undefined) { ctx.setLineDash(dashArray); ctx.lineDashOffset = dashPhase; } }, setRenderingIntent: function setRenderingIntent(intent) {}, setFlatness: function setFlatness(flatness) {}, setGState: function CanvasGraphics_setGState(states) { for (var i = 0, ii = states.length; i < ii; i++) { var state = states[i]; var key = state[0]; var value = state[1]; switch (key) { case "LW": this.setLineWidth(value); break; case "LC": this.setLineCap(value); break; case "LJ": this.setLineJoin(value); break; case "ML": this.setMiterLimit(value); break; case "D": this.setDash(value[0], value[1]); break; case "RI": this.setRenderingIntent(value); break; case "FL": this.setFlatness(value); break; case "Font": this.setFont(value[0], value[1]); break; case "CA": this.current.strokeAlpha = state[1]; break; case "ca": this.current.fillAlpha = state[1]; this.ctx.globalAlpha = state[1]; break; case "BM": this.ctx.globalCompositeOperation = value; break; case "SMask": if (this.current.activeSMask) { if (this.stateStack.length > 0 && this.stateStack[this.stateStack.length - 1].activeSMask === this.current.activeSMask) { this.suspendSMaskGroup(); } else { this.endSMaskGroup(); } } this.current.activeSMask = value ? this.tempSMask : null; if (this.current.activeSMask) { this.beginSMaskGroup(); } this.tempSMask = null; break; case "TR": this.current.transferMaps = value; } } }, beginSMaskGroup: function CanvasGraphics_beginSMaskGroup() { var activeSMask = this.current.activeSMask; var drawnWidth = activeSMask.canvas.width; var drawnHeight = activeSMask.canvas.height; var cacheId = "smaskGroupAt" + this.groupLevel; var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true); var currentCtx = this.ctx; var currentTransform = currentCtx.mozCurrentTransform; this.ctx.save(); var groupCtx = scratchCanvas.context; groupCtx.scale(1 / activeSMask.scaleX, 1 / activeSMask.scaleY); groupCtx.translate(-activeSMask.offsetX, -activeSMask.offsetY); groupCtx.transform.apply(groupCtx, currentTransform); activeSMask.startTransformInverse = groupCtx.mozCurrentTransformInverse; copyCtxState(currentCtx, groupCtx); this.ctx = groupCtx; this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); this.groupStack.push(currentCtx); this.groupLevel++; }, suspendSMaskGroup: function CanvasGraphics_endSMaskGroup() { var groupCtx = this.ctx; this.groupLevel--; this.ctx = this.groupStack.pop(); composeSMask(this.ctx, this.current.activeSMask, groupCtx, this.webGLContext); this.ctx.restore(); this.ctx.save(); copyCtxState(groupCtx, this.ctx); this.current.resumeSMaskCtx = groupCtx; var deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, groupCtx.mozCurrentTransform); this.ctx.transform.apply(this.ctx, deltaTransform); groupCtx.save(); groupCtx.setTransform(1, 0, 0, 1, 0, 0); groupCtx.clearRect(0, 0, groupCtx.canvas.width, groupCtx.canvas.height); groupCtx.restore(); }, resumeSMaskGroup: function CanvasGraphics_resumeSMaskGroup() { var groupCtx = this.current.resumeSMaskCtx; var currentCtx = this.ctx; this.ctx = groupCtx; this.groupStack.push(currentCtx); this.groupLevel++; }, endSMaskGroup: function CanvasGraphics_endSMaskGroup() { var groupCtx = this.ctx; this.groupLevel--; this.ctx = this.groupStack.pop(); composeSMask(this.ctx, this.current.activeSMask, groupCtx, this.webGLContext); this.ctx.restore(); copyCtxState(groupCtx, this.ctx); var deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, groupCtx.mozCurrentTransform); this.ctx.transform.apply(this.ctx, deltaTransform); }, save: function CanvasGraphics_save() { this.ctx.save(); var old = this.current; this.stateStack.push(old); this.current = old.clone(); this.current.resumeSMaskCtx = null; }, restore: function CanvasGraphics_restore() { if (this.current.resumeSMaskCtx) { this.resumeSMaskGroup(); } if (this.current.activeSMask !== null && (this.stateStack.length === 0 || this.stateStack[this.stateStack.length - 1].activeSMask !== this.current.activeSMask)) { this.endSMaskGroup(); } if (this.stateStack.length !== 0) { this.current = this.stateStack.pop(); this.ctx.restore(); this.pendingClip = null; this._cachedGetSinglePixelWidth = null; } else { this.current.activeSMask = null; } }, transform: function CanvasGraphics_transform(a, b, c, d, e, f) { this.ctx.transform(a, b, c, d, e, f); this._cachedGetSinglePixelWidth = null; }, constructPath: function CanvasGraphics_constructPath(ops, args) { var ctx = this.ctx; var current = this.current; var x = current.x, y = current.y; for (var i = 0, j = 0, ii = ops.length; i < ii; i++) { switch (ops[i] | 0) { case _util.OPS.rectangle: x = args[j++]; y = args[j++]; var width = args[j++]; var height = args[j++]; var xw = x + width; var yh = y + height; ctx.moveTo(x, y); if (width === 0 || height === 0) { ctx.lineTo(xw, yh); } else { ctx.lineTo(xw, y); ctx.lineTo(xw, yh); ctx.lineTo(x, yh); } ctx.closePath(); break; case _util.OPS.moveTo: x = args[j++]; y = args[j++]; ctx.moveTo(x, y); break; case _util.OPS.lineTo: x = args[j++]; y = args[j++]; ctx.lineTo(x, y); break; case _util.OPS.curveTo: x = args[j + 4]; y = args[j + 5]; ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y); j += 6; break; case _util.OPS.curveTo2: ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]); x = args[j + 2]; y = args[j + 3]; j += 4; break; case _util.OPS.curveTo3: x = args[j + 2]; y = args[j + 3]; ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y); j += 4; break; case _util.OPS.closePath: ctx.closePath(); break; } } current.setCurrentPoint(x, y); }, closePath: function CanvasGraphics_closePath() { this.ctx.closePath(); }, stroke: function CanvasGraphics_stroke(consumePath) { consumePath = typeof consumePath !== "undefined" ? consumePath : true; var ctx = this.ctx; var strokeColor = this.current.strokeColor; ctx.globalAlpha = this.current.strokeAlpha; if (this.contentVisible) { if (_typeof(strokeColor) === "object" && strokeColor !== null && strokeColor !== void 0 && strokeColor.getPattern) { ctx.save(); var transform = ctx.mozCurrentTransform; var scale = _util.Util.singularValueDecompose2dScale(transform)[0]; ctx.strokeStyle = strokeColor.getPattern(ctx, this); var lineWidth = this.getSinglePixelWidth(); var scaledLineWidth = this.current.lineWidth * scale; if (lineWidth < 0 && -lineWidth >= scaledLineWidth) { ctx.resetTransform(); ctx.lineWidth = Math.round(this._combinedScaleFactor); } else { ctx.lineWidth = Math.max(lineWidth, scaledLineWidth); } ctx.stroke(); ctx.restore(); } else { var _lineWidth = this.getSinglePixelWidth(); if (_lineWidth < 0 && -_lineWidth >= this.current.lineWidth) { ctx.save(); ctx.resetTransform(); ctx.lineWidth = Math.round(this._combinedScaleFactor); ctx.stroke(); ctx.restore(); } else { ctx.lineWidth = Math.max(_lineWidth, this.current.lineWidth); ctx.stroke(); } } } if (consumePath) { this.consumePath(); } ctx.globalAlpha = this.current.fillAlpha; }, closeStroke: function CanvasGraphics_closeStroke() { this.closePath(); this.stroke(); }, fill: function CanvasGraphics_fill(consumePath) { consumePath = typeof consumePath !== "undefined" ? consumePath : true; var ctx = this.ctx; var fillColor = this.current.fillColor; var isPatternFill = this.current.patternFill; var needRestore = false; if (isPatternFill) { ctx.save(); if (this.baseTransform) { ctx.setTransform.apply(ctx, this.baseTransform); } ctx.fillStyle = fillColor.getPattern(ctx, this); needRestore = true; } if (this.contentVisible) { if (this.pendingEOFill) { ctx.fill("evenodd"); this.pendingEOFill = false; } else { ctx.fill(); } } if (needRestore) { ctx.restore(); } if (consumePath) { this.consumePath(); } }, eoFill: function CanvasGraphics_eoFill() { this.pendingEOFill = true; this.fill(); }, fillStroke: function CanvasGraphics_fillStroke() { this.fill(false); this.stroke(false); this.consumePath(); }, eoFillStroke: function CanvasGraphics_eoFillStroke() { this.pendingEOFill = true; this.fillStroke(); }, closeFillStroke: function CanvasGraphics_closeFillStroke() { this.closePath(); this.fillStroke(); }, closeEOFillStroke: function CanvasGraphics_closeEOFillStroke() { this.pendingEOFill = true; this.closePath(); this.fillStroke(); }, endPath: function CanvasGraphics_endPath() { this.consumePath(); }, clip: function CanvasGraphics_clip() { this.pendingClip = NORMAL_CLIP; }, eoClip: function CanvasGraphics_eoClip() { this.pendingClip = EO_CLIP; }, beginText: function CanvasGraphics_beginText() { this.current.textMatrix = _util.IDENTITY_MATRIX; this.current.textMatrixScale = 1; this.current.x = this.current.lineX = 0; this.current.y = this.current.lineY = 0; }, endText: function CanvasGraphics_endText() { var paths = this.pendingTextPaths; var ctx = this.ctx; if (paths === undefined) { ctx.beginPath(); return; } ctx.save(); ctx.beginPath(); for (var i = 0; i < paths.length; i++) { var path = paths[i]; ctx.setTransform.apply(ctx, path.transform); ctx.translate(path.x, path.y); path.addToPath(ctx, path.fontSize); } ctx.restore(); ctx.clip(); ctx.beginPath(); delete this.pendingTextPaths; }, setCharSpacing: function CanvasGraphics_setCharSpacing(spacing) { this.current.charSpacing = spacing; }, setWordSpacing: function CanvasGraphics_setWordSpacing(spacing) { this.current.wordSpacing = spacing; }, setHScale: function CanvasGraphics_setHScale(scale) { this.current.textHScale = scale / 100; }, setLeading: function CanvasGraphics_setLeading(leading) { this.current.leading = -leading; }, setFont: function CanvasGraphics_setFont(fontRefName, size) { var fontObj = this.commonObjs.get(fontRefName); var current = this.current; if (!fontObj) { throw new Error("Can't find font for ".concat(fontRefName)); } current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX; if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) { (0, _util.warn)("Invalid font matrix for font " + fontRefName); } if (size < 0) { size = -size; current.fontDirection = -1; } else { current.fontDirection = 1; } this.current.font = fontObj; this.current.fontSize = size; if (fontObj.isType3Font) { return; } var name = fontObj.loadedName || "sans-serif"; var bold = "normal"; if (fontObj.black) { bold = "900"; } else if (fontObj.bold) { bold = "bold"; } var italic = fontObj.italic ? "italic" : "normal"; var typeface = "\"".concat(name, "\", ").concat(fontObj.fallbackName); var browserFontSize = size; if (size < MIN_FONT_SIZE) { browserFontSize = MIN_FONT_SIZE; } else if (size > MAX_FONT_SIZE) { browserFontSize = MAX_FONT_SIZE; } this.current.fontSizeScale = size / browserFontSize; this.ctx.font = "".concat(italic, " ").concat(bold, " ").concat(browserFontSize, "px ").concat(typeface); }, setTextRenderingMode: function CanvasGraphics_setTextRenderingMode(mode) { this.current.textRenderingMode = mode; }, setTextRise: function CanvasGraphics_setTextRise(rise) { this.current.textRise = rise; }, moveText: function CanvasGraphics_moveText(x, y) { this.current.x = this.current.lineX += x; this.current.y = this.current.lineY += y; }, setLeadingMoveText: function CanvasGraphics_setLeadingMoveText(x, y) { this.setLeading(-y); this.moveText(x, y); }, setTextMatrix: function CanvasGraphics_setTextMatrix(a, b, c, d, e, f) { this.current.textMatrix = [a, b, c, d, e, f]; this.current.textMatrixScale = Math.sqrt(a * a + b * b); this.current.x = this.current.lineX = 0; this.current.y = this.current.lineY = 0; }, nextLine: function CanvasGraphics_nextLine() { this.moveText(0, this.current.leading); }, paintChar: function paintChar(character, x, y, patternTransform, resetLineWidthToOne) { var ctx = this.ctx; var current = this.current; var font = current.font; var textRenderingMode = current.textRenderingMode; var fontSize = current.fontSize / current.fontSizeScale; var fillStrokeMode = textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; var isAddToPathSet = !!(textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG); var patternFill = current.patternFill && !font.missingFile; var addToPath; if (font.disableFontFace || isAddToPathSet || patternFill) { addToPath = font.getPathGenerator(this.commonObjs, character); } if (font.disableFontFace || patternFill) { ctx.save(); ctx.translate(x, y); ctx.beginPath(); addToPath(ctx, fontSize); if (patternTransform) { ctx.setTransform.apply(ctx, patternTransform); } if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { ctx.fill(); } if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { if (resetLineWidthToOne) { ctx.resetTransform(); ctx.lineWidth = Math.round(this._combinedScaleFactor); } ctx.stroke(); } ctx.restore(); } else { if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { ctx.fillText(character, x, y); } if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { if (resetLineWidthToOne) { ctx.save(); ctx.moveTo(x, y); ctx.resetTransform(); ctx.lineWidth = Math.round(this._combinedScaleFactor); ctx.strokeText(character, 0, 0); ctx.restore(); } else { ctx.strokeText(character, x, y); } } } if (isAddToPathSet) { var paths = this.pendingTextPaths || (this.pendingTextPaths = []); paths.push({ transform: ctx.mozCurrentTransform, x: x, y: y, fontSize: fontSize, addToPath: addToPath }); } }, get isFontSubpixelAAEnabled() { var _this$cachedCanvases$ = this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled", 10, 10), ctx = _this$cachedCanvases$.context; ctx.scale(1.5, 1); ctx.fillText("I", 0, 10); var data = ctx.getImageData(0, 0, 10, 10).data; var enabled = false; for (var i = 3; i < data.length; i += 4) { if (data[i] > 0 && data[i] < 255) { enabled = true; break; } } return (0, _util.shadow)(this, "isFontSubpixelAAEnabled", enabled); }, showText: function CanvasGraphics_showText(glyphs) { var current = this.current; var font = current.font; if (font.isType3Font) { return this.showType3Text(glyphs); } var fontSize = current.fontSize; if (fontSize === 0) { return undefined; } var ctx = this.ctx; var fontSizeScale = current.fontSizeScale; var charSpacing = current.charSpacing; var wordSpacing = current.wordSpacing; var fontDirection = current.fontDirection; var textHScale = current.textHScale * fontDirection; var glyphsLength = glyphs.length; var vertical = font.vertical; var spacingDir = vertical ? 1 : -1; var defaultVMetrics = font.defaultVMetrics; var widthAdvanceScale = fontSize * current.fontMatrix[0]; var simpleFillText = current.textRenderingMode === _util.TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill; ctx.save(); var patternTransform; if (current.patternFill) { ctx.save(); var pattern = current.fillColor.getPattern(ctx, this); patternTransform = ctx.mozCurrentTransform; ctx.restore(); ctx.fillStyle = pattern; } ctx.transform.apply(ctx, current.textMatrix); ctx.translate(current.x, current.y + current.textRise); if (fontDirection > 0) { ctx.scale(textHScale, -1); } else { ctx.scale(textHScale, 1); } var lineWidth = current.lineWidth; var resetLineWidthToOne = false; var scale = current.textMatrixScale; if (scale === 0 || lineWidth === 0) { var fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { this._cachedGetSinglePixelWidth = null; lineWidth = this.getSinglePixelWidth(); resetLineWidthToOne = lineWidth < 0; } } else { lineWidth /= scale; } if (fontSizeScale !== 1.0) { ctx.scale(fontSizeScale, fontSizeScale); lineWidth /= fontSizeScale; } ctx.lineWidth = lineWidth; var x = 0, i; for (i = 0; i < glyphsLength; ++i) { var glyph = glyphs[i]; if ((0, _util.isNum)(glyph)) { x += spacingDir * glyph * fontSize / 1000; continue; } var restoreNeeded = false; var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; var character = glyph.fontChar; var accent = glyph.accent; var scaledX = void 0, scaledY = void 0; var width = glyph.width; if (vertical) { var vmetric = glyph.vmetric || defaultVMetrics; var vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale; var vy = vmetric[2] * widthAdvanceScale; width = vmetric ? -vmetric[0] : width; scaledX = vx / fontSizeScale; scaledY = (x + vy) / fontSizeScale; } else { scaledX = x / fontSizeScale; scaledY = 0; } if (font.remeasure && width > 0) { var measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale; if (width < measuredWidth && this.isFontSubpixelAAEnabled) { var characterScaleX = width / measuredWidth; restoreNeeded = true; ctx.save(); ctx.scale(characterScaleX, 1); scaledX /= characterScaleX; } else if (width !== measuredWidth) { scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale; } } if (this.contentVisible && (glyph.isInFont || font.missingFile)) { if (simpleFillText && !accent) { ctx.fillText(character, scaledX, scaledY); } else { this.paintChar(character, scaledX, scaledY, patternTransform, resetLineWidthToOne); if (accent) { var scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale; var scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale; this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform, resetLineWidthToOne); } } } var charWidth = void 0; if (vertical) { charWidth = width * widthAdvanceScale - spacing * fontDirection; } else { charWidth = width * widthAdvanceScale + spacing * fontDirection; } x += charWidth; if (restoreNeeded) { ctx.restore(); } } if (vertical) { current.y -= x; } else { current.x += x * textHScale; } ctx.restore(); }, showType3Text: function CanvasGraphics_showType3Text(glyphs) { var ctx = this.ctx; var current = this.current; var font = current.font; var fontSize = current.fontSize; var fontDirection = current.fontDirection; var spacingDir = font.vertical ? 1 : -1; var charSpacing = current.charSpacing; var wordSpacing = current.wordSpacing; var textHScale = current.textHScale * fontDirection; var fontMatrix = current.fontMatrix || _util.FONT_IDENTITY_MATRIX; var glyphsLength = glyphs.length; var isTextInvisible = current.textRenderingMode === _util.TextRenderingMode.INVISIBLE; var i, glyph, width, spacingLength; if (isTextInvisible || fontSize === 0) { return; } this._cachedGetSinglePixelWidth = null; ctx.save(); ctx.transform.apply(ctx, current.textMatrix); ctx.translate(current.x, current.y); ctx.scale(textHScale, fontDirection); for (i = 0; i < glyphsLength; ++i) { glyph = glyphs[i]; if ((0, _util.isNum)(glyph)) { spacingLength = spacingDir * glyph * fontSize / 1000; this.ctx.translate(spacingLength, 0); current.x += spacingLength * textHScale; continue; } var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; var operatorList = font.charProcOperatorList[glyph.operatorListId]; if (!operatorList) { (0, _util.warn)("Type3 character \"".concat(glyph.operatorListId, "\" is not available.")); continue; } if (this.contentVisible) { this.processingType3 = glyph; this.save(); ctx.scale(fontSize, fontSize); ctx.transform.apply(ctx, fontMatrix); this.executeOperatorList(operatorList); this.restore(); } var transformed = _util.Util.applyTransform([glyph.width, 0], fontMatrix); width = transformed[0] * fontSize + spacing; ctx.translate(width, 0); current.x += width * textHScale; } ctx.restore(); this.processingType3 = null; }, setCharWidth: function CanvasGraphics_setCharWidth(xWidth, yWidth) {}, setCharWidthAndBounds: function CanvasGraphics_setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) { this.ctx.rect(llx, lly, urx - llx, ury - lly); this.clip(); this.endPath(); }, getColorN_Pattern: function CanvasGraphics_getColorN_Pattern(IR) { var _this = this; var pattern; if (IR[0] === "TilingPattern") { var color = IR[1]; var baseTransform = this.baseTransform || this.ctx.mozCurrentTransform.slice(); var canvasGraphicsFactory = { createCanvasGraphics: function createCanvasGraphics(ctx) { return new CanvasGraphics(ctx, _this.commonObjs, _this.objs, _this.canvasFactory, _this.webGLContext); } }; pattern = new _pattern_helper.TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform); } else { pattern = (0, _pattern_helper.getShadingPatternFromIR)(IR); } return pattern; }, setStrokeColorN: function CanvasGraphics_setStrokeColorN() { this.current.strokeColor = this.getColorN_Pattern(arguments); }, setFillColorN: function CanvasGraphics_setFillColorN() { this.current.fillColor = this.getColorN_Pattern(arguments); this.current.patternFill = true; }, setStrokeRGBColor: function CanvasGraphics_setStrokeRGBColor(r, g, b) { var color = _util.Util.makeHexColor(r, g, b); this.ctx.strokeStyle = color; this.current.strokeColor = color; }, setFillRGBColor: function CanvasGraphics_setFillRGBColor(r, g, b) { var color = _util.Util.makeHexColor(r, g, b); this.ctx.fillStyle = color; this.current.fillColor = color; this.current.patternFill = false; }, shadingFill: function CanvasGraphics_shadingFill(patternIR) { if (!this.contentVisible) { return; } var ctx = this.ctx; this.save(); var pattern = (0, _pattern_helper.getShadingPatternFromIR)(patternIR); ctx.fillStyle = pattern.getPattern(ctx, this, true); var inv = ctx.mozCurrentTransformInverse; if (inv) { var canvas = ctx.canvas; var width = canvas.width; var height = canvas.height; var bl = _util.Util.applyTransform([0, 0], inv); var br = _util.Util.applyTransform([0, height], inv); var ul = _util.Util.applyTransform([width, 0], inv); var ur = _util.Util.applyTransform([width, height], inv); var x0 = Math.min(bl[0], br[0], ul[0], ur[0]); var y0 = Math.min(bl[1], br[1], ul[1], ur[1]); var x1 = Math.max(bl[0], br[0], ul[0], ur[0]); var y1 = Math.max(bl[1], br[1], ul[1], ur[1]); this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0); } else { this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10); } this.restore(); }, beginInlineImage: function CanvasGraphics_beginInlineImage() { (0, _util.unreachable)("Should not call beginInlineImage"); }, beginImageData: function CanvasGraphics_beginImageData() { (0, _util.unreachable)("Should not call beginImageData"); }, paintFormXObjectBegin: function CanvasGraphics_paintFormXObjectBegin(matrix, bbox) { if (!this.contentVisible) { return; } this.save(); this.baseTransformStack.push(this.baseTransform); if (Array.isArray(matrix) && matrix.length === 6) { this.transform.apply(this, matrix); } this.baseTransform = this.ctx.mozCurrentTransform; if (bbox) { var width = bbox[2] - bbox[0]; var height = bbox[3] - bbox[1]; this.ctx.rect(bbox[0], bbox[1], width, height); this.clip(); this.endPath(); } }, paintFormXObjectEnd: function CanvasGraphics_paintFormXObjectEnd() { if (!this.contentVisible) { return; } this.restore(); this.baseTransform = this.baseTransformStack.pop(); }, beginGroup: function CanvasGraphics_beginGroup(group) { if (!this.contentVisible) { return; } this.save(); var currentCtx = this.ctx; if (!group.isolated) { (0, _util.info)("TODO: Support non-isolated groups."); } if (group.knockout) { (0, _util.warn)("Knockout groups not supported."); } var currentTransform = currentCtx.mozCurrentTransform; if (group.matrix) { currentCtx.transform.apply(currentCtx, group.matrix); } if (!group.bbox) { throw new Error("Bounding box is required."); } var bounds = _util.Util.getAxialAlignedBoundingBox(group.bbox, currentCtx.mozCurrentTransform); var canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height]; bounds = _util.Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0]; var offsetX = Math.floor(bounds[0]); var offsetY = Math.floor(bounds[1]); var drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1); var drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1); var scaleX = 1, scaleY = 1; if (drawnWidth > MAX_GROUP_SIZE) { scaleX = drawnWidth / MAX_GROUP_SIZE; drawnWidth = MAX_GROUP_SIZE; } if (drawnHeight > MAX_GROUP_SIZE) { scaleY = drawnHeight / MAX_GROUP_SIZE; drawnHeight = MAX_GROUP_SIZE; } var cacheId = "groupAt" + this.groupLevel; if (group.smask) { cacheId += "_smask_" + this.smaskCounter++ % 2; } var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true); var groupCtx = scratchCanvas.context; groupCtx.scale(1 / scaleX, 1 / scaleY); groupCtx.translate(-offsetX, -offsetY); groupCtx.transform.apply(groupCtx, currentTransform); if (group.smask) { this.smaskStack.push({ canvas: scratchCanvas.canvas, context: groupCtx, offsetX: offsetX, offsetY: offsetY, scaleX: scaleX, scaleY: scaleY, subtype: group.smask.subtype, backdrop: group.smask.backdrop, transferMap: group.smask.transferMap || null, startTransformInverse: null }); } else { currentCtx.setTransform(1, 0, 0, 1, 0, 0); currentCtx.translate(offsetX, offsetY); currentCtx.scale(scaleX, scaleY); } copyCtxState(currentCtx, groupCtx); this.ctx = groupCtx; this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); this.groupStack.push(currentCtx); this.groupLevel++; this.current.activeSMask = null; }, endGroup: function CanvasGraphics_endGroup(group) { if (!this.contentVisible) { return; } this.groupLevel--; var groupCtx = this.ctx; this.ctx = this.groupStack.pop(); if (this.ctx.imageSmoothingEnabled !== undefined) { this.ctx.imageSmoothingEnabled = false; } else { this.ctx.mozImageSmoothingEnabled = false; } if (group.smask) { this.tempSMask = this.smaskStack.pop(); } else { this.ctx.drawImage(groupCtx.canvas, 0, 0); } this.restore(); }, beginAnnotations: function CanvasGraphics_beginAnnotations() { this.save(); if (this.baseTransform) { this.ctx.setTransform.apply(this.ctx, this.baseTransform); } }, endAnnotations: function CanvasGraphics_endAnnotations() { this.restore(); }, beginAnnotation: function CanvasGraphics_beginAnnotation(rect, transform, matrix) { this.save(); resetCtxToDefault(this.ctx); this.current = new CanvasExtraState(); if (Array.isArray(rect) && rect.length === 4) { var width = rect[2] - rect[0]; var height = rect[3] - rect[1]; this.ctx.rect(rect[0], rect[1], width, height); this.clip(); this.endPath(); } this.transform.apply(this, transform); this.transform.apply(this, matrix); }, endAnnotation: function CanvasGraphics_endAnnotation() { this.restore(); }, paintImageMaskXObject: function CanvasGraphics_paintImageMaskXObject(img) { if (!this.contentVisible) { return; } var ctx = this.ctx; var width = img.width, height = img.height; var fillColor = this.current.fillColor; var isPatternFill = this.current.patternFill; var glyph = this.processingType3; if (COMPILE_TYPE3_GLYPHS && glyph && glyph.compiled === undefined) { if (width <= MAX_SIZE_TO_COMPILE && height <= MAX_SIZE_TO_COMPILE) { glyph.compiled = compileType3Glyph({ data: img.data, width: width, height: height }); } else { glyph.compiled = null; } } if (glyph !== null && glyph !== void 0 && glyph.compiled) { glyph.compiled(ctx); return; } var maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); var maskCtx = maskCanvas.context; maskCtx.save(); putBinaryImageMask(maskCtx, img); maskCtx.globalCompositeOperation = "source-in"; maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor; maskCtx.fillRect(0, 0, width, height); maskCtx.restore(); this.paintInlineImageXObject(maskCanvas.canvas); }, paintImageMaskXObjectRepeat: function paintImageMaskXObjectRepeat(imgData, scaleX) { var skewX = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; var skewY = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; var scaleY = arguments.length > 4 ? arguments[4] : undefined; var positions = arguments.length > 5 ? arguments[5] : undefined; if (!this.contentVisible) { return; } var width = imgData.width; var height = imgData.height; var fillColor = this.current.fillColor; var isPatternFill = this.current.patternFill; var maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); var maskCtx = maskCanvas.context; maskCtx.save(); putBinaryImageMask(maskCtx, imgData); maskCtx.globalCompositeOperation = "source-in"; maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor; maskCtx.fillRect(0, 0, width, height); maskCtx.restore(); var ctx = this.ctx; for (var i = 0, ii = positions.length; i < ii; i += 2) { ctx.save(); ctx.transform(scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]); ctx.scale(1, -1); ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1); ctx.restore(); } }, paintImageMaskXObjectGroup: function CanvasGraphics_paintImageMaskXObjectGroup(images) { if (!this.contentVisible) { return; } var ctx = this.ctx; var fillColor = this.current.fillColor; var isPatternFill = this.current.patternFill; for (var i = 0, ii = images.length; i < ii; i++) { var image = images[i]; var width = image.width, height = image.height; var maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); var maskCtx = maskCanvas.context; maskCtx.save(); putBinaryImageMask(maskCtx, image); maskCtx.globalCompositeOperation = "source-in"; maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor; maskCtx.fillRect(0, 0, width, height); maskCtx.restore(); ctx.save(); ctx.transform.apply(ctx, image.transform); ctx.scale(1, -1); ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1); ctx.restore(); } }, paintImageXObject: function CanvasGraphics_paintImageXObject(objId) { if (!this.contentVisible) { return; } var imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId); if (!imgData) { (0, _util.warn)("Dependent image isn't ready yet"); return; } this.paintInlineImageXObject(imgData); }, paintImageXObjectRepeat: function CanvasGraphics_paintImageXObjectRepeat(objId, scaleX, scaleY, positions) { if (!this.contentVisible) { return; } var imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId); if (!imgData) { (0, _util.warn)("Dependent image isn't ready yet"); return; } var width = imgData.width; var height = imgData.height; var map = []; for (var i = 0, ii = positions.length; i < ii; i += 2) { map.push({ transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]], x: 0, y: 0, w: width, h: height }); } this.paintInlineImageXObjectGroup(imgData, map); }, paintInlineImageXObject: function CanvasGraphics_paintInlineImageXObject(imgData) { if (!this.contentVisible) { return; } var width = imgData.width; var height = imgData.height; var ctx = this.ctx; this.save(); ctx.scale(1 / width, -1 / height); var currentTransform = ctx.mozCurrentTransformInverse; var a = currentTransform[0], b = currentTransform[1]; var widthScale = Math.max(Math.sqrt(a * a + b * b), 1); var c = currentTransform[2], d = currentTransform[3]; var heightScale = Math.max(Math.sqrt(c * c + d * d), 1); var imgToPaint, tmpCanvas, tmpCtx; if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) { imgToPaint = imgData; } else { tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); tmpCtx = tmpCanvas.context; putBinaryImageData(tmpCtx, imgData, this.current.transferMaps); imgToPaint = tmpCanvas.canvas; } var paintWidth = width, paintHeight = height; var tmpCanvasId = "prescale1"; while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) { var newWidth = paintWidth, newHeight = paintHeight; if (widthScale > 2 && paintWidth > 1) { newWidth = Math.ceil(paintWidth / 2); widthScale /= paintWidth / newWidth; } if (heightScale > 2 && paintHeight > 1) { newHeight = Math.ceil(paintHeight / 2); heightScale /= paintHeight / newHeight; } tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight); tmpCtx = tmpCanvas.context; tmpCtx.clearRect(0, 0, newWidth, newHeight); tmpCtx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight); imgToPaint = tmpCanvas.canvas; paintWidth = newWidth; paintHeight = newHeight; tmpCanvasId = tmpCanvasId === "prescale1" ? "prescale2" : "prescale1"; } ctx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight, 0, -height, width, height); if (this.imageLayer) { var position = this.getCanvasPosition(0, -height); this.imageLayer.appendImage({ imgData: imgData, left: position[0], top: position[1], width: width / currentTransform[0], height: height / currentTransform[3] }); } this.restore(); }, paintInlineImageXObjectGroup: function CanvasGraphics_paintInlineImageXObjectGroup(imgData, map) { if (!this.contentVisible) { return; } var ctx = this.ctx; var w = imgData.width; var h = imgData.height; var tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h); var tmpCtx = tmpCanvas.context; putBinaryImageData(tmpCtx, imgData, this.current.transferMaps); for (var i = 0, ii = map.length; i < ii; i++) { var entry = map[i]; ctx.save(); ctx.transform.apply(ctx, entry.transform); ctx.scale(1, -1); ctx.drawImage(tmpCanvas.canvas, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1); if (this.imageLayer) { var position = this.getCanvasPosition(entry.x, entry.y); this.imageLayer.appendImage({ imgData: imgData, left: position[0], top: position[1], width: w, height: h }); } ctx.restore(); } }, paintSolidColorImageMask: function CanvasGraphics_paintSolidColorImageMask() { if (!this.contentVisible) { return; } this.ctx.fillRect(0, 0, 1, 1); }, markPoint: function CanvasGraphics_markPoint(tag) {}, markPointProps: function CanvasGraphics_markPointProps(tag, properties) {}, beginMarkedContent: function CanvasGraphics_beginMarkedContent(tag) { this.markedContentStack.push({ visible: true }); }, beginMarkedContentProps: function CanvasGraphics_beginMarkedContentProps(tag, properties) { if (tag === "OC") { this.markedContentStack.push({ visible: this.optionalContentConfig.isVisible(properties) }); } else { this.markedContentStack.push({ visible: true }); } this.contentVisible = this.isContentVisible(); }, endMarkedContent: function CanvasGraphics_endMarkedContent() { this.markedContentStack.pop(); this.contentVisible = this.isContentVisible(); }, beginCompat: function CanvasGraphics_beginCompat() {}, endCompat: function CanvasGraphics_endCompat() {}, consumePath: function CanvasGraphics_consumePath() { var ctx = this.ctx; if (this.pendingClip) { if (this.pendingClip === EO_CLIP) { ctx.clip("evenodd"); } else { ctx.clip(); } this.pendingClip = null; } ctx.beginPath(); }, getSinglePixelWidth: function getSinglePixelWidth() { if (this._cachedGetSinglePixelWidth === null) { var m = this.ctx.mozCurrentTransform; var absDet = Math.abs(m[0] * m[3] - m[2] * m[1]); var sqNorm1 = Math.pow(m[0], 2) + Math.pow(m[2], 2); var sqNorm2 = Math.pow(m[1], 2) + Math.pow(m[3], 2); var pixelHeight = Math.sqrt(Math.max(sqNorm1, sqNorm2)) / absDet; if (sqNorm1 !== sqNorm2 && this._combinedScaleFactor * pixelHeight > 1) { this._cachedGetSinglePixelWidth = -(this._combinedScaleFactor * pixelHeight); } else if (absDet > Number.EPSILON) { this._cachedGetSinglePixelWidth = pixelHeight * 1.0000001; } else { this._cachedGetSinglePixelWidth = 1; } } return this._cachedGetSinglePixelWidth; }, getCanvasPosition: function CanvasGraphics_getCanvasPosition(x, y) { var transform = this.ctx.mozCurrentTransform; return [transform[0] * x + transform[2] * y + transform[4], transform[1] * x + transform[3] * y + transform[5]]; }, isContentVisible: function CanvasGraphics_isContentVisible() { for (var i = this.markedContentStack.length - 1; i >= 0; i--) { if (!this.markedContentStack[i].visible) { return false; } } return true; } }; for (var op in _util.OPS) { CanvasGraphics.prototype[_util.OPS[op]] = CanvasGraphics.prototype[op]; } return CanvasGraphics; }(); exports.CanvasGraphics = CanvasGraphics; /***/ }), /* 141 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getShadingPatternFromIR = getShadingPatternFromIR; exports.TilingPattern = void 0; var _util = __w_pdfjs_require__(4); var ShadingIRs = {}; function applyBoundingBox(ctx, bbox) { if (!bbox || typeof Path2D === "undefined") { return; } var width = bbox[2] - bbox[0]; var height = bbox[3] - bbox[1]; var region = new Path2D(); region.rect(bbox[0], bbox[1], width, height); ctx.clip(region); } ShadingIRs.RadialAxial = { fromIR: function RadialAxial_fromIR(raw) { var type = raw[1]; var bbox = raw[2]; var colorStops = raw[3]; var p0 = raw[4]; var p1 = raw[5]; var r0 = raw[6]; var r1 = raw[7]; return { getPattern: function RadialAxial_getPattern(ctx) { applyBoundingBox(ctx, bbox); var grad; if (type === "axial") { grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]); } else if (type === "radial") { grad = ctx.createRadialGradient(p0[0], p0[1], r0, p1[0], p1[1], r1); } for (var i = 0, ii = colorStops.length; i < ii; ++i) { var c = colorStops[i]; grad.addColorStop(c[0], c[1]); } return grad; } }; } }; var createMeshCanvas = function createMeshCanvasClosure() { function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) { var coords = context.coords, colors = context.colors; var bytes = data.data, rowSize = data.width * 4; var tmp; if (coords[p1 + 1] > coords[p2 + 1]) { tmp = p1; p1 = p2; p2 = tmp; tmp = c1; c1 = c2; c2 = tmp; } if (coords[p2 + 1] > coords[p3 + 1]) { tmp = p2; p2 = p3; p3 = tmp; tmp = c2; c2 = c3; c3 = tmp; } if (coords[p1 + 1] > coords[p2 + 1]) { tmp = p1; p1 = p2; p2 = tmp; tmp = c1; c1 = c2; c2 = tmp; } var x1 = (coords[p1] + context.offsetX) * context.scaleX; var y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY; var x2 = (coords[p2] + context.offsetX) * context.scaleX; var y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY; var x3 = (coords[p3] + context.offsetX) * context.scaleX; var y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY; if (y1 >= y3) { return; } var c1r = colors[c1], c1g = colors[c1 + 1], c1b = colors[c1 + 2]; var c2r = colors[c2], c2g = colors[c2 + 1], c2b = colors[c2 + 2]; var c3r = colors[c3], c3g = colors[c3 + 1], c3b = colors[c3 + 2]; var minY = Math.round(y1), maxY = Math.round(y3); var xa, car, cag, cab; var xb, cbr, cbg, cbb; for (var y = minY; y <= maxY; y++) { if (y < y2) { var _k = void 0; if (y < y1) { _k = 0; } else if (y1 === y2) { _k = 1; } else { _k = (y1 - y) / (y1 - y2); } xa = x1 - (x1 - x2) * _k; car = c1r - (c1r - c2r) * _k; cag = c1g - (c1g - c2g) * _k; cab = c1b - (c1b - c2b) * _k; } else { var _k2 = void 0; if (y > y3) { _k2 = 1; } else if (y2 === y3) { _k2 = 0; } else { _k2 = (y2 - y) / (y2 - y3); } xa = x2 - (x2 - x3) * _k2; car = c2r - (c2r - c3r) * _k2; cag = c2g - (c2g - c3g) * _k2; cab = c2b - (c2b - c3b) * _k2; } var k = void 0; if (y < y1) { k = 0; } else if (y > y3) { k = 1; } else { k = (y1 - y) / (y1 - y3); } xb = x1 - (x1 - x3) * k; cbr = c1r - (c1r - c3r) * k; cbg = c1g - (c1g - c3g) * k; cbb = c1b - (c1b - c3b) * k; var x1_ = Math.round(Math.min(xa, xb)); var x2_ = Math.round(Math.max(xa, xb)); var j = rowSize * y + x1_ * 4; for (var x = x1_; x <= x2_; x++) { k = (xa - x) / (xa - xb); if (k < 0) { k = 0; } else if (k > 1) { k = 1; } bytes[j++] = car - (car - cbr) * k | 0; bytes[j++] = cag - (cag - cbg) * k | 0; bytes[j++] = cab - (cab - cbb) * k | 0; bytes[j++] = 255; } } } function drawFigure(data, figure, context) { var ps = figure.coords; var cs = figure.colors; var i, ii; switch (figure.type) { case "lattice": var verticesPerRow = figure.verticesPerRow; var rows = Math.floor(ps.length / verticesPerRow) - 1; var cols = verticesPerRow - 1; for (i = 0; i < rows; i++) { var q = i * verticesPerRow; for (var j = 0; j < cols; j++, q++) { drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]); drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]); } } break; case "triangles": for (i = 0, ii = ps.length; i < ii; i += 3) { drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]); } break; default: throw new Error("illegal figure"); } } function createMeshCanvas(bounds, combinesScale, coords, colors, figures, backgroundColor, cachedCanvases, webGLContext) { var EXPECTED_SCALE = 1.1; var MAX_PATTERN_SIZE = 3000; var BORDER_SIZE = 2; var offsetX = Math.floor(bounds[0]); var offsetY = Math.floor(bounds[1]); var boundsWidth = Math.ceil(bounds[2]) - offsetX; var boundsHeight = Math.ceil(bounds[3]) - offsetY; var width = Math.min(Math.ceil(Math.abs(boundsWidth * combinesScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); var height = Math.min(Math.ceil(Math.abs(boundsHeight * combinesScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); var scaleX = boundsWidth / width; var scaleY = boundsHeight / height; var context = { coords: coords, colors: colors, offsetX: -offsetX, offsetY: -offsetY, scaleX: 1 / scaleX, scaleY: 1 / scaleY }; var paddedWidth = width + BORDER_SIZE * 2; var paddedHeight = height + BORDER_SIZE * 2; var canvas, tmpCanvas, i, ii; if (webGLContext.isEnabled) { canvas = webGLContext.drawFigures({ width: width, height: height, backgroundColor: backgroundColor, figures: figures, context: context }); tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false); tmpCanvas.context.drawImage(canvas, BORDER_SIZE, BORDER_SIZE); canvas = tmpCanvas.canvas; } else { tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false); var tmpCtx = tmpCanvas.context; var data = tmpCtx.createImageData(width, height); if (backgroundColor) { var bytes = data.data; for (i = 0, ii = bytes.length; i < ii; i += 4) { bytes[i] = backgroundColor[0]; bytes[i + 1] = backgroundColor[1]; bytes[i + 2] = backgroundColor[2]; bytes[i + 3] = 255; } } for (i = 0; i < figures.length; i++) { drawFigure(data, figures[i], context); } tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE); canvas = tmpCanvas.canvas; } return { canvas: canvas, offsetX: offsetX - BORDER_SIZE * scaleX, offsetY: offsetY - BORDER_SIZE * scaleY, scaleX: scaleX, scaleY: scaleY }; } return createMeshCanvas; }(); ShadingIRs.Mesh = { fromIR: function Mesh_fromIR(raw) { var coords = raw[2]; var colors = raw[3]; var figures = raw[4]; var bounds = raw[5]; var matrix = raw[6]; var bbox = raw[7]; var background = raw[8]; return { getPattern: function Mesh_getPattern(ctx, owner, shadingFill) { applyBoundingBox(ctx, bbox); var scale; if (shadingFill) { scale = _util.Util.singularValueDecompose2dScale(ctx.mozCurrentTransform); } else { scale = _util.Util.singularValueDecompose2dScale(owner.baseTransform); if (matrix) { var matrixScale = _util.Util.singularValueDecompose2dScale(matrix); scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]]; } } var temporaryPatternCanvas = createMeshCanvas(bounds, scale, coords, colors, figures, shadingFill ? null : background, owner.cachedCanvases, owner.webGLContext); if (!shadingFill) { ctx.setTransform.apply(ctx, owner.baseTransform); if (matrix) { ctx.transform.apply(ctx, matrix); } } ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY); return ctx.createPattern(temporaryPatternCanvas.canvas, "no-repeat"); } }; } }; ShadingIRs.Dummy = { fromIR: function Dummy_fromIR() { return { getPattern: function Dummy_fromIR_getPattern() { return "hotpink"; } }; } }; function getShadingPatternFromIR(raw) { var shadingIR = ShadingIRs[raw[0]]; if (!shadingIR) { throw new Error("Unknown IR type: ".concat(raw[0])); } return shadingIR.fromIR(raw); } var TilingPattern = function TilingPatternClosure() { var PaintType = { COLORED: 1, UNCOLORED: 2 }; var MAX_PATTERN_SIZE = 3000; function TilingPattern(IR, color, ctx, canvasGraphicsFactory, baseTransform) { this.operatorList = IR[2]; this.matrix = IR[3] || [1, 0, 0, 1, 0, 0]; this.bbox = IR[4]; this.xstep = IR[5]; this.ystep = IR[6]; this.paintType = IR[7]; this.tilingType = IR[8]; this.color = color; this.canvasGraphicsFactory = canvasGraphicsFactory; this.baseTransform = baseTransform; this.ctx = ctx; } TilingPattern.prototype = { createPatternCanvas: function TilinPattern_createPatternCanvas(owner) { var operatorList = this.operatorList; var bbox = this.bbox; var xstep = this.xstep; var ystep = this.ystep; var paintType = this.paintType; var tilingType = this.tilingType; var color = this.color; var canvasGraphicsFactory = this.canvasGraphicsFactory; (0, _util.info)("TilingType: " + tilingType); var x0 = bbox[0], y0 = bbox[1], x1 = bbox[2], y1 = bbox[3]; var matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix); var curMatrixScale = _util.Util.singularValueDecompose2dScale(this.baseTransform); var combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]]; var dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]); var dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]); var tmpCanvas = owner.cachedCanvases.getCanvas("pattern", dimx.size, dimy.size, true); var tmpCtx = tmpCanvas.context; var graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx); graphics.groupLevel = owner.groupLevel; this.setFillAndStrokeStyleToContext(graphics, paintType, color); graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0); graphics.transform(1, 0, 0, 1, -x0, -y0); this.clipBbox(graphics, bbox, x0, y0, x1, y1); graphics.executeOperatorList(operatorList); this.ctx.transform(1, 0, 0, 1, x0, y0); this.ctx.scale(1 / dimx.scale, 1 / dimy.scale); return tmpCanvas.canvas; }, getSizeAndScale: function TilingPattern_getSizeAndScale(step, realOutputSize, scale) { step = Math.abs(step); var maxSize = Math.max(MAX_PATTERN_SIZE, realOutputSize); var size = Math.ceil(step * scale); if (size >= maxSize) { size = maxSize; } else { scale = size / step; } return { scale: scale, size: size }; }, clipBbox: function clipBbox(graphics, bbox, x0, y0, x1, y1) { if (Array.isArray(bbox) && bbox.length === 4) { var bboxWidth = x1 - x0; var bboxHeight = y1 - y0; graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight); graphics.clip(); graphics.endPath(); } }, setFillAndStrokeStyleToContext: function setFillAndStrokeStyleToContext(graphics, paintType, color) { var context = graphics.ctx, current = graphics.current; switch (paintType) { case PaintType.COLORED: var ctx = this.ctx; context.fillStyle = ctx.fillStyle; context.strokeStyle = ctx.strokeStyle; current.fillColor = ctx.fillStyle; current.strokeColor = ctx.strokeStyle; break; case PaintType.UNCOLORED: var cssColor = _util.Util.makeHexColor(color[0], color[1], color[2]); context.fillStyle = cssColor; context.strokeStyle = cssColor; current.fillColor = cssColor; current.strokeColor = cssColor; break; default: throw new _util.FormatError("Unsupported paint type: ".concat(paintType)); } }, getPattern: function TilingPattern_getPattern(ctx, owner) { ctx = this.ctx; ctx.setTransform.apply(ctx, this.baseTransform); ctx.transform.apply(ctx, this.matrix); var temporaryPatternCanvas = this.createPatternCanvas(owner); return ctx.createPattern(temporaryPatternCanvas, "repeat"); } }; return TilingPattern; }(); exports.TilingPattern = TilingPattern; /***/ }), /* 142 */ /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.GlobalWorkerOptions = void 0; var GlobalWorkerOptions = Object.create(null); exports.GlobalWorkerOptions = GlobalWorkerOptions; GlobalWorkerOptions.workerPort = GlobalWorkerOptions.workerPort === undefined ? null : GlobalWorkerOptions.workerPort; GlobalWorkerOptions.workerSrc = GlobalWorkerOptions.workerSrc === undefined ? "" : GlobalWorkerOptions.workerSrc; /***/ }), /* 143 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.MessageHandler = void 0; var _regenerator = _interopRequireDefault(__w_pdfjs_require__(2)); var _util = __w_pdfjs_require__(4); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var CallbackKind = { UNKNOWN: 0, DATA: 1, ERROR: 2 }; var StreamKind = { UNKNOWN: 0, CANCEL: 1, CANCEL_COMPLETE: 2, CLOSE: 3, ENQUEUE: 4, ERROR: 5, PULL: 6, PULL_COMPLETE: 7, START_COMPLETE: 8 }; function wrapReason(reason) { if (_typeof(reason) !== "object" || reason === null) { return reason; } switch (reason.name) { case "AbortException": return new _util.AbortException(reason.message); case "MissingPDFException": return new _util.MissingPDFException(reason.message); case "UnexpectedResponseException": return new _util.UnexpectedResponseException(reason.message, reason.status); case "UnknownErrorException": return new _util.UnknownErrorException(reason.message, reason.details); default: return new _util.UnknownErrorException(reason.message, reason.toString()); } } var MessageHandler = /*#__PURE__*/function () { function MessageHandler(sourceName, targetName, comObj) { var _this = this; _classCallCheck(this, MessageHandler); this.sourceName = sourceName; this.targetName = targetName; this.comObj = comObj; this.callbackId = 1; this.streamId = 1; this.postMessageTransfers = true; this.streamSinks = Object.create(null); this.streamControllers = Object.create(null); this.callbackCapabilities = Object.create(null); this.actionHandler = Object.create(null); this._onComObjOnMessage = function (event) { var data = event.data; if (data.targetName !== _this.sourceName) { return; } if (data.stream) { _this._processStreamMessage(data); return; } if (data.callback) { var callbackId = data.callbackId; var capability = _this.callbackCapabilities[callbackId]; if (!capability) { throw new Error("Cannot resolve callback ".concat(callbackId)); } delete _this.callbackCapabilities[callbackId]; if (data.callback === CallbackKind.DATA) { capability.resolve(data.data); } else if (data.callback === CallbackKind.ERROR) { capability.reject(wrapReason(data.reason)); } else { throw new Error("Unexpected callback case"); } return; } var action = _this.actionHandler[data.action]; if (!action) { throw new Error("Unknown action from worker: ".concat(data.action)); } if (data.callbackId) { var cbSourceName = _this.sourceName; var cbTargetName = data.sourceName; new Promise(function (resolve) { resolve(action(data.data)); }).then(function (result) { comObj.postMessage({ sourceName: cbSourceName, targetName: cbTargetName, callback: CallbackKind.DATA, callbackId: data.callbackId, data: result }); }, function (reason) { comObj.postMessage({ sourceName: cbSourceName, targetName: cbTargetName, callback: CallbackKind.ERROR, callbackId: data.callbackId, reason: wrapReason(reason) }); }); return; } if (data.streamId) { _this._createStreamSink(data); return; } action(data.data); }; comObj.addEventListener("message", this._onComObjOnMessage); } _createClass(MessageHandler, [{ key: "on", value: function on(actionName, handler) { var ah = this.actionHandler; if (ah[actionName]) { throw new Error("There is already an actionName called \"".concat(actionName, "\"")); } ah[actionName] = handler; } }, { key: "send", value: function send(actionName, data, transfers) { this._postMessage({ sourceName: this.sourceName, targetName: this.targetName, action: actionName, data: data }, transfers); } }, { key: "sendWithPromise", value: function sendWithPromise(actionName, data, transfers) { var callbackId = this.callbackId++; var capability = (0, _util.createPromiseCapability)(); this.callbackCapabilities[callbackId] = capability; try { this._postMessage({ sourceName: this.sourceName, targetName: this.targetName, action: actionName, callbackId: callbackId, data: data }, transfers); } catch (ex) { capability.reject(ex); } return capability.promise; } }, { key: "sendWithStream", value: function sendWithStream(actionName, data, queueingStrategy, transfers) { var _this2 = this; var streamId = this.streamId++; var sourceName = this.sourceName; var targetName = this.targetName; var comObj = this.comObj; return new ReadableStream({ start: function start(controller) { var startCapability = (0, _util.createPromiseCapability)(); _this2.streamControllers[streamId] = { controller: controller, startCall: startCapability, pullCall: null, cancelCall: null, isClosed: false }; _this2._postMessage({ sourceName: sourceName, targetName: targetName, action: actionName, streamId: streamId, data: data, desiredSize: controller.desiredSize }, transfers); return startCapability.promise; }, pull: function pull(controller) { var pullCapability = (0, _util.createPromiseCapability)(); _this2.streamControllers[streamId].pullCall = pullCapability; comObj.postMessage({ sourceName: sourceName, targetName: targetName, stream: StreamKind.PULL, streamId: streamId, desiredSize: controller.desiredSize }); return pullCapability.promise; }, cancel: function cancel(reason) { (0, _util.assert)(reason instanceof Error, "cancel must have a valid reason"); var cancelCapability = (0, _util.createPromiseCapability)(); _this2.streamControllers[streamId].cancelCall = cancelCapability; _this2.streamControllers[streamId].isClosed = true; comObj.postMessage({ sourceName: sourceName, targetName: targetName, stream: StreamKind.CANCEL, streamId: streamId, reason: wrapReason(reason) }); return cancelCapability.promise; } }, queueingStrategy); } }, { key: "_createStreamSink", value: function _createStreamSink(data) { var self = this; var action = this.actionHandler[data.action]; var streamId = data.streamId; var sourceName = this.sourceName; var targetName = data.sourceName; var comObj = this.comObj; var streamSink = { enqueue: function enqueue(chunk) { var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; var transfers = arguments.length > 2 ? arguments[2] : undefined; if (this.isCancelled) { return; } var lastDesiredSize = this.desiredSize; this.desiredSize -= size; if (lastDesiredSize > 0 && this.desiredSize <= 0) { this.sinkCapability = (0, _util.createPromiseCapability)(); this.ready = this.sinkCapability.promise; } self._postMessage({ sourceName: sourceName, targetName: targetName, stream: StreamKind.ENQUEUE, streamId: streamId, chunk: chunk }, transfers); }, close: function close() { if (this.isCancelled) { return; } this.isCancelled = true; comObj.postMessage({ sourceName: sourceName, targetName: targetName, stream: StreamKind.CLOSE, streamId: streamId }); delete self.streamSinks[streamId]; }, error: function error(reason) { (0, _util.assert)(reason instanceof Error, "error must have a valid reason"); if (this.isCancelled) { return; } this.isCancelled = true; comObj.postMessage({ sourceName: sourceName, targetName: targetName, stream: StreamKind.ERROR, streamId: streamId, reason: wrapReason(reason) }); }, sinkCapability: (0, _util.createPromiseCapability)(), onPull: null, onCancel: null, isCancelled: false, desiredSize: data.desiredSize, ready: null }; streamSink.sinkCapability.resolve(); streamSink.ready = streamSink.sinkCapability.promise; this.streamSinks[streamId] = streamSink; new Promise(function (resolve) { resolve(action(data.data, streamSink)); }).then(function () { comObj.postMessage({ sourceName: sourceName, targetName: targetName, stream: StreamKind.START_COMPLETE, streamId: streamId, success: true }); }, function (reason) { comObj.postMessage({ sourceName: sourceName, targetName: targetName, stream: StreamKind.START_COMPLETE, streamId: streamId, reason: wrapReason(reason) }); }); } }, { key: "_processStreamMessage", value: function _processStreamMessage(data) { var streamId = data.streamId; var sourceName = this.sourceName; var targetName = data.sourceName; var comObj = this.comObj; switch (data.stream) { case StreamKind.START_COMPLETE: if (data.success) { this.streamControllers[streamId].startCall.resolve(); } else { this.streamControllers[streamId].startCall.reject(wrapReason(data.reason)); } break; case StreamKind.PULL_COMPLETE: if (data.success) { this.streamControllers[streamId].pullCall.resolve(); } else { this.streamControllers[streamId].pullCall.reject(wrapReason(data.reason)); } break; case StreamKind.PULL: if (!this.streamSinks[streamId]) { comObj.postMessage({ sourceName: sourceName, targetName: targetName, stream: StreamKind.PULL_COMPLETE, streamId: streamId, success: true }); break; } if (this.streamSinks[streamId].desiredSize <= 0 && data.desiredSize > 0) { this.streamSinks[streamId].sinkCapability.resolve(); } this.streamSinks[streamId].desiredSize = data.desiredSize; var onPull = this.streamSinks[data.streamId].onPull; new Promise(function (resolve) { resolve(onPull && onPull()); }).then(function () { comObj.postMessage({ sourceName: sourceName, targetName: targetName, stream: StreamKind.PULL_COMPLETE, streamId: streamId, success: true }); }, function (reason) { comObj.postMessage({ sourceName: sourceName, targetName: targetName, stream: StreamKind.PULL_COMPLETE, streamId: streamId, reason: wrapReason(reason) }); }); break; case StreamKind.ENQUEUE: (0, _util.assert)(this.streamControllers[streamId], "enqueue should have stream controller"); if (this.streamControllers[streamId].isClosed) { break; } this.streamControllers[streamId].controller.enqueue(data.chunk); break; case StreamKind.CLOSE: (0, _util.assert)(this.streamControllers[streamId], "close should have stream controller"); if (this.streamControllers[streamId].isClosed) { break; } this.streamControllers[streamId].isClosed = true; this.streamControllers[streamId].controller.close(); this._deleteStreamController(streamId); break; case StreamKind.ERROR: (0, _util.assert)(this.streamControllers[streamId], "error should have stream controller"); this.streamControllers[streamId].controller.error(wrapReason(data.reason)); this._deleteStreamController(streamId); break; case StreamKind.CANCEL_COMPLETE: if (data.success) { this.streamControllers[streamId].cancelCall.resolve(); } else { this.streamControllers[streamId].cancelCall.reject(wrapReason(data.reason)); } this._deleteStreamController(streamId); break; case StreamKind.CANCEL: if (!this.streamSinks[streamId]) { break; } var onCancel = this.streamSinks[data.streamId].onCancel; new Promise(function (resolve) { resolve(onCancel && onCancel(wrapReason(data.reason))); }).then(function () { comObj.postMessage({ sourceName: sourceName, targetName: targetName, stream: StreamKind.CANCEL_COMPLETE, streamId: streamId, success: true }); }, function (reason) { comObj.postMessage({ sourceName: sourceName, targetName: targetName, stream: StreamKind.CANCEL_COMPLETE, streamId: streamId, reason: wrapReason(reason) }); }); this.streamSinks[streamId].sinkCapability.reject(wrapReason(data.reason)); this.streamSinks[streamId].isCancelled = true; delete this.streamSinks[streamId]; break; default: throw new Error("Unexpected stream case"); } } }, { key: "_deleteStreamController", value: function () { var _deleteStreamController2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(streamId) { return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return Promise.allSettled([this.streamControllers[streamId].startCall, this.streamControllers[streamId].pullCall, this.streamControllers[streamId].cancelCall].map(function (capability) { return capability && capability.promise; })); case 2: delete this.streamControllers[streamId]; case 3: case "end": return _context.stop(); } } }, _callee, this); })); function _deleteStreamController(_x) { return _deleteStreamController2.apply(this, arguments); } return _deleteStreamController; }() }, { key: "_postMessage", value: function _postMessage(message, transfers) { if (transfers && this.postMessageTransfers) { this.comObj.postMessage(message, transfers); } else { this.comObj.postMessage(message); } } }, { key: "destroy", value: function destroy() { this.comObj.removeEventListener("message", this._onComObjOnMessage); } }]); return MessageHandler; }(); exports.MessageHandler = MessageHandler; /***/ }), /* 144 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Metadata = void 0; var _util = __w_pdfjs_require__(4); var _xml_parser = __w_pdfjs_require__(145); function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var Metadata = /*#__PURE__*/function () { function Metadata(data) { _classCallCheck(this, Metadata); (0, _util.assert)(typeof data === "string", "Metadata: input is not a string"); data = this._repair(data); var parser = new _xml_parser.SimpleXMLParser({ lowerCaseName: true }); var xmlDocument = parser.parseFromString(data); this._metadataMap = new Map(); if (xmlDocument) { this._parse(xmlDocument); } this._data = data; } _createClass(Metadata, [{ key: "_repair", value: function _repair(data) { return data.replace(/^[^<]+/, "").replace(/>\\376\\377([^<]+)/g, function (all, codes) { var bytes = codes.replace(/\\([0-3])([0-7])([0-7])/g, function (code, d1, d2, d3) { return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1); }).replace(/&(amp|apos|gt|lt|quot);/g, function (str, name) { switch (name) { case "amp": return "&"; case "apos": return "'"; case "gt": return ">"; case "lt": return "<"; case "quot": return '"'; } throw new Error("_repair: ".concat(name, " isn't defined.")); }); var chars = ""; for (var i = 0, ii = bytes.length; i < ii; i += 2) { var code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1); if (code >= 32 && code < 127 && code !== 60 && code !== 62 && code !== 38) { chars += String.fromCharCode(code); } else { chars += "&#x" + (0x10000 + code).toString(16).substring(1) + ";"; } } return ">" + chars; }); } }, { key: "_getSequence", value: function _getSequence(entry) { var name = entry.nodeName; if (name !== "rdf:bag" && name !== "rdf:seq" && name !== "rdf:alt") { return null; } return entry.childNodes.filter(function (node) { return node.nodeName === "rdf:li"; }); } }, { key: "_getCreators", value: function _getCreators(entry) { if (entry.nodeName !== "dc:creator") { return false; } if (!entry.hasChildNodes()) { return true; } var seqNode = entry.childNodes[0]; var authors = this._getSequence(seqNode) || []; this._metadataMap.set(entry.nodeName, authors.map(function (node) { return node.textContent.trim(); })); return true; } }, { key: "_parse", value: function _parse(xmlDocument) { var rdf = xmlDocument.documentElement; if (rdf.nodeName !== "rdf:rdf") { rdf = rdf.firstChild; while (rdf && rdf.nodeName !== "rdf:rdf") { rdf = rdf.nextSibling; } } if (!rdf || rdf.nodeName !== "rdf:rdf" || !rdf.hasChildNodes()) { return; } var _iterator = _createForOfIteratorHelper(rdf.childNodes), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var desc = _step.value; if (desc.nodeName !== "rdf:description") { continue; } var _iterator2 = _createForOfIteratorHelper(desc.childNodes), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var entry = _step2.value; var name = entry.nodeName; if (name === "#text") { continue; } if (this._getCreators(entry)) { continue; } this._metadataMap.set(name, entry.textContent.trim()); } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } } }, { key: "getRaw", value: function getRaw() { return this._data; } }, { key: "get", value: function get(name) { var _this$_metadataMap$ge; return (_this$_metadataMap$ge = this._metadataMap.get(name)) !== null && _this$_metadataMap$ge !== void 0 ? _this$_metadataMap$ge : null; } }, { key: "getAll", value: function getAll() { return (0, _util.objectFromEntries)(this._metadataMap); } }, { key: "has", value: function has(name) { return this._metadataMap.has(name); } }]); return Metadata; }(); exports.Metadata = Metadata; /***/ }), /* 145 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", ({ value: true })); exports.XMLParserErrorCode = exports.XMLParserBase = exports.SimpleXMLParser = exports.SimpleDOMNode = void 0; var _util = __w_pdfjs_require__(4); function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var XMLParserErrorCode = { NoError: 0, EndOfDocument: -1, UnterminatedCdat: -2, UnterminatedXmlDeclaration: -3, UnterminatedDoctypeDeclaration: -4, UnterminatedComment: -5, MalformedElement: -6, OutOfMemory: -7, UnterminatedAttributeValue: -8, UnterminatedElement: -9, ElementNeverBegun: -10 }; exports.XMLParserErrorCode = XMLParserErrorCode; function isWhitespace(s, index) { var ch = s[index]; return ch === " " || ch === "\n" || ch === "\r" || ch === "\t"; } function isWhitespaceString(s) { for (var i = 0, ii = s.length; i < ii; i++) { if (!isWhitespace(s, i)) { return false; } } return true; } var XMLParserBase = /*#__PURE__*/function () { function XMLParserBase() { _classCallCheck(this, XMLParserBase); } _createClass(XMLParserBase, [{ key: "_resolveEntities", value: function _resolveEntities(s) { var _this = this; return s.replace(/&([^;]+);/g, function (all, entity) { if (entity.substring(0, 2) === "#x") { return String.fromCodePoint(parseInt(entity.substring(2), 16)); } else if (entity.substring(0, 1) === "#") { return String.fromCodePoint(parseInt(entity.substring(1), 10)); } switch (entity) { case "lt": return "<"; case "gt": return ">"; case "amp": return "&"; case "quot": return '"'; case "apos": return "'"; } return _this.onResolveEntity(entity); }); } }, { key: "_parseContent", value: function _parseContent(s, start) { var attributes = []; var pos = start; function skipWs() { while (pos < s.length && isWhitespace(s, pos)) { ++pos; } } while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "/") { ++pos; } var name = s.substring(start, pos); skipWs(); while (pos < s.length && s[pos] !== ">" && s[pos] !== "/" && s[pos] !== "?") { skipWs(); var attrName = "", attrValue = ""; while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== "=") { attrName += s[pos]; ++pos; } skipWs(); if (s[pos] !== "=") { return null; } ++pos; skipWs(); var attrEndChar = s[pos]; if (attrEndChar !== '"' && attrEndChar !== "'") { return null; } var attrEndIndex = s.indexOf(attrEndChar, ++pos); if (attrEndIndex < 0) { return null; } attrValue = s.substring(pos, attrEndIndex); attributes.push({ name: attrName, value: this._resolveEntities(attrValue) }); pos = attrEndIndex + 1; skipWs(); } return { name: name, attributes: attributes, parsed: pos - start }; } }, { key: "_parseProcessingInstruction", value: function _parseProcessingInstruction(s, start) { var pos = start; function skipWs() { while (pos < s.length && isWhitespace(s, pos)) { ++pos; } } while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "/") { ++pos; } var name = s.substring(start, pos); skipWs(); var attrStart = pos; while (pos < s.length && (s[pos] !== "?" || s[pos + 1] !== ">")) { ++pos; } var value = s.substring(attrStart, pos); return { name: name, value: value, parsed: pos - start }; } }, { key: "parseXml", value: function parseXml(s) { var i = 0; while (i < s.length) { var ch = s[i]; var j = i; if (ch === "<") { ++j; var ch2 = s[j]; var q = void 0; switch (ch2) { case "/": ++j; q = s.indexOf(">", j); if (q < 0) { this.onError(XMLParserErrorCode.UnterminatedElement); return; } this.onEndElement(s.substring(j, q)); j = q + 1; break; case "?": ++j; var pi = this._parseProcessingInstruction(s, j); if (s.substring(j + pi.parsed, j + pi.parsed + 2) !== "?>") { this.onError(XMLParserErrorCode.UnterminatedXmlDeclaration); return; } this.onPi(pi.name, pi.value); j += pi.parsed + 2; break; case "!": if (s.substring(j + 1, j + 3) === "--") { q = s.indexOf("-->", j + 3); if (q < 0) { this.onError(XMLParserErrorCode.UnterminatedComment); return; } this.onComment(s.substring(j + 3, q)); j = q + 3; } else if (s.substring(j + 1, j + 8) === "[CDATA[") { q = s.indexOf("]]>", j + 8); if (q < 0) { this.onError(XMLParserErrorCode.UnterminatedCdat); return; } this.onCdata(s.substring(j + 8, q)); j = q + 3; } else if (s.substring(j + 1, j + 8) === "DOCTYPE") { var q2 = s.indexOf("[", j + 8); var complexDoctype = false; q = s.indexOf(">", j + 8); if (q < 0) { this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration); return; } if (q2 > 0 && q > q2) { q = s.indexOf("]>", j + 8); if (q < 0) { this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration); return; } complexDoctype = true; } var doctypeContent = s.substring(j + 8, q + (complexDoctype ? 1 : 0)); this.onDoctype(doctypeContent); j = q + (complexDoctype ? 2 : 1); } else { this.onError(XMLParserErrorCode.MalformedElement); return; } break; default: var content = this._parseContent(s, j); if (content === null) { this.onError(XMLParserErrorCode.MalformedElement); return; } var isClosed = false; if (s.substring(j + content.parsed, j + content.parsed + 2) === "/>") { isClosed = true; } else if (s.substring(j + content.parsed, j + content.parsed + 1) !== ">") { this.onError(XMLParserErrorCode.UnterminatedElement); return; } this.onBeginElement(content.name, content.attributes, isClosed); j += content.parsed + (isClosed ? 2 : 1); break; } } else { while (j < s.length && s[j] !== "<") { j++; } var text = s.substring(i, j); this.onText(this._resolveEntities(text)); } i = j; } } }, { key: "onResolveEntity", value: function onResolveEntity(name) { return "&".concat(name, ";"); } }, { key: "onPi", value: function onPi(name, value) {} }, { key: "onComment", value: function onComment(text) {} }, { key: "onCdata", value: function onCdata(text) {} }, { key: "onDoctype", value: function onDoctype(doctypeContent) {} }, { key: "onText", value: function onText(text) {} }, { key: "onBeginElement", value: function onBeginElement(name, attributes, isEmpty) {} }, { key: "onEndElement", value: function onEndElement(name) {} }, { key: "onError", value: function onError(code) {} }]); return XMLParserBase; }(); exports.XMLParserBase = XMLParserBase; var SimpleDOMNode = /*#__PURE__*/function () { function SimpleDOMNode(nodeName, nodeValue) { _classCallCheck(this, SimpleDOMNode); this.nodeName = nodeName; this.nodeValue = nodeValue; Object.defineProperty(this, "parentNode", { value: null, writable: true }); } _createClass(SimpleDOMNode, [{ key: "firstChild", get: function get() { return this.childNodes && this.childNodes[0]; } }, { key: "nextSibling", get: function get() { var childNodes = this.parentNode.childNodes; if (!childNodes) { return undefined; } var index = childNodes.indexOf(this); if (index === -1) { return undefined; } return childNodes[index + 1]; } }, { key: "textContent", get: function get() { if (!this.childNodes) { return this.nodeValue || ""; } return this.childNodes.map(function (child) { return child.textContent; }).join(""); } }, { key: "hasChildNodes", value: function hasChildNodes() { return this.childNodes && this.childNodes.length > 0; } }, { key: "searchNode", value: function searchNode(paths, pos) { if (pos >= paths.length) { return this; } var component = paths[pos]; var stack = []; var node = this; while (true) { if (component.name === node.nodeName) { if (component.pos === 0) { var res = node.searchNode(paths, pos + 1); if (res !== null) { return res; } } else if (stack.length === 0) { return null; } else { var _stack$pop = stack.pop(), _stack$pop2 = _slicedToArray(_stack$pop, 1), parent = _stack$pop2[0]; var siblingPos = 0; var _iterator = _createForOfIteratorHelper(parent.childNodes), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var child = _step.value; if (component.name === child.nodeName) { if (siblingPos === component.pos) { return child.searchNode(paths, pos + 1); } siblingPos++; } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } return node.searchNode(paths, pos + 1); } } if (node.childNodes && node.childNodes.length !== 0) { stack.push([node, 0]); node = node.childNodes[0]; } else if (stack.length === 0) { return null; } else { while (stack.length !== 0) { var _stack$pop3 = stack.pop(), _stack$pop4 = _slicedToArray(_stack$pop3, 2), _parent = _stack$pop4[0], currentPos = _stack$pop4[1]; var newPos = currentPos + 1; if (newPos < _parent.childNodes.length) { stack.push([_parent, newPos]); node = _parent.childNodes[newPos]; break; } } if (stack.length === 0) { return null; } } } } }, { key: "dump", value: function dump(buffer) { if (this.nodeName === "#text") { buffer.push((0, _util.encodeToXmlString)(this.nodeValue)); return; } buffer.push("<".concat(this.nodeName)); if (this.attributes) { var _iterator2 = _createForOfIteratorHelper(this.attributes), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var attribute = _step2.value; buffer.push(" ".concat(attribute.name, "=\"").concat((0, _util.encodeToXmlString)(attribute.value), "\"")); } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } } if (this.hasChildNodes()) { buffer.push(">"); var _iterator3 = _createForOfIteratorHelper(this.childNodes), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var child = _step3.value; child.dump(buffer); } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } buffer.push("")); } else if (this.nodeValue) { buffer.push(">".concat((0, _util.encodeToXmlString)(this.nodeValue), "")); } else { buffer.push("/>"); } } }]); return SimpleDOMNode; }(); exports.SimpleDOMNode = SimpleDOMNode; var SimpleXMLParser = /*#__PURE__*/function (_XMLParserBase) { _inherits(SimpleXMLParser, _XMLParserBase); var _super = _createSuper(SimpleXMLParser); function SimpleXMLParser(_ref) { var _this2; var _ref$hasAttributes = _ref.hasAttributes, hasAttributes = _ref$hasAttributes === void 0 ? false : _ref$hasAttributes, _ref$lowerCaseName = _ref.lowerCaseName, lowerCaseName = _ref$lowerCaseName === void 0 ? false : _ref$lowerCaseName; _classCallCheck(this, SimpleXMLParser); _this2 = _super.call(this); _this2._currentFragment = null; _this2._stack = null; _this2._errorCode = XMLParserErrorCode.NoError; _this2._hasAttributes = hasAttributes; _this2._lowerCaseName = lowerCaseName; return _this2; } _createClass(SimpleXMLParser, [{ key: "parseFromString", value: function parseFromString(data) { this._currentFragment = []; this._stack = []; this._errorCode = XMLParserErrorCode.NoError; this.parseXml(data); if (this._errorCode !== XMLParserErrorCode.NoError) { return undefined; } var _this$_currentFragmen = _slicedToArray(this._currentFragment, 1), documentElement = _this$_currentFragmen[0]; if (!documentElement) { return undefined; } return { documentElement: documentElement }; } }, { key: "onText", value: function onText(text) { if (isWhitespaceString(text)) { return; } var node = new SimpleDOMNode("#text", text); this._currentFragment.push(node); } }, { key: "onCdata", value: function onCdata(text) { var node = new SimpleDOMNode("#text", text); this._currentFragment.push(node); } }, { key: "onBeginElement", value: function onBeginElement(name, attributes, isEmpty) { if (this._lowerCaseName) { name = name.toLowerCase(); } var node = new SimpleDOMNode(name); node.childNodes = []; if (this._hasAttributes) { node.attributes = attributes; } this._currentFragment.push(node); if (isEmpty) { return; } this._stack.push(this._currentFragment); this._currentFragment = node.childNodes; } }, { key: "onEndElement", value: function onEndElement(name) { this._currentFragment = this._stack.pop() || []; var lastElement = this._currentFragment[this._currentFragment.length - 1]; if (!lastElement) { return; } for (var i = 0, ii = lastElement.childNodes.length; i < ii; i++) { lastElement.childNodes[i].parentNode = lastElement; } } }, { key: "onError", value: function onError(code) { this._errorCode = code; } }]); return SimpleXMLParser; }(XMLParserBase); exports.SimpleXMLParser = SimpleXMLParser; /***/ }), /* 146 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.OptionalContentConfig = void 0; var _util = __w_pdfjs_require__(4); function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var OptionalContentGroup = function OptionalContentGroup(name, intent) { _classCallCheck(this, OptionalContentGroup); this.visible = true; this.name = name; this.intent = intent; }; var OptionalContentConfig = /*#__PURE__*/function () { function OptionalContentConfig(data) { _classCallCheck(this, OptionalContentConfig); this.name = null; this.creator = null; this._order = null; this._groups = new Map(); if (data === null) { return; } this.name = data.name; this.creator = data.creator; this._order = data.order; var _iterator = _createForOfIteratorHelper(data.groups), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var _group = _step.value; this._groups.set(_group.id, new OptionalContentGroup(_group.name, _group.intent)); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } if (data.baseState === "OFF") { var _iterator2 = _createForOfIteratorHelper(this._groups), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var group = _step2.value; group.visible = false; } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } } var _iterator3 = _createForOfIteratorHelper(data.on), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var on = _step3.value; this._groups.get(on).visible = true; } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } var _iterator4 = _createForOfIteratorHelper(data.off), _step4; try { for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { var off = _step4.value; this._groups.get(off).visible = false; } } catch (err) { _iterator4.e(err); } finally { _iterator4.f(); } } _createClass(OptionalContentConfig, [{ key: "isVisible", value: function isVisible(group) { if (group.type === "OCG") { if (!this._groups.has(group.id)) { (0, _util.warn)("Optional content group not found: ".concat(group.id)); return true; } return this._groups.get(group.id).visible; } else if (group.type === "OCMD") { if (group.expression) { (0, _util.warn)("Visibility expression not supported yet."); } if (!group.policy || group.policy === "AnyOn") { var _iterator5 = _createForOfIteratorHelper(group.ids), _step5; try { for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { var id = _step5.value; if (!this._groups.has(id)) { (0, _util.warn)("Optional content group not found: ".concat(id)); return true; } if (this._groups.get(id).visible) { return true; } } } catch (err) { _iterator5.e(err); } finally { _iterator5.f(); } return false; } else if (group.policy === "AllOn") { var _iterator6 = _createForOfIteratorHelper(group.ids), _step6; try { for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) { var _id = _step6.value; if (!this._groups.has(_id)) { (0, _util.warn)("Optional content group not found: ".concat(_id)); return true; } if (!this._groups.get(_id).visible) { return false; } } } catch (err) { _iterator6.e(err); } finally { _iterator6.f(); } return true; } else if (group.policy === "AnyOff") { var _iterator7 = _createForOfIteratorHelper(group.ids), _step7; try { for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) { var _id2 = _step7.value; if (!this._groups.has(_id2)) { (0, _util.warn)("Optional content group not found: ".concat(_id2)); return true; } if (!this._groups.get(_id2).visible) { return true; } } } catch (err) { _iterator7.e(err); } finally { _iterator7.f(); } return false; } else if (group.policy === "AllOff") { var _iterator8 = _createForOfIteratorHelper(group.ids), _step8; try { for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) { var _id3 = _step8.value; if (!this._groups.has(_id3)) { (0, _util.warn)("Optional content group not found: ".concat(_id3)); return true; } if (this._groups.get(_id3).visible) { return false; } } } catch (err) { _iterator8.e(err); } finally { _iterator8.f(); } return true; } (0, _util.warn)("Unknown optional content policy ".concat(group.policy, ".")); return true; } (0, _util.warn)("Unknown group type ".concat(group.type, ".")); return true; } }, { key: "setVisibility", value: function setVisibility(id) { var visible = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; if (!this._groups.has(id)) { (0, _util.warn)("Optional content group not found: ".concat(id)); return; } this._groups.get(id).visible = !!visible; } }, { key: "getOrder", value: function getOrder() { if (!this._groups.size) { return null; } if (this._order) { return this._order.slice(); } return Array.from(this._groups.keys()); } }, { key: "getGroups", value: function getGroups() { if (!this._groups.size) { return null; } return (0, _util.objectFromEntries)(this._groups); } }, { key: "getGroup", value: function getGroup(id) { return this._groups.get(id) || null; } }]); return OptionalContentConfig; }(); exports.OptionalContentConfig = OptionalContentConfig; /***/ }), /* 147 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFDataTransportStream = void 0; var _regenerator = _interopRequireDefault(__w_pdfjs_require__(2)); var _util = __w_pdfjs_require__(4); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var PDFDataTransportStream = /*#__PURE__*/function () { function PDFDataTransportStream(params, pdfDataRangeTransport) { var _this = this; _classCallCheck(this, PDFDataTransportStream); (0, _util.assert)(pdfDataRangeTransport, 'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.'); this._queuedChunks = []; this._progressiveDone = params.progressiveDone || false; var initialData = params.initialData; if ((initialData === null || initialData === void 0 ? void 0 : initialData.length) > 0) { var buffer = new Uint8Array(initialData).buffer; this._queuedChunks.push(buffer); } this._pdfDataRangeTransport = pdfDataRangeTransport; this._isStreamingSupported = !params.disableStream; this._isRangeSupported = !params.disableRange; this._contentLength = params.length; this._fullRequestReader = null; this._rangeReaders = []; this._pdfDataRangeTransport.addRangeListener(function (begin, chunk) { _this._onReceiveData({ begin: begin, chunk: chunk }); }); this._pdfDataRangeTransport.addProgressListener(function (loaded, total) { _this._onProgress({ loaded: loaded, total: total }); }); this._pdfDataRangeTransport.addProgressiveReadListener(function (chunk) { _this._onReceiveData({ chunk: chunk }); }); this._pdfDataRangeTransport.addProgressiveDoneListener(function () { _this._onProgressiveDone(); }); this._pdfDataRangeTransport.transportReady(); } _createClass(PDFDataTransportStream, [{ key: "_onReceiveData", value: function _onReceiveData(args) { var buffer = new Uint8Array(args.chunk).buffer; if (args.begin === undefined) { if (this._fullRequestReader) { this._fullRequestReader._enqueue(buffer); } else { this._queuedChunks.push(buffer); } } else { var found = this._rangeReaders.some(function (rangeReader) { if (rangeReader._begin !== args.begin) { return false; } rangeReader._enqueue(buffer); return true; }); (0, _util.assert)(found, "_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found."); } } }, { key: "_progressiveDataLength", get: function get() { var _this$_fullRequestRea, _this$_fullRequestRea2; return (_this$_fullRequestRea = (_this$_fullRequestRea2 = this._fullRequestReader) === null || _this$_fullRequestRea2 === void 0 ? void 0 : _this$_fullRequestRea2._loaded) !== null && _this$_fullRequestRea !== void 0 ? _this$_fullRequestRea : 0; } }, { key: "_onProgress", value: function _onProgress(evt) { if (evt.total === undefined) { var firstReader = this._rangeReaders[0]; if (firstReader !== null && firstReader !== void 0 && firstReader.onProgress) { firstReader.onProgress({ loaded: evt.loaded }); } } else { var fullReader = this._fullRequestReader; if (fullReader !== null && fullReader !== void 0 && fullReader.onProgress) { fullReader.onProgress({ loaded: evt.loaded, total: evt.total }); } } } }, { key: "_onProgressiveDone", value: function _onProgressiveDone() { if (this._fullRequestReader) { this._fullRequestReader.progressiveDone(); } this._progressiveDone = true; } }, { key: "_removeRangeReader", value: function _removeRangeReader(reader) { var i = this._rangeReaders.indexOf(reader); if (i >= 0) { this._rangeReaders.splice(i, 1); } } }, { key: "getFullReader", value: function getFullReader() { (0, _util.assert)(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called once."); var queuedChunks = this._queuedChunks; this._queuedChunks = null; return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone); } }, { key: "getRangeReader", value: function getRangeReader(begin, end) { if (end <= this._progressiveDataLength) { return null; } var reader = new PDFDataTransportStreamRangeReader(this, begin, end); this._pdfDataRangeTransport.requestDataRange(begin, end); this._rangeReaders.push(reader); return reader; } }, { key: "cancelAllRequests", value: function cancelAllRequests(reason) { if (this._fullRequestReader) { this._fullRequestReader.cancel(reason); } var readers = this._rangeReaders.slice(0); readers.forEach(function (rangeReader) { rangeReader.cancel(reason); }); this._pdfDataRangeTransport.abort(); } }]); return PDFDataTransportStream; }(); exports.PDFDataTransportStream = PDFDataTransportStream; var PDFDataTransportStreamReader = /*#__PURE__*/function () { function PDFDataTransportStreamReader(stream, queuedChunks) { var progressiveDone = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; _classCallCheck(this, PDFDataTransportStreamReader); this._stream = stream; this._done = progressiveDone || false; this._filename = null; this._queuedChunks = queuedChunks || []; this._loaded = 0; var _iterator = _createForOfIteratorHelper(this._queuedChunks), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var chunk = _step.value; this._loaded += chunk.byteLength; } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } this._requests = []; this._headersReady = Promise.resolve(); stream._fullRequestReader = this; this.onProgress = null; } _createClass(PDFDataTransportStreamReader, [{ key: "_enqueue", value: function _enqueue(chunk) { if (this._done) { return; } if (this._requests.length > 0) { var requestCapability = this._requests.shift(); requestCapability.resolve({ value: chunk, done: false }); } else { this._queuedChunks.push(chunk); } this._loaded += chunk.byteLength; } }, { key: "headersReady", get: function get() { return this._headersReady; } }, { key: "filename", get: function get() { return this._filename; } }, { key: "isRangeSupported", get: function get() { return this._stream._isRangeSupported; } }, { key: "isStreamingSupported", get: function get() { return this._stream._isStreamingSupported; } }, { key: "contentLength", get: function get() { return this._stream._contentLength; } }, { key: "read", value: function () { var _read = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() { var chunk, requestCapability; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (!(this._queuedChunks.length > 0)) { _context.next = 3; break; } chunk = this._queuedChunks.shift(); return _context.abrupt("return", { value: chunk, done: false }); case 3: if (!this._done) { _context.next = 5; break; } return _context.abrupt("return", { value: undefined, done: true }); case 5: requestCapability = (0, _util.createPromiseCapability)(); this._requests.push(requestCapability); return _context.abrupt("return", requestCapability.promise); case 8: case "end": return _context.stop(); } } }, _callee, this); })); function read() { return _read.apply(this, arguments); } return read; }() }, { key: "cancel", value: function cancel(reason) { this._done = true; this._requests.forEach(function (requestCapability) { requestCapability.resolve({ value: undefined, done: true }); }); this._requests = []; } }, { key: "progressiveDone", value: function progressiveDone() { if (this._done) { return; } this._done = true; } }]); return PDFDataTransportStreamReader; }(); var PDFDataTransportStreamRangeReader = /*#__PURE__*/function () { function PDFDataTransportStreamRangeReader(stream, begin, end) { _classCallCheck(this, PDFDataTransportStreamRangeReader); this._stream = stream; this._begin = begin; this._end = end; this._queuedChunk = null; this._requests = []; this._done = false; this.onProgress = null; } _createClass(PDFDataTransportStreamRangeReader, [{ key: "_enqueue", value: function _enqueue(chunk) { if (this._done) { return; } if (this._requests.length === 0) { this._queuedChunk = chunk; } else { var requestsCapability = this._requests.shift(); requestsCapability.resolve({ value: chunk, done: false }); this._requests.forEach(function (requestCapability) { requestCapability.resolve({ value: undefined, done: true }); }); this._requests = []; } this._done = true; this._stream._removeRangeReader(this); } }, { key: "isStreamingSupported", get: function get() { return false; } }, { key: "read", value: function () { var _read2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { var chunk, requestCapability; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: if (!this._queuedChunk) { _context2.next = 4; break; } chunk = this._queuedChunk; this._queuedChunk = null; return _context2.abrupt("return", { value: chunk, done: false }); case 4: if (!this._done) { _context2.next = 6; break; } return _context2.abrupt("return", { value: undefined, done: true }); case 6: requestCapability = (0, _util.createPromiseCapability)(); this._requests.push(requestCapability); return _context2.abrupt("return", requestCapability.promise); case 9: case "end": return _context2.stop(); } } }, _callee2, this); })); function read() { return _read2.apply(this, arguments); } return read; }() }, { key: "cancel", value: function cancel(reason) { this._done = true; this._requests.forEach(function (requestCapability) { requestCapability.resolve({ value: undefined, done: true }); }); this._requests = []; this._stream._removeRangeReader(this); } }]); return PDFDataTransportStreamRangeReader; }(); /***/ }), /* 148 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.WebGLContext = void 0; var _util = __w_pdfjs_require__(4); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var WebGLContext = /*#__PURE__*/function () { function WebGLContext(_ref) { var _ref$enable = _ref.enable, enable = _ref$enable === void 0 ? false : _ref$enable; _classCallCheck(this, WebGLContext); this._enabled = enable === true; } _createClass(WebGLContext, [{ key: "isEnabled", get: function get() { var enabled = this._enabled; if (enabled) { enabled = WebGLUtils.tryInitGL(); } return (0, _util.shadow)(this, "isEnabled", enabled); } }, { key: "composeSMask", value: function composeSMask(_ref2) { var layer = _ref2.layer, mask = _ref2.mask, properties = _ref2.properties; return WebGLUtils.composeSMask(layer, mask, properties); } }, { key: "drawFigures", value: function drawFigures(_ref3) { var width = _ref3.width, height = _ref3.height, backgroundColor = _ref3.backgroundColor, figures = _ref3.figures, context = _ref3.context; return WebGLUtils.drawFigures(width, height, backgroundColor, figures, context); } }, { key: "clear", value: function clear() { WebGLUtils.cleanup(); } }]); return WebGLContext; }(); exports.WebGLContext = WebGLContext; var WebGLUtils = function WebGLUtilsClosure() { function loadShader(gl, code, shaderType) { var shader = gl.createShader(shaderType); gl.shaderSource(shader, code); gl.compileShader(shader); var compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS); if (!compiled) { var errorMsg = gl.getShaderInfoLog(shader); throw new Error("Error during shader compilation: " + errorMsg); } return shader; } function createVertexShader(gl, code) { return loadShader(gl, code, gl.VERTEX_SHADER); } function createFragmentShader(gl, code) { return loadShader(gl, code, gl.FRAGMENT_SHADER); } function createProgram(gl, shaders) { var program = gl.createProgram(); for (var i = 0, ii = shaders.length; i < ii; ++i) { gl.attachShader(program, shaders[i]); } gl.linkProgram(program); var linked = gl.getProgramParameter(program, gl.LINK_STATUS); if (!linked) { var errorMsg = gl.getProgramInfoLog(program); throw new Error("Error during program linking: " + errorMsg); } return program; } function createTexture(gl, image, textureId) { gl.activeTexture(textureId); var texture = gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D, texture); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image); return texture; } var currentGL, currentCanvas; function generateGL() { if (currentGL) { return; } currentCanvas = document.createElement("canvas"); currentGL = currentCanvas.getContext("webgl", { premultipliedalpha: false }); } var smaskVertexShaderCode = "\ attribute vec2 a_position; \ attribute vec2 a_texCoord; \ \ uniform vec2 u_resolution; \ \ varying vec2 v_texCoord; \ \ void main() { \ vec2 clipSpace = (a_position / u_resolution) * 2.0 - 1.0; \ gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1); \ \ v_texCoord = a_texCoord; \ } "; var smaskFragmentShaderCode = "\ precision mediump float; \ \ uniform vec4 u_backdrop; \ uniform int u_subtype; \ uniform sampler2D u_image; \ uniform sampler2D u_mask; \ \ varying vec2 v_texCoord; \ \ void main() { \ vec4 imageColor = texture2D(u_image, v_texCoord); \ vec4 maskColor = texture2D(u_mask, v_texCoord); \ if (u_backdrop.a > 0.0) { \ maskColor.rgb = maskColor.rgb * maskColor.a + \ u_backdrop.rgb * (1.0 - maskColor.a); \ } \ float lum; \ if (u_subtype == 0) { \ lum = maskColor.a; \ } else { \ lum = maskColor.r * 0.3 + maskColor.g * 0.59 + \ maskColor.b * 0.11; \ } \ imageColor.a *= lum; \ imageColor.rgb *= imageColor.a; \ gl_FragColor = imageColor; \ } "; var smaskCache = null; function initSmaskGL() { generateGL(); var canvas = currentCanvas; currentCanvas = null; var gl = currentGL; currentGL = null; var vertexShader = createVertexShader(gl, smaskVertexShaderCode); var fragmentShader = createFragmentShader(gl, smaskFragmentShaderCode); var program = createProgram(gl, [vertexShader, fragmentShader]); gl.useProgram(program); var cache = {}; cache.gl = gl; cache.canvas = canvas; cache.resolutionLocation = gl.getUniformLocation(program, "u_resolution"); cache.positionLocation = gl.getAttribLocation(program, "a_position"); cache.backdropLocation = gl.getUniformLocation(program, "u_backdrop"); cache.subtypeLocation = gl.getUniformLocation(program, "u_subtype"); var texCoordLocation = gl.getAttribLocation(program, "a_texCoord"); var texLayerLocation = gl.getUniformLocation(program, "u_image"); var texMaskLocation = gl.getUniformLocation(program, "u_mask"); var texCoordBuffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer); gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0]), gl.STATIC_DRAW); gl.enableVertexAttribArray(texCoordLocation); gl.vertexAttribPointer(texCoordLocation, 2, gl.FLOAT, false, 0, 0); gl.uniform1i(texLayerLocation, 0); gl.uniform1i(texMaskLocation, 1); smaskCache = cache; } function composeSMask(layer, mask, properties) { var width = layer.width, height = layer.height; if (!smaskCache) { initSmaskGL(); } var cache = smaskCache, canvas = cache.canvas, gl = cache.gl; canvas.width = width; canvas.height = height; gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); gl.uniform2f(cache.resolutionLocation, width, height); if (properties.backdrop) { gl.uniform4f(cache.resolutionLocation, properties.backdrop[0], properties.backdrop[1], properties.backdrop[2], 1); } else { gl.uniform4f(cache.resolutionLocation, 0, 0, 0, 0); } gl.uniform1i(cache.subtypeLocation, properties.subtype === "Luminosity" ? 1 : 0); var texture = createTexture(gl, layer, gl.TEXTURE0); var maskTexture = createTexture(gl, mask, gl.TEXTURE1); var buffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, buffer); gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0, 0, width, 0, 0, height, 0, height, width, 0, width, height]), gl.STATIC_DRAW); gl.enableVertexAttribArray(cache.positionLocation); gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0); gl.clearColor(0, 0, 0, 0); gl.enable(gl.BLEND); gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); gl.clear(gl.COLOR_BUFFER_BIT); gl.drawArrays(gl.TRIANGLES, 0, 6); gl.flush(); gl.deleteTexture(texture); gl.deleteTexture(maskTexture); gl.deleteBuffer(buffer); return canvas; } var figuresVertexShaderCode = "\ attribute vec2 a_position; \ attribute vec3 a_color; \ \ uniform vec2 u_resolution; \ uniform vec2 u_scale; \ uniform vec2 u_offset; \ \ varying vec4 v_color; \ \ void main() { \ vec2 position = (a_position + u_offset) * u_scale; \ vec2 clipSpace = (position / u_resolution) * 2.0 - 1.0; \ gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1); \ \ v_color = vec4(a_color / 255.0, 1.0); \ } "; var figuresFragmentShaderCode = "\ precision mediump float; \ \ varying vec4 v_color; \ \ void main() { \ gl_FragColor = v_color; \ } "; var figuresCache = null; function initFiguresGL() { generateGL(); var canvas = currentCanvas; currentCanvas = null; var gl = currentGL; currentGL = null; var vertexShader = createVertexShader(gl, figuresVertexShaderCode); var fragmentShader = createFragmentShader(gl, figuresFragmentShaderCode); var program = createProgram(gl, [vertexShader, fragmentShader]); gl.useProgram(program); var cache = {}; cache.gl = gl; cache.canvas = canvas; cache.resolutionLocation = gl.getUniformLocation(program, "u_resolution"); cache.scaleLocation = gl.getUniformLocation(program, "u_scale"); cache.offsetLocation = gl.getUniformLocation(program, "u_offset"); cache.positionLocation = gl.getAttribLocation(program, "a_position"); cache.colorLocation = gl.getAttribLocation(program, "a_color"); figuresCache = cache; } function drawFigures(width, height, backgroundColor, figures, context) { if (!figuresCache) { initFiguresGL(); } var cache = figuresCache, canvas = cache.canvas, gl = cache.gl; canvas.width = width; canvas.height = height; gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); gl.uniform2f(cache.resolutionLocation, width, height); var count = 0; for (var i = 0, ii = figures.length; i < ii; i++) { switch (figures[i].type) { case "lattice": var rows = figures[i].coords.length / figures[i].verticesPerRow | 0; count += (rows - 1) * (figures[i].verticesPerRow - 1) * 6; break; case "triangles": count += figures[i].coords.length; break; } } var coords = new Float32Array(count * 2); var colors = new Uint8Array(count * 3); var coordsMap = context.coords, colorsMap = context.colors; var pIndex = 0, cIndex = 0; for (var _i = 0, _ii = figures.length; _i < _ii; _i++) { var figure = figures[_i], ps = figure.coords, cs = figure.colors; switch (figure.type) { case "lattice": var cols = figure.verticesPerRow; var _rows = ps.length / cols | 0; for (var row = 1; row < _rows; row++) { var offset = row * cols + 1; for (var col = 1; col < cols; col++, offset++) { coords[pIndex] = coordsMap[ps[offset - cols - 1]]; coords[pIndex + 1] = coordsMap[ps[offset - cols - 1] + 1]; coords[pIndex + 2] = coordsMap[ps[offset - cols]]; coords[pIndex + 3] = coordsMap[ps[offset - cols] + 1]; coords[pIndex + 4] = coordsMap[ps[offset - 1]]; coords[pIndex + 5] = coordsMap[ps[offset - 1] + 1]; colors[cIndex] = colorsMap[cs[offset - cols - 1]]; colors[cIndex + 1] = colorsMap[cs[offset - cols - 1] + 1]; colors[cIndex + 2] = colorsMap[cs[offset - cols - 1] + 2]; colors[cIndex + 3] = colorsMap[cs[offset - cols]]; colors[cIndex + 4] = colorsMap[cs[offset - cols] + 1]; colors[cIndex + 5] = colorsMap[cs[offset - cols] + 2]; colors[cIndex + 6] = colorsMap[cs[offset - 1]]; colors[cIndex + 7] = colorsMap[cs[offset - 1] + 1]; colors[cIndex + 8] = colorsMap[cs[offset - 1] + 2]; coords[pIndex + 6] = coords[pIndex + 2]; coords[pIndex + 7] = coords[pIndex + 3]; coords[pIndex + 8] = coords[pIndex + 4]; coords[pIndex + 9] = coords[pIndex + 5]; coords[pIndex + 10] = coordsMap[ps[offset]]; coords[pIndex + 11] = coordsMap[ps[offset] + 1]; colors[cIndex + 9] = colors[cIndex + 3]; colors[cIndex + 10] = colors[cIndex + 4]; colors[cIndex + 11] = colors[cIndex + 5]; colors[cIndex + 12] = colors[cIndex + 6]; colors[cIndex + 13] = colors[cIndex + 7]; colors[cIndex + 14] = colors[cIndex + 8]; colors[cIndex + 15] = colorsMap[cs[offset]]; colors[cIndex + 16] = colorsMap[cs[offset] + 1]; colors[cIndex + 17] = colorsMap[cs[offset] + 2]; pIndex += 12; cIndex += 18; } } break; case "triangles": for (var j = 0, jj = ps.length; j < jj; j++) { coords[pIndex] = coordsMap[ps[j]]; coords[pIndex + 1] = coordsMap[ps[j] + 1]; colors[cIndex] = colorsMap[cs[j]]; colors[cIndex + 1] = colorsMap[cs[j] + 1]; colors[cIndex + 2] = colorsMap[cs[j] + 2]; pIndex += 2; cIndex += 3; } break; } } if (backgroundColor) { gl.clearColor(backgroundColor[0] / 255, backgroundColor[1] / 255, backgroundColor[2] / 255, 1.0); } else { gl.clearColor(0, 0, 0, 0); } gl.clear(gl.COLOR_BUFFER_BIT); var coordsBuffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, coordsBuffer); gl.bufferData(gl.ARRAY_BUFFER, coords, gl.STATIC_DRAW); gl.enableVertexAttribArray(cache.positionLocation); gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0); var colorsBuffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, colorsBuffer); gl.bufferData(gl.ARRAY_BUFFER, colors, gl.STATIC_DRAW); gl.enableVertexAttribArray(cache.colorLocation); gl.vertexAttribPointer(cache.colorLocation, 3, gl.UNSIGNED_BYTE, false, 0, 0); gl.uniform2f(cache.scaleLocation, context.scaleX, context.scaleY); gl.uniform2f(cache.offsetLocation, context.offsetX, context.offsetY); gl.drawArrays(gl.TRIANGLES, 0, count); gl.flush(); gl.deleteBuffer(coordsBuffer); gl.deleteBuffer(colorsBuffer); return canvas; } return { tryInitGL: function tryInitGL() { try { generateGL(); return !!currentGL; } catch (ex) {} return false; }, composeSMask: composeSMask, drawFigures: drawFigures, cleanup: function cleanup() { var _smaskCache, _figuresCache; if ((_smaskCache = smaskCache) !== null && _smaskCache !== void 0 && _smaskCache.canvas) { smaskCache.canvas.width = 0; smaskCache.canvas.height = 0; } if ((_figuresCache = figuresCache) !== null && _figuresCache !== void 0 && _figuresCache.canvas) { figuresCache.canvas.width = 0; figuresCache.canvas.height = 0; } smaskCache = null; figuresCache = null; } }; }(); /***/ }), /* 149 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", ({ value: true })); exports.AnnotationLayer = void 0; var _display_utils = __w_pdfjs_require__(1); var _util = __w_pdfjs_require__(4); var _annotation_storage = __w_pdfjs_require__(138); var _scripting_utils = __w_pdfjs_require__(150); function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var AnnotationElementFactory = /*#__PURE__*/function () { function AnnotationElementFactory() { _classCallCheck(this, AnnotationElementFactory); } _createClass(AnnotationElementFactory, null, [{ key: "create", value: function create(parameters) { var subtype = parameters.data.annotationType; switch (subtype) { case _util.AnnotationType.LINK: return new LinkAnnotationElement(parameters); case _util.AnnotationType.TEXT: return new TextAnnotationElement(parameters); case _util.AnnotationType.WIDGET: var fieldType = parameters.data.fieldType; switch (fieldType) { case "Tx": return new TextWidgetAnnotationElement(parameters); case "Btn": if (parameters.data.radioButton) { return new RadioButtonWidgetAnnotationElement(parameters); } else if (parameters.data.checkBox) { return new CheckboxWidgetAnnotationElement(parameters); } return new PushButtonWidgetAnnotationElement(parameters); case "Ch": return new ChoiceWidgetAnnotationElement(parameters); } return new WidgetAnnotationElement(parameters); case _util.AnnotationType.POPUP: return new PopupAnnotationElement(parameters); case _util.AnnotationType.FREETEXT: return new FreeTextAnnotationElement(parameters); case _util.AnnotationType.LINE: return new LineAnnotationElement(parameters); case _util.AnnotationType.SQUARE: return new SquareAnnotationElement(parameters); case _util.AnnotationType.CIRCLE: return new CircleAnnotationElement(parameters); case _util.AnnotationType.POLYLINE: return new PolylineAnnotationElement(parameters); case _util.AnnotationType.CARET: return new CaretAnnotationElement(parameters); case _util.AnnotationType.INK: return new InkAnnotationElement(parameters); case _util.AnnotationType.POLYGON: return new PolygonAnnotationElement(parameters); case _util.AnnotationType.HIGHLIGHT: return new HighlightAnnotationElement(parameters); case _util.AnnotationType.UNDERLINE: return new UnderlineAnnotationElement(parameters); case _util.AnnotationType.SQUIGGLY: return new SquigglyAnnotationElement(parameters); case _util.AnnotationType.STRIKEOUT: return new StrikeOutAnnotationElement(parameters); case _util.AnnotationType.STAMP: return new StampAnnotationElement(parameters); case _util.AnnotationType.FILEATTACHMENT: return new FileAttachmentAnnotationElement(parameters); default: return new AnnotationElement(parameters); } } }]); return AnnotationElementFactory; }(); var AnnotationElement = /*#__PURE__*/function () { function AnnotationElement(parameters) { var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, _ref$isRenderable = _ref.isRenderable, isRenderable = _ref$isRenderable === void 0 ? false : _ref$isRenderable, _ref$ignoreBorder = _ref.ignoreBorder, ignoreBorder = _ref$ignoreBorder === void 0 ? false : _ref$ignoreBorder, _ref$createQuadrilate = _ref.createQuadrilaterals, createQuadrilaterals = _ref$createQuadrilate === void 0 ? false : _ref$createQuadrilate; _classCallCheck(this, AnnotationElement); this.isRenderable = isRenderable; this.data = parameters.data; this.layer = parameters.layer; this.page = parameters.page; this.viewport = parameters.viewport; this.linkService = parameters.linkService; this.downloadManager = parameters.downloadManager; this.imageResourcesPath = parameters.imageResourcesPath; this.renderInteractiveForms = parameters.renderInteractiveForms; this.svgFactory = parameters.svgFactory; this.annotationStorage = parameters.annotationStorage; this.enableScripting = parameters.enableScripting; this.hasJSActions = parameters.hasJSActions; this._mouseState = parameters.mouseState; if (isRenderable) { this.container = this._createContainer(ignoreBorder); } if (createQuadrilaterals) { this.quadrilaterals = this._createQuadrilaterals(ignoreBorder); } } _createClass(AnnotationElement, [{ key: "_createContainer", value: function _createContainer() { var ignoreBorder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var data = this.data, page = this.page, viewport = this.viewport; var container = document.createElement("section"); var width = data.rect[2] - data.rect[0]; var height = data.rect[3] - data.rect[1]; container.setAttribute("data-annotation-id", data.id); var rect = _util.Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]); container.style.transform = "matrix(".concat(viewport.transform.join(","), ")"); container.style.transformOrigin = "".concat(-rect[0], "px ").concat(-rect[1], "px"); if (!ignoreBorder && data.borderStyle.width > 0) { container.style.borderWidth = "".concat(data.borderStyle.width, "px"); if (data.borderStyle.style !== _util.AnnotationBorderStyleType.UNDERLINE) { width = width - 2 * data.borderStyle.width; height = height - 2 * data.borderStyle.width; } var horizontalRadius = data.borderStyle.horizontalCornerRadius; var verticalRadius = data.borderStyle.verticalCornerRadius; if (horizontalRadius > 0 || verticalRadius > 0) { var radius = "".concat(horizontalRadius, "px / ").concat(verticalRadius, "px"); container.style.borderRadius = radius; } switch (data.borderStyle.style) { case _util.AnnotationBorderStyleType.SOLID: container.style.borderStyle = "solid"; break; case _util.AnnotationBorderStyleType.DASHED: container.style.borderStyle = "dashed"; break; case _util.AnnotationBorderStyleType.BEVELED: (0, _util.warn)("Unimplemented border style: beveled"); break; case _util.AnnotationBorderStyleType.INSET: (0, _util.warn)("Unimplemented border style: inset"); break; case _util.AnnotationBorderStyleType.UNDERLINE: container.style.borderBottomStyle = "solid"; break; default: break; } if (data.color) { container.style.borderColor = _util.Util.makeHexColor(data.color[0] | 0, data.color[1] | 0, data.color[2] | 0); } else { container.style.borderWidth = 0; } } container.style.left = "".concat(rect[0], "px"); container.style.top = "".concat(rect[1], "px"); container.style.width = "".concat(width, "px"); container.style.height = "".concat(height, "px"); return container; } }, { key: "_createQuadrilaterals", value: function _createQuadrilaterals() { var ignoreBorder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; if (!this.data.quadPoints) { return null; } var quadrilaterals = []; var savedRect = this.data.rect; var _iterator = _createForOfIteratorHelper(this.data.quadPoints), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var quadPoint = _step.value; this.data.rect = [quadPoint[2].x, quadPoint[2].y, quadPoint[1].x, quadPoint[1].y]; quadrilaterals.push(this._createContainer(ignoreBorder)); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } this.data.rect = savedRect; return quadrilaterals; } }, { key: "_createPopup", value: function _createPopup(trigger, data) { var container = this.container; if (this.quadrilaterals) { trigger = trigger || this.quadrilaterals; container = this.quadrilaterals[0]; } if (!trigger) { trigger = document.createElement("div"); trigger.style.height = container.style.height; trigger.style.width = container.style.width; container.appendChild(trigger); } var popupElement = new PopupElement({ container: container, trigger: trigger, color: data.color, title: data.title, modificationDate: data.modificationDate, contents: data.contents, hideWrapper: true }); var popup = popupElement.render(); popup.style.left = container.style.width; container.appendChild(popup); } }, { key: "_renderQuadrilaterals", value: function _renderQuadrilaterals(className) { this.quadrilaterals.forEach(function (quadrilateral) { quadrilateral.className = className; }); return this.quadrilaterals; } }, { key: "render", value: function render() { (0, _util.unreachable)("Abstract method `AnnotationElement.render` called"); } }]); return AnnotationElement; }(); var LinkAnnotationElement = /*#__PURE__*/function (_AnnotationElement) { _inherits(LinkAnnotationElement, _AnnotationElement); var _super = _createSuper(LinkAnnotationElement); function LinkAnnotationElement(parameters) { _classCallCheck(this, LinkAnnotationElement); var isRenderable = !!(parameters.data.url || parameters.data.dest || parameters.data.action || parameters.data.isTooltipOnly || parameters.data.actions && (parameters.data.actions.Action || parameters.data.actions["Mouse Up"] || parameters.data.actions["Mouse Down"])); return _super.call(this, parameters, { isRenderable: isRenderable, createQuadrilaterals: true }); } _createClass(LinkAnnotationElement, [{ key: "render", value: function render() { var data = this.data, linkService = this.linkService; var link = document.createElement("a"); if (data.url) { (0, _display_utils.addLinkAttributes)(link, { url: data.url, target: data.newWindow ? _display_utils.LinkTarget.BLANK : linkService.externalLinkTarget, rel: linkService.externalLinkRel, enabled: linkService.externalLinkEnabled }); } else if (data.action) { this._bindNamedAction(link, data.action); } else if (data.dest) { this._bindLink(link, data.dest); } else if (data.actions && (data.actions.Action || data.actions["Mouse Up"] || data.actions["Mouse Down"]) && this.enableScripting && this.hasJSActions) { this._bindJSAction(link, data); } else { this._bindLink(link, ""); } if (this.quadrilaterals) { return this._renderQuadrilaterals("linkAnnotation").map(function (quadrilateral, index) { var linkElement = index === 0 ? link : link.cloneNode(); quadrilateral.appendChild(linkElement); return quadrilateral; }); } this.container.className = "linkAnnotation"; this.container.appendChild(link); return this.container; } }, { key: "_bindLink", value: function _bindLink(link, destination) { var _this = this; link.href = this.linkService.getDestinationHash(destination); link.onclick = function () { if (destination) { _this.linkService.goToDestination(destination); } return false; }; if (destination || destination === "") { link.className = "internalLink"; } } }, { key: "_bindNamedAction", value: function _bindNamedAction(link, action) { var _this2 = this; link.href = this.linkService.getAnchorUrl(""); link.onclick = function () { _this2.linkService.executeNamedAction(action); return false; }; link.className = "internalLink"; } }, { key: "_bindJSAction", value: function _bindJSAction(link, data) { var _this3 = this; link.href = this.linkService.getAnchorUrl(""); var map = new Map([["Action", "onclick"], ["Mouse Up", "onmouseup"], ["Mouse Down", "onmousedown"]]); var _loop = function _loop() { var name = _Object$keys[_i]; var jsName = map.get(name); if (!jsName) { return "continue"; } link[jsName] = function () { var _this3$linkService$ev; (_this3$linkService$ev = _this3.linkService.eventBus) === null || _this3$linkService$ev === void 0 ? void 0 : _this3$linkService$ev.dispatch("dispatcheventinsandbox", { source: _this3, detail: { id: data.id, name: name } }); return false; }; }; for (var _i = 0, _Object$keys = Object.keys(data.actions); _i < _Object$keys.length; _i++) { var _ret = _loop(); if (_ret === "continue") continue; } link.className = "internalLink"; } }]); return LinkAnnotationElement; }(AnnotationElement); var TextAnnotationElement = /*#__PURE__*/function (_AnnotationElement2) { _inherits(TextAnnotationElement, _AnnotationElement2); var _super2 = _createSuper(TextAnnotationElement); function TextAnnotationElement(parameters) { _classCallCheck(this, TextAnnotationElement); var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); return _super2.call(this, parameters, { isRenderable: isRenderable }); } _createClass(TextAnnotationElement, [{ key: "render", value: function render() { this.container.className = "textAnnotation"; var image = document.createElement("img"); image.style.height = this.container.style.height; image.style.width = this.container.style.width; image.src = this.imageResourcesPath + "annotation-" + this.data.name.toLowerCase() + ".svg"; image.alt = "[{{type}} Annotation]"; image.dataset.l10nId = "text_annotation_type"; image.dataset.l10nArgs = JSON.stringify({ type: this.data.name }); if (!this.data.hasPopup) { this._createPopup(image, this.data); } this.container.appendChild(image); return this.container; } }]); return TextAnnotationElement; }(AnnotationElement); var WidgetAnnotationElement = /*#__PURE__*/function (_AnnotationElement3) { _inherits(WidgetAnnotationElement, _AnnotationElement3); var _super3 = _createSuper(WidgetAnnotationElement); function WidgetAnnotationElement() { _classCallCheck(this, WidgetAnnotationElement); return _super3.apply(this, arguments); } _createClass(WidgetAnnotationElement, [{ key: "render", value: function render() { if (this.data.alternativeText) { this.container.title = this.data.alternativeText; } return this.container; } }, { key: "_getKeyModifier", value: function _getKeyModifier(event) { return navigator.platform.includes("Win") && event.ctrlKey || navigator.platform.includes("Mac") && event.metaKey; } }, { key: "_setEventListener", value: function _setEventListener(element, baseName, eventName, valueGetter) { var _this4 = this; if (baseName.includes("mouse")) { element.addEventListener(baseName, function (event) { var _this4$linkService$ev; (_this4$linkService$ev = _this4.linkService.eventBus) === null || _this4$linkService$ev === void 0 ? void 0 : _this4$linkService$ev.dispatch("dispatcheventinsandbox", { source: _this4, detail: { id: _this4.data.id, name: eventName, value: valueGetter(event), shift: event.shiftKey, modifier: _this4._getKeyModifier(event) } }); }); } else { element.addEventListener(baseName, function (event) { var _this4$linkService$ev2; (_this4$linkService$ev2 = _this4.linkService.eventBus) === null || _this4$linkService$ev2 === void 0 ? void 0 : _this4$linkService$ev2.dispatch("dispatcheventinsandbox", { source: _this4, detail: { id: _this4.data.id, name: eventName, value: event.target.checked } }); }); } } }, { key: "_setEventListeners", value: function _setEventListeners(element, names, getter) { var _iterator2 = _createForOfIteratorHelper(names), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var _this$data$actions; var _step2$value = _slicedToArray(_step2.value, 2), baseName = _step2$value[0], eventName = _step2$value[1]; if (eventName === "Action" || (_this$data$actions = this.data.actions) !== null && _this$data$actions !== void 0 && _this$data$actions[eventName]) { this._setEventListener(element, baseName, eventName, getter); } } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } } }]); return WidgetAnnotationElement; }(AnnotationElement); var TextWidgetAnnotationElement = /*#__PURE__*/function (_WidgetAnnotationElem) { _inherits(TextWidgetAnnotationElement, _WidgetAnnotationElem); var _super4 = _createSuper(TextWidgetAnnotationElement); function TextWidgetAnnotationElement(parameters) { _classCallCheck(this, TextWidgetAnnotationElement); var isRenderable = parameters.renderInteractiveForms || !parameters.data.hasAppearance && !!parameters.data.fieldValue; return _super4.call(this, parameters, { isRenderable: isRenderable }); } _createClass(TextWidgetAnnotationElement, [{ key: "render", value: function render() { var _this5 = this; var storage = this.annotationStorage; var id = this.data.id; this.container.className = "textWidgetAnnotation"; var element = null; if (this.renderInteractiveForms) { var textContent = storage.getOrCreateValue(id, { value: this.data.fieldValue }).value; var elementData = { userValue: null, formattedValue: null, beforeInputSelectionRange: null, beforeInputValue: null }; if (this.data.multiLine) { element = document.createElement("textarea"); element.textContent = textContent; } else { element = document.createElement("input"); element.type = "text"; element.setAttribute("value", textContent); } elementData.userValue = textContent; element.setAttribute("id", id); element.addEventListener("input", function (event) { storage.setValue(id, { value: event.target.value }); }); var blurListener = function blurListener(event) { if (elementData.formattedValue) { event.target.value = elementData.formattedValue; } event.target.setSelectionRange(0, 0); elementData.beforeInputSelectionRange = null; }; if (this.enableScripting && this.hasJSActions) { var _this$data$actions2; element.addEventListener("focus", function (event) { if (elementData.userValue) { event.target.value = elementData.userValue; } }); element.addEventListener("updatefromsandbox", function (event) { var detail = event.detail; var actions = { value: function value() { elementData.userValue = detail.value || ""; storage.setValue(id, { value: elementData.userValue.toString() }); if (!elementData.formattedValue) { event.target.value = elementData.userValue; } }, valueAsString: function valueAsString() { elementData.formattedValue = detail.valueAsString || ""; if (event.target !== document.activeElement) { event.target.value = elementData.formattedValue; } storage.setValue(id, { formattedValue: elementData.formattedValue }); }, focus: function focus() { setTimeout(function () { return event.target.focus({ preventScroll: false }); }, 0); }, userName: function userName() { event.target.title = detail.userName; }, hidden: function hidden() { event.target.style.visibility = detail.hidden ? "hidden" : "visible"; storage.setValue(id, { hidden: detail.hidden }); }, editable: function editable() { event.target.disabled = !detail.editable; }, selRange: function selRange() { var _detail$selRange = _slicedToArray(detail.selRange, 2), selStart = _detail$selRange[0], selEnd = _detail$selRange[1]; if (selStart >= 0 && selEnd < event.target.value.length) { event.target.setSelectionRange(selStart, selEnd); } }, strokeColor: function strokeColor() { var color = detail.strokeColor; event.target.style.color = _scripting_utils.ColorConverters["".concat(color[0], "_HTML")](color.slice(1)); } }; Object.keys(detail).filter(function (name) { return name in actions; }).forEach(function (name) { return actions[name](); }); }); element.addEventListener("keydown", function (event) { var _this5$linkService$ev; elementData.beforeInputValue = event.target.value; var commitKey = -1; if (event.key === "Escape") { commitKey = 0; } else if (event.key === "Enter") { commitKey = 2; } else if (event.key === "Tab") { commitKey = 3; } if (commitKey === -1) { return; } elementData.userValue = event.target.value; (_this5$linkService$ev = _this5.linkService.eventBus) === null || _this5$linkService$ev === void 0 ? void 0 : _this5$linkService$ev.dispatch("dispatcheventinsandbox", { source: _this5, detail: { id: id, name: "Keystroke", value: event.target.value, willCommit: true, commitKey: commitKey, selStart: event.target.selectionStart, selEnd: event.target.selectionEnd } }); }); var _blurListener = blurListener; blurListener = null; element.addEventListener("blur", function (event) { if (_this5._mouseState.isDown) { var _this5$linkService$ev2; elementData.userValue = event.target.value; (_this5$linkService$ev2 = _this5.linkService.eventBus) === null || _this5$linkService$ev2 === void 0 ? void 0 : _this5$linkService$ev2.dispatch("dispatcheventinsandbox", { source: _this5, detail: { id: id, name: "Keystroke", value: event.target.value, willCommit: true, commitKey: 1, selStart: event.target.selectionStart, selEnd: event.target.selectionEnd } }); } _blurListener(event); }); element.addEventListener("mousedown", function (event) { elementData.beforeInputValue = event.target.value; elementData.beforeInputSelectionRange = null; }); element.addEventListener("keyup", function (event) { if (event.target.selectionStart === event.target.selectionEnd) { elementData.beforeInputSelectionRange = null; } }); element.addEventListener("select", function (event) { elementData.beforeInputSelectionRange = [event.target.selectionStart, event.target.selectionEnd]; }); if ((_this$data$actions2 = this.data.actions) !== null && _this$data$actions2 !== void 0 && _this$data$actions2.Keystroke) { element.addEventListener("input", function (event) { var _this5$linkService$ev3; var selStart = -1; var selEnd = -1; if (elementData.beforeInputSelectionRange) { var _elementData$beforeIn = _slicedToArray(elementData.beforeInputSelectionRange, 2); selStart = _elementData$beforeIn[0]; selEnd = _elementData$beforeIn[1]; } (_this5$linkService$ev3 = _this5.linkService.eventBus) === null || _this5$linkService$ev3 === void 0 ? void 0 : _this5$linkService$ev3.dispatch("dispatcheventinsandbox", { source: _this5, detail: { id: id, name: "Keystroke", value: elementData.beforeInputValue, change: event.data, willCommit: false, selStart: selStart, selEnd: selEnd } }); }); } this._setEventListeners(element, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], function (event) { return event.target.value; }); } if (blurListener) { element.addEventListener("blur", blurListener); } element.disabled = this.data.readOnly; element.name = this.data.fieldName; if (this.data.maxLen !== null) { element.maxLength = this.data.maxLen; } if (this.data.comb) { var fieldWidth = this.data.rect[2] - this.data.rect[0]; var combWidth = fieldWidth / this.data.maxLen; element.classList.add("comb"); element.style.letterSpacing = "calc(".concat(combWidth, "px - 1ch)"); } } else { element = document.createElement("div"); element.textContent = this.data.fieldValue; element.style.verticalAlign = "middle"; element.style.display = "table-cell"; } this._setTextStyle(element); this.container.appendChild(element); return this.container; } }, { key: "_setTextStyle", value: function _setTextStyle(element) { var TEXT_ALIGNMENT = ["left", "center", "right"]; var _this$data$defaultApp = this.data.defaultAppearanceData, fontSize = _this$data$defaultApp.fontSize, fontColor = _this$data$defaultApp.fontColor; var style = element.style; if (fontSize) { style.fontSize = "".concat(fontSize, "px"); } style.color = _util.Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]); if (this.data.textAlignment !== null) { style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment]; } } }]); return TextWidgetAnnotationElement; }(WidgetAnnotationElement); var CheckboxWidgetAnnotationElement = /*#__PURE__*/function (_WidgetAnnotationElem2) { _inherits(CheckboxWidgetAnnotationElement, _WidgetAnnotationElem2); var _super5 = _createSuper(CheckboxWidgetAnnotationElement); function CheckboxWidgetAnnotationElement(parameters) { _classCallCheck(this, CheckboxWidgetAnnotationElement); return _super5.call(this, parameters, { isRenderable: parameters.renderInteractiveForms }); } _createClass(CheckboxWidgetAnnotationElement, [{ key: "render", value: function render() { var storage = this.annotationStorage; var data = this.data; var id = data.id; var value = storage.getOrCreateValue(id, { value: data.fieldValue && data.fieldValue !== "Off" }).value; this.container.className = "buttonWidgetAnnotation checkBox"; var element = document.createElement("input"); element.disabled = data.readOnly; element.type = "checkbox"; element.name = this.data.fieldName; if (value) { element.setAttribute("checked", true); } element.setAttribute("id", id); element.addEventListener("change", function (event) { var name = event.target.name; var _iterator3 = _createForOfIteratorHelper(document.getElementsByName(name)), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var checkbox = _step3.value; if (checkbox !== event.target) { checkbox.checked = false; storage.setValue(checkbox.parentNode.getAttribute("data-annotation-id"), { value: false }); } } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } storage.setValue(id, { value: event.target.checked }); }); if (this.enableScripting && this.hasJSActions) { element.addEventListener("updatefromsandbox", function (event) { var detail = event.detail; var actions = { value: function value() { event.target.checked = detail.value !== "Off"; storage.setValue(id, { value: event.target.checked }); }, focus: function focus() { setTimeout(function () { return event.target.focus({ preventScroll: false }); }, 0); }, hidden: function hidden() { event.target.style.visibility = detail.hidden ? "hidden" : "visible"; storage.setValue(id, { hidden: detail.hidden }); }, editable: function editable() { event.target.disabled = !detail.editable; } }; Object.keys(detail).filter(function (name) { return name in actions; }).forEach(function (name) { return actions[name](); }); }); this._setEventListeners(element, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], function (event) { return event.target.checked; }); } this.container.appendChild(element); return this.container; } }]); return CheckboxWidgetAnnotationElement; }(WidgetAnnotationElement); var RadioButtonWidgetAnnotationElement = /*#__PURE__*/function (_WidgetAnnotationElem3) { _inherits(RadioButtonWidgetAnnotationElement, _WidgetAnnotationElem3); var _super6 = _createSuper(RadioButtonWidgetAnnotationElement); function RadioButtonWidgetAnnotationElement(parameters) { _classCallCheck(this, RadioButtonWidgetAnnotationElement); return _super6.call(this, parameters, { isRenderable: parameters.renderInteractiveForms }); } _createClass(RadioButtonWidgetAnnotationElement, [{ key: "render", value: function render() { this.container.className = "buttonWidgetAnnotation radioButton"; var storage = this.annotationStorage; var data = this.data; var id = data.id; var value = storage.getOrCreateValue(id, { value: data.fieldValue === data.buttonValue }).value; var element = document.createElement("input"); element.disabled = data.readOnly; element.type = "radio"; element.name = data.fieldName; if (value) { element.setAttribute("checked", true); } element.setAttribute("pdfButtonValue", data.buttonValue); element.setAttribute("id", id); element.addEventListener("change", function (event) { var target = event.target; var _iterator4 = _createForOfIteratorHelper(document.getElementsByName(target.name)), _step4; try { for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { var radio = _step4.value; if (radio !== target) { storage.setValue(radio.getAttribute("id"), { value: false }); } } } catch (err) { _iterator4.e(err); } finally { _iterator4.f(); } storage.setValue(id, { value: target.checked }); }); if (this.enableScripting && this.hasJSActions) { element.addEventListener("updatefromsandbox", function (event) { var detail = event.detail; var actions = { value: function value() { var fieldValue = detail.value; var _iterator5 = _createForOfIteratorHelper(document.getElementsByName(event.target.name)), _step5; try { for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { var radio = _step5.value; var radioId = radio.getAttribute("id"); if (fieldValue === radio.getAttribute("pdfButtonValue")) { radio.setAttribute("checked", true); storage.setValue(radioId, { value: true }); } else { storage.setValue(radioId, { value: false }); } } } catch (err) { _iterator5.e(err); } finally { _iterator5.f(); } }, focus: function focus() { setTimeout(function () { return event.target.focus({ preventScroll: false }); }, 0); }, hidden: function hidden() { event.target.style.visibility = detail.hidden ? "hidden" : "visible"; storage.setValue(id, { hidden: detail.hidden }); }, editable: function editable() { event.target.disabled = !detail.editable; } }; Object.keys(detail).filter(function (name) { return name in actions; }).forEach(function (name) { return actions[name](); }); }); this._setEventListeners(element, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], function (event) { return event.target.checked; }); } this.container.appendChild(element); return this.container; } }]); return RadioButtonWidgetAnnotationElement; }(WidgetAnnotationElement); var PushButtonWidgetAnnotationElement = /*#__PURE__*/function (_LinkAnnotationElemen) { _inherits(PushButtonWidgetAnnotationElement, _LinkAnnotationElemen); var _super7 = _createSuper(PushButtonWidgetAnnotationElement); function PushButtonWidgetAnnotationElement() { _classCallCheck(this, PushButtonWidgetAnnotationElement); return _super7.apply(this, arguments); } _createClass(PushButtonWidgetAnnotationElement, [{ key: "render", value: function render() { var container = _get(_getPrototypeOf(PushButtonWidgetAnnotationElement.prototype), "render", this).call(this); container.className = "buttonWidgetAnnotation pushButton"; if (this.data.alternativeText) { container.title = this.data.alternativeText; } return container; } }]); return PushButtonWidgetAnnotationElement; }(LinkAnnotationElement); var ChoiceWidgetAnnotationElement = /*#__PURE__*/function (_WidgetAnnotationElem4) { _inherits(ChoiceWidgetAnnotationElement, _WidgetAnnotationElem4); var _super8 = _createSuper(ChoiceWidgetAnnotationElement); function ChoiceWidgetAnnotationElement(parameters) { _classCallCheck(this, ChoiceWidgetAnnotationElement); return _super8.call(this, parameters, { isRenderable: parameters.renderInteractiveForms }); } _createClass(ChoiceWidgetAnnotationElement, [{ key: "render", value: function render() { var _this6 = this; this.container.className = "choiceWidgetAnnotation"; var storage = this.annotationStorage; var id = this.data.id; storage.getOrCreateValue(id, { value: this.data.fieldValue.length > 0 ? this.data.fieldValue[0] : undefined }); var selectElement = document.createElement("select"); selectElement.disabled = this.data.readOnly; selectElement.name = this.data.fieldName; selectElement.setAttribute("id", id); if (!this.data.combo) { selectElement.size = this.data.options.length; if (this.data.multiSelect) { selectElement.multiple = true; } } var _iterator6 = _createForOfIteratorHelper(this.data.options), _step6; try { for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) { var option = _step6.value; var optionElement = document.createElement("option"); optionElement.textContent = option.displayValue; optionElement.value = option.exportValue; if (this.data.fieldValue.includes(option.exportValue)) { optionElement.setAttribute("selected", true); } selectElement.appendChild(optionElement); } } catch (err) { _iterator6.e(err); } finally { _iterator6.f(); } var getValue = function getValue(event, isExport) { var name = isExport ? "value" : "textContent"; var options = event.target.options; if (!event.target.multiple) { return options.selectedIndex === -1 ? null : options[options.selectedIndex][name]; } return Array.prototype.filter.call(options, function (option) { return option.selected; }).map(function (option) { return option[name]; }); }; var getItems = function getItems(event) { var options = event.target.options; return Array.prototype.map.call(options, function (option) { return { displayValue: option.textContent, exportValue: option.value }; }); }; if (this.enableScripting && this.hasJSActions) { selectElement.addEventListener("updatefromsandbox", function (event) { var detail = event.detail; var actions = { value: function value() { var options = selectElement.options; var value = detail.value; var values = new Set(Array.isArray(value) ? value : [value]); Array.prototype.forEach.call(options, function (option) { option.selected = values.has(option.value); }); storage.setValue(id, { value: getValue(event, true) }); }, multipleSelection: function multipleSelection() { selectElement.multiple = true; }, remove: function remove() { var options = selectElement.options; var index = detail.remove; options[index].selected = false; selectElement.remove(index); if (options.length > 0) { var i = Array.prototype.findIndex.call(options, function (option) { return option.selected; }); if (i === -1) { options[0].selected = true; } } storage.setValue(id, { value: getValue(event, true), items: getItems(event) }); }, clear: function clear() { while (selectElement.length !== 0) { selectElement.remove(0); } storage.setValue(id, { value: null, items: [] }); }, insert: function insert() { var _detail$insert = detail.insert, index = _detail$insert.index, displayValue = _detail$insert.displayValue, exportValue = _detail$insert.exportValue; var optionElement = document.createElement("option"); optionElement.textContent = displayValue; optionElement.value = exportValue; selectElement.insertBefore(optionElement, selectElement.children[index]); storage.setValue(id, { value: getValue(event, true), items: getItems(event) }); }, items: function items() { var items = detail.items; while (selectElement.length !== 0) { selectElement.remove(0); } var _iterator7 = _createForOfIteratorHelper(items), _step7; try { for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) { var item = _step7.value; var displayValue = item.displayValue, exportValue = item.exportValue; var optionElement = document.createElement("option"); optionElement.textContent = displayValue; optionElement.value = exportValue; selectElement.appendChild(optionElement); } } catch (err) { _iterator7.e(err); } finally { _iterator7.f(); } if (selectElement.options.length > 0) { selectElement.options[0].selected = true; } storage.setValue(id, { value: getValue(event, true), items: getItems(event) }); }, indices: function indices() { var indices = new Set(detail.indices); var options = event.target.options; Array.prototype.forEach.call(options, function (option, i) { option.selected = indices.has(i); }); storage.setValue(id, { value: getValue(event, true) }); }, focus: function focus() { setTimeout(function () { return event.target.focus({ preventScroll: false }); }, 0); }, hidden: function hidden() { event.target.style.visibility = detail.hidden ? "hidden" : "visible"; storage.setValue(id, { hidden: detail.hidden }); }, editable: function editable() { event.target.disabled = !detail.editable; } }; Object.keys(detail).filter(function (name) { return name in actions; }).forEach(function (name) { return actions[name](); }); }); selectElement.addEventListener("input", function (event) { var _this6$linkService$ev; var exportValue = getValue(event, true); var value = getValue(event, false); storage.setValue(id, { value: exportValue }); (_this6$linkService$ev = _this6.linkService.eventBus) === null || _this6$linkService$ev === void 0 ? void 0 : _this6$linkService$ev.dispatch("dispatcheventinsandbox", { source: _this6, detail: { id: id, name: "Keystroke", value: value, changeEx: exportValue, willCommit: true, commitKey: 1, keyDown: false } }); }); this._setEventListeners(selectElement, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"], ["input", "Action"]], function (event) { return event.target.checked; }); } else { selectElement.addEventListener("input", function (event) { storage.setValue(id, { value: getValue(event) }); }); } this.container.appendChild(selectElement); return this.container; } }]); return ChoiceWidgetAnnotationElement; }(WidgetAnnotationElement); var PopupAnnotationElement = /*#__PURE__*/function (_AnnotationElement4) { _inherits(PopupAnnotationElement, _AnnotationElement4); var _super9 = _createSuper(PopupAnnotationElement); function PopupAnnotationElement(parameters) { _classCallCheck(this, PopupAnnotationElement); var isRenderable = !!(parameters.data.title || parameters.data.contents); return _super9.call(this, parameters, { isRenderable: isRenderable }); } _createClass(PopupAnnotationElement, [{ key: "render", value: function render() { var IGNORE_TYPES = ["Line", "Square", "Circle", "PolyLine", "Polygon", "Ink"]; this.container.className = "popupAnnotation"; if (IGNORE_TYPES.includes(this.data.parentType)) { return this.container; } var selector = "[data-annotation-id=\"".concat(this.data.parentId, "\"]"); var parentElements = this.layer.querySelectorAll(selector); if (parentElements.length === 0) { return this.container; } var popup = new PopupElement({ container: this.container, trigger: Array.from(parentElements), color: this.data.color, title: this.data.title, modificationDate: this.data.modificationDate, contents: this.data.contents }); var page = this.page; var rect = _util.Util.normalizeRect([this.data.parentRect[0], page.view[3] - this.data.parentRect[1] + page.view[1], this.data.parentRect[2], page.view[3] - this.data.parentRect[3] + page.view[1]]); var popupLeft = rect[0] + this.data.parentRect[2] - this.data.parentRect[0]; var popupTop = rect[1]; this.container.style.transformOrigin = "".concat(-popupLeft, "px ").concat(-popupTop, "px"); this.container.style.left = "".concat(popupLeft, "px"); this.container.style.top = "".concat(popupTop, "px"); this.container.appendChild(popup.render()); return this.container; } }]); return PopupAnnotationElement; }(AnnotationElement); var PopupElement = /*#__PURE__*/function () { function PopupElement(parameters) { _classCallCheck(this, PopupElement); this.container = parameters.container; this.trigger = parameters.trigger; this.color = parameters.color; this.title = parameters.title; this.modificationDate = parameters.modificationDate; this.contents = parameters.contents; this.hideWrapper = parameters.hideWrapper || false; this.pinned = false; } _createClass(PopupElement, [{ key: "render", value: function render() { var _this7 = this; var BACKGROUND_ENLIGHT = 0.7; var wrapper = document.createElement("div"); wrapper.className = "popupWrapper"; this.hideElement = this.hideWrapper ? wrapper : this.container; this.hideElement.setAttribute("hidden", true); var popup = document.createElement("div"); popup.className = "popup"; var color = this.color; if (color) { var r = BACKGROUND_ENLIGHT * (255 - color[0]) + color[0]; var g = BACKGROUND_ENLIGHT * (255 - color[1]) + color[1]; var b = BACKGROUND_ENLIGHT * (255 - color[2]) + color[2]; popup.style.backgroundColor = _util.Util.makeHexColor(r | 0, g | 0, b | 0); } var title = document.createElement("h1"); title.textContent = this.title; popup.appendChild(title); var dateObject = _display_utils.PDFDateString.toDateObject(this.modificationDate); if (dateObject) { var modificationDate = document.createElement("span"); modificationDate.textContent = "{{date}}, {{time}}"; modificationDate.dataset.l10nId = "annotation_date_string"; modificationDate.dataset.l10nArgs = JSON.stringify({ date: dateObject.toLocaleDateString(), time: dateObject.toLocaleTimeString() }); popup.appendChild(modificationDate); } var contents = this._formatContents(this.contents); popup.appendChild(contents); if (!Array.isArray(this.trigger)) { this.trigger = [this.trigger]; } this.trigger.forEach(function (element) { element.addEventListener("click", _this7._toggle.bind(_this7)); element.addEventListener("mouseover", _this7._show.bind(_this7, false)); element.addEventListener("mouseout", _this7._hide.bind(_this7, false)); }); popup.addEventListener("click", this._hide.bind(this, true)); wrapper.appendChild(popup); return wrapper; } }, { key: "_formatContents", value: function _formatContents(contents) { var p = document.createElement("p"); var lines = contents.split(/(?:\r\n?|\n)/); for (var i = 0, ii = lines.length; i < ii; ++i) { var line = lines[i]; p.appendChild(document.createTextNode(line)); if (i < ii - 1) { p.appendChild(document.createElement("br")); } } return p; } }, { key: "_toggle", value: function _toggle() { if (this.pinned) { this._hide(true); } else { this._show(true); } } }, { key: "_show", value: function _show() { var pin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; if (pin) { this.pinned = true; } if (this.hideElement.hasAttribute("hidden")) { this.hideElement.removeAttribute("hidden"); this.container.style.zIndex += 1; } } }, { key: "_hide", value: function _hide() { var unpin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; if (unpin) { this.pinned = false; } if (!this.hideElement.hasAttribute("hidden") && !this.pinned) { this.hideElement.setAttribute("hidden", true); this.container.style.zIndex -= 1; } } }]); return PopupElement; }(); var FreeTextAnnotationElement = /*#__PURE__*/function (_AnnotationElement5) { _inherits(FreeTextAnnotationElement, _AnnotationElement5); var _super10 = _createSuper(FreeTextAnnotationElement); function FreeTextAnnotationElement(parameters) { _classCallCheck(this, FreeTextAnnotationElement); var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); return _super10.call(this, parameters, { isRenderable: isRenderable, ignoreBorder: true }); } _createClass(FreeTextAnnotationElement, [{ key: "render", value: function render() { this.container.className = "freeTextAnnotation"; if (!this.data.hasPopup) { this._createPopup(null, this.data); } return this.container; } }]); return FreeTextAnnotationElement; }(AnnotationElement); var LineAnnotationElement = /*#__PURE__*/function (_AnnotationElement6) { _inherits(LineAnnotationElement, _AnnotationElement6); var _super11 = _createSuper(LineAnnotationElement); function LineAnnotationElement(parameters) { _classCallCheck(this, LineAnnotationElement); var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); return _super11.call(this, parameters, { isRenderable: isRenderable, ignoreBorder: true }); } _createClass(LineAnnotationElement, [{ key: "render", value: function render() { this.container.className = "lineAnnotation"; var data = this.data; var width = data.rect[2] - data.rect[0]; var height = data.rect[3] - data.rect[1]; var svg = this.svgFactory.create(width, height); var line = this.svgFactory.createElement("svg:line"); line.setAttribute("x1", data.rect[2] - data.lineCoordinates[0]); line.setAttribute("y1", data.rect[3] - data.lineCoordinates[1]); line.setAttribute("x2", data.rect[2] - data.lineCoordinates[2]); line.setAttribute("y2", data.rect[3] - data.lineCoordinates[3]); line.setAttribute("stroke-width", data.borderStyle.width || 1); line.setAttribute("stroke", "transparent"); svg.appendChild(line); this.container.append(svg); this._createPopup(line, data); return this.container; } }]); return LineAnnotationElement; }(AnnotationElement); var SquareAnnotationElement = /*#__PURE__*/function (_AnnotationElement7) { _inherits(SquareAnnotationElement, _AnnotationElement7); var _super12 = _createSuper(SquareAnnotationElement); function SquareAnnotationElement(parameters) { _classCallCheck(this, SquareAnnotationElement); var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); return _super12.call(this, parameters, { isRenderable: isRenderable, ignoreBorder: true }); } _createClass(SquareAnnotationElement, [{ key: "render", value: function render() { this.container.className = "squareAnnotation"; var data = this.data; var width = data.rect[2] - data.rect[0]; var height = data.rect[3] - data.rect[1]; var svg = this.svgFactory.create(width, height); var borderWidth = data.borderStyle.width; var square = this.svgFactory.createElement("svg:rect"); square.setAttribute("x", borderWidth / 2); square.setAttribute("y", borderWidth / 2); square.setAttribute("width", width - borderWidth); square.setAttribute("height", height - borderWidth); square.setAttribute("stroke-width", borderWidth || 1); square.setAttribute("stroke", "transparent"); square.setAttribute("fill", "none"); svg.appendChild(square); this.container.append(svg); this._createPopup(square, data); return this.container; } }]); return SquareAnnotationElement; }(AnnotationElement); var CircleAnnotationElement = /*#__PURE__*/function (_AnnotationElement8) { _inherits(CircleAnnotationElement, _AnnotationElement8); var _super13 = _createSuper(CircleAnnotationElement); function CircleAnnotationElement(parameters) { _classCallCheck(this, CircleAnnotationElement); var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); return _super13.call(this, parameters, { isRenderable: isRenderable, ignoreBorder: true }); } _createClass(CircleAnnotationElement, [{ key: "render", value: function render() { this.container.className = "circleAnnotation"; var data = this.data; var width = data.rect[2] - data.rect[0]; var height = data.rect[3] - data.rect[1]; var svg = this.svgFactory.create(width, height); var borderWidth = data.borderStyle.width; var circle = this.svgFactory.createElement("svg:ellipse"); circle.setAttribute("cx", width / 2); circle.setAttribute("cy", height / 2); circle.setAttribute("rx", width / 2 - borderWidth / 2); circle.setAttribute("ry", height / 2 - borderWidth / 2); circle.setAttribute("stroke-width", borderWidth || 1); circle.setAttribute("stroke", "transparent"); circle.setAttribute("fill", "none"); svg.appendChild(circle); this.container.append(svg); this._createPopup(circle, data); return this.container; } }]); return CircleAnnotationElement; }(AnnotationElement); var PolylineAnnotationElement = /*#__PURE__*/function (_AnnotationElement9) { _inherits(PolylineAnnotationElement, _AnnotationElement9); var _super14 = _createSuper(PolylineAnnotationElement); function PolylineAnnotationElement(parameters) { var _this8; _classCallCheck(this, PolylineAnnotationElement); var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); _this8 = _super14.call(this, parameters, { isRenderable: isRenderable, ignoreBorder: true }); _this8.containerClassName = "polylineAnnotation"; _this8.svgElementName = "svg:polyline"; return _this8; } _createClass(PolylineAnnotationElement, [{ key: "render", value: function render() { this.container.className = this.containerClassName; var data = this.data; var width = data.rect[2] - data.rect[0]; var height = data.rect[3] - data.rect[1]; var svg = this.svgFactory.create(width, height); var points = []; var _iterator8 = _createForOfIteratorHelper(data.vertices), _step8; try { for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) { var coordinate = _step8.value; var x = coordinate.x - data.rect[0]; var y = data.rect[3] - coordinate.y; points.push(x + "," + y); } } catch (err) { _iterator8.e(err); } finally { _iterator8.f(); } points = points.join(" "); var polyline = this.svgFactory.createElement(this.svgElementName); polyline.setAttribute("points", points); polyline.setAttribute("stroke-width", data.borderStyle.width || 1); polyline.setAttribute("stroke", "transparent"); polyline.setAttribute("fill", "none"); svg.appendChild(polyline); this.container.append(svg); this._createPopup(polyline, data); return this.container; } }]); return PolylineAnnotationElement; }(AnnotationElement); var PolygonAnnotationElement = /*#__PURE__*/function (_PolylineAnnotationEl) { _inherits(PolygonAnnotationElement, _PolylineAnnotationEl); var _super15 = _createSuper(PolygonAnnotationElement); function PolygonAnnotationElement(parameters) { var _this9; _classCallCheck(this, PolygonAnnotationElement); _this9 = _super15.call(this, parameters); _this9.containerClassName = "polygonAnnotation"; _this9.svgElementName = "svg:polygon"; return _this9; } return PolygonAnnotationElement; }(PolylineAnnotationElement); var CaretAnnotationElement = /*#__PURE__*/function (_AnnotationElement10) { _inherits(CaretAnnotationElement, _AnnotationElement10); var _super16 = _createSuper(CaretAnnotationElement); function CaretAnnotationElement(parameters) { _classCallCheck(this, CaretAnnotationElement); var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); return _super16.call(this, parameters, { isRenderable: isRenderable, ignoreBorder: true }); } _createClass(CaretAnnotationElement, [{ key: "render", value: function render() { this.container.className = "caretAnnotation"; if (!this.data.hasPopup) { this._createPopup(null, this.data); } return this.container; } }]); return CaretAnnotationElement; }(AnnotationElement); var InkAnnotationElement = /*#__PURE__*/function (_AnnotationElement11) { _inherits(InkAnnotationElement, _AnnotationElement11); var _super17 = _createSuper(InkAnnotationElement); function InkAnnotationElement(parameters) { var _this10; _classCallCheck(this, InkAnnotationElement); var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); _this10 = _super17.call(this, parameters, { isRenderable: isRenderable, ignoreBorder: true }); _this10.containerClassName = "inkAnnotation"; _this10.svgElementName = "svg:polyline"; return _this10; } _createClass(InkAnnotationElement, [{ key: "render", value: function render() { this.container.className = this.containerClassName; var data = this.data; var width = data.rect[2] - data.rect[0]; var height = data.rect[3] - data.rect[1]; var svg = this.svgFactory.create(width, height); var _iterator9 = _createForOfIteratorHelper(data.inkLists), _step9; try { for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) { var inkList = _step9.value; var points = []; var _iterator10 = _createForOfIteratorHelper(inkList), _step10; try { for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) { var coordinate = _step10.value; var x = coordinate.x - data.rect[0]; var y = data.rect[3] - coordinate.y; points.push("".concat(x, ",").concat(y)); } } catch (err) { _iterator10.e(err); } finally { _iterator10.f(); } points = points.join(" "); var polyline = this.svgFactory.createElement(this.svgElementName); polyline.setAttribute("points", points); polyline.setAttribute("stroke-width", data.borderStyle.width || 1); polyline.setAttribute("stroke", "transparent"); polyline.setAttribute("fill", "none"); this._createPopup(polyline, data); svg.appendChild(polyline); } } catch (err) { _iterator9.e(err); } finally { _iterator9.f(); } this.container.append(svg); return this.container; } }]); return InkAnnotationElement; }(AnnotationElement); var HighlightAnnotationElement = /*#__PURE__*/function (_AnnotationElement12) { _inherits(HighlightAnnotationElement, _AnnotationElement12); var _super18 = _createSuper(HighlightAnnotationElement); function HighlightAnnotationElement(parameters) { _classCallCheck(this, HighlightAnnotationElement); var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); return _super18.call(this, parameters, { isRenderable: isRenderable, ignoreBorder: true, createQuadrilaterals: true }); } _createClass(HighlightAnnotationElement, [{ key: "render", value: function render() { if (!this.data.hasPopup) { this._createPopup(null, this.data); } if (this.quadrilaterals) { return this._renderQuadrilaterals("highlightAnnotation"); } this.container.className = "highlightAnnotation"; return this.container; } }]); return HighlightAnnotationElement; }(AnnotationElement); var UnderlineAnnotationElement = /*#__PURE__*/function (_AnnotationElement13) { _inherits(UnderlineAnnotationElement, _AnnotationElement13); var _super19 = _createSuper(UnderlineAnnotationElement); function UnderlineAnnotationElement(parameters) { _classCallCheck(this, UnderlineAnnotationElement); var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); return _super19.call(this, parameters, { isRenderable: isRenderable, ignoreBorder: true, createQuadrilaterals: true }); } _createClass(UnderlineAnnotationElement, [{ key: "render", value: function render() { if (!this.data.hasPopup) { this._createPopup(null, this.data); } if (this.quadrilaterals) { return this._renderQuadrilaterals("underlineAnnotation"); } this.container.className = "underlineAnnotation"; return this.container; } }]); return UnderlineAnnotationElement; }(AnnotationElement); var SquigglyAnnotationElement = /*#__PURE__*/function (_AnnotationElement14) { _inherits(SquigglyAnnotationElement, _AnnotationElement14); var _super20 = _createSuper(SquigglyAnnotationElement); function SquigglyAnnotationElement(parameters) { _classCallCheck(this, SquigglyAnnotationElement); var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); return _super20.call(this, parameters, { isRenderable: isRenderable, ignoreBorder: true, createQuadrilaterals: true }); } _createClass(SquigglyAnnotationElement, [{ key: "render", value: function render() { if (!this.data.hasPopup) { this._createPopup(null, this.data); } if (this.quadrilaterals) { return this._renderQuadrilaterals("squigglyAnnotation"); } this.container.className = "squigglyAnnotation"; return this.container; } }]); return SquigglyAnnotationElement; }(AnnotationElement); var StrikeOutAnnotationElement = /*#__PURE__*/function (_AnnotationElement15) { _inherits(StrikeOutAnnotationElement, _AnnotationElement15); var _super21 = _createSuper(StrikeOutAnnotationElement); function StrikeOutAnnotationElement(parameters) { _classCallCheck(this, StrikeOutAnnotationElement); var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); return _super21.call(this, parameters, { isRenderable: isRenderable, ignoreBorder: true, createQuadrilaterals: true }); } _createClass(StrikeOutAnnotationElement, [{ key: "render", value: function render() { if (!this.data.hasPopup) { this._createPopup(null, this.data); } if (this.quadrilaterals) { return this._renderQuadrilaterals("strikeoutAnnotation"); } this.container.className = "strikeoutAnnotation"; return this.container; } }]); return StrikeOutAnnotationElement; }(AnnotationElement); var StampAnnotationElement = /*#__PURE__*/function (_AnnotationElement16) { _inherits(StampAnnotationElement, _AnnotationElement16); var _super22 = _createSuper(StampAnnotationElement); function StampAnnotationElement(parameters) { _classCallCheck(this, StampAnnotationElement); var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); return _super22.call(this, parameters, { isRenderable: isRenderable, ignoreBorder: true }); } _createClass(StampAnnotationElement, [{ key: "render", value: function render() { this.container.className = "stampAnnotation"; if (!this.data.hasPopup) { this._createPopup(null, this.data); } return this.container; } }]); return StampAnnotationElement; }(AnnotationElement); var FileAttachmentAnnotationElement = /*#__PURE__*/function (_AnnotationElement17) { _inherits(FileAttachmentAnnotationElement, _AnnotationElement17); var _super23 = _createSuper(FileAttachmentAnnotationElement); function FileAttachmentAnnotationElement(parameters) { var _this11$linkService$e; var _this11; _classCallCheck(this, FileAttachmentAnnotationElement); _this11 = _super23.call(this, parameters, { isRenderable: true }); var _this11$data$file = _this11.data.file, filename = _this11$data$file.filename, content = _this11$data$file.content; _this11.filename = (0, _display_utils.getFilenameFromUrl)(filename); _this11.content = content; (_this11$linkService$e = _this11.linkService.eventBus) === null || _this11$linkService$e === void 0 ? void 0 : _this11$linkService$e.dispatch("fileattachmentannotation", { source: _assertThisInitialized(_this11), id: (0, _util.stringToPDFString)(filename), filename: filename, content: content }); return _this11; } _createClass(FileAttachmentAnnotationElement, [{ key: "render", value: function render() { this.container.className = "fileAttachmentAnnotation"; var trigger = document.createElement("div"); trigger.style.height = this.container.style.height; trigger.style.width = this.container.style.width; trigger.addEventListener("dblclick", this._download.bind(this)); if (!this.data.hasPopup && (this.data.title || this.data.contents)) { this._createPopup(trigger, this.data); } this.container.appendChild(trigger); return this.container; } }, { key: "_download", value: function _download() { if (!this.downloadManager) { (0, _util.warn)("Download cannot be started due to unavailable download manager"); return; } this.downloadManager.downloadData(this.content, this.filename, ""); } }]); return FileAttachmentAnnotationElement; }(AnnotationElement); var AnnotationLayer = /*#__PURE__*/function () { function AnnotationLayer() { _classCallCheck(this, AnnotationLayer); } _createClass(AnnotationLayer, null, [{ key: "render", value: function render(parameters) { var sortedAnnotations = [], popupAnnotations = []; var _iterator11 = _createForOfIteratorHelper(parameters.annotations), _step11; try { for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) { var _data = _step11.value; if (!_data) { continue; } if (_data.annotationType === _util.AnnotationType.POPUP) { popupAnnotations.push(_data); continue; } sortedAnnotations.push(_data); } } catch (err) { _iterator11.e(err); } finally { _iterator11.f(); } if (popupAnnotations.length) { sortedAnnotations.push.apply(sortedAnnotations, popupAnnotations); } for (var _i2 = 0, _sortedAnnotations = sortedAnnotations; _i2 < _sortedAnnotations.length; _i2++) { var data = _sortedAnnotations[_i2]; var element = AnnotationElementFactory.create({ data: data, layer: parameters.div, page: parameters.page, viewport: parameters.viewport, linkService: parameters.linkService, downloadManager: parameters.downloadManager, imageResourcesPath: parameters.imageResourcesPath || "", renderInteractiveForms: typeof parameters.renderInteractiveForms === "boolean" ? parameters.renderInteractiveForms : true, svgFactory: new _display_utils.DOMSVGFactory(), annotationStorage: parameters.annotationStorage || new _annotation_storage.AnnotationStorage(), enableScripting: parameters.enableScripting, hasJSActions: parameters.hasJSActions, mouseState: parameters.mouseState || { isDown: false } }); if (element.isRenderable) { var rendered = element.render(); if (data.hidden) { rendered.style.visibility = "hidden"; } if (Array.isArray(rendered)) { var _iterator12 = _createForOfIteratorHelper(rendered), _step12; try { for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) { var renderedElement = _step12.value; parameters.div.appendChild(renderedElement); } } catch (err) { _iterator12.e(err); } finally { _iterator12.f(); } } else { if (element instanceof PopupAnnotationElement) { parameters.div.prepend(rendered); } else { parameters.div.appendChild(rendered); } } } } } }, { key: "update", value: function update(parameters) { var transform = "matrix(".concat(parameters.viewport.transform.join(","), ")"); var _iterator13 = _createForOfIteratorHelper(parameters.annotations), _step13; try { for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) { var data = _step13.value; var elements = parameters.div.querySelectorAll("[data-annotation-id=\"".concat(data.id, "\"]")); if (elements) { elements.forEach(function (element) { element.style.transform = transform; }); } } } catch (err) { _iterator13.e(err); } finally { _iterator13.f(); } parameters.div.removeAttribute("hidden"); } }]); return AnnotationLayer; }(); exports.AnnotationLayer = AnnotationLayer; /***/ }), /* 150 */ /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ColorConverters = void 0; function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function makeColorComp(n) { return Math.floor(Math.max(0, Math.min(1, n)) * 255).toString(16).padStart(2, "0"); } var ColorConverters = /*#__PURE__*/function () { function ColorConverters() { _classCallCheck(this, ColorConverters); } _createClass(ColorConverters, null, [{ key: "CMYK_G", value: function CMYK_G(_ref) { var _ref2 = _slicedToArray(_ref, 4), c = _ref2[0], y = _ref2[1], m = _ref2[2], k = _ref2[3]; return ["G", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)]; } }, { key: "G_CMYK", value: function G_CMYK(_ref3) { var _ref4 = _slicedToArray(_ref3, 1), g = _ref4[0]; return ["CMYK", 0, 0, 0, 1 - g]; } }, { key: "G_RGB", value: function G_RGB(_ref5) { var _ref6 = _slicedToArray(_ref5, 1), g = _ref6[0]; return ["RGB", g, g, g]; } }, { key: "G_HTML", value: function G_HTML(_ref7) { var _ref8 = _slicedToArray(_ref7, 1), g = _ref8[0]; var G = makeColorComp(g); return "#".concat(G).concat(G).concat(G); } }, { key: "RGB_G", value: function RGB_G(_ref9) { var _ref10 = _slicedToArray(_ref9, 3), r = _ref10[0], g = _ref10[1], b = _ref10[2]; return ["G", 0.3 * r + 0.59 * g + 0.11 * b]; } }, { key: "RGB_HTML", value: function RGB_HTML(_ref11) { var _ref12 = _slicedToArray(_ref11, 3), r = _ref12[0], g = _ref12[1], b = _ref12[2]; var R = makeColorComp(r); var G = makeColorComp(g); var B = makeColorComp(b); return "#".concat(R).concat(G).concat(B); } }, { key: "T_HTML", value: function T_HTML() { return "#00000000"; } }, { key: "CMYK_RGB", value: function CMYK_RGB(_ref13) { var _ref14 = _slicedToArray(_ref13, 4), c = _ref14[0], y = _ref14[1], m = _ref14[2], k = _ref14[3]; return ["RGB", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)]; } }, { key: "CMYK_HTML", value: function CMYK_HTML(components) { return this.RGB_HTML(this.CMYK_RGB(components)); } }, { key: "RGB_CMYK", value: function RGB_CMYK(_ref15) { var _ref16 = _slicedToArray(_ref15, 3), r = _ref16[0], g = _ref16[1], b = _ref16[2]; var c = 1 - r; var m = 1 - g; var y = 1 - b; var k = Math.min(c, m, y); return ["CMYK", c, m, y, k]; } }]); return ColorConverters; }(); exports.ColorConverters = ColorConverters; /***/ }), /* 151 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.renderTextLayer = void 0; var _util = __w_pdfjs_require__(4); var renderTextLayer = function renderTextLayerClosure() { var MAX_TEXT_DIVS_TO_RENDER = 100000; var NonWhitespaceRegexp = /\S/; function isAllWhitespace(str) { return !NonWhitespaceRegexp.test(str); } function appendText(task, geom, styles) { var textDiv = document.createElement("span"); var textDivProperties = { angle: 0, canvasWidth: 0, isWhitespace: false, originalTransform: null, paddingBottom: 0, paddingLeft: 0, paddingRight: 0, paddingTop: 0, scale: 1 }; task._textDivs.push(textDiv); if (isAllWhitespace(geom.str)) { textDivProperties.isWhitespace = true; task._textDivProperties.set(textDiv, textDivProperties); return; } var tx = _util.Util.transform(task._viewport.transform, geom.transform); var angle = Math.atan2(tx[1], tx[0]); var style = styles[geom.fontName]; if (style.vertical) { angle += Math.PI / 2; } var fontHeight = Math.sqrt(tx[2] * tx[2] + tx[3] * tx[3]); var fontAscent = fontHeight; if (style.ascent) { fontAscent = style.ascent * fontAscent; } else if (style.descent) { fontAscent = (1 + style.descent) * fontAscent; } var left, top; if (angle === 0) { left = tx[4]; top = tx[5] - fontAscent; } else { left = tx[4] + fontAscent * Math.sin(angle); top = tx[5] - fontAscent * Math.cos(angle); } textDiv.style.left = "".concat(left, "px"); textDiv.style.top = "".concat(top, "px"); textDiv.style.fontSize = "".concat(fontHeight, "px"); textDiv.style.fontFamily = style.fontFamily; textDiv.textContent = geom.str; textDiv.dir = geom.dir; if (task._fontInspectorEnabled) { textDiv.dataset.fontName = geom.fontName; } if (angle !== 0) { textDivProperties.angle = angle * (180 / Math.PI); } var shouldScaleText = false; if (geom.str.length > 1) { shouldScaleText = true; } else if (geom.transform[0] !== geom.transform[3]) { var absScaleX = Math.abs(geom.transform[0]), absScaleY = Math.abs(geom.transform[3]); if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) { shouldScaleText = true; } } if (shouldScaleText) { if (style.vertical) { textDivProperties.canvasWidth = geom.height * task._viewport.scale; } else { textDivProperties.canvasWidth = geom.width * task._viewport.scale; } } task._textDivProperties.set(textDiv, textDivProperties); if (task._textContentStream) { task._layoutText(textDiv); } if (task._enhanceTextSelection) { var angleCos = 1, angleSin = 0; if (angle !== 0) { angleCos = Math.cos(angle); angleSin = Math.sin(angle); } var divWidth = (style.vertical ? geom.height : geom.width) * task._viewport.scale; var divHeight = fontHeight; var m, b; if (angle !== 0) { m = [angleCos, angleSin, -angleSin, angleCos, left, top]; b = _util.Util.getAxialAlignedBoundingBox([0, 0, divWidth, divHeight], m); } else { b = [left, top, left + divWidth, top + divHeight]; } task._bounds.push({ left: b[0], top: b[1], right: b[2], bottom: b[3], div: textDiv, size: [divWidth, divHeight], m: m }); } } function render(task) { if (task._canceled) { return; } var textDivs = task._textDivs; var capability = task._capability; var textDivsLength = textDivs.length; if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) { task._renderingDone = true; capability.resolve(); return; } if (!task._textContentStream) { for (var i = 0; i < textDivsLength; i++) { task._layoutText(textDivs[i]); } } task._renderingDone = true; capability.resolve(); } function findPositiveMin(ts, offset, count) { var result = 0; for (var i = 0; i < count; i++) { var t = ts[offset++]; if (t > 0) { result = result ? Math.min(t, result) : t; } } return result; } function expand(task) { var bounds = task._bounds; var viewport = task._viewport; var expanded = expandBounds(viewport.width, viewport.height, bounds); var _loop = function _loop(i) { var div = bounds[i].div; var divProperties = task._textDivProperties.get(div); if (divProperties.angle === 0) { divProperties.paddingLeft = bounds[i].left - expanded[i].left; divProperties.paddingTop = bounds[i].top - expanded[i].top; divProperties.paddingRight = expanded[i].right - bounds[i].right; divProperties.paddingBottom = expanded[i].bottom - bounds[i].bottom; task._textDivProperties.set(div, divProperties); return "continue"; } var e = expanded[i], b = bounds[i]; var m = b.m, c = m[0], s = m[1]; var points = [[0, 0], [0, b.size[1]], [b.size[0], 0], b.size]; var ts = new Float64Array(64); points.forEach(function (p, j) { var t = _util.Util.applyTransform(p, m); ts[j + 0] = c && (e.left - t[0]) / c; ts[j + 4] = s && (e.top - t[1]) / s; ts[j + 8] = c && (e.right - t[0]) / c; ts[j + 12] = s && (e.bottom - t[1]) / s; ts[j + 16] = s && (e.left - t[0]) / -s; ts[j + 20] = c && (e.top - t[1]) / c; ts[j + 24] = s && (e.right - t[0]) / -s; ts[j + 28] = c && (e.bottom - t[1]) / c; ts[j + 32] = c && (e.left - t[0]) / -c; ts[j + 36] = s && (e.top - t[1]) / -s; ts[j + 40] = c && (e.right - t[0]) / -c; ts[j + 44] = s && (e.bottom - t[1]) / -s; ts[j + 48] = s && (e.left - t[0]) / s; ts[j + 52] = c && (e.top - t[1]) / -c; ts[j + 56] = s && (e.right - t[0]) / s; ts[j + 60] = c && (e.bottom - t[1]) / -c; }); var boxScale = 1 + Math.min(Math.abs(c), Math.abs(s)); divProperties.paddingLeft = findPositiveMin(ts, 32, 16) / boxScale; divProperties.paddingTop = findPositiveMin(ts, 48, 16) / boxScale; divProperties.paddingRight = findPositiveMin(ts, 0, 16) / boxScale; divProperties.paddingBottom = findPositiveMin(ts, 16, 16) / boxScale; task._textDivProperties.set(div, divProperties); }; for (var i = 0; i < expanded.length; i++) { var _ret = _loop(i); if (_ret === "continue") continue; } } function expandBounds(width, height, boxes) { var bounds = boxes.map(function (box, i) { return { x1: box.left, y1: box.top, x2: box.right, y2: box.bottom, index: i, x1New: undefined, x2New: undefined }; }); expandBoundsLTR(width, bounds); var expanded = new Array(boxes.length); bounds.forEach(function (b) { var i = b.index; expanded[i] = { left: b.x1New, top: 0, right: b.x2New, bottom: 0 }; }); boxes.map(function (box, i) { var e = expanded[i], b = bounds[i]; b.x1 = box.top; b.y1 = width - e.right; b.x2 = box.bottom; b.y2 = width - e.left; b.index = i; b.x1New = undefined; b.x2New = undefined; }); expandBoundsLTR(height, bounds); bounds.forEach(function (b) { var i = b.index; expanded[i].top = b.x1New; expanded[i].bottom = b.x2New; }); return expanded; } function expandBoundsLTR(width, bounds) { bounds.sort(function (a, b) { return a.x1 - b.x1 || a.index - b.index; }); var fakeBoundary = { x1: -Infinity, y1: -Infinity, x2: 0, y2: Infinity, index: -1, x1New: 0, x2New: 0 }; var horizon = [{ start: -Infinity, end: Infinity, boundary: fakeBoundary }]; bounds.forEach(function (boundary) { var i = 0; while (i < horizon.length && horizon[i].end <= boundary.y1) { i++; } var j = horizon.length - 1; while (j >= 0 && horizon[j].start >= boundary.y2) { j--; } var horizonPart, affectedBoundary; var q, k, maxXNew = -Infinity; for (q = i; q <= j; q++) { horizonPart = horizon[q]; affectedBoundary = horizonPart.boundary; var xNew = void 0; if (affectedBoundary.x2 > boundary.x1) { xNew = affectedBoundary.index > boundary.index ? affectedBoundary.x1New : boundary.x1; } else if (affectedBoundary.x2New === undefined) { xNew = (affectedBoundary.x2 + boundary.x1) / 2; } else { xNew = affectedBoundary.x2New; } if (xNew > maxXNew) { maxXNew = xNew; } } boundary.x1New = maxXNew; for (q = i; q <= j; q++) { horizonPart = horizon[q]; affectedBoundary = horizonPart.boundary; if (affectedBoundary.x2New === undefined) { if (affectedBoundary.x2 > boundary.x1) { if (affectedBoundary.index > boundary.index) { affectedBoundary.x2New = affectedBoundary.x2; } } else { affectedBoundary.x2New = maxXNew; } } else if (affectedBoundary.x2New > maxXNew) { affectedBoundary.x2New = Math.max(maxXNew, affectedBoundary.x2); } } var changedHorizon = []; var lastBoundary = null; for (q = i; q <= j; q++) { horizonPart = horizon[q]; affectedBoundary = horizonPart.boundary; var useBoundary = affectedBoundary.x2 > boundary.x2 ? affectedBoundary : boundary; if (lastBoundary === useBoundary) { changedHorizon[changedHorizon.length - 1].end = horizonPart.end; } else { changedHorizon.push({ start: horizonPart.start, end: horizonPart.end, boundary: useBoundary }); lastBoundary = useBoundary; } } if (horizon[i].start < boundary.y1) { changedHorizon[0].start = boundary.y1; changedHorizon.unshift({ start: horizon[i].start, end: boundary.y1, boundary: horizon[i].boundary }); } if (boundary.y2 < horizon[j].end) { changedHorizon[changedHorizon.length - 1].end = boundary.y2; changedHorizon.push({ start: boundary.y2, end: horizon[j].end, boundary: horizon[j].boundary }); } for (q = i; q <= j; q++) { horizonPart = horizon[q]; affectedBoundary = horizonPart.boundary; if (affectedBoundary.x2New !== undefined) { continue; } var used = false; for (k = i - 1; !used && k >= 0 && horizon[k].start >= affectedBoundary.y1; k--) { used = horizon[k].boundary === affectedBoundary; } for (k = j + 1; !used && k < horizon.length && horizon[k].end <= affectedBoundary.y2; k++) { used = horizon[k].boundary === affectedBoundary; } for (k = 0; !used && k < changedHorizon.length; k++) { used = changedHorizon[k].boundary === affectedBoundary; } if (!used) { affectedBoundary.x2New = maxXNew; } } Array.prototype.splice.apply(horizon, [i, j - i + 1].concat(changedHorizon)); }); horizon.forEach(function (horizonPart) { var affectedBoundary = horizonPart.boundary; if (affectedBoundary.x2New === undefined) { affectedBoundary.x2New = Math.max(width, affectedBoundary.x2); } }); } function TextLayerRenderTask(_ref) { var _globalThis$FontInspe, _this = this; var textContent = _ref.textContent, textContentStream = _ref.textContentStream, container = _ref.container, viewport = _ref.viewport, textDivs = _ref.textDivs, textContentItemsStr = _ref.textContentItemsStr, enhanceTextSelection = _ref.enhanceTextSelection; this._textContent = textContent; this._textContentStream = textContentStream; this._container = container; this._document = container.ownerDocument; this._viewport = viewport; this._textDivs = textDivs || []; this._textContentItemsStr = textContentItemsStr || []; this._enhanceTextSelection = !!enhanceTextSelection; this._fontInspectorEnabled = !!((_globalThis$FontInspe = globalThis.FontInspector) !== null && _globalThis$FontInspe !== void 0 && _globalThis$FontInspe.enabled); this._reader = null; this._layoutTextLastFontSize = null; this._layoutTextLastFontFamily = null; this._layoutTextCtx = null; this._textDivProperties = new WeakMap(); this._renderingDone = false; this._canceled = false; this._capability = (0, _util.createPromiseCapability)(); this._renderTimer = null; this._bounds = []; this._capability.promise["finally"](function () { if (_this._layoutTextCtx) { _this._layoutTextCtx.canvas.width = 0; _this._layoutTextCtx.canvas.height = 0; _this._layoutTextCtx = null; } })["catch"](function () {}); } TextLayerRenderTask.prototype = { get promise() { return this._capability.promise; }, cancel: function TextLayer_cancel() { this._canceled = true; if (this._reader) { this._reader.cancel(new _util.AbortException("TextLayer task cancelled.")); this._reader = null; } if (this._renderTimer !== null) { clearTimeout(this._renderTimer); this._renderTimer = null; } this._capability.reject(new Error("TextLayer task cancelled.")); }, _processItems: function _processItems(items, styleCache) { for (var i = 0, len = items.length; i < len; i++) { this._textContentItemsStr.push(items[i].str); appendText(this, items[i], styleCache); } }, _layoutText: function _layoutText(textDiv) { var textDivProperties = this._textDivProperties.get(textDiv); if (textDivProperties.isWhitespace) { return; } var transform = ""; if (textDivProperties.canvasWidth !== 0) { var _textDiv$style = textDiv.style, fontSize = _textDiv$style.fontSize, fontFamily = _textDiv$style.fontFamily; if (fontSize !== this._layoutTextLastFontSize || fontFamily !== this._layoutTextLastFontFamily) { this._layoutTextCtx.font = "".concat(fontSize, " ").concat(fontFamily); this._layoutTextLastFontSize = fontSize; this._layoutTextLastFontFamily = fontFamily; } var _this$_layoutTextCtx$ = this._layoutTextCtx.measureText(textDiv.textContent), width = _this$_layoutTextCtx$.width; if (width > 0) { textDivProperties.scale = textDivProperties.canvasWidth / width; transform = "scaleX(".concat(textDivProperties.scale, ")"); } } if (textDivProperties.angle !== 0) { transform = "rotate(".concat(textDivProperties.angle, "deg) ").concat(transform); } if (transform.length > 0) { if (this._enhanceTextSelection) { textDivProperties.originalTransform = transform; } textDiv.style.transform = transform; } this._textDivProperties.set(textDiv, textDivProperties); this._container.appendChild(textDiv); }, _render: function TextLayer_render(timeout) { var _this2 = this; var capability = (0, _util.createPromiseCapability)(); var styleCache = Object.create(null); var canvas = this._document.createElement("canvas"); canvas.mozOpaque = true; this._layoutTextCtx = canvas.getContext("2d", { alpha: false }); if (this._textContent) { var textItems = this._textContent.items; var textStyles = this._textContent.styles; this._processItems(textItems, textStyles); capability.resolve(); } else if (this._textContentStream) { var pump = function pump() { _this2._reader.read().then(function (_ref2) { var value = _ref2.value, done = _ref2.done; if (done) { capability.resolve(); return; } Object.assign(styleCache, value.styles); _this2._processItems(value.items, styleCache); pump(); }, capability.reject); }; this._reader = this._textContentStream.getReader(); pump(); } else { throw new Error('Neither "textContent" nor "textContentStream"' + " parameters specified."); } capability.promise.then(function () { styleCache = null; if (!timeout) { render(_this2); } else { _this2._renderTimer = setTimeout(function () { render(_this2); _this2._renderTimer = null; }, timeout); } }, this._capability.reject); }, expandTextDivs: function TextLayer_expandTextDivs(expandDivs) { if (!this._enhanceTextSelection || !this._renderingDone) { return; } if (this._bounds !== null) { expand(this); this._bounds = null; } var transformBuf = [], paddingBuf = []; for (var i = 0, ii = this._textDivs.length; i < ii; i++) { var div = this._textDivs[i]; var divProps = this._textDivProperties.get(div); if (divProps.isWhitespace) { continue; } if (expandDivs) { transformBuf.length = 0; paddingBuf.length = 0; if (divProps.originalTransform) { transformBuf.push(divProps.originalTransform); } if (divProps.paddingTop > 0) { paddingBuf.push("".concat(divProps.paddingTop, "px")); transformBuf.push("translateY(".concat(-divProps.paddingTop, "px)")); } else { paddingBuf.push(0); } if (divProps.paddingRight > 0) { paddingBuf.push("".concat(divProps.paddingRight / divProps.scale, "px")); } else { paddingBuf.push(0); } if (divProps.paddingBottom > 0) { paddingBuf.push("".concat(divProps.paddingBottom, "px")); } else { paddingBuf.push(0); } if (divProps.paddingLeft > 0) { paddingBuf.push("".concat(divProps.paddingLeft / divProps.scale, "px")); transformBuf.push("translateX(".concat(-divProps.paddingLeft / divProps.scale, "px)")); } else { paddingBuf.push(0); } div.style.padding = paddingBuf.join(" "); if (transformBuf.length) { div.style.transform = transformBuf.join(" "); } } else { div.style.padding = null; div.style.transform = divProps.originalTransform; } } } }; function renderTextLayer(renderParameters) { var task = new TextLayerRenderTask({ textContent: renderParameters.textContent, textContentStream: renderParameters.textContentStream, container: renderParameters.container, viewport: renderParameters.viewport, textDivs: renderParameters.textDivs, textContentItemsStr: renderParameters.textContentItemsStr, enhanceTextSelection: renderParameters.enhanceTextSelection }); task._render(renderParameters.timeout); return task; } return renderTextLayer; }(); exports.renderTextLayer = renderTextLayer; /***/ }), /* 152 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.SVGGraphics = void 0; var _util = __w_pdfjs_require__(4); var _display_utils = __w_pdfjs_require__(1); var _is_node = __w_pdfjs_require__(6); function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var SVGGraphics = function SVGGraphics() { throw new Error("Not implemented: SVGGraphics"); }; exports.SVGGraphics = SVGGraphics; { var opListToTree = function opListToTree(opList) { var opTree = []; var tmp = []; var _iterator = _createForOfIteratorHelper(opList), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var opListElement = _step.value; if (opListElement.fn === "save") { opTree.push({ fnId: 92, fn: "group", items: [] }); tmp.push(opTree); opTree = opTree[opTree.length - 1].items; continue; } if (opListElement.fn === "restore") { opTree = tmp.pop(); } else { opTree.push(opListElement); } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } return opTree; }; var pf = function pf(value) { if (Number.isInteger(value)) { return value.toString(); } var s = value.toFixed(10); var i = s.length - 1; if (s[i] !== "0") { return s; } do { i--; } while (s[i] === "0"); return s.substring(0, s[i] === "." ? i : i + 1); }; var pm = function pm(m) { if (m[4] === 0 && m[5] === 0) { if (m[1] === 0 && m[2] === 0) { if (m[0] === 1 && m[3] === 1) { return ""; } return "scale(".concat(pf(m[0]), " ").concat(pf(m[3]), ")"); } if (m[0] === m[3] && m[1] === -m[2]) { var a = Math.acos(m[0]) * 180 / Math.PI; return "rotate(".concat(pf(a), ")"); } } else { if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1) { return "translate(".concat(pf(m[4]), " ").concat(pf(m[5]), ")"); } } return "matrix(".concat(pf(m[0]), " ").concat(pf(m[1]), " ").concat(pf(m[2]), " ").concat(pf(m[3]), " ").concat(pf(m[4]), " ") + "".concat(pf(m[5]), ")"); }; var SVG_DEFAULTS = { fontStyle: "normal", fontWeight: "normal", fillColor: "#000000" }; var XML_NS = "http://www.w3.org/XML/1998/namespace"; var XLINK_NS = "http://www.w3.org/1999/xlink"; var LINE_CAP_STYLES = ["butt", "round", "square"]; var LINE_JOIN_STYLES = ["miter", "round", "bevel"]; var convertImgDataToPng = function () { var PNG_HEADER = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]); var CHUNK_WRAPPER_SIZE = 12; var crcTable = new Int32Array(256); for (var i = 0; i < 256; i++) { var c = i; for (var h = 0; h < 8; h++) { if (c & 1) { c = 0xedb88320 ^ c >> 1 & 0x7fffffff; } else { c = c >> 1 & 0x7fffffff; } } crcTable[i] = c; } function crc32(data, start, end) { var crc = -1; for (var _i = start; _i < end; _i++) { var a = (crc ^ data[_i]) & 0xff; var b = crcTable[a]; crc = crc >>> 8 ^ b; } return crc ^ -1; } function writePngChunk(type, body, data, offset) { var p = offset; var len = body.length; data[p] = len >> 24 & 0xff; data[p + 1] = len >> 16 & 0xff; data[p + 2] = len >> 8 & 0xff; data[p + 3] = len & 0xff; p += 4; data[p] = type.charCodeAt(0) & 0xff; data[p + 1] = type.charCodeAt(1) & 0xff; data[p + 2] = type.charCodeAt(2) & 0xff; data[p + 3] = type.charCodeAt(3) & 0xff; p += 4; data.set(body, p); p += body.length; var crc = crc32(data, offset + 4, p); data[p] = crc >> 24 & 0xff; data[p + 1] = crc >> 16 & 0xff; data[p + 2] = crc >> 8 & 0xff; data[p + 3] = crc & 0xff; } function adler32(data, start, end) { var a = 1; var b = 0; for (var _i2 = start; _i2 < end; ++_i2) { a = (a + (data[_i2] & 0xff)) % 65521; b = (b + a) % 65521; } return b << 16 | a; } function deflateSync(literals) { if (!_is_node.isNodeJS) { return deflateSyncUncompressed(literals); } try { var input; if (parseInt(process.versions.node) >= 8) { input = literals; } else { input = Buffer.from(literals); } var output = require("zlib").deflateSync(input, { level: 9 }); return output instanceof Uint8Array ? output : new Uint8Array(output); } catch (e) { (0, _util.warn)("Not compressing PNG because zlib.deflateSync is unavailable: " + e); } return deflateSyncUncompressed(literals); } function deflateSyncUncompressed(literals) { var len = literals.length; var maxBlockLength = 0xffff; var deflateBlocks = Math.ceil(len / maxBlockLength); var idat = new Uint8Array(2 + len + deflateBlocks * 5 + 4); var pi = 0; idat[pi++] = 0x78; idat[pi++] = 0x9c; var pos = 0; while (len > maxBlockLength) { idat[pi++] = 0x00; idat[pi++] = 0xff; idat[pi++] = 0xff; idat[pi++] = 0x00; idat[pi++] = 0x00; idat.set(literals.subarray(pos, pos + maxBlockLength), pi); pi += maxBlockLength; pos += maxBlockLength; len -= maxBlockLength; } idat[pi++] = 0x01; idat[pi++] = len & 0xff; idat[pi++] = len >> 8 & 0xff; idat[pi++] = ~len & 0xffff & 0xff; idat[pi++] = (~len & 0xffff) >> 8 & 0xff; idat.set(literals.subarray(pos), pi); pi += literals.length - pos; var adler = adler32(literals, 0, literals.length); idat[pi++] = adler >> 24 & 0xff; idat[pi++] = adler >> 16 & 0xff; idat[pi++] = adler >> 8 & 0xff; idat[pi++] = adler & 0xff; return idat; } function encode(imgData, kind, forceDataSchema, isMask) { var width = imgData.width; var height = imgData.height; var bitDepth, colorType, lineSize; var bytes = imgData.data; switch (kind) { case _util.ImageKind.GRAYSCALE_1BPP: colorType = 0; bitDepth = 1; lineSize = width + 7 >> 3; break; case _util.ImageKind.RGB_24BPP: colorType = 2; bitDepth = 8; lineSize = width * 3; break; case _util.ImageKind.RGBA_32BPP: colorType = 6; bitDepth = 8; lineSize = width * 4; break; default: throw new Error("invalid format"); } var literals = new Uint8Array((1 + lineSize) * height); var offsetLiterals = 0, offsetBytes = 0; for (var y = 0; y < height; ++y) { literals[offsetLiterals++] = 0; literals.set(bytes.subarray(offsetBytes, offsetBytes + lineSize), offsetLiterals); offsetBytes += lineSize; offsetLiterals += lineSize; } if (kind === _util.ImageKind.GRAYSCALE_1BPP && isMask) { offsetLiterals = 0; for (var _y = 0; _y < height; _y++) { offsetLiterals++; for (var _i3 = 0; _i3 < lineSize; _i3++) { literals[offsetLiterals++] ^= 0xff; } } } var ihdr = new Uint8Array([width >> 24 & 0xff, width >> 16 & 0xff, width >> 8 & 0xff, width & 0xff, height >> 24 & 0xff, height >> 16 & 0xff, height >> 8 & 0xff, height & 0xff, bitDepth, colorType, 0x00, 0x00, 0x00]); var idat = deflateSync(literals); var pngLength = PNG_HEADER.length + CHUNK_WRAPPER_SIZE * 3 + ihdr.length + idat.length; var data = new Uint8Array(pngLength); var offset = 0; data.set(PNG_HEADER, offset); offset += PNG_HEADER.length; writePngChunk("IHDR", ihdr, data, offset); offset += CHUNK_WRAPPER_SIZE + ihdr.length; writePngChunk("IDATA", idat, data, offset); offset += CHUNK_WRAPPER_SIZE + idat.length; writePngChunk("IEND", new Uint8Array(0), data, offset); return (0, _util.createObjectURL)(data, "image/png", forceDataSchema); } return function convertImgDataToPng(imgData, forceDataSchema, isMask) { var kind = imgData.kind === undefined ? _util.ImageKind.GRAYSCALE_1BPP : imgData.kind; return encode(imgData, kind, forceDataSchema, isMask); }; }(); var SVGExtraState = /*#__PURE__*/function () { function SVGExtraState() { _classCallCheck(this, SVGExtraState); this.fontSizeScale = 1; this.fontWeight = SVG_DEFAULTS.fontWeight; this.fontSize = 0; this.textMatrix = _util.IDENTITY_MATRIX; this.fontMatrix = _util.FONT_IDENTITY_MATRIX; this.leading = 0; this.textRenderingMode = _util.TextRenderingMode.FILL; this.textMatrixScale = 1; this.x = 0; this.y = 0; this.lineX = 0; this.lineY = 0; this.charSpacing = 0; this.wordSpacing = 0; this.textHScale = 1; this.textRise = 0; this.fillColor = SVG_DEFAULTS.fillColor; this.strokeColor = "#000000"; this.fillAlpha = 1; this.strokeAlpha = 1; this.lineWidth = 1; this.lineJoin = ""; this.lineCap = ""; this.miterLimit = 0; this.dashArray = []; this.dashPhase = 0; this.dependencies = []; this.activeClipUrl = null; this.clipGroup = null; this.maskId = ""; } _createClass(SVGExtraState, [{ key: "clone", value: function clone() { return Object.create(this); } }, { key: "setCurrentPoint", value: function setCurrentPoint(x, y) { this.x = x; this.y = y; } }]); return SVGExtraState; }(); var clipCount = 0; var maskCount = 0; var shadingCount = 0; exports.SVGGraphics = SVGGraphics = /*#__PURE__*/function () { function SVGGraphics(commonObjs, objs) { var forceDataSchema = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; _classCallCheck(this, SVGGraphics); this.svgFactory = new _display_utils.DOMSVGFactory(); this.current = new SVGExtraState(); this.transformMatrix = _util.IDENTITY_MATRIX; this.transformStack = []; this.extraStack = []; this.commonObjs = commonObjs; this.objs = objs; this.pendingClip = null; this.pendingEOFill = false; this.embedFonts = false; this.embeddedFonts = Object.create(null); this.cssStyle = null; this.forceDataSchema = !!forceDataSchema; this._operatorIdMapping = []; for (var op in _util.OPS) { this._operatorIdMapping[_util.OPS[op]] = op; } } _createClass(SVGGraphics, [{ key: "save", value: function save() { this.transformStack.push(this.transformMatrix); var old = this.current; this.extraStack.push(old); this.current = old.clone(); } }, { key: "restore", value: function restore() { this.transformMatrix = this.transformStack.pop(); this.current = this.extraStack.pop(); this.pendingClip = null; this.tgrp = null; } }, { key: "group", value: function group(items) { this.save(); this.executeOpTree(items); this.restore(); } }, { key: "loadDependencies", value: function loadDependencies(operatorList) { var _this = this; var fnArray = operatorList.fnArray; var argsArray = operatorList.argsArray; for (var i = 0, ii = fnArray.length; i < ii; i++) { if (fnArray[i] !== _util.OPS.dependency) { continue; } var _iterator2 = _createForOfIteratorHelper(argsArray[i]), _step2; try { var _loop = function _loop() { var obj = _step2.value; var objsPool = obj.startsWith("g_") ? _this.commonObjs : _this.objs; var promise = new Promise(function (resolve) { objsPool.get(obj, resolve); }); _this.current.dependencies.push(promise); }; for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { _loop(); } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } } return Promise.all(this.current.dependencies); } }, { key: "transform", value: function transform(a, b, c, d, e, f) { var transformMatrix = [a, b, c, d, e, f]; this.transformMatrix = _util.Util.transform(this.transformMatrix, transformMatrix); this.tgrp = null; } }, { key: "getSVG", value: function getSVG(operatorList, viewport) { var _this2 = this; this.viewport = viewport; var svgElement = this._initialize(viewport); return this.loadDependencies(operatorList).then(function () { _this2.transformMatrix = _util.IDENTITY_MATRIX; _this2.executeOpTree(_this2.convertOpList(operatorList)); return svgElement; }); } }, { key: "convertOpList", value: function convertOpList(operatorList) { var operatorIdMapping = this._operatorIdMapping; var argsArray = operatorList.argsArray; var fnArray = operatorList.fnArray; var opList = []; for (var i = 0, ii = fnArray.length; i < ii; i++) { var fnId = fnArray[i]; opList.push({ fnId: fnId, fn: operatorIdMapping[fnId], args: argsArray[i] }); } return opListToTree(opList); } }, { key: "executeOpTree", value: function executeOpTree(opTree) { var _iterator3 = _createForOfIteratorHelper(opTree), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var opTreeElement = _step3.value; var fn = opTreeElement.fn; var fnId = opTreeElement.fnId; var args = opTreeElement.args; switch (fnId | 0) { case _util.OPS.beginText: this.beginText(); break; case _util.OPS.dependency: break; case _util.OPS.setLeading: this.setLeading(args); break; case _util.OPS.setLeadingMoveText: this.setLeadingMoveText(args[0], args[1]); break; case _util.OPS.setFont: this.setFont(args); break; case _util.OPS.showText: this.showText(args[0]); break; case _util.OPS.showSpacedText: this.showText(args[0]); break; case _util.OPS.endText: this.endText(); break; case _util.OPS.moveText: this.moveText(args[0], args[1]); break; case _util.OPS.setCharSpacing: this.setCharSpacing(args[0]); break; case _util.OPS.setWordSpacing: this.setWordSpacing(args[0]); break; case _util.OPS.setHScale: this.setHScale(args[0]); break; case _util.OPS.setTextMatrix: this.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]); break; case _util.OPS.setTextRise: this.setTextRise(args[0]); break; case _util.OPS.setTextRenderingMode: this.setTextRenderingMode(args[0]); break; case _util.OPS.setLineWidth: this.setLineWidth(args[0]); break; case _util.OPS.setLineJoin: this.setLineJoin(args[0]); break; case _util.OPS.setLineCap: this.setLineCap(args[0]); break; case _util.OPS.setMiterLimit: this.setMiterLimit(args[0]); break; case _util.OPS.setFillRGBColor: this.setFillRGBColor(args[0], args[1], args[2]); break; case _util.OPS.setStrokeRGBColor: this.setStrokeRGBColor(args[0], args[1], args[2]); break; case _util.OPS.setStrokeColorN: this.setStrokeColorN(args); break; case _util.OPS.setFillColorN: this.setFillColorN(args); break; case _util.OPS.shadingFill: this.shadingFill(args[0]); break; case _util.OPS.setDash: this.setDash(args[0], args[1]); break; case _util.OPS.setRenderingIntent: this.setRenderingIntent(args[0]); break; case _util.OPS.setFlatness: this.setFlatness(args[0]); break; case _util.OPS.setGState: this.setGState(args[0]); break; case _util.OPS.fill: this.fill(); break; case _util.OPS.eoFill: this.eoFill(); break; case _util.OPS.stroke: this.stroke(); break; case _util.OPS.fillStroke: this.fillStroke(); break; case _util.OPS.eoFillStroke: this.eoFillStroke(); break; case _util.OPS.clip: this.clip("nonzero"); break; case _util.OPS.eoClip: this.clip("evenodd"); break; case _util.OPS.paintSolidColorImageMask: this.paintSolidColorImageMask(); break; case _util.OPS.paintImageXObject: this.paintImageXObject(args[0]); break; case _util.OPS.paintInlineImageXObject: this.paintInlineImageXObject(args[0]); break; case _util.OPS.paintImageMaskXObject: this.paintImageMaskXObject(args[0]); break; case _util.OPS.paintFormXObjectBegin: this.paintFormXObjectBegin(args[0], args[1]); break; case _util.OPS.paintFormXObjectEnd: this.paintFormXObjectEnd(); break; case _util.OPS.closePath: this.closePath(); break; case _util.OPS.closeStroke: this.closeStroke(); break; case _util.OPS.closeFillStroke: this.closeFillStroke(); break; case _util.OPS.closeEOFillStroke: this.closeEOFillStroke(); break; case _util.OPS.nextLine: this.nextLine(); break; case _util.OPS.transform: this.transform(args[0], args[1], args[2], args[3], args[4], args[5]); break; case _util.OPS.constructPath: this.constructPath(args[0], args[1]); break; case _util.OPS.endPath: this.endPath(); break; case 92: this.group(opTreeElement.items); break; default: (0, _util.warn)("Unimplemented operator ".concat(fn)); break; } } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } } }, { key: "setWordSpacing", value: function setWordSpacing(wordSpacing) { this.current.wordSpacing = wordSpacing; } }, { key: "setCharSpacing", value: function setCharSpacing(charSpacing) { this.current.charSpacing = charSpacing; } }, { key: "nextLine", value: function nextLine() { this.moveText(0, this.current.leading); } }, { key: "setTextMatrix", value: function setTextMatrix(a, b, c, d, e, f) { var current = this.current; current.textMatrix = current.lineMatrix = [a, b, c, d, e, f]; current.textMatrixScale = Math.sqrt(a * a + b * b); current.x = current.lineX = 0; current.y = current.lineY = 0; current.xcoords = []; current.ycoords = []; current.tspan = this.svgFactory.createElement("svg:tspan"); current.tspan.setAttributeNS(null, "font-family", current.fontFamily); current.tspan.setAttributeNS(null, "font-size", "".concat(pf(current.fontSize), "px")); current.tspan.setAttributeNS(null, "y", pf(-current.y)); current.txtElement = this.svgFactory.createElement("svg:text"); current.txtElement.appendChild(current.tspan); } }, { key: "beginText", value: function beginText() { var current = this.current; current.x = current.lineX = 0; current.y = current.lineY = 0; current.textMatrix = _util.IDENTITY_MATRIX; current.lineMatrix = _util.IDENTITY_MATRIX; current.textMatrixScale = 1; current.tspan = this.svgFactory.createElement("svg:tspan"); current.txtElement = this.svgFactory.createElement("svg:text"); current.txtgrp = this.svgFactory.createElement("svg:g"); current.xcoords = []; current.ycoords = []; } }, { key: "moveText", value: function moveText(x, y) { var current = this.current; current.x = current.lineX += x; current.y = current.lineY += y; current.xcoords = []; current.ycoords = []; current.tspan = this.svgFactory.createElement("svg:tspan"); current.tspan.setAttributeNS(null, "font-family", current.fontFamily); current.tspan.setAttributeNS(null, "font-size", "".concat(pf(current.fontSize), "px")); current.tspan.setAttributeNS(null, "y", pf(-current.y)); } }, { key: "showText", value: function showText(glyphs) { var current = this.current; var font = current.font; var fontSize = current.fontSize; if (fontSize === 0) { return; } var fontSizeScale = current.fontSizeScale; var charSpacing = current.charSpacing; var wordSpacing = current.wordSpacing; var fontDirection = current.fontDirection; var textHScale = current.textHScale * fontDirection; var vertical = font.vertical; var spacingDir = vertical ? 1 : -1; var defaultVMetrics = font.defaultVMetrics; var widthAdvanceScale = fontSize * current.fontMatrix[0]; var x = 0; var _iterator4 = _createForOfIteratorHelper(glyphs), _step4; try { for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { var glyph = _step4.value; if (glyph === null) { x += fontDirection * wordSpacing; continue; } else if ((0, _util.isNum)(glyph)) { x += spacingDir * glyph * fontSize / 1000; continue; } var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; var character = glyph.fontChar; var scaledX = void 0, scaledY = void 0; var width = glyph.width; if (vertical) { var vx = void 0; var vmetric = glyph.vmetric || defaultVMetrics; vx = glyph.vmetric ? vmetric[1] : width * 0.5; vx = -vx * widthAdvanceScale; var vy = vmetric[2] * widthAdvanceScale; width = vmetric ? -vmetric[0] : width; scaledX = vx / fontSizeScale; scaledY = (x + vy) / fontSizeScale; } else { scaledX = x / fontSizeScale; scaledY = 0; } if (glyph.isInFont || font.missingFile) { current.xcoords.push(current.x + scaledX); if (vertical) { current.ycoords.push(-current.y + scaledY); } current.tspan.textContent += character; } else {} var charWidth = void 0; if (vertical) { charWidth = width * widthAdvanceScale - spacing * fontDirection; } else { charWidth = width * widthAdvanceScale + spacing * fontDirection; } x += charWidth; } } catch (err) { _iterator4.e(err); } finally { _iterator4.f(); } current.tspan.setAttributeNS(null, "x", current.xcoords.map(pf).join(" ")); if (vertical) { current.tspan.setAttributeNS(null, "y", current.ycoords.map(pf).join(" ")); } else { current.tspan.setAttributeNS(null, "y", pf(-current.y)); } if (vertical) { current.y -= x; } else { current.x += x * textHScale; } current.tspan.setAttributeNS(null, "font-family", current.fontFamily); current.tspan.setAttributeNS(null, "font-size", "".concat(pf(current.fontSize), "px")); if (current.fontStyle !== SVG_DEFAULTS.fontStyle) { current.tspan.setAttributeNS(null, "font-style", current.fontStyle); } if (current.fontWeight !== SVG_DEFAULTS.fontWeight) { current.tspan.setAttributeNS(null, "font-weight", current.fontWeight); } var fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { if (current.fillColor !== SVG_DEFAULTS.fillColor) { current.tspan.setAttributeNS(null, "fill", current.fillColor); } if (current.fillAlpha < 1) { current.tspan.setAttributeNS(null, "fill-opacity", current.fillAlpha); } } else if (current.textRenderingMode === _util.TextRenderingMode.ADD_TO_PATH) { current.tspan.setAttributeNS(null, "fill", "transparent"); } else { current.tspan.setAttributeNS(null, "fill", "none"); } if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { var lineWidthScale = 1 / (current.textMatrixScale || 1); this._setStrokeAttributes(current.tspan, lineWidthScale); } var textMatrix = current.textMatrix; if (current.textRise !== 0) { textMatrix = textMatrix.slice(); textMatrix[5] += current.textRise; } current.txtElement.setAttributeNS(null, "transform", "".concat(pm(textMatrix), " scale(").concat(pf(textHScale), ", -1)")); current.txtElement.setAttributeNS(XML_NS, "xml:space", "preserve"); current.txtElement.appendChild(current.tspan); current.txtgrp.appendChild(current.txtElement); this._ensureTransformGroup().appendChild(current.txtElement); } }, { key: "setLeadingMoveText", value: function setLeadingMoveText(x, y) { this.setLeading(-y); this.moveText(x, y); } }, { key: "addFontStyle", value: function addFontStyle(fontObj) { if (!fontObj.data) { throw new Error("addFontStyle: No font data available, " + 'ensure that the "fontExtraProperties" API parameter is set.'); } if (!this.cssStyle) { this.cssStyle = this.svgFactory.createElement("svg:style"); this.cssStyle.setAttributeNS(null, "type", "text/css"); this.defs.appendChild(this.cssStyle); } var url = (0, _util.createObjectURL)(fontObj.data, fontObj.mimetype, this.forceDataSchema); this.cssStyle.textContent += "@font-face { font-family: \"".concat(fontObj.loadedName, "\";") + " src: url(".concat(url, "); }\n"); } }, { key: "setFont", value: function setFont(details) { var current = this.current; var fontObj = this.commonObjs.get(details[0]); var size = details[1]; current.font = fontObj; if (this.embedFonts && !fontObj.missingFile && !this.embeddedFonts[fontObj.loadedName]) { this.addFontStyle(fontObj); this.embeddedFonts[fontObj.loadedName] = fontObj; } current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX; var bold = "normal"; if (fontObj.black) { bold = "900"; } else if (fontObj.bold) { bold = "bold"; } var italic = fontObj.italic ? "italic" : "normal"; if (size < 0) { size = -size; current.fontDirection = -1; } else { current.fontDirection = 1; } current.fontSize = size; current.fontFamily = fontObj.loadedName; current.fontWeight = bold; current.fontStyle = italic; current.tspan = this.svgFactory.createElement("svg:tspan"); current.tspan.setAttributeNS(null, "y", pf(-current.y)); current.xcoords = []; current.ycoords = []; } }, { key: "endText", value: function endText() { var _current$txtElement; var current = this.current; if (current.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG && (_current$txtElement = current.txtElement) !== null && _current$txtElement !== void 0 && _current$txtElement.hasChildNodes()) { current.element = current.txtElement; this.clip("nonzero"); this.endPath(); } } }, { key: "setLineWidth", value: function setLineWidth(width) { if (width > 0) { this.current.lineWidth = width; } } }, { key: "setLineCap", value: function setLineCap(style) { this.current.lineCap = LINE_CAP_STYLES[style]; } }, { key: "setLineJoin", value: function setLineJoin(style) { this.current.lineJoin = LINE_JOIN_STYLES[style]; } }, { key: "setMiterLimit", value: function setMiterLimit(limit) { this.current.miterLimit = limit; } }, { key: "setStrokeAlpha", value: function setStrokeAlpha(strokeAlpha) { this.current.strokeAlpha = strokeAlpha; } }, { key: "setStrokeRGBColor", value: function setStrokeRGBColor(r, g, b) { this.current.strokeColor = _util.Util.makeHexColor(r, g, b); } }, { key: "setFillAlpha", value: function setFillAlpha(fillAlpha) { this.current.fillAlpha = fillAlpha; } }, { key: "setFillRGBColor", value: function setFillRGBColor(r, g, b) { this.current.fillColor = _util.Util.makeHexColor(r, g, b); this.current.tspan = this.svgFactory.createElement("svg:tspan"); this.current.xcoords = []; this.current.ycoords = []; } }, { key: "setStrokeColorN", value: function setStrokeColorN(args) { this.current.strokeColor = this._makeColorN_Pattern(args); } }, { key: "setFillColorN", value: function setFillColorN(args) { this.current.fillColor = this._makeColorN_Pattern(args); } }, { key: "shadingFill", value: function shadingFill(args) { var width = this.viewport.width; var height = this.viewport.height; var inv = _util.Util.inverseTransform(this.transformMatrix); var bl = _util.Util.applyTransform([0, 0], inv); var br = _util.Util.applyTransform([0, height], inv); var ul = _util.Util.applyTransform([width, 0], inv); var ur = _util.Util.applyTransform([width, height], inv); var x0 = Math.min(bl[0], br[0], ul[0], ur[0]); var y0 = Math.min(bl[1], br[1], ul[1], ur[1]); var x1 = Math.max(bl[0], br[0], ul[0], ur[0]); var y1 = Math.max(bl[1], br[1], ul[1], ur[1]); var rect = this.svgFactory.createElement("svg:rect"); rect.setAttributeNS(null, "x", x0); rect.setAttributeNS(null, "y", y0); rect.setAttributeNS(null, "width", x1 - x0); rect.setAttributeNS(null, "height", y1 - y0); rect.setAttributeNS(null, "fill", this._makeShadingPattern(args)); if (this.current.fillAlpha < 1) { rect.setAttributeNS(null, "fill-opacity", this.current.fillAlpha); } this._ensureTransformGroup().appendChild(rect); } }, { key: "_makeColorN_Pattern", value: function _makeColorN_Pattern(args) { if (args[0] === "TilingPattern") { return this._makeTilingPattern(args); } return this._makeShadingPattern(args); } }, { key: "_makeTilingPattern", value: function _makeTilingPattern(args) { var color = args[1]; var operatorList = args[2]; var matrix = args[3] || _util.IDENTITY_MATRIX; var _args$ = _slicedToArray(args[4], 4), x0 = _args$[0], y0 = _args$[1], x1 = _args$[2], y1 = _args$[3]; var xstep = args[5]; var ystep = args[6]; var paintType = args[7]; var tilingId = "shading".concat(shadingCount++); var _Util$applyTransform = _util.Util.applyTransform([x0, y0], matrix), _Util$applyTransform2 = _slicedToArray(_Util$applyTransform, 2), tx0 = _Util$applyTransform2[0], ty0 = _Util$applyTransform2[1]; var _Util$applyTransform3 = _util.Util.applyTransform([x1, y1], matrix), _Util$applyTransform4 = _slicedToArray(_Util$applyTransform3, 2), tx1 = _Util$applyTransform4[0], ty1 = _Util$applyTransform4[1]; var _Util$singularValueDe = _util.Util.singularValueDecompose2dScale(matrix), _Util$singularValueDe2 = _slicedToArray(_Util$singularValueDe, 2), xscale = _Util$singularValueDe2[0], yscale = _Util$singularValueDe2[1]; var txstep = xstep * xscale; var tystep = ystep * yscale; var tiling = this.svgFactory.createElement("svg:pattern"); tiling.setAttributeNS(null, "id", tilingId); tiling.setAttributeNS(null, "patternUnits", "userSpaceOnUse"); tiling.setAttributeNS(null, "width", txstep); tiling.setAttributeNS(null, "height", tystep); tiling.setAttributeNS(null, "x", "".concat(tx0)); tiling.setAttributeNS(null, "y", "".concat(ty0)); var svg = this.svg; var transformMatrix = this.transformMatrix; var fillColor = this.current.fillColor; var strokeColor = this.current.strokeColor; var bbox = this.svgFactory.create(tx1 - tx0, ty1 - ty0); this.svg = bbox; this.transformMatrix = matrix; if (paintType === 2) { var cssColor = _util.Util.makeHexColor.apply(_util.Util, _toConsumableArray(color)); this.current.fillColor = cssColor; this.current.strokeColor = cssColor; } this.executeOpTree(this.convertOpList(operatorList)); this.svg = svg; this.transformMatrix = transformMatrix; this.current.fillColor = fillColor; this.current.strokeColor = strokeColor; tiling.appendChild(bbox.childNodes[0]); this.defs.appendChild(tiling); return "url(#".concat(tilingId, ")"); } }, { key: "_makeShadingPattern", value: function _makeShadingPattern(args) { switch (args[0]) { case "RadialAxial": var shadingId = "shading".concat(shadingCount++); var colorStops = args[3]; var gradient; switch (args[1]) { case "axial": var point0 = args[4]; var point1 = args[5]; gradient = this.svgFactory.createElement("svg:linearGradient"); gradient.setAttributeNS(null, "id", shadingId); gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse"); gradient.setAttributeNS(null, "x1", point0[0]); gradient.setAttributeNS(null, "y1", point0[1]); gradient.setAttributeNS(null, "x2", point1[0]); gradient.setAttributeNS(null, "y2", point1[1]); break; case "radial": var focalPoint = args[4]; var circlePoint = args[5]; var focalRadius = args[6]; var circleRadius = args[7]; gradient = this.svgFactory.createElement("svg:radialGradient"); gradient.setAttributeNS(null, "id", shadingId); gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse"); gradient.setAttributeNS(null, "cx", circlePoint[0]); gradient.setAttributeNS(null, "cy", circlePoint[1]); gradient.setAttributeNS(null, "r", circleRadius); gradient.setAttributeNS(null, "fx", focalPoint[0]); gradient.setAttributeNS(null, "fy", focalPoint[1]); gradient.setAttributeNS(null, "fr", focalRadius); break; default: throw new Error("Unknown RadialAxial type: ".concat(args[1])); } var _iterator5 = _createForOfIteratorHelper(colorStops), _step5; try { for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { var colorStop = _step5.value; var stop = this.svgFactory.createElement("svg:stop"); stop.setAttributeNS(null, "offset", colorStop[0]); stop.setAttributeNS(null, "stop-color", colorStop[1]); gradient.appendChild(stop); } } catch (err) { _iterator5.e(err); } finally { _iterator5.f(); } this.defs.appendChild(gradient); return "url(#".concat(shadingId, ")"); case "Mesh": (0, _util.warn)("Unimplemented pattern Mesh"); return null; case "Dummy": return "hotpink"; default: throw new Error("Unknown IR type: ".concat(args[0])); } } }, { key: "setDash", value: function setDash(dashArray, dashPhase) { this.current.dashArray = dashArray; this.current.dashPhase = dashPhase; } }, { key: "constructPath", value: function constructPath(ops, args) { var current = this.current; var x = current.x, y = current.y; var d = []; var j = 0; var _iterator6 = _createForOfIteratorHelper(ops), _step6; try { for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) { var op = _step6.value; switch (op | 0) { case _util.OPS.rectangle: x = args[j++]; y = args[j++]; var width = args[j++]; var height = args[j++]; var xw = x + width; var yh = y + height; d.push("M", pf(x), pf(y), "L", pf(xw), pf(y), "L", pf(xw), pf(yh), "L", pf(x), pf(yh), "Z"); break; case _util.OPS.moveTo: x = args[j++]; y = args[j++]; d.push("M", pf(x), pf(y)); break; case _util.OPS.lineTo: x = args[j++]; y = args[j++]; d.push("L", pf(x), pf(y)); break; case _util.OPS.curveTo: x = args[j + 4]; y = args[j + 5]; d.push("C", pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]), pf(x), pf(y)); j += 6; break; case _util.OPS.curveTo2: d.push("C", pf(x), pf(y), pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3])); x = args[j + 2]; y = args[j + 3]; j += 4; break; case _util.OPS.curveTo3: x = args[j + 2]; y = args[j + 3]; d.push("C", pf(args[j]), pf(args[j + 1]), pf(x), pf(y), pf(x), pf(y)); j += 4; break; case _util.OPS.closePath: d.push("Z"); break; } } } catch (err) { _iterator6.e(err); } finally { _iterator6.f(); } d = d.join(" "); if (current.path && ops.length > 0 && ops[0] !== _util.OPS.rectangle && ops[0] !== _util.OPS.moveTo) { d = current.path.getAttributeNS(null, "d") + d; } else { current.path = this.svgFactory.createElement("svg:path"); this._ensureTransformGroup().appendChild(current.path); } current.path.setAttributeNS(null, "d", d); current.path.setAttributeNS(null, "fill", "none"); current.element = current.path; current.setCurrentPoint(x, y); } }, { key: "endPath", value: function endPath() { var current = this.current; current.path = null; if (!this.pendingClip) { return; } if (!current.element) { this.pendingClip = null; return; } var clipId = "clippath".concat(clipCount++); var clipPath = this.svgFactory.createElement("svg:clipPath"); clipPath.setAttributeNS(null, "id", clipId); clipPath.setAttributeNS(null, "transform", pm(this.transformMatrix)); var clipElement = current.element.cloneNode(true); if (this.pendingClip === "evenodd") { clipElement.setAttributeNS(null, "clip-rule", "evenodd"); } else { clipElement.setAttributeNS(null, "clip-rule", "nonzero"); } this.pendingClip = null; clipPath.appendChild(clipElement); this.defs.appendChild(clipPath); if (current.activeClipUrl) { current.clipGroup = null; this.extraStack.forEach(function (prev) { prev.clipGroup = null; }); clipPath.setAttributeNS(null, "clip-path", current.activeClipUrl); } current.activeClipUrl = "url(#".concat(clipId, ")"); this.tgrp = null; } }, { key: "clip", value: function clip(type) { this.pendingClip = type; } }, { key: "closePath", value: function closePath() { var current = this.current; if (current.path) { var d = "".concat(current.path.getAttributeNS(null, "d"), "Z"); current.path.setAttributeNS(null, "d", d); } } }, { key: "setLeading", value: function setLeading(leading) { this.current.leading = -leading; } }, { key: "setTextRise", value: function setTextRise(textRise) { this.current.textRise = textRise; } }, { key: "setTextRenderingMode", value: function setTextRenderingMode(textRenderingMode) { this.current.textRenderingMode = textRenderingMode; } }, { key: "setHScale", value: function setHScale(scale) { this.current.textHScale = scale / 100; } }, { key: "setRenderingIntent", value: function setRenderingIntent(intent) {} }, { key: "setFlatness", value: function setFlatness(flatness) {} }, { key: "setGState", value: function setGState(states) { var _iterator7 = _createForOfIteratorHelper(states), _step7; try { for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) { var _step7$value = _slicedToArray(_step7.value, 2), key = _step7$value[0], value = _step7$value[1]; switch (key) { case "LW": this.setLineWidth(value); break; case "LC": this.setLineCap(value); break; case "LJ": this.setLineJoin(value); break; case "ML": this.setMiterLimit(value); break; case "D": this.setDash(value[0], value[1]); break; case "RI": this.setRenderingIntent(value); break; case "FL": this.setFlatness(value); break; case "Font": this.setFont(value); break; case "CA": this.setStrokeAlpha(value); break; case "ca": this.setFillAlpha(value); break; default: (0, _util.warn)("Unimplemented graphic state operator ".concat(key)); break; } } } catch (err) { _iterator7.e(err); } finally { _iterator7.f(); } } }, { key: "fill", value: function fill() { var current = this.current; if (current.element) { current.element.setAttributeNS(null, "fill", current.fillColor); current.element.setAttributeNS(null, "fill-opacity", current.fillAlpha); this.endPath(); } } }, { key: "stroke", value: function stroke() { var current = this.current; if (current.element) { this._setStrokeAttributes(current.element); current.element.setAttributeNS(null, "fill", "none"); this.endPath(); } } }, { key: "_setStrokeAttributes", value: function _setStrokeAttributes(element) { var lineWidthScale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; var current = this.current; var dashArray = current.dashArray; if (lineWidthScale !== 1 && dashArray.length > 0) { dashArray = dashArray.map(function (value) { return lineWidthScale * value; }); } element.setAttributeNS(null, "stroke", current.strokeColor); element.setAttributeNS(null, "stroke-opacity", current.strokeAlpha); element.setAttributeNS(null, "stroke-miterlimit", pf(current.miterLimit)); element.setAttributeNS(null, "stroke-linecap", current.lineCap); element.setAttributeNS(null, "stroke-linejoin", current.lineJoin); element.setAttributeNS(null, "stroke-width", pf(lineWidthScale * current.lineWidth) + "px"); element.setAttributeNS(null, "stroke-dasharray", dashArray.map(pf).join(" ")); element.setAttributeNS(null, "stroke-dashoffset", pf(lineWidthScale * current.dashPhase) + "px"); } }, { key: "eoFill", value: function eoFill() { if (this.current.element) { this.current.element.setAttributeNS(null, "fill-rule", "evenodd"); } this.fill(); } }, { key: "fillStroke", value: function fillStroke() { this.stroke(); this.fill(); } }, { key: "eoFillStroke", value: function eoFillStroke() { if (this.current.element) { this.current.element.setAttributeNS(null, "fill-rule", "evenodd"); } this.fillStroke(); } }, { key: "closeStroke", value: function closeStroke() { this.closePath(); this.stroke(); } }, { key: "closeFillStroke", value: function closeFillStroke() { this.closePath(); this.fillStroke(); } }, { key: "closeEOFillStroke", value: function closeEOFillStroke() { this.closePath(); this.eoFillStroke(); } }, { key: "paintSolidColorImageMask", value: function paintSolidColorImageMask() { var rect = this.svgFactory.createElement("svg:rect"); rect.setAttributeNS(null, "x", "0"); rect.setAttributeNS(null, "y", "0"); rect.setAttributeNS(null, "width", "1px"); rect.setAttributeNS(null, "height", "1px"); rect.setAttributeNS(null, "fill", this.current.fillColor); this._ensureTransformGroup().appendChild(rect); } }, { key: "paintImageXObject", value: function paintImageXObject(objId) { var imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId); if (!imgData) { (0, _util.warn)("Dependent image with object ID ".concat(objId, " is not ready yet")); return; } this.paintInlineImageXObject(imgData); } }, { key: "paintInlineImageXObject", value: function paintInlineImageXObject(imgData, mask) { var width = imgData.width; var height = imgData.height; var imgSrc = convertImgDataToPng(imgData, this.forceDataSchema, !!mask); var cliprect = this.svgFactory.createElement("svg:rect"); cliprect.setAttributeNS(null, "x", "0"); cliprect.setAttributeNS(null, "y", "0"); cliprect.setAttributeNS(null, "width", pf(width)); cliprect.setAttributeNS(null, "height", pf(height)); this.current.element = cliprect; this.clip("nonzero"); var imgEl = this.svgFactory.createElement("svg:image"); imgEl.setAttributeNS(XLINK_NS, "xlink:href", imgSrc); imgEl.setAttributeNS(null, "x", "0"); imgEl.setAttributeNS(null, "y", pf(-height)); imgEl.setAttributeNS(null, "width", pf(width) + "px"); imgEl.setAttributeNS(null, "height", pf(height) + "px"); imgEl.setAttributeNS(null, "transform", "scale(".concat(pf(1 / width), " ").concat(pf(-1 / height), ")")); if (mask) { mask.appendChild(imgEl); } else { this._ensureTransformGroup().appendChild(imgEl); } } }, { key: "paintImageMaskXObject", value: function paintImageMaskXObject(imgData) { var current = this.current; var width = imgData.width; var height = imgData.height; var fillColor = current.fillColor; current.maskId = "mask".concat(maskCount++); var mask = this.svgFactory.createElement("svg:mask"); mask.setAttributeNS(null, "id", current.maskId); var rect = this.svgFactory.createElement("svg:rect"); rect.setAttributeNS(null, "x", "0"); rect.setAttributeNS(null, "y", "0"); rect.setAttributeNS(null, "width", pf(width)); rect.setAttributeNS(null, "height", pf(height)); rect.setAttributeNS(null, "fill", fillColor); rect.setAttributeNS(null, "mask", "url(#".concat(current.maskId, ")")); this.defs.appendChild(mask); this._ensureTransformGroup().appendChild(rect); this.paintInlineImageXObject(imgData, mask); } }, { key: "paintFormXObjectBegin", value: function paintFormXObjectBegin(matrix, bbox) { if (Array.isArray(matrix) && matrix.length === 6) { this.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]); } if (bbox) { var width = bbox[2] - bbox[0]; var height = bbox[3] - bbox[1]; var cliprect = this.svgFactory.createElement("svg:rect"); cliprect.setAttributeNS(null, "x", bbox[0]); cliprect.setAttributeNS(null, "y", bbox[1]); cliprect.setAttributeNS(null, "width", pf(width)); cliprect.setAttributeNS(null, "height", pf(height)); this.current.element = cliprect; this.clip("nonzero"); this.endPath(); } } }, { key: "paintFormXObjectEnd", value: function paintFormXObjectEnd() {} }, { key: "_initialize", value: function _initialize(viewport) { var svg = this.svgFactory.create(viewport.width, viewport.height); var definitions = this.svgFactory.createElement("svg:defs"); svg.appendChild(definitions); this.defs = definitions; var rootGroup = this.svgFactory.createElement("svg:g"); rootGroup.setAttributeNS(null, "transform", pm(viewport.transform)); svg.appendChild(rootGroup); this.svg = rootGroup; return svg; } }, { key: "_ensureClipGroup", value: function _ensureClipGroup() { if (!this.current.clipGroup) { var clipGroup = this.svgFactory.createElement("svg:g"); clipGroup.setAttributeNS(null, "clip-path", this.current.activeClipUrl); this.svg.appendChild(clipGroup); this.current.clipGroup = clipGroup; } return this.current.clipGroup; } }, { key: "_ensureTransformGroup", value: function _ensureTransformGroup() { if (!this.tgrp) { this.tgrp = this.svgFactory.createElement("svg:g"); this.tgrp.setAttributeNS(null, "transform", pm(this.transformMatrix)); if (this.current.activeClipUrl) { this._ensureClipGroup().appendChild(this.tgrp); } else { this.svg.appendChild(this.tgrp); } } return this.tgrp; } }]); return SVGGraphics; }(); } /***/ }), /* 153 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFNodeStream = void 0; var _regenerator = _interopRequireDefault(__w_pdfjs_require__(2)); var _util = __w_pdfjs_require__(4); var _network_utils = __w_pdfjs_require__(154); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } ; var fs = require("fs"); var http = require("http"); var https = require("https"); var url = require("url"); var fileUriRegex = /^file:\/\/\/[a-zA-Z]:\//; function parseUrl(sourceUrl) { var parsedUrl = url.parse(sourceUrl); if (parsedUrl.protocol === "file:" || parsedUrl.host) { return parsedUrl; } if (/^[a-z]:[/\\]/i.test(sourceUrl)) { return url.parse("file:///".concat(sourceUrl)); } if (!parsedUrl.host) { parsedUrl.protocol = "file:"; } return parsedUrl; } var PDFNodeStream = /*#__PURE__*/function () { function PDFNodeStream(source) { _classCallCheck(this, PDFNodeStream); this.source = source; this.url = parseUrl(source.url); this.isHttp = this.url.protocol === "http:" || this.url.protocol === "https:"; this.isFsUrl = this.url.protocol === "file:"; this.httpHeaders = this.isHttp && source.httpHeaders || {}; this._fullRequestReader = null; this._rangeRequestReaders = []; } _createClass(PDFNodeStream, [{ key: "_progressiveDataLength", get: function get() { var _this$_fullRequestRea, _this$_fullRequestRea2; return (_this$_fullRequestRea = (_this$_fullRequestRea2 = this._fullRequestReader) === null || _this$_fullRequestRea2 === void 0 ? void 0 : _this$_fullRequestRea2._loaded) !== null && _this$_fullRequestRea !== void 0 ? _this$_fullRequestRea : 0; } }, { key: "getFullReader", value: function getFullReader() { (0, _util.assert)(!this._fullRequestReader, "PDFNodeStream.getFullReader can only be called once."); this._fullRequestReader = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this); return this._fullRequestReader; } }, { key: "getRangeReader", value: function getRangeReader(start, end) { if (end <= this._progressiveDataLength) { return null; } var rangeReader = this.isFsUrl ? new PDFNodeStreamFsRangeReader(this, start, end) : new PDFNodeStreamRangeReader(this, start, end); this._rangeRequestReaders.push(rangeReader); return rangeReader; } }, { key: "cancelAllRequests", value: function cancelAllRequests(reason) { if (this._fullRequestReader) { this._fullRequestReader.cancel(reason); } var readers = this._rangeRequestReaders.slice(0); readers.forEach(function (reader) { reader.cancel(reason); }); } }]); return PDFNodeStream; }(); exports.PDFNodeStream = PDFNodeStream; var BaseFullReader = /*#__PURE__*/function () { function BaseFullReader(stream) { _classCallCheck(this, BaseFullReader); this._url = stream.url; this._done = false; this._storedError = null; this.onProgress = null; var source = stream.source; this._contentLength = source.length; this._loaded = 0; this._filename = null; this._disableRange = source.disableRange || false; this._rangeChunkSize = source.rangeChunkSize; if (!this._rangeChunkSize && !this._disableRange) { this._disableRange = true; } this._isStreamingSupported = !source.disableStream; this._isRangeSupported = !source.disableRange; this._readableStream = null; this._readCapability = (0, _util.createPromiseCapability)(); this._headersCapability = (0, _util.createPromiseCapability)(); } _createClass(BaseFullReader, [{ key: "headersReady", get: function get() { return this._headersCapability.promise; } }, { key: "filename", get: function get() { return this._filename; } }, { key: "contentLength", get: function get() { return this._contentLength; } }, { key: "isRangeSupported", get: function get() { return this._isRangeSupported; } }, { key: "isStreamingSupported", get: function get() { return this._isStreamingSupported; } }, { key: "read", value: function () { var _read = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() { var chunk, buffer; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return this._readCapability.promise; case 2: if (!this._done) { _context.next = 4; break; } return _context.abrupt("return", { value: undefined, done: true }); case 4: if (!this._storedError) { _context.next = 6; break; } throw this._storedError; case 6: chunk = this._readableStream.read(); if (!(chunk === null)) { _context.next = 10; break; } this._readCapability = (0, _util.createPromiseCapability)(); return _context.abrupt("return", this.read()); case 10: this._loaded += chunk.length; if (this.onProgress) { this.onProgress({ loaded: this._loaded, total: this._contentLength }); } buffer = new Uint8Array(chunk).buffer; return _context.abrupt("return", { value: buffer, done: false }); case 14: case "end": return _context.stop(); } } }, _callee, this); })); function read() { return _read.apply(this, arguments); } return read; }() }, { key: "cancel", value: function cancel(reason) { if (!this._readableStream) { this._error(reason); return; } this._readableStream.destroy(reason); } }, { key: "_error", value: function _error(reason) { this._storedError = reason; this._readCapability.resolve(); } }, { key: "_setReadableStream", value: function _setReadableStream(readableStream) { var _this = this; this._readableStream = readableStream; readableStream.on("readable", function () { _this._readCapability.resolve(); }); readableStream.on("end", function () { readableStream.destroy(); _this._done = true; _this._readCapability.resolve(); }); readableStream.on("error", function (reason) { _this._error(reason); }); if (!this._isStreamingSupported && this._isRangeSupported) { this._error(new _util.AbortException("streaming is disabled")); } if (this._storedError) { this._readableStream.destroy(this._storedError); } } }]); return BaseFullReader; }(); var BaseRangeReader = /*#__PURE__*/function () { function BaseRangeReader(stream) { _classCallCheck(this, BaseRangeReader); this._url = stream.url; this._done = false; this._storedError = null; this.onProgress = null; this._loaded = 0; this._readableStream = null; this._readCapability = (0, _util.createPromiseCapability)(); var source = stream.source; this._isStreamingSupported = !source.disableStream; } _createClass(BaseRangeReader, [{ key: "isStreamingSupported", get: function get() { return this._isStreamingSupported; } }, { key: "read", value: function () { var _read2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { var chunk, buffer; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return this._readCapability.promise; case 2: if (!this._done) { _context2.next = 4; break; } return _context2.abrupt("return", { value: undefined, done: true }); case 4: if (!this._storedError) { _context2.next = 6; break; } throw this._storedError; case 6: chunk = this._readableStream.read(); if (!(chunk === null)) { _context2.next = 10; break; } this._readCapability = (0, _util.createPromiseCapability)(); return _context2.abrupt("return", this.read()); case 10: this._loaded += chunk.length; if (this.onProgress) { this.onProgress({ loaded: this._loaded }); } buffer = new Uint8Array(chunk).buffer; return _context2.abrupt("return", { value: buffer, done: false }); case 14: case "end": return _context2.stop(); } } }, _callee2, this); })); function read() { return _read2.apply(this, arguments); } return read; }() }, { key: "cancel", value: function cancel(reason) { if (!this._readableStream) { this._error(reason); return; } this._readableStream.destroy(reason); } }, { key: "_error", value: function _error(reason) { this._storedError = reason; this._readCapability.resolve(); } }, { key: "_setReadableStream", value: function _setReadableStream(readableStream) { var _this2 = this; this._readableStream = readableStream; readableStream.on("readable", function () { _this2._readCapability.resolve(); }); readableStream.on("end", function () { readableStream.destroy(); _this2._done = true; _this2._readCapability.resolve(); }); readableStream.on("error", function (reason) { _this2._error(reason); }); if (this._storedError) { this._readableStream.destroy(this._storedError); } } }]); return BaseRangeReader; }(); function createRequestOptions(parsedUrl, headers) { return { protocol: parsedUrl.protocol, auth: parsedUrl.auth, host: parsedUrl.hostname, port: parsedUrl.port, path: parsedUrl.path, method: "GET", headers: headers }; } var PDFNodeStreamFullReader = /*#__PURE__*/function (_BaseFullReader) { _inherits(PDFNodeStreamFullReader, _BaseFullReader); var _super = _createSuper(PDFNodeStreamFullReader); function PDFNodeStreamFullReader(stream) { var _this3; _classCallCheck(this, PDFNodeStreamFullReader); _this3 = _super.call(this, stream); var handleResponse = function handleResponse(response) { if (response.statusCode === 404) { var error = new _util.MissingPDFException("Missing PDF \"".concat(_this3._url, "\".")); _this3._storedError = error; _this3._headersCapability.reject(error); return; } _this3._headersCapability.resolve(); _this3._setReadableStream(response); var getResponseHeader = function getResponseHeader(name) { return _this3._readableStream.headers[name.toLowerCase()]; }; var _validateRangeRequest = (0, _network_utils.validateRangeRequestCapabilities)({ getResponseHeader: getResponseHeader, isHttp: stream.isHttp, rangeChunkSize: _this3._rangeChunkSize, disableRange: _this3._disableRange }), allowRangeRequests = _validateRangeRequest.allowRangeRequests, suggestedLength = _validateRangeRequest.suggestedLength; _this3._isRangeSupported = allowRangeRequests; _this3._contentLength = suggestedLength || _this3._contentLength; _this3._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); }; _this3._request = null; if (_this3._url.protocol === "http:") { _this3._request = http.request(createRequestOptions(_this3._url, stream.httpHeaders), handleResponse); } else { _this3._request = https.request(createRequestOptions(_this3._url, stream.httpHeaders), handleResponse); } _this3._request.on("error", function (reason) { _this3._storedError = reason; _this3._headersCapability.reject(reason); }); _this3._request.end(); return _this3; } return PDFNodeStreamFullReader; }(BaseFullReader); var PDFNodeStreamRangeReader = /*#__PURE__*/function (_BaseRangeReader) { _inherits(PDFNodeStreamRangeReader, _BaseRangeReader); var _super2 = _createSuper(PDFNodeStreamRangeReader); function PDFNodeStreamRangeReader(stream, start, end) { var _this4; _classCallCheck(this, PDFNodeStreamRangeReader); _this4 = _super2.call(this, stream); _this4._httpHeaders = {}; for (var property in stream.httpHeaders) { var value = stream.httpHeaders[property]; if (typeof value === "undefined") { continue; } _this4._httpHeaders[property] = value; } _this4._httpHeaders.Range = "bytes=".concat(start, "-").concat(end - 1); var handleResponse = function handleResponse(response) { if (response.statusCode === 404) { var error = new _util.MissingPDFException("Missing PDF \"".concat(_this4._url, "\".")); _this4._storedError = error; return; } _this4._setReadableStream(response); }; _this4._request = null; if (_this4._url.protocol === "http:") { _this4._request = http.request(createRequestOptions(_this4._url, _this4._httpHeaders), handleResponse); } else { _this4._request = https.request(createRequestOptions(_this4._url, _this4._httpHeaders), handleResponse); } _this4._request.on("error", function (reason) { _this4._storedError = reason; }); _this4._request.end(); return _this4; } return PDFNodeStreamRangeReader; }(BaseRangeReader); var PDFNodeStreamFsFullReader = /*#__PURE__*/function (_BaseFullReader2) { _inherits(PDFNodeStreamFsFullReader, _BaseFullReader2); var _super3 = _createSuper(PDFNodeStreamFsFullReader); function PDFNodeStreamFsFullReader(stream) { var _this5; _classCallCheck(this, PDFNodeStreamFsFullReader); _this5 = _super3.call(this, stream); var path = decodeURIComponent(_this5._url.path); if (fileUriRegex.test(_this5._url.href)) { path = path.replace(/^\//, ""); } fs.lstat(path, function (error, stat) { if (error) { if (error.code === "ENOENT") { error = new _util.MissingPDFException("Missing PDF \"".concat(path, "\".")); } _this5._storedError = error; _this5._headersCapability.reject(error); return; } _this5._contentLength = stat.size; _this5._setReadableStream(fs.createReadStream(path)); _this5._headersCapability.resolve(); }); return _this5; } return PDFNodeStreamFsFullReader; }(BaseFullReader); var PDFNodeStreamFsRangeReader = /*#__PURE__*/function (_BaseRangeReader2) { _inherits(PDFNodeStreamFsRangeReader, _BaseRangeReader2); var _super4 = _createSuper(PDFNodeStreamFsRangeReader); function PDFNodeStreamFsRangeReader(stream, start, end) { var _this6; _classCallCheck(this, PDFNodeStreamFsRangeReader); _this6 = _super4.call(this, stream); var path = decodeURIComponent(_this6._url.path); if (fileUriRegex.test(_this6._url.href)) { path = path.replace(/^\//, ""); } _this6._setReadableStream(fs.createReadStream(path, { start: start, end: end - 1 })); return _this6; } return PDFNodeStreamFsRangeReader; }(BaseRangeReader); /***/ }), /* 154 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.createResponseStatusError = createResponseStatusError; exports.extractFilenameFromHeader = extractFilenameFromHeader; exports.validateRangeRequestCapabilities = validateRangeRequestCapabilities; exports.validateResponseStatus = validateResponseStatus; var _util = __w_pdfjs_require__(4); var _content_disposition = __w_pdfjs_require__(155); function validateRangeRequestCapabilities(_ref) { var getResponseHeader = _ref.getResponseHeader, isHttp = _ref.isHttp, rangeChunkSize = _ref.rangeChunkSize, disableRange = _ref.disableRange; (0, _util.assert)(rangeChunkSize > 0, "Range chunk size must be larger than zero"); var returnValues = { allowRangeRequests: false, suggestedLength: undefined }; var length = parseInt(getResponseHeader("Content-Length"), 10); if (!Number.isInteger(length)) { return returnValues; } returnValues.suggestedLength = length; if (length <= 2 * rangeChunkSize) { return returnValues; } if (disableRange || !isHttp) { return returnValues; } if (getResponseHeader("Accept-Ranges") !== "bytes") { return returnValues; } var contentEncoding = getResponseHeader("Content-Encoding") || "identity"; if (contentEncoding !== "identity") { return returnValues; } returnValues.allowRangeRequests = true; return returnValues; } function extractFilenameFromHeader(getResponseHeader) { var contentDisposition = getResponseHeader("Content-Disposition"); if (contentDisposition) { var filename = (0, _content_disposition.getFilenameFromContentDispositionHeader)(contentDisposition); if (filename.includes("%")) { try { filename = decodeURIComponent(filename); } catch (ex) {} } if (/\.pdf$/i.test(filename)) { return filename; } } return null; } function createResponseStatusError(status, url) { if (status === 404 || status === 0 && url.startsWith("file:")) { return new _util.MissingPDFException('Missing PDF "' + url + '".'); } return new _util.UnexpectedResponseException("Unexpected server response (" + status + ') while retrieving PDF "' + url + '".', status); } function validateResponseStatus(status) { return status === 200 || status === 206; } /***/ }), /* 155 */ /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getFilenameFromContentDispositionHeader = getFilenameFromContentDispositionHeader; function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function getFilenameFromContentDispositionHeader(contentDisposition) { var needsEncodingFixup = true; var tmp = toParamRegExp("filename\\*", "i").exec(contentDisposition); if (tmp) { tmp = tmp[1]; var filename = rfc2616unquote(tmp); filename = unescape(filename); filename = rfc5987decode(filename); filename = rfc2047decode(filename); return fixupEncoding(filename); } tmp = rfc2231getparam(contentDisposition); if (tmp) { var _filename = rfc2047decode(tmp); return fixupEncoding(_filename); } tmp = toParamRegExp("filename", "i").exec(contentDisposition); if (tmp) { tmp = tmp[1]; var _filename2 = rfc2616unquote(tmp); _filename2 = rfc2047decode(_filename2); return fixupEncoding(_filename2); } function toParamRegExp(attributePattern, flags) { return new RegExp("(?:^|;)\\s*" + attributePattern + "\\s*=\\s*" + "(" + '[^";\\s][^;\\s]*' + "|" + '"(?:[^"\\\\]|\\\\"?)+"?' + ")", flags); } function textdecode(encoding, value) { if (encoding) { if (!/^[\x00-\xFF]+$/.test(value)) { return value; } try { var decoder = new TextDecoder(encoding, { fatal: true }); var bytes = Array.from(value, function (ch) { return ch.charCodeAt(0) & 0xff; }); value = decoder.decode(new Uint8Array(bytes)); needsEncodingFixup = false; } catch (e) { if (/^utf-?8$/i.test(encoding)) { try { value = decodeURIComponent(escape(value)); needsEncodingFixup = false; } catch (err) {} } } } return value; } function fixupEncoding(value) { if (needsEncodingFixup && /[\x80-\xff]/.test(value)) { value = textdecode("utf-8", value); if (needsEncodingFixup) { value = textdecode("iso-8859-1", value); } } return value; } function rfc2231getparam(contentDispositionStr) { var matches = []; var match; var iter = toParamRegExp("filename\\*((?!0\\d)\\d+)(\\*?)", "ig"); while ((match = iter.exec(contentDispositionStr)) !== null) { var _match = match, _match2 = _slicedToArray(_match, 4), n = _match2[1], quot = _match2[2], part = _match2[3]; n = parseInt(n, 10); if (n in matches) { if (n === 0) { break; } continue; } matches[n] = [quot, part]; } var parts = []; for (var _n2 = 0; _n2 < matches.length; ++_n2) { if (!(_n2 in matches)) { break; } var _matches$_n = _slicedToArray(matches[_n2], 2), _quot = _matches$_n[0], _part = _matches$_n[1]; _part = rfc2616unquote(_part); if (_quot) { _part = unescape(_part); if (_n2 === 0) { _part = rfc5987decode(_part); } } parts.push(_part); } return parts.join(""); } function rfc2616unquote(value) { if (value.startsWith('"')) { var parts = value.slice(1).split('\\"'); for (var i = 0; i < parts.length; ++i) { var quotindex = parts[i].indexOf('"'); if (quotindex !== -1) { parts[i] = parts[i].slice(0, quotindex); parts.length = i + 1; } parts[i] = parts[i].replace(/\\(.)/g, "$1"); } value = parts.join('"'); } return value; } function rfc5987decode(extvalue) { var encodingend = extvalue.indexOf("'"); if (encodingend === -1) { return extvalue; } var encoding = extvalue.slice(0, encodingend); var langvalue = extvalue.slice(encodingend + 1); var value = langvalue.replace(/^[^']*'/, ""); return textdecode(encoding, value); } function rfc2047decode(value) { if (!value.startsWith("=?") || /[\x00-\x19\x80-\xff]/.test(value)) { return value; } return value.replace(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function (matches, charset, encoding, text) { if (encoding === "q" || encoding === "Q") { text = text.replace(/_/g, " "); text = text.replace(/=([0-9a-fA-F]{2})/g, function (match, hex) { return String.fromCharCode(parseInt(hex, 16)); }); return textdecode(charset, text); } try { text = atob(text); } catch (e) {} return textdecode(charset, text); }); } return ""; } /***/ }), /* 156 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFNetworkStream = void 0; var _regenerator = _interopRequireDefault(__w_pdfjs_require__(2)); var _util = __w_pdfjs_require__(4); var _network_utils = __w_pdfjs_require__(154); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } ; var OK_RESPONSE = 200; var PARTIAL_CONTENT_RESPONSE = 206; function getArrayBuffer(xhr) { var data = xhr.response; if (typeof data !== "string") { return data; } var array = (0, _util.stringToBytes)(data); return array.buffer; } var NetworkManager = /*#__PURE__*/function () { function NetworkManager(url, args) { _classCallCheck(this, NetworkManager); this.url = url; args = args || {}; this.isHttp = /^https?:/i.test(url); this.httpHeaders = this.isHttp && args.httpHeaders || {}; this.withCredentials = args.withCredentials || false; this.getXhr = args.getXhr || function NetworkManager_getXhr() { return new XMLHttpRequest(); }; this.currXhrId = 0; this.pendingRequests = Object.create(null); } _createClass(NetworkManager, [{ key: "requestRange", value: function requestRange(begin, end, listeners) { var args = { begin: begin, end: end }; for (var prop in listeners) { args[prop] = listeners[prop]; } return this.request(args); } }, { key: "requestFull", value: function requestFull(listeners) { return this.request(listeners); } }, { key: "request", value: function request(args) { var xhr = this.getXhr(); var xhrId = this.currXhrId++; var pendingRequest = this.pendingRequests[xhrId] = { xhr: xhr }; xhr.open("GET", this.url); xhr.withCredentials = this.withCredentials; for (var property in this.httpHeaders) { var value = this.httpHeaders[property]; if (typeof value === "undefined") { continue; } xhr.setRequestHeader(property, value); } if (this.isHttp && "begin" in args && "end" in args) { xhr.setRequestHeader("Range", "bytes=".concat(args.begin, "-").concat(args.end - 1)); pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE; } else { pendingRequest.expectedStatus = OK_RESPONSE; } xhr.responseType = "arraybuffer"; if (args.onError) { xhr.onerror = function (evt) { args.onError(xhr.status); }; } xhr.onreadystatechange = this.onStateChange.bind(this, xhrId); xhr.onprogress = this.onProgress.bind(this, xhrId); pendingRequest.onHeadersReceived = args.onHeadersReceived; pendingRequest.onDone = args.onDone; pendingRequest.onError = args.onError; pendingRequest.onProgress = args.onProgress; xhr.send(null); return xhrId; } }, { key: "onProgress", value: function onProgress(xhrId, evt) { var pendingRequest = this.pendingRequests[xhrId]; if (!pendingRequest) { return; } if (pendingRequest.onProgress) { pendingRequest.onProgress(evt); } } }, { key: "onStateChange", value: function onStateChange(xhrId, evt) { var pendingRequest = this.pendingRequests[xhrId]; if (!pendingRequest) { return; } var xhr = pendingRequest.xhr; if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) { pendingRequest.onHeadersReceived(); delete pendingRequest.onHeadersReceived; } if (xhr.readyState !== 4) { return; } if (!(xhrId in this.pendingRequests)) { return; } delete this.pendingRequests[xhrId]; if (xhr.status === 0 && this.isHttp) { if (pendingRequest.onError) { pendingRequest.onError(xhr.status); } return; } var xhrStatus = xhr.status || OK_RESPONSE; var ok_response_on_range_request = xhrStatus === OK_RESPONSE && pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE; if (!ok_response_on_range_request && xhrStatus !== pendingRequest.expectedStatus) { if (pendingRequest.onError) { pendingRequest.onError(xhr.status); } return; } var chunk = getArrayBuffer(xhr); if (xhrStatus === PARTIAL_CONTENT_RESPONSE) { var rangeHeader = xhr.getResponseHeader("Content-Range"); var matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader); pendingRequest.onDone({ begin: parseInt(matches[1], 10), chunk: chunk }); } else if (chunk) { pendingRequest.onDone({ begin: 0, chunk: chunk }); } else if (pendingRequest.onError) { pendingRequest.onError(xhr.status); } } }, { key: "getRequestXhr", value: function getRequestXhr(xhrId) { return this.pendingRequests[xhrId].xhr; } }, { key: "isPendingRequest", value: function isPendingRequest(xhrId) { return xhrId in this.pendingRequests; } }, { key: "abortRequest", value: function abortRequest(xhrId) { var xhr = this.pendingRequests[xhrId].xhr; delete this.pendingRequests[xhrId]; xhr.abort(); } }]); return NetworkManager; }(); var PDFNetworkStream = /*#__PURE__*/function () { function PDFNetworkStream(source) { _classCallCheck(this, PDFNetworkStream); this._source = source; this._manager = new NetworkManager(source.url, { httpHeaders: source.httpHeaders, withCredentials: source.withCredentials }); this._rangeChunkSize = source.rangeChunkSize; this._fullRequestReader = null; this._rangeRequestReaders = []; } _createClass(PDFNetworkStream, [{ key: "_onRangeRequestReaderClosed", value: function _onRangeRequestReaderClosed(reader) { var i = this._rangeRequestReaders.indexOf(reader); if (i >= 0) { this._rangeRequestReaders.splice(i, 1); } } }, { key: "getFullReader", value: function getFullReader() { (0, _util.assert)(!this._fullRequestReader, "PDFNetworkStream.getFullReader can only be called once."); this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source); return this._fullRequestReader; } }, { key: "getRangeReader", value: function getRangeReader(begin, end) { var reader = new PDFNetworkStreamRangeRequestReader(this._manager, begin, end); reader.onClosed = this._onRangeRequestReaderClosed.bind(this); this._rangeRequestReaders.push(reader); return reader; } }, { key: "cancelAllRequests", value: function cancelAllRequests(reason) { if (this._fullRequestReader) { this._fullRequestReader.cancel(reason); } var readers = this._rangeRequestReaders.slice(0); readers.forEach(function (reader) { reader.cancel(reason); }); } }]); return PDFNetworkStream; }(); exports.PDFNetworkStream = PDFNetworkStream; var PDFNetworkStreamFullRequestReader = /*#__PURE__*/function () { function PDFNetworkStreamFullRequestReader(manager, source) { _classCallCheck(this, PDFNetworkStreamFullRequestReader); this._manager = manager; var args = { onHeadersReceived: this._onHeadersReceived.bind(this), onDone: this._onDone.bind(this), onError: this._onError.bind(this), onProgress: this._onProgress.bind(this) }; this._url = source.url; this._fullRequestId = manager.requestFull(args); this._headersReceivedCapability = (0, _util.createPromiseCapability)(); this._disableRange = source.disableRange || false; this._contentLength = source.length; this._rangeChunkSize = source.rangeChunkSize; if (!this._rangeChunkSize && !this._disableRange) { this._disableRange = true; } this._isStreamingSupported = false; this._isRangeSupported = false; this._cachedChunks = []; this._requests = []; this._done = false; this._storedError = undefined; this._filename = null; this.onProgress = null; } _createClass(PDFNetworkStreamFullRequestReader, [{ key: "_onHeadersReceived", value: function _onHeadersReceived() { var fullRequestXhrId = this._fullRequestId; var fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId); var getResponseHeader = function getResponseHeader(name) { return fullRequestXhr.getResponseHeader(name); }; var _validateRangeRequest = (0, _network_utils.validateRangeRequestCapabilities)({ getResponseHeader: getResponseHeader, isHttp: this._manager.isHttp, rangeChunkSize: this._rangeChunkSize, disableRange: this._disableRange }), allowRangeRequests = _validateRangeRequest.allowRangeRequests, suggestedLength = _validateRangeRequest.suggestedLength; if (allowRangeRequests) { this._isRangeSupported = true; } this._contentLength = suggestedLength || this._contentLength; this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); if (this._isRangeSupported) { this._manager.abortRequest(fullRequestXhrId); } this._headersReceivedCapability.resolve(); } }, { key: "_onDone", value: function _onDone(args) { if (args) { if (this._requests.length > 0) { var requestCapability = this._requests.shift(); requestCapability.resolve({ value: args.chunk, done: false }); } else { this._cachedChunks.push(args.chunk); } } this._done = true; if (this._cachedChunks.length > 0) { return; } this._requests.forEach(function (requestCapability) { requestCapability.resolve({ value: undefined, done: true }); }); this._requests = []; } }, { key: "_onError", value: function _onError(status) { var url = this._url; var exception = (0, _network_utils.createResponseStatusError)(status, url); this._storedError = exception; this._headersReceivedCapability.reject(exception); this._requests.forEach(function (requestCapability) { requestCapability.reject(exception); }); this._requests = []; this._cachedChunks = []; } }, { key: "_onProgress", value: function _onProgress(data) { if (this.onProgress) { this.onProgress({ loaded: data.loaded, total: data.lengthComputable ? data.total : this._contentLength }); } } }, { key: "filename", get: function get() { return this._filename; } }, { key: "isRangeSupported", get: function get() { return this._isRangeSupported; } }, { key: "isStreamingSupported", get: function get() { return this._isStreamingSupported; } }, { key: "contentLength", get: function get() { return this._contentLength; } }, { key: "headersReady", get: function get() { return this._headersReceivedCapability.promise; } }, { key: "read", value: function () { var _read = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() { var chunk, requestCapability; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (!this._storedError) { _context.next = 2; break; } throw this._storedError; case 2: if (!(this._cachedChunks.length > 0)) { _context.next = 5; break; } chunk = this._cachedChunks.shift(); return _context.abrupt("return", { value: chunk, done: false }); case 5: if (!this._done) { _context.next = 7; break; } return _context.abrupt("return", { value: undefined, done: true }); case 7: requestCapability = (0, _util.createPromiseCapability)(); this._requests.push(requestCapability); return _context.abrupt("return", requestCapability.promise); case 10: case "end": return _context.stop(); } } }, _callee, this); })); function read() { return _read.apply(this, arguments); } return read; }() }, { key: "cancel", value: function cancel(reason) { this._done = true; this._headersReceivedCapability.reject(reason); this._requests.forEach(function (requestCapability) { requestCapability.resolve({ value: undefined, done: true }); }); this._requests = []; if (this._manager.isPendingRequest(this._fullRequestId)) { this._manager.abortRequest(this._fullRequestId); } this._fullRequestReader = null; } }]); return PDFNetworkStreamFullRequestReader; }(); var PDFNetworkStreamRangeRequestReader = /*#__PURE__*/function () { function PDFNetworkStreamRangeRequestReader(manager, begin, end) { _classCallCheck(this, PDFNetworkStreamRangeRequestReader); this._manager = manager; var args = { onDone: this._onDone.bind(this), onProgress: this._onProgress.bind(this) }; this._requestId = manager.requestRange(begin, end, args); this._requests = []; this._queuedChunk = null; this._done = false; this.onProgress = null; this.onClosed = null; } _createClass(PDFNetworkStreamRangeRequestReader, [{ key: "_close", value: function _close() { if (this.onClosed) { this.onClosed(this); } } }, { key: "_onDone", value: function _onDone(data) { var chunk = data.chunk; if (this._requests.length > 0) { var requestCapability = this._requests.shift(); requestCapability.resolve({ value: chunk, done: false }); } else { this._queuedChunk = chunk; } this._done = true; this._requests.forEach(function (requestCapability) { requestCapability.resolve({ value: undefined, done: true }); }); this._requests = []; this._close(); } }, { key: "_onProgress", value: function _onProgress(evt) { if (!this.isStreamingSupported && this.onProgress) { this.onProgress({ loaded: evt.loaded }); } } }, { key: "isStreamingSupported", get: function get() { return false; } }, { key: "read", value: function () { var _read2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { var chunk, requestCapability; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: if (!(this._queuedChunk !== null)) { _context2.next = 4; break; } chunk = this._queuedChunk; this._queuedChunk = null; return _context2.abrupt("return", { value: chunk, done: false }); case 4: if (!this._done) { _context2.next = 6; break; } return _context2.abrupt("return", { value: undefined, done: true }); case 6: requestCapability = (0, _util.createPromiseCapability)(); this._requests.push(requestCapability); return _context2.abrupt("return", requestCapability.promise); case 9: case "end": return _context2.stop(); } } }, _callee2, this); })); function read() { return _read2.apply(this, arguments); } return read; }() }, { key: "cancel", value: function cancel(reason) { this._done = true; this._requests.forEach(function (requestCapability) { requestCapability.resolve({ value: undefined, done: true }); }); this._requests = []; if (this._manager.isPendingRequest(this._requestId)) { this._manager.abortRequest(this._requestId); } this._close(); } }]); return PDFNetworkStreamRangeRequestReader; }(); /***/ }), /* 157 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFFetchStream = void 0; var _regenerator = _interopRequireDefault(__w_pdfjs_require__(2)); var _util = __w_pdfjs_require__(4); var _network_utils = __w_pdfjs_require__(154); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } ; function createFetchOptions(headers, withCredentials, abortController) { return { method: "GET", headers: headers, signal: abortController === null || abortController === void 0 ? void 0 : abortController.signal, mode: "cors", credentials: withCredentials ? "include" : "same-origin", redirect: "follow" }; } function createHeaders(httpHeaders) { var headers = new Headers(); for (var property in httpHeaders) { var value = httpHeaders[property]; if (typeof value === "undefined") { continue; } headers.append(property, value); } return headers; } var PDFFetchStream = /*#__PURE__*/function () { function PDFFetchStream(source) { _classCallCheck(this, PDFFetchStream); this.source = source; this.isHttp = /^https?:/i.test(source.url); this.httpHeaders = this.isHttp && source.httpHeaders || {}; this._fullRequestReader = null; this._rangeRequestReaders = []; } _createClass(PDFFetchStream, [{ key: "_progressiveDataLength", get: function get() { var _this$_fullRequestRea, _this$_fullRequestRea2; return (_this$_fullRequestRea = (_this$_fullRequestRea2 = this._fullRequestReader) === null || _this$_fullRequestRea2 === void 0 ? void 0 : _this$_fullRequestRea2._loaded) !== null && _this$_fullRequestRea !== void 0 ? _this$_fullRequestRea : 0; } }, { key: "getFullReader", value: function getFullReader() { (0, _util.assert)(!this._fullRequestReader, "PDFFetchStream.getFullReader can only be called once."); this._fullRequestReader = new PDFFetchStreamReader(this); return this._fullRequestReader; } }, { key: "getRangeReader", value: function getRangeReader(begin, end) { if (end <= this._progressiveDataLength) { return null; } var reader = new PDFFetchStreamRangeReader(this, begin, end); this._rangeRequestReaders.push(reader); return reader; } }, { key: "cancelAllRequests", value: function cancelAllRequests(reason) { if (this._fullRequestReader) { this._fullRequestReader.cancel(reason); } var readers = this._rangeRequestReaders.slice(0); readers.forEach(function (reader) { reader.cancel(reason); }); } }]); return PDFFetchStream; }(); exports.PDFFetchStream = PDFFetchStream; var PDFFetchStreamReader = /*#__PURE__*/function () { function PDFFetchStreamReader(stream) { var _this = this; _classCallCheck(this, PDFFetchStreamReader); this._stream = stream; this._reader = null; this._loaded = 0; this._filename = null; var source = stream.source; this._withCredentials = source.withCredentials || false; this._contentLength = source.length; this._headersCapability = (0, _util.createPromiseCapability)(); this._disableRange = source.disableRange || false; this._rangeChunkSize = source.rangeChunkSize; if (!this._rangeChunkSize && !this._disableRange) { this._disableRange = true; } if (typeof AbortController !== "undefined") { this._abortController = new AbortController(); } this._isStreamingSupported = !source.disableStream; this._isRangeSupported = !source.disableRange; this._headers = createHeaders(this._stream.httpHeaders); var url = source.url; fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(function (response) { if (!(0, _network_utils.validateResponseStatus)(response.status)) { throw (0, _network_utils.createResponseStatusError)(response.status, url); } _this._reader = response.body.getReader(); _this._headersCapability.resolve(); var getResponseHeader = function getResponseHeader(name) { return response.headers.get(name); }; var _validateRangeRequest = (0, _network_utils.validateRangeRequestCapabilities)({ getResponseHeader: getResponseHeader, isHttp: _this._stream.isHttp, rangeChunkSize: _this._rangeChunkSize, disableRange: _this._disableRange }), allowRangeRequests = _validateRangeRequest.allowRangeRequests, suggestedLength = _validateRangeRequest.suggestedLength; _this._isRangeSupported = allowRangeRequests; _this._contentLength = suggestedLength || _this._contentLength; _this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); if (!_this._isStreamingSupported && _this._isRangeSupported) { _this.cancel(new _util.AbortException("Streaming is disabled.")); } })["catch"](this._headersCapability.reject); this.onProgress = null; } _createClass(PDFFetchStreamReader, [{ key: "headersReady", get: function get() { return this._headersCapability.promise; } }, { key: "filename", get: function get() { return this._filename; } }, { key: "contentLength", get: function get() { return this._contentLength; } }, { key: "isRangeSupported", get: function get() { return this._isRangeSupported; } }, { key: "isStreamingSupported", get: function get() { return this._isStreamingSupported; } }, { key: "read", value: function () { var _read = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() { var _yield$this$_reader$r, value, done, buffer; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return this._headersCapability.promise; case 2: _context.next = 4; return this._reader.read(); case 4: _yield$this$_reader$r = _context.sent; value = _yield$this$_reader$r.value; done = _yield$this$_reader$r.done; if (!done) { _context.next = 9; break; } return _context.abrupt("return", { value: value, done: done }); case 9: this._loaded += value.byteLength; if (this.onProgress) { this.onProgress({ loaded: this._loaded, total: this._contentLength }); } buffer = new Uint8Array(value).buffer; return _context.abrupt("return", { value: buffer, done: false }); case 13: case "end": return _context.stop(); } } }, _callee, this); })); function read() { return _read.apply(this, arguments); } return read; }() }, { key: "cancel", value: function cancel(reason) { if (this._reader) { this._reader.cancel(reason); } if (this._abortController) { this._abortController.abort(); } } }]); return PDFFetchStreamReader; }(); var PDFFetchStreamRangeReader = /*#__PURE__*/function () { function PDFFetchStreamRangeReader(stream, begin, end) { var _this2 = this; _classCallCheck(this, PDFFetchStreamRangeReader); this._stream = stream; this._reader = null; this._loaded = 0; var source = stream.source; this._withCredentials = source.withCredentials || false; this._readCapability = (0, _util.createPromiseCapability)(); this._isStreamingSupported = !source.disableStream; if (typeof AbortController !== "undefined") { this._abortController = new AbortController(); } this._headers = createHeaders(this._stream.httpHeaders); this._headers.append("Range", "bytes=".concat(begin, "-").concat(end - 1)); var url = source.url; fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(function (response) { if (!(0, _network_utils.validateResponseStatus)(response.status)) { throw (0, _network_utils.createResponseStatusError)(response.status, url); } _this2._readCapability.resolve(); _this2._reader = response.body.getReader(); })["catch"](function (reason) { if ((reason === null || reason === void 0 ? void 0 : reason.name) === "AbortError") { return; } throw reason; }); this.onProgress = null; } _createClass(PDFFetchStreamRangeReader, [{ key: "isStreamingSupported", get: function get() { return this._isStreamingSupported; } }, { key: "read", value: function () { var _read2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { var _yield$this$_reader$r2, value, done, buffer; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return this._readCapability.promise; case 2: _context2.next = 4; return this._reader.read(); case 4: _yield$this$_reader$r2 = _context2.sent; value = _yield$this$_reader$r2.value; done = _yield$this$_reader$r2.done; if (!done) { _context2.next = 9; break; } return _context2.abrupt("return", { value: value, done: done }); case 9: this._loaded += value.byteLength; if (this.onProgress) { this.onProgress({ loaded: this._loaded }); } buffer = new Uint8Array(value).buffer; return _context2.abrupt("return", { value: buffer, done: false }); case 13: case "end": return _context2.stop(); } } }, _callee2, this); })); function read() { return _read2.apply(this, arguments); } return read; }() }, { key: "cancel", value: function cancel(reason) { if (this._reader) { this._reader.cancel(reason); } if (this._abortController) { this._abortController.abort(); } } }]); return PDFFetchStreamRangeReader; }(); /***/ }) /******/ ]); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __w_pdfjs_require__(moduleId) { /******/ // Check if module is in cache /******/ if(__webpack_module_cache__[moduleId]) { /******/ return __webpack_module_cache__[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ id: moduleId, /******/ loaded: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __w_pdfjs_require__); /******/ /******/ // Flag the module as loaded /******/ module.loaded = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/node module decorator */ /******/ (() => { /******/ __w_pdfjs_require__.nmd = (module) => { /******/ module.paths = []; /******/ if (!module.children) module.children = []; /******/ return module; /******/ }; /******/ })(); /******/ /************************************************************************/ /******/ // module exports must be returned from runtime so entry inlining is disabled /******/ // startup /******/ // Load entry module and return exports /******/ return __w_pdfjs_require__(0); /******/ })() ; }); //# sourceMappingURL=pdf.js.map ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/pdf.worker.js ================================================ /** * @licstart The following is the entire license notice for the * Javascript code in this page * * Copyright 2020 Mozilla Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * @licend The above is the entire license notice for the * Javascript code in this page */ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define("pdfjs-dist/build/pdf.worker", [], factory); else if(typeof exports === 'object') exports["pdfjs-dist/build/pdf.worker"] = factory(); else root["pdfjs-dist/build/pdf.worker"] = root.pdfjsWorker = factory(); })(this, function() { return /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ([ /* 0 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "WorkerMessageHandler", ({ enumerable: true, get: function get() { return _worker.WorkerMessageHandler; } })); var _worker = __w_pdfjs_require__(1); var pdfjsVersion = '2.8.57'; var pdfjsBuild = '3d33313e4'; /***/ }), /* 1 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.WorkerTask = exports.WorkerMessageHandler = void 0; var _regenerator = _interopRequireDefault(__w_pdfjs_require__(2)); var _util = __w_pdfjs_require__(4); var _primitives = __w_pdfjs_require__(135); var _pdf_manager = __w_pdfjs_require__(136); var _writer = __w_pdfjs_require__(176); var _is_node = __w_pdfjs_require__(6); var _message_handler = __w_pdfjs_require__(178); var _worker_stream = __w_pdfjs_require__(179); var _core_utils = __w_pdfjs_require__(138); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var WorkerTask = /*#__PURE__*/function () { function WorkerTask(name) { _classCallCheck(this, WorkerTask); this.name = name; this.terminated = false; this._capability = (0, _util.createPromiseCapability)(); } _createClass(WorkerTask, [{ key: "finished", get: function get() { return this._capability.promise; } }, { key: "finish", value: function finish() { this._capability.resolve(); } }, { key: "terminate", value: function terminate() { this.terminated = true; } }, { key: "ensureNotTerminated", value: function ensureNotTerminated() { if (this.terminated) { throw new Error("Worker task was terminated"); } } }]); return WorkerTask; }(); exports.WorkerTask = WorkerTask; var WorkerMessageHandler = /*#__PURE__*/function () { function WorkerMessageHandler() { _classCallCheck(this, WorkerMessageHandler); } _createClass(WorkerMessageHandler, null, [{ key: "setup", value: function setup(handler, port) { var testMessageProcessed = false; handler.on("test", function wphSetupTest(data) { if (testMessageProcessed) { return; } testMessageProcessed = true; if (!(data instanceof Uint8Array)) { handler.send("test", null); return; } var supportTransfers = data[0] === 255; handler.postMessageTransfers = supportTransfers; handler.send("test", { supportTransfers: supportTransfers }); }); handler.on("configure", function wphConfigure(data) { (0, _util.setVerbosityLevel)(data.verbosity); }); handler.on("GetDocRequest", function wphSetupDoc(data) { return WorkerMessageHandler.createDocumentHandler(data, port); }); } }, { key: "createDocumentHandler", value: function createDocumentHandler(docParams, port) { var pdfManager; var terminated = false; var cancelXHRs = null; var WorkerTasks = []; var verbosity = (0, _util.getVerbosityLevel)(); var apiVersion = docParams.apiVersion; var workerVersion = '2.8.57'; if (apiVersion !== workerVersion) { throw new Error("The API version \"".concat(apiVersion, "\" does not match ") + "the Worker version \"".concat(workerVersion, "\".")); } var enumerableProperties = []; for (var property in []) { enumerableProperties.push(property); } if (enumerableProperties.length) { throw new Error("The `Array.prototype` contains unexpected enumerable properties: " + enumerableProperties.join(", ") + "; thus breaking e.g. `for...in` iteration of `Array`s."); } var docId = docParams.docId; var docBaseUrl = docParams.docBaseUrl; var workerHandlerName = docParams.docId + "_worker"; var handler = new _message_handler.MessageHandler(workerHandlerName, docId, port); handler.postMessageTransfers = docParams.postMessageTransfers; function ensureNotTerminated() { if (terminated) { throw new Error("Worker was terminated"); } } function startWorkerTask(task) { WorkerTasks.push(task); } function finishWorkerTask(task) { task.finish(); var i = WorkerTasks.indexOf(task); WorkerTasks.splice(i, 1); } function loadDocument(_x) { return _loadDocument.apply(this, arguments); } function _loadDocument() { _loadDocument = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(recoveryMode) { var _yield$Promise$all, _yield$Promise$all2, numPages, fingerprint; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return pdfManager.ensureDoc("checkHeader"); case 2: _context.next = 4; return pdfManager.ensureDoc("parseStartXRef"); case 4: _context.next = 6; return pdfManager.ensureDoc("parse", [recoveryMode]); case 6: if (recoveryMode) { _context.next = 9; break; } _context.next = 9; return pdfManager.ensureDoc("checkFirstPage"); case 9: _context.next = 11; return Promise.all([pdfManager.ensureDoc("numPages"), pdfManager.ensureDoc("fingerprint")]); case 11: _yield$Promise$all = _context.sent; _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 2); numPages = _yield$Promise$all2[0]; fingerprint = _yield$Promise$all2[1]; return _context.abrupt("return", { numPages: numPages, fingerprint: fingerprint }); case 16: case "end": return _context.stop(); } } }, _callee); })); return _loadDocument.apply(this, arguments); } function getPdfManager(data, evaluatorOptions) { var pdfManagerCapability = (0, _util.createPromiseCapability)(); var newPdfManager; var source = data.source; if (source.data) { try { newPdfManager = new _pdf_manager.LocalPdfManager(docId, source.data, source.password, evaluatorOptions, docBaseUrl); pdfManagerCapability.resolve(newPdfManager); } catch (ex) { pdfManagerCapability.reject(ex); } return pdfManagerCapability.promise; } var pdfStream, cachedChunks = []; try { pdfStream = new _worker_stream.PDFWorkerStream(handler); } catch (ex) { pdfManagerCapability.reject(ex); return pdfManagerCapability.promise; } var fullRequest = pdfStream.getFullReader(); fullRequest.headersReady.then(function () { if (!fullRequest.isRangeSupported) { return; } var disableAutoFetch = source.disableAutoFetch || fullRequest.isStreamingSupported; newPdfManager = new _pdf_manager.NetworkPdfManager(docId, pdfStream, { msgHandler: handler, password: source.password, length: fullRequest.contentLength, disableAutoFetch: disableAutoFetch, rangeChunkSize: source.rangeChunkSize }, evaluatorOptions, docBaseUrl); for (var i = 0; i < cachedChunks.length; i++) { newPdfManager.sendProgressiveData(cachedChunks[i]); } cachedChunks = []; pdfManagerCapability.resolve(newPdfManager); cancelXHRs = null; })["catch"](function (reason) { pdfManagerCapability.reject(reason); cancelXHRs = null; }); var loaded = 0; var flushChunks = function flushChunks() { var pdfFile = (0, _util.arraysToBytes)(cachedChunks); if (source.length && pdfFile.length !== source.length) { (0, _util.warn)("reported HTTP length is different from actual"); } try { newPdfManager = new _pdf_manager.LocalPdfManager(docId, pdfFile, source.password, evaluatorOptions, docBaseUrl); pdfManagerCapability.resolve(newPdfManager); } catch (ex) { pdfManagerCapability.reject(ex); } cachedChunks = []; }; var readPromise = new Promise(function (resolve, reject) { var readChunk = function readChunk(_ref) { var value = _ref.value, done = _ref.done; try { ensureNotTerminated(); if (done) { if (!newPdfManager) { flushChunks(); } cancelXHRs = null; return; } loaded += (0, _util.arrayByteLength)(value); if (!fullRequest.isStreamingSupported) { handler.send("DocProgress", { loaded: loaded, total: Math.max(loaded, fullRequest.contentLength || 0) }); } if (newPdfManager) { newPdfManager.sendProgressiveData(value); } else { cachedChunks.push(value); } fullRequest.read().then(readChunk, reject); } catch (e) { reject(e); } }; fullRequest.read().then(readChunk, reject); }); readPromise["catch"](function (e) { pdfManagerCapability.reject(e); cancelXHRs = null; }); cancelXHRs = function cancelXHRs(reason) { pdfStream.cancelAllRequests(reason); }; return pdfManagerCapability.promise; } function setupDoc(data) { function onSuccess(doc) { ensureNotTerminated(); handler.send("GetDoc", { pdfInfo: doc }); } function onFailure(ex) { ensureNotTerminated(); if (ex instanceof _util.PasswordException) { var task = new WorkerTask("PasswordException: response ".concat(ex.code)); startWorkerTask(task); handler.sendWithPromise("PasswordRequest", ex).then(function (_ref2) { var password = _ref2.password; finishWorkerTask(task); pdfManager.updatePassword(password); pdfManagerReady(); })["catch"](function () { finishWorkerTask(task); handler.send("DocException", ex); }); } else if (ex instanceof _util.InvalidPDFException || ex instanceof _util.MissingPDFException || ex instanceof _util.UnexpectedResponseException || ex instanceof _util.UnknownErrorException) { handler.send("DocException", ex); } else { handler.send("DocException", new _util.UnknownErrorException(ex.message, ex.toString())); } } function pdfManagerReady() { ensureNotTerminated(); loadDocument(false).then(onSuccess, function (reason) { ensureNotTerminated(); if (!(reason instanceof _core_utils.XRefParseException)) { onFailure(reason); return; } pdfManager.requestLoadedStream(); pdfManager.onLoadedStream().then(function () { ensureNotTerminated(); loadDocument(true).then(onSuccess, onFailure); }); }); } ensureNotTerminated(); var evaluatorOptions = { maxImageSize: data.maxImageSize, disableFontFace: data.disableFontFace, ignoreErrors: data.ignoreErrors, isEvalSupported: data.isEvalSupported, fontExtraProperties: data.fontExtraProperties }; getPdfManager(data, evaluatorOptions).then(function (newPdfManager) { if (terminated) { newPdfManager.terminate(new _util.AbortException("Worker was terminated.")); throw new Error("Worker was terminated"); } pdfManager = newPdfManager; pdfManager.onLoadedStream().then(function (stream) { handler.send("DataLoaded", { length: stream.bytes.byteLength }); }); }).then(pdfManagerReady, onFailure); } handler.on("GetPage", function wphSetupGetPage(data) { return pdfManager.getPage(data.pageIndex).then(function (page) { return Promise.all([pdfManager.ensure(page, "rotate"), pdfManager.ensure(page, "ref"), pdfManager.ensure(page, "userUnit"), pdfManager.ensure(page, "view")]).then(function (_ref3) { var _ref4 = _slicedToArray(_ref3, 4), rotate = _ref4[0], ref = _ref4[1], userUnit = _ref4[2], view = _ref4[3]; return { rotate: rotate, ref: ref, userUnit: userUnit, view: view }; }); }); }); handler.on("GetPageIndex", function wphSetupGetPageIndex(_ref5) { var ref = _ref5.ref; var pageRef = _primitives.Ref.get(ref.num, ref.gen); return pdfManager.ensureCatalog("getPageIndex", [pageRef]); }); handler.on("GetDestinations", function wphSetupGetDestinations(data) { return pdfManager.ensureCatalog("destinations"); }); handler.on("GetDestination", function wphSetupGetDestination(data) { return pdfManager.ensureCatalog("getDestination", [data.id]); }); handler.on("GetPageLabels", function wphSetupGetPageLabels(data) { return pdfManager.ensureCatalog("pageLabels"); }); handler.on("GetPageLayout", function wphSetupGetPageLayout(data) { return pdfManager.ensureCatalog("pageLayout"); }); handler.on("GetPageMode", function wphSetupGetPageMode(data) { return pdfManager.ensureCatalog("pageMode"); }); handler.on("GetViewerPreferences", function (data) { return pdfManager.ensureCatalog("viewerPreferences"); }); handler.on("GetOpenAction", function (data) { return pdfManager.ensureCatalog("openAction"); }); handler.on("GetAttachments", function wphSetupGetAttachments(data) { return pdfManager.ensureCatalog("attachments"); }); handler.on("GetJavaScript", function wphSetupGetJavaScript(data) { return pdfManager.ensureCatalog("javaScript"); }); handler.on("GetDocJSActions", function wphSetupGetDocJSActions(data) { return pdfManager.ensureCatalog("jsActions"); }); handler.on("GetPageJSActions", function (_ref6) { var pageIndex = _ref6.pageIndex; return pdfManager.getPage(pageIndex).then(function (page) { return page.jsActions; }); }); handler.on("GetOutline", function wphSetupGetOutline(data) { return pdfManager.ensureCatalog("documentOutline"); }); handler.on("GetOptionalContentConfig", function (data) { return pdfManager.ensureCatalog("optionalContentConfig"); }); handler.on("GetPermissions", function (data) { return pdfManager.ensureCatalog("permissions"); }); handler.on("GetMetadata", function wphSetupGetMetadata(data) { return Promise.all([pdfManager.ensureDoc("documentInfo"), pdfManager.ensureCatalog("metadata")]); }); handler.on("GetMarkInfo", function wphSetupGetMarkInfo(data) { return pdfManager.ensureCatalog("markInfo"); }); handler.on("GetData", function wphSetupGetData(data) { pdfManager.requestLoadedStream(); return pdfManager.onLoadedStream().then(function (stream) { return stream.bytes; }); }); handler.on("GetStats", function wphSetupGetStats(data) { return pdfManager.ensureXRef("stats"); }); handler.on("GetAnnotations", function (_ref7) { var pageIndex = _ref7.pageIndex, intent = _ref7.intent; return pdfManager.getPage(pageIndex).then(function (page) { return page.getAnnotationsData(intent); }); }); handler.on("GetFieldObjects", function (data) { return pdfManager.ensureDoc("fieldObjects"); }); handler.on("HasJSActions", function (data) { return pdfManager.ensureDoc("hasJSActions"); }); handler.on("GetCalculationOrderIds", function (data) { return pdfManager.ensureDoc("calculationOrderIds"); }); handler.on("SaveDocument", function (_ref8) { var numPages = _ref8.numPages, annotationStorage = _ref8.annotationStorage, filename = _ref8.filename; pdfManager.requestLoadedStream(); var promises = [pdfManager.onLoadedStream(), pdfManager.ensureCatalog("acroForm"), pdfManager.ensureDoc("xref"), pdfManager.ensureDoc("startXRef")]; var _loop = function _loop(pageIndex) { promises.push(pdfManager.getPage(pageIndex).then(function (page) { var task = new WorkerTask("Save: page ".concat(pageIndex)); startWorkerTask(task); return page.save(handler, task, annotationStorage)["finally"](function () { finishWorkerTask(task); }); })); }; for (var pageIndex = 0; pageIndex < numPages; pageIndex++) { _loop(pageIndex); } return Promise.all(promises).then(function (_ref9) { var _ref10 = _toArray(_ref9), stream = _ref10[0], acroForm = _ref10[1], xref = _ref10[2], startXRef = _ref10[3], refs = _ref10.slice(4); var newRefs = []; var _iterator = _createForOfIteratorHelper(refs), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var ref = _step.value; newRefs = ref.filter(function (x) { return x !== null; }).reduce(function (a, b) { return a.concat(b); }, newRefs); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } if (newRefs.length === 0) { return stream.bytes; } var xfa = acroForm instanceof _primitives.Dict && acroForm.get("XFA") || []; var xfaDatasets = null; if (Array.isArray(xfa)) { for (var i = 0, ii = xfa.length; i < ii; i += 2) { if (xfa[i] === "datasets") { xfaDatasets = xfa[i + 1]; } } } else { (0, _util.warn)("Unsupported XFA type."); } var newXrefInfo = Object.create(null); if (xref.trailer) { var infoObj = Object.create(null); var xrefInfo = xref.trailer.get("Info") || null; if (xrefInfo instanceof _primitives.Dict) { xrefInfo.forEach(function (key, value) { if ((0, _util.isString)(key) && (0, _util.isString)(value)) { infoObj[key] = (0, _util.stringToPDFString)(value); } }); } newXrefInfo = { rootRef: xref.trailer.getRaw("Root") || null, encrypt: xref.trailer.getRaw("Encrypt") || null, newRef: xref.getNewRef(), infoRef: xref.trailer.getRaw("Info") || null, info: infoObj, fileIds: xref.trailer.getRaw("ID") || null, startXRef: startXRef, filename: filename }; } xref.resetNewRef(); return (0, _writer.incrementalUpdate)({ originalData: stream.bytes, xrefInfo: newXrefInfo, newRefs: newRefs, xref: xref, datasetsRef: xfaDatasets }); }); }); handler.on("GetOperatorList", function wphSetupRenderPage(data, sink) { var pageIndex = data.pageIndex; pdfManager.getPage(pageIndex).then(function (page) { var task = new WorkerTask("GetOperatorList: page ".concat(pageIndex)); startWorkerTask(task); var start = verbosity >= _util.VerbosityLevel.INFOS ? Date.now() : 0; page.getOperatorList({ handler: handler, sink: sink, task: task, intent: data.intent, renderInteractiveForms: data.renderInteractiveForms, annotationStorage: data.annotationStorage }).then(function (operatorListInfo) { finishWorkerTask(task); if (start) { (0, _util.info)("page=".concat(pageIndex + 1, " - getOperatorList: time=") + "".concat(Date.now() - start, "ms, len=").concat(operatorListInfo.length)); } sink.close(); }, function (reason) { finishWorkerTask(task); if (task.terminated) { return; } handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorOperatorList }); sink.error(reason); }); }); }); handler.on("GetTextContent", function wphExtractText(data, sink) { var pageIndex = data.pageIndex; sink.onPull = function (desiredSize) {}; sink.onCancel = function (reason) {}; pdfManager.getPage(pageIndex).then(function (page) { var task = new WorkerTask("GetTextContent: page " + pageIndex); startWorkerTask(task); var start = verbosity >= _util.VerbosityLevel.INFOS ? Date.now() : 0; page.extractTextContent({ handler: handler, task: task, sink: sink, normalizeWhitespace: data.normalizeWhitespace, combineTextItems: data.combineTextItems }).then(function () { finishWorkerTask(task); if (start) { (0, _util.info)("page=".concat(pageIndex + 1, " - getTextContent: time=") + "".concat(Date.now() - start, "ms")); } sink.close(); }, function (reason) { finishWorkerTask(task); if (task.terminated) { return; } sink.error(reason); }); }); }); handler.on("FontFallback", function (data) { return pdfManager.fontFallback(data.id, handler); }); handler.on("Cleanup", function wphCleanup(data) { return pdfManager.cleanup(true); }); handler.on("Terminate", function wphTerminate(data) { terminated = true; var waitOn = []; if (pdfManager) { pdfManager.terminate(new _util.AbortException("Worker was terminated.")); var cleanupPromise = pdfManager.cleanup(); waitOn.push(cleanupPromise); pdfManager = null; } else { (0, _primitives.clearPrimitiveCaches)(); } if (cancelXHRs) { cancelXHRs(new _util.AbortException("Worker was terminated.")); } WorkerTasks.forEach(function (task) { waitOn.push(task.finished); task.terminate(); }); return Promise.all(waitOn).then(function () { handler.destroy(); handler = null; }); }); handler.on("Ready", function wphReady(data) { setupDoc(docParams); docParams = null; }); return workerHandlerName; } }, { key: "initializeFromPort", value: function initializeFromPort(port) { var handler = new _message_handler.MessageHandler("worker", "main", port); WorkerMessageHandler.setup(handler, port); handler.send("ready", null); } }]); return WorkerMessageHandler; }(); exports.WorkerMessageHandler = WorkerMessageHandler; function isMessagePort(maybePort) { return typeof maybePort.postMessage === "function" && "onmessage" in maybePort; } if (typeof window === "undefined" && !_is_node.isNodeJS && typeof self !== "undefined" && isMessagePort(self)) { WorkerMessageHandler.initializeFromPort(self); } /***/ }), /* 2 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; module.exports = __w_pdfjs_require__(3); /***/ }), /* 3 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; /* module decorator */ module = __w_pdfjs_require__.nmd(module); function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var runtime = function (exports) { "use strict"; var Op = Object.prototype; var hasOwn = Op.hasOwnProperty; var undefined; var $Symbol = typeof Symbol === "function" ? Symbol : {}; var iteratorSymbol = $Symbol.iterator || "@@iterator"; var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); return obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; var generator = Object.create(protoGenerator.prototype); var context = new Context(tryLocsList || []); generator._invoke = makeInvokeMethod(innerFn, self, context); return generator; } exports.wrap = wrap; function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } var GenStateSuspendedStart = "suspendedStart"; var GenStateSuspendedYield = "suspendedYield"; var GenStateExecuting = "executing"; var GenStateCompleted = "completed"; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; IteratorPrototype[iteratorSymbol] = function () { return this; }; var getProto = Object.getPrototypeOf; var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { IteratorPrototype = NativeIteratorPrototype; } var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; GeneratorFunctionPrototype.constructor = GeneratorFunction; GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } exports.isGeneratorFunction = function (genFun) { var ctor = typeof genFun === "function" && genFun.constructor; return ctor ? ctor === GeneratorFunction || (ctor.displayName || ctor.name) === "GeneratorFunction" : false; }; exports.mark = function (genFun) { if (Object.setPrototypeOf) { Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); } else { genFun.__proto__ = GeneratorFunctionPrototype; define(genFun, toStringTagSymbol, "GeneratorFunction"); } genFun.prototype = Object.create(Gp); return genFun; }; exports.awrap = function (arg) { return { __await: arg }; }; function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if (record.type === "throw") { reject(record.arg); } else { var result = record.arg; var value = result.value; if (value && _typeof(value) === "object" && hasOwn.call(value, "__await")) { return PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }); } return PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped; resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } } var previousPromise; function enqueue(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } this._invoke = enqueue; } defineIteratorMethods(AsyncIterator.prototype); AsyncIterator.prototype[asyncIteratorSymbol] = function () { return this; }; exports.AsyncIterator = AsyncIterator; exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { if (PromiseImpl === void 0) PromiseImpl = Promise; var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }; function makeInvokeMethod(innerFn, self, context) { var state = GenStateSuspendedStart; return function invoke(method, arg) { if (state === GenStateExecuting) { throw new Error("Generator is already running"); } if (state === GenStateCompleted) { if (method === "throw") { throw arg; } return doneResult(); } context.method = method; context.arg = arg; while (true) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if (context.method === "next") { context.sent = context._sent = context.arg; } else if (context.method === "throw") { if (state === GenStateSuspendedStart) { state = GenStateCompleted; throw context.arg; } context.dispatchException(context.arg); } else if (context.method === "return") { context.abrupt("return", context.arg); } state = GenStateExecuting; var record = tryCatch(innerFn, self, context); if (record.type === "normal") { state = context.done ? GenStateCompleted : GenStateSuspendedYield; if (record.arg === ContinueSentinel) { continue; } return { value: record.arg, done: context.done }; } else if (record.type === "throw") { state = GenStateCompleted; context.method = "throw"; context.arg = record.arg; } } }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (method === undefined) { context.delegate = null; if (context.method === "throw") { if (delegate.iterator["return"]) { context.method = "return"; context.arg = undefined; maybeInvokeDelegate(delegate, context); if (context.method === "throw") { return ContinueSentinel; } } context.method = "throw"; context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if (record.type === "throw") { context.method = "throw"; context.arg = record.arg; context.delegate = null; return ContinueSentinel; } var info = record.arg; if (!info) { context.method = "throw"; context.arg = new TypeError("iterator result is not an object"); context.delegate = null; return ContinueSentinel; } if (info.done) { context[delegate.resultName] = info.value; context.next = delegate.nextLoc; if (context.method !== "return") { context.method = "next"; context.arg = undefined; } } else { return info; } context.delegate = null; return ContinueSentinel; } defineIteratorMethods(Gp); define(Gp, toStringTagSymbol, "Generator"); Gp[iteratorSymbol] = function () { return this; }; Gp.toString = function () { return "[object Generator]"; }; function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; if (1 in locs) { entry.catchLoc = locs[1]; } if (2 in locs) { entry.finallyLoc = locs[2]; entry.afterLoc = locs[3]; } this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal"; delete record.arg; entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }]; tryLocsList.forEach(pushTryEntry, this); this.reset(true); } exports.keys = function (object) { var keys = []; for (var key in object) { keys.push(key); } keys.reverse(); return function next() { while (keys.length) { var key = keys.pop(); if (key in object) { next.value = key; next.done = false; return next; } } next.done = true; return next; }; }; function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) { return iteratorMethod.call(iterable); } if (typeof iterable.next === "function") { return iterable; } if (!isNaN(iterable.length)) { var i = -1, next = function next() { while (++i < iterable.length) { if (hasOwn.call(iterable, i)) { next.value = iterable[i]; next.done = false; return next; } } next.value = undefined; next.done = true; return next; }; return next.next = next; } } return { next: doneResult }; } exports.values = values; function doneResult() { return { value: undefined, done: true }; } Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { this.prev = 0; this.next = 0; this.sent = this._sent = undefined; this.done = false; this.delegate = null; this.method = "next"; this.arg = undefined; this.tryEntries.forEach(resetTryEntry); if (!skipTempReset) { for (var name in this) { if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) { this[name] = undefined; } } } }, stop: function stop() { this.done = true; var rootEntry = this.tryEntries[0]; var rootRecord = rootEntry.completion; if (rootRecord.type === "throw") { throw rootRecord.arg; } return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) { throw exception; } var context = this; function handle(loc, caught) { record.type = "throw"; record.arg = exception; context.next = loc; if (caught) { context.method = "next"; context.arg = undefined; } return !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; var record = entry.completion; if (entry.tryLoc === "root") { return handle("end"); } if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"); var hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } else if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } } else if (hasCatch) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } } else if (hasFinally) { if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } } else { throw new Error("try statement without catch or finally"); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) { finallyEntry = null; } var record = finallyEntry ? finallyEntry.completion : {}; record.type = type; record.arg = arg; if (finallyEntry) { this.method = "next"; this.next = finallyEntry.finallyLoc; return ContinueSentinel; } return this.complete(record); }, complete: function complete(record, afterLoc) { if (record.type === "throw") { throw record.arg; } if (record.type === "break" || record.type === "continue") { this.next = record.arg; } else if (record.type === "return") { this.rval = this.arg = record.arg; this.method = "return"; this.next = "end"; } else if (record.type === "normal" && afterLoc) { this.next = afterLoc; } return ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) { this.complete(entry.completion, entry.afterLoc); resetTryEntry(entry); return ContinueSentinel; } } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if (record.type === "throw") { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }; if (this.method === "next") { this.arg = undefined; } return ContinueSentinel; } }; return exports; }(( false ? 0 : _typeof(module)) === "object" ? module.exports : {}); try { regeneratorRuntime = runtime; } catch (accidentalStrictMode) { Function("r", "regeneratorRuntime = r")(runtime); } /***/ }), /* 4 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.arrayByteLength = arrayByteLength; exports.arraysToBytes = arraysToBytes; exports.assert = assert; exports.bytesToString = bytesToString; exports.createPromiseCapability = createPromiseCapability; exports.createValidAbsoluteUrl = createValidAbsoluteUrl; exports.encodeToXmlString = encodeToXmlString; exports.escapeString = escapeString; exports.getModificationDate = getModificationDate; exports.getVerbosityLevel = getVerbosityLevel; exports.info = info; exports.isArrayBuffer = isArrayBuffer; exports.isArrayEqual = isArrayEqual; exports.isAscii = isAscii; exports.isBool = isBool; exports.isNum = isNum; exports.isSameOrigin = isSameOrigin; exports.isString = isString; exports.objectFromEntries = objectFromEntries; exports.objectSize = objectSize; exports.removeNullCharacters = removeNullCharacters; exports.setVerbosityLevel = setVerbosityLevel; exports.shadow = shadow; exports.string32 = string32; exports.stringToBytes = stringToBytes; exports.stringToPDFString = stringToPDFString; exports.stringToUTF16BEString = stringToUTF16BEString; exports.stringToUTF8String = stringToUTF8String; exports.unreachable = unreachable; exports.utf8StringToString = utf8StringToString; exports.warn = warn; exports.VerbosityLevel = exports.Util = exports.UNSUPPORTED_FEATURES = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.IsLittleEndianCached = exports.IsEvalSupportedCached = exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = exports.FontType = exports.FONT_IDENTITY_MATRIX = exports.DocumentActionEventType = exports.createObjectURL = exports.CMapCompressionType = exports.BaseException = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0; __w_pdfjs_require__(5); function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } var IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; exports.IDENTITY_MATRIX = IDENTITY_MATRIX; var FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX; var PermissionFlag = { PRINT: 0x04, MODIFY_CONTENTS: 0x08, COPY: 0x10, MODIFY_ANNOTATIONS: 0x20, FILL_INTERACTIVE_FORMS: 0x100, COPY_FOR_ACCESSIBILITY: 0x200, ASSEMBLE: 0x400, PRINT_HIGH_QUALITY: 0x800 }; exports.PermissionFlag = PermissionFlag; var TextRenderingMode = { FILL: 0, STROKE: 1, FILL_STROKE: 2, INVISIBLE: 3, FILL_ADD_TO_PATH: 4, STROKE_ADD_TO_PATH: 5, FILL_STROKE_ADD_TO_PATH: 6, ADD_TO_PATH: 7, FILL_STROKE_MASK: 3, ADD_TO_PATH_FLAG: 4 }; exports.TextRenderingMode = TextRenderingMode; var ImageKind = { GRAYSCALE_1BPP: 1, RGB_24BPP: 2, RGBA_32BPP: 3 }; exports.ImageKind = ImageKind; var AnnotationType = { TEXT: 1, LINK: 2, FREETEXT: 3, LINE: 4, SQUARE: 5, CIRCLE: 6, POLYGON: 7, POLYLINE: 8, HIGHLIGHT: 9, UNDERLINE: 10, SQUIGGLY: 11, STRIKEOUT: 12, STAMP: 13, CARET: 14, INK: 15, POPUP: 16, FILEATTACHMENT: 17, SOUND: 18, MOVIE: 19, WIDGET: 20, SCREEN: 21, PRINTERMARK: 22, TRAPNET: 23, WATERMARK: 24, THREED: 25, REDACT: 26 }; exports.AnnotationType = AnnotationType; var AnnotationStateModelType = { MARKED: "Marked", REVIEW: "Review" }; exports.AnnotationStateModelType = AnnotationStateModelType; var AnnotationMarkedState = { MARKED: "Marked", UNMARKED: "Unmarked" }; exports.AnnotationMarkedState = AnnotationMarkedState; var AnnotationReviewState = { ACCEPTED: "Accepted", REJECTED: "Rejected", CANCELLED: "Cancelled", COMPLETED: "Completed", NONE: "None" }; exports.AnnotationReviewState = AnnotationReviewState; var AnnotationReplyType = { GROUP: "Group", REPLY: "R" }; exports.AnnotationReplyType = AnnotationReplyType; var AnnotationFlag = { INVISIBLE: 0x01, HIDDEN: 0x02, PRINT: 0x04, NOZOOM: 0x08, NOROTATE: 0x10, NOVIEW: 0x20, READONLY: 0x40, LOCKED: 0x80, TOGGLENOVIEW: 0x100, LOCKEDCONTENTS: 0x200 }; exports.AnnotationFlag = AnnotationFlag; var AnnotationFieldFlag = { READONLY: 0x0000001, REQUIRED: 0x0000002, NOEXPORT: 0x0000004, MULTILINE: 0x0001000, PASSWORD: 0x0002000, NOTOGGLETOOFF: 0x0004000, RADIO: 0x0008000, PUSHBUTTON: 0x0010000, COMBO: 0x0020000, EDIT: 0x0040000, SORT: 0x0080000, FILESELECT: 0x0100000, MULTISELECT: 0x0200000, DONOTSPELLCHECK: 0x0400000, DONOTSCROLL: 0x0800000, COMB: 0x1000000, RICHTEXT: 0x2000000, RADIOSINUNISON: 0x2000000, COMMITONSELCHANGE: 0x4000000 }; exports.AnnotationFieldFlag = AnnotationFieldFlag; var AnnotationBorderStyleType = { SOLID: 1, DASHED: 2, BEVELED: 3, INSET: 4, UNDERLINE: 5 }; exports.AnnotationBorderStyleType = AnnotationBorderStyleType; var AnnotationActionEventType = { E: "Mouse Enter", X: "Mouse Exit", D: "Mouse Down", U: "Mouse Up", Fo: "Focus", Bl: "Blur", PO: "PageOpen", PC: "PageClose", PV: "PageVisible", PI: "PageInvisible", K: "Keystroke", F: "Format", V: "Validate", C: "Calculate" }; exports.AnnotationActionEventType = AnnotationActionEventType; var DocumentActionEventType = { WC: "WillClose", WS: "WillSave", DS: "DidSave", WP: "WillPrint", DP: "DidPrint" }; exports.DocumentActionEventType = DocumentActionEventType; var PageActionEventType = { O: "PageOpen", C: "PageClose" }; exports.PageActionEventType = PageActionEventType; var StreamType = { UNKNOWN: "UNKNOWN", FLATE: "FLATE", LZW: "LZW", DCT: "DCT", JPX: "JPX", JBIG: "JBIG", A85: "A85", AHX: "AHX", CCF: "CCF", RLX: "RLX" }; exports.StreamType = StreamType; var FontType = { UNKNOWN: "UNKNOWN", TYPE1: "TYPE1", TYPE1C: "TYPE1C", CIDFONTTYPE0: "CIDFONTTYPE0", CIDFONTTYPE0C: "CIDFONTTYPE0C", TRUETYPE: "TRUETYPE", CIDFONTTYPE2: "CIDFONTTYPE2", TYPE3: "TYPE3", OPENTYPE: "OPENTYPE", TYPE0: "TYPE0", MMTYPE1: "MMTYPE1" }; exports.FontType = FontType; var VerbosityLevel = { ERRORS: 0, WARNINGS: 1, INFOS: 5 }; exports.VerbosityLevel = VerbosityLevel; var CMapCompressionType = { NONE: 0, BINARY: 1, STREAM: 2 }; exports.CMapCompressionType = CMapCompressionType; var OPS = { dependency: 1, setLineWidth: 2, setLineCap: 3, setLineJoin: 4, setMiterLimit: 5, setDash: 6, setRenderingIntent: 7, setFlatness: 8, setGState: 9, save: 10, restore: 11, transform: 12, moveTo: 13, lineTo: 14, curveTo: 15, curveTo2: 16, curveTo3: 17, closePath: 18, rectangle: 19, stroke: 20, closeStroke: 21, fill: 22, eoFill: 23, fillStroke: 24, eoFillStroke: 25, closeFillStroke: 26, closeEOFillStroke: 27, endPath: 28, clip: 29, eoClip: 30, beginText: 31, endText: 32, setCharSpacing: 33, setWordSpacing: 34, setHScale: 35, setLeading: 36, setFont: 37, setTextRenderingMode: 38, setTextRise: 39, moveText: 40, setLeadingMoveText: 41, setTextMatrix: 42, nextLine: 43, showText: 44, showSpacedText: 45, nextLineShowText: 46, nextLineSetSpacingShowText: 47, setCharWidth: 48, setCharWidthAndBounds: 49, setStrokeColorSpace: 50, setFillColorSpace: 51, setStrokeColor: 52, setStrokeColorN: 53, setFillColor: 54, setFillColorN: 55, setStrokeGray: 56, setFillGray: 57, setStrokeRGBColor: 58, setFillRGBColor: 59, setStrokeCMYKColor: 60, setFillCMYKColor: 61, shadingFill: 62, beginInlineImage: 63, beginImageData: 64, endInlineImage: 65, paintXObject: 66, markPoint: 67, markPointProps: 68, beginMarkedContent: 69, beginMarkedContentProps: 70, endMarkedContent: 71, beginCompat: 72, endCompat: 73, paintFormXObjectBegin: 74, paintFormXObjectEnd: 75, beginGroup: 76, endGroup: 77, beginAnnotations: 78, endAnnotations: 79, beginAnnotation: 80, endAnnotation: 81, paintJpegXObject: 82, paintImageMaskXObject: 83, paintImageMaskXObjectGroup: 84, paintImageXObject: 85, paintInlineImageXObject: 86, paintInlineImageXObjectGroup: 87, paintImageXObjectRepeat: 88, paintImageMaskXObjectRepeat: 89, paintSolidColorImageMask: 90, constructPath: 91 }; exports.OPS = OPS; var UNSUPPORTED_FEATURES = { unknown: "unknown", forms: "forms", javaScript: "javaScript", smask: "smask", shadingPattern: "shadingPattern", font: "font", errorTilingPattern: "errorTilingPattern", errorExtGState: "errorExtGState", errorXObject: "errorXObject", errorFontLoadType3: "errorFontLoadType3", errorFontState: "errorFontState", errorFontMissing: "errorFontMissing", errorFontTranslate: "errorFontTranslate", errorColorSpace: "errorColorSpace", errorOperatorList: "errorOperatorList", errorFontToUnicode: "errorFontToUnicode", errorFontLoadNative: "errorFontLoadNative", errorFontGetPath: "errorFontGetPath", errorMarkedContent: "errorMarkedContent" }; exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES; var PasswordResponses = { NEED_PASSWORD: 1, INCORRECT_PASSWORD: 2 }; exports.PasswordResponses = PasswordResponses; var verbosity = VerbosityLevel.WARNINGS; function setVerbosityLevel(level) { if (Number.isInteger(level)) { verbosity = level; } } function getVerbosityLevel() { return verbosity; } function info(msg) { if (verbosity >= VerbosityLevel.INFOS) { console.log("Info: ".concat(msg)); } } function warn(msg) { if (verbosity >= VerbosityLevel.WARNINGS) { console.log("Warning: ".concat(msg)); } } function unreachable(msg) { throw new Error(msg); } function assert(cond, msg) { if (!cond) { unreachable(msg); } } function isSameOrigin(baseUrl, otherUrl) { var base; try { base = new URL(baseUrl); if (!base.origin || base.origin === "null") { return false; } } catch (e) { return false; } var other = new URL(otherUrl, base); return base.origin === other.origin; } function _isValidProtocol(url) { if (!url) { return false; } switch (url.protocol) { case "http:": case "https:": case "ftp:": case "mailto:": case "tel:": return true; default: return false; } } function createValidAbsoluteUrl(url, baseUrl) { if (!url) { return null; } try { var absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url); if (_isValidProtocol(absoluteUrl)) { return absoluteUrl; } } catch (ex) {} return null; } function shadow(obj, prop, value) { Object.defineProperty(obj, prop, { value: value, enumerable: true, configurable: true, writable: false }); return value; } var BaseException = function BaseExceptionClosure() { function BaseException(message) { if (this.constructor === BaseException) { unreachable("Cannot initialize BaseException."); } this.message = message; this.name = this.constructor.name; } BaseException.prototype = new Error(); BaseException.constructor = BaseException; return BaseException; }(); exports.BaseException = BaseException; var PasswordException = /*#__PURE__*/function (_BaseException) { _inherits(PasswordException, _BaseException); var _super = _createSuper(PasswordException); function PasswordException(msg, code) { var _this; _classCallCheck(this, PasswordException); _this = _super.call(this, msg); _this.code = code; return _this; } return PasswordException; }(BaseException); exports.PasswordException = PasswordException; var UnknownErrorException = /*#__PURE__*/function (_BaseException2) { _inherits(UnknownErrorException, _BaseException2); var _super2 = _createSuper(UnknownErrorException); function UnknownErrorException(msg, details) { var _this2; _classCallCheck(this, UnknownErrorException); _this2 = _super2.call(this, msg); _this2.details = details; return _this2; } return UnknownErrorException; }(BaseException); exports.UnknownErrorException = UnknownErrorException; var InvalidPDFException = /*#__PURE__*/function (_BaseException3) { _inherits(InvalidPDFException, _BaseException3); var _super3 = _createSuper(InvalidPDFException); function InvalidPDFException() { _classCallCheck(this, InvalidPDFException); return _super3.apply(this, arguments); } return InvalidPDFException; }(BaseException); exports.InvalidPDFException = InvalidPDFException; var MissingPDFException = /*#__PURE__*/function (_BaseException4) { _inherits(MissingPDFException, _BaseException4); var _super4 = _createSuper(MissingPDFException); function MissingPDFException() { _classCallCheck(this, MissingPDFException); return _super4.apply(this, arguments); } return MissingPDFException; }(BaseException); exports.MissingPDFException = MissingPDFException; var UnexpectedResponseException = /*#__PURE__*/function (_BaseException5) { _inherits(UnexpectedResponseException, _BaseException5); var _super5 = _createSuper(UnexpectedResponseException); function UnexpectedResponseException(msg, status) { var _this3; _classCallCheck(this, UnexpectedResponseException); _this3 = _super5.call(this, msg); _this3.status = status; return _this3; } return UnexpectedResponseException; }(BaseException); exports.UnexpectedResponseException = UnexpectedResponseException; var FormatError = /*#__PURE__*/function (_BaseException6) { _inherits(FormatError, _BaseException6); var _super6 = _createSuper(FormatError); function FormatError() { _classCallCheck(this, FormatError); return _super6.apply(this, arguments); } return FormatError; }(BaseException); exports.FormatError = FormatError; var AbortException = /*#__PURE__*/function (_BaseException7) { _inherits(AbortException, _BaseException7); var _super7 = _createSuper(AbortException); function AbortException() { _classCallCheck(this, AbortException); return _super7.apply(this, arguments); } return AbortException; }(BaseException); exports.AbortException = AbortException; var NullCharactersRegExp = /\x00/g; function removeNullCharacters(str) { if (typeof str !== "string") { warn("The argument for removeNullCharacters must be a string."); return str; } return str.replace(NullCharactersRegExp, ""); } function bytesToString(bytes) { assert(bytes !== null && _typeof(bytes) === "object" && bytes.length !== undefined, "Invalid argument for bytesToString"); var length = bytes.length; var MAX_ARGUMENT_COUNT = 8192; if (length < MAX_ARGUMENT_COUNT) { return String.fromCharCode.apply(null, bytes); } var strBuf = []; for (var i = 0; i < length; i += MAX_ARGUMENT_COUNT) { var chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length); var chunk = bytes.subarray(i, chunkEnd); strBuf.push(String.fromCharCode.apply(null, chunk)); } return strBuf.join(""); } function stringToBytes(str) { assert(typeof str === "string", "Invalid argument for stringToBytes"); var length = str.length; var bytes = new Uint8Array(length); for (var i = 0; i < length; ++i) { bytes[i] = str.charCodeAt(i) & 0xff; } return bytes; } function arrayByteLength(arr) { if (arr.length !== undefined) { return arr.length; } assert(arr.byteLength !== undefined, "arrayByteLength - invalid argument."); return arr.byteLength; } function arraysToBytes(arr) { var length = arr.length; if (length === 1 && arr[0] instanceof Uint8Array) { return arr[0]; } var resultLength = 0; for (var i = 0; i < length; i++) { resultLength += arrayByteLength(arr[i]); } var pos = 0; var data = new Uint8Array(resultLength); for (var _i = 0; _i < length; _i++) { var item = arr[_i]; if (!(item instanceof Uint8Array)) { if (typeof item === "string") { item = stringToBytes(item); } else { item = new Uint8Array(item); } } var itemLength = item.byteLength; data.set(item, pos); pos += itemLength; } return data; } function string32(value) { return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff); } function objectSize(obj) { return Object.keys(obj).length; } function objectFromEntries(iterable) { return Object.assign(Object.create(null), Object.fromEntries(iterable)); } function isLittleEndian() { var buffer8 = new Uint8Array(4); buffer8[0] = 1; var view32 = new Uint32Array(buffer8.buffer, 0, 1); return view32[0] === 1; } var IsLittleEndianCached = { get value() { return shadow(this, "value", isLittleEndian()); } }; exports.IsLittleEndianCached = IsLittleEndianCached; function isEvalSupported() { try { new Function(""); return true; } catch (e) { return false; } } var IsEvalSupportedCached = { get value() { return shadow(this, "value", isEvalSupported()); } }; exports.IsEvalSupportedCached = IsEvalSupportedCached; var hexNumbers = _toConsumableArray(Array(256).keys()).map(function (n) { return n.toString(16).padStart(2, "0"); }); var Util = /*#__PURE__*/function () { function Util() { _classCallCheck(this, Util); } _createClass(Util, null, [{ key: "makeHexColor", value: function makeHexColor(r, g, b) { return "#".concat(hexNumbers[r]).concat(hexNumbers[g]).concat(hexNumbers[b]); } }, { key: "transform", value: function transform(m1, m2) { return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]]; } }, { key: "applyTransform", value: function applyTransform(p, m) { var xt = p[0] * m[0] + p[1] * m[2] + m[4]; var yt = p[0] * m[1] + p[1] * m[3] + m[5]; return [xt, yt]; } }, { key: "applyInverseTransform", value: function applyInverseTransform(p, m) { var d = m[0] * m[3] - m[1] * m[2]; var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d; var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d; return [xt, yt]; } }, { key: "getAxialAlignedBoundingBox", value: function getAxialAlignedBoundingBox(r, m) { var p1 = Util.applyTransform(r, m); var p2 = Util.applyTransform(r.slice(2, 4), m); var p3 = Util.applyTransform([r[0], r[3]], m); var p4 = Util.applyTransform([r[2], r[1]], m); return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])]; } }, { key: "inverseTransform", value: function inverseTransform(m) { var d = m[0] * m[3] - m[1] * m[2]; return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d]; } }, { key: "apply3dTransform", value: function apply3dTransform(m, v) { return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]]; } }, { key: "singularValueDecompose2dScale", value: function singularValueDecompose2dScale(m) { var transpose = [m[0], m[2], m[1], m[3]]; var a = m[0] * transpose[0] + m[1] * transpose[2]; var b = m[0] * transpose[1] + m[1] * transpose[3]; var c = m[2] * transpose[0] + m[3] * transpose[2]; var d = m[2] * transpose[1] + m[3] * transpose[3]; var first = (a + d) / 2; var second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2; var sx = first + second || 1; var sy = first - second || 1; return [Math.sqrt(sx), Math.sqrt(sy)]; } }, { key: "normalizeRect", value: function normalizeRect(rect) { var r = rect.slice(0); if (rect[0] > rect[2]) { r[0] = rect[2]; r[2] = rect[0]; } if (rect[1] > rect[3]) { r[1] = rect[3]; r[3] = rect[1]; } return r; } }, { key: "intersect", value: function intersect(rect1, rect2) { function compare(a, b) { return a - b; } var orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare); var orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare); var result = []; rect1 = Util.normalizeRect(rect1); rect2 = Util.normalizeRect(rect2); if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) { result[0] = orderedX[1]; result[2] = orderedX[2]; } else { return null; } if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) { result[1] = orderedY[1]; result[3] = orderedY[2]; } else { return null; } return result; } }]); return Util; }(); exports.Util = Util; var PDFStringTranslateTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203A, 0x2212, 0x2030, 0x201E, 0x201C, 0x201D, 0x2018, 0x2019, 0x201A, 0x2122, 0xFB01, 0xFB02, 0x141, 0x152, 0x160, 0x178, 0x17D, 0x131, 0x142, 0x153, 0x161, 0x17E, 0, 0x20AC]; function stringToPDFString(str) { var length = str.length, strBuf = []; if (str[0] === "\xFE" && str[1] === "\xFF") { for (var i = 2; i < length; i += 2) { strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1))); } } else if (str[0] === "\xFF" && str[1] === "\xFE") { for (var _i2 = 2; _i2 < length; _i2 += 2) { strBuf.push(String.fromCharCode(str.charCodeAt(_i2 + 1) << 8 | str.charCodeAt(_i2))); } } else { for (var _i3 = 0; _i3 < length; ++_i3) { var code = PDFStringTranslateTable[str.charCodeAt(_i3)]; strBuf.push(code ? String.fromCharCode(code) : str.charAt(_i3)); } } return strBuf.join(""); } function escapeString(str) { return str.replace(/([()\\\n\r])/g, function (match) { if (match === "\n") { return "\\n"; } else if (match === "\r") { return "\\r"; } return "\\".concat(match); }); } function isAscii(str) { return /^[\x00-\x7F]*$/.test(str); } function stringToUTF16BEString(str) { var buf = ["\xFE\xFF"]; for (var i = 0, ii = str.length; i < ii; i++) { var _char = str.charCodeAt(i); buf.push(String.fromCharCode(_char >> 8 & 0xff)); buf.push(String.fromCharCode(_char & 0xff)); } return buf.join(""); } function stringToUTF8String(str) { return decodeURIComponent(escape(str)); } function utf8StringToString(str) { return unescape(encodeURIComponent(str)); } function isBool(v) { return typeof v === "boolean"; } function isNum(v) { return typeof v === "number"; } function isString(v) { return typeof v === "string"; } function isArrayBuffer(v) { return _typeof(v) === "object" && v !== null && v.byteLength !== undefined; } function isArrayEqual(arr1, arr2) { if (arr1.length !== arr2.length) { return false; } return arr1.every(function (element, index) { return element === arr2[index]; }); } function getModificationDate() { var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date(); var buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, "0"), date.getUTCDate().toString().padStart(2, "0"), date.getUTCHours().toString().padStart(2, "0"), date.getUTCMinutes().toString().padStart(2, "0"), date.getUTCSeconds().toString().padStart(2, "0")]; return buffer.join(""); } function createPromiseCapability() { var capability = Object.create(null); var isSettled = false; Object.defineProperty(capability, "settled", { get: function get() { return isSettled; } }); capability.promise = new Promise(function (resolve, reject) { capability.resolve = function (data) { isSettled = true; resolve(data); }; capability.reject = function (reason) { isSettled = true; reject(reason); }; }); return capability; } var createObjectURL = function createObjectURLClosure() { var digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; return function createObjectURL(data, contentType) { var forceDataSchema = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; if (!forceDataSchema && URL.createObjectURL) { var blob = new Blob([data], { type: contentType }); return URL.createObjectURL(blob); } var buffer = "data:".concat(contentType, ";base64,"); for (var i = 0, ii = data.length; i < ii; i += 3) { var b1 = data[i] & 0xff; var b2 = data[i + 1] & 0xff; var b3 = data[i + 2] & 0xff; var d1 = b1 >> 2, d2 = (b1 & 3) << 4 | b2 >> 4; var d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64; var d4 = i + 2 < ii ? b3 & 0x3f : 64; buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4]; } return buffer; }; }(); exports.createObjectURL = createObjectURL; var XMLEntities = { 0x3c: "<", 0x3e: ">", 0x26: "&", 0x22: """, 0x27: "'" }; function encodeToXmlString(str) { var buffer = []; var start = 0; for (var i = 0, ii = str.length; i < ii; i++) { var _char2 = str.codePointAt(i); if (0x20 <= _char2 && _char2 <= 0x7e) { var entity = XMLEntities[_char2]; if (entity) { if (start < i) { buffer.push(str.substring(start, i)); } buffer.push(entity); start = i + 1; } } else { if (start < i) { buffer.push(str.substring(start, i)); } buffer.push("&#x".concat(_char2.toString(16).toUpperCase(), ";")); if (_char2 > 0xd7ff && (_char2 < 0xe000 || _char2 > 0xfffd)) { i++; } start = i + 1; } } if (buffer.length === 0) { return str; } if (start < str.length) { buffer.push(str.substring(start, str.length)); } return buffer.join(""); } /***/ }), /* 5 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var _is_node = __w_pdfjs_require__(6); if (typeof globalThis === "undefined" || !globalThis._pdfjsCompatibilityChecked) { if (typeof globalThis === "undefined" || globalThis.Math !== Math) { globalThis = __w_pdfjs_require__(7); } globalThis._pdfjsCompatibilityChecked = true; (function checkNodeBtoa() { if (globalThis.btoa || !_is_node.isNodeJS) { return; } globalThis.btoa = function (chars) { return Buffer.from(chars, "binary").toString("base64"); }; })(); (function checkNodeAtob() { if (globalThis.atob || !_is_node.isNodeJS) { return; } globalThis.atob = function (input) { return Buffer.from(input, "base64").toString("binary"); }; })(); (function checkObjectFromEntries() { if (Object.fromEntries) { return; } __w_pdfjs_require__(52); })(); (function checkPromise() { if (globalThis.Promise.allSettled) { return; } globalThis.Promise = __w_pdfjs_require__(82); })(); (function checkURL() { globalThis.URL = __w_pdfjs_require__(111); })(); (function checkReadableStream() { var isReadableStreamSupported = false; if (typeof ReadableStream !== "undefined") { try { new ReadableStream({ start: function start(controller) { controller.close(); } }); isReadableStreamSupported = true; } catch (e) {} } if (isReadableStreamSupported) { return; } globalThis.ReadableStream = __w_pdfjs_require__(121).ReadableStream; })(); (function checkStringPadStart() { if (String.prototype.padStart) { return; } __w_pdfjs_require__(122); })(); (function checkStringPadEnd() { if (String.prototype.padEnd) { return; } __w_pdfjs_require__(128); })(); (function checkObjectValues() { if (Object.values) { return; } Object.values = __w_pdfjs_require__(130); })(); (function checkObjectEntries() { if (Object.entries) { return; } Object.entries = __w_pdfjs_require__(133); })(); } /***/ }), /* 6 */ /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.isNodeJS = void 0; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var isNodeJS = (typeof process === "undefined" ? "undefined" : _typeof(process)) === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser"); exports.isNodeJS = isNodeJS; /***/ }), /* 7 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { __w_pdfjs_require__(8); module.exports = __w_pdfjs_require__(10); /***/ }), /* 8 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { var $ = __w_pdfjs_require__(9); var global = __w_pdfjs_require__(10); $({ global: true }, { globalThis: global }); /***/ }), /* 9 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); var getOwnPropertyDescriptor = __w_pdfjs_require__(11).f; var createNonEnumerableProperty = __w_pdfjs_require__(25); var redefine = __w_pdfjs_require__(28); var setGlobal = __w_pdfjs_require__(29); var copyConstructorProperties = __w_pdfjs_require__(39); var isForced = __w_pdfjs_require__(51); module.exports = function (options, source) { var TARGET = options.target; var GLOBAL = options.global; var STATIC = options.stat; var FORCED, target, key, targetProperty, sourceProperty, descriptor; if (GLOBAL) { target = global; } else if (STATIC) { target = global[TARGET] || setGlobal(TARGET, {}); } else { target = (global[TARGET] || {}).prototype; } if (target) for (key in source) { sourceProperty = source[key]; if (options.noTargetGet) { descriptor = getOwnPropertyDescriptor(target, key); targetProperty = descriptor && descriptor.value; } else targetProperty = target[key]; FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); if (!FORCED && targetProperty !== undefined) { if (typeof sourceProperty === typeof targetProperty) continue; copyConstructorProperties(sourceProperty, targetProperty); } if (options.sham || targetProperty && targetProperty.sham) { createNonEnumerableProperty(sourceProperty, 'sham', true); } redefine(target, key, sourceProperty, options); } }; /***/ }), /* 10 */ /***/ ((module) => { var check = function (it) { return it && it.Math == Math && it; }; module.exports = check(typeof globalThis == 'object' && globalThis) || check(typeof window == 'object' && window) || check(typeof self == 'object' && self) || check(typeof global == 'object' && global) || function () { return this; }() || Function('return this')(); /***/ }), /* 11 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { var DESCRIPTORS = __w_pdfjs_require__(12); var propertyIsEnumerableModule = __w_pdfjs_require__(14); var createPropertyDescriptor = __w_pdfjs_require__(15); var toIndexedObject = __w_pdfjs_require__(16); var toPrimitive = __w_pdfjs_require__(20); var has = __w_pdfjs_require__(22); var IE8_DOM_DEFINE = __w_pdfjs_require__(23); var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { O = toIndexedObject(O); P = toPrimitive(P, true); if (IE8_DOM_DEFINE) try { return nativeGetOwnPropertyDescriptor(O, P); } catch (error) { } if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]); }; /***/ }), /* 12 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var fails = __w_pdfjs_require__(13); module.exports = !fails(function () { return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7; }); /***/ }), /* 13 */ /***/ ((module) => { module.exports = function (exec) { try { return !!exec(); } catch (error) { return true; } }; /***/ }), /* 14 */ /***/ ((__unused_webpack_module, exports) => { "use strict"; var nativePropertyIsEnumerable = {}.propertyIsEnumerable; var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1); exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { var descriptor = getOwnPropertyDescriptor(this, V); return !!descriptor && descriptor.enumerable; } : nativePropertyIsEnumerable; /***/ }), /* 15 */ /***/ ((module) => { module.exports = function (bitmap, value) { return { enumerable: !(bitmap & 1), configurable: !(bitmap & 2), writable: !(bitmap & 4), value: value }; }; /***/ }), /* 16 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var IndexedObject = __w_pdfjs_require__(17); var requireObjectCoercible = __w_pdfjs_require__(19); module.exports = function (it) { return IndexedObject(requireObjectCoercible(it)); }; /***/ }), /* 17 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var fails = __w_pdfjs_require__(13); var classof = __w_pdfjs_require__(18); var split = ''.split; module.exports = fails(function () { return !Object('z').propertyIsEnumerable(0); }) ? function (it) { return classof(it) == 'String' ? split.call(it, '') : Object(it); } : Object; /***/ }), /* 18 */ /***/ ((module) => { var toString = {}.toString; module.exports = function (it) { return toString.call(it).slice(8, -1); }; /***/ }), /* 19 */ /***/ ((module) => { module.exports = function (it) { if (it == undefined) throw TypeError("Can't call method on " + it); return it; }; /***/ }), /* 20 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var isObject = __w_pdfjs_require__(21); module.exports = function (input, PREFERRED_STRING) { if (!isObject(input)) return input; var fn, val; if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val; if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; throw TypeError("Can't convert object to primitive value"); }; /***/ }), /* 21 */ /***/ ((module) => { module.exports = function (it) { return typeof it === 'object' ? it !== null : typeof it === 'function'; }; /***/ }), /* 22 */ /***/ ((module) => { var hasOwnProperty = {}.hasOwnProperty; module.exports = function (it, key) { return hasOwnProperty.call(it, key); }; /***/ }), /* 23 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var DESCRIPTORS = __w_pdfjs_require__(12); var fails = __w_pdfjs_require__(13); var createElement = __w_pdfjs_require__(24); module.exports = !DESCRIPTORS && !fails(function () { return Object.defineProperty(createElement('div'), 'a', { get: function () { return 7; } }).a != 7; }); /***/ }), /* 24 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); var isObject = __w_pdfjs_require__(21); var document = global.document; var EXISTS = isObject(document) && isObject(document.createElement); module.exports = function (it) { return EXISTS ? document.createElement(it) : {}; }; /***/ }), /* 25 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var DESCRIPTORS = __w_pdfjs_require__(12); var definePropertyModule = __w_pdfjs_require__(26); var createPropertyDescriptor = __w_pdfjs_require__(15); module.exports = DESCRIPTORS ? function (object, key, value) { return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); } : function (object, key, value) { object[key] = value; return object; }; /***/ }), /* 26 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { var DESCRIPTORS = __w_pdfjs_require__(12); var IE8_DOM_DEFINE = __w_pdfjs_require__(23); var anObject = __w_pdfjs_require__(27); var toPrimitive = __w_pdfjs_require__(20); var nativeDefineProperty = Object.defineProperty; exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) { anObject(O); P = toPrimitive(P, true); anObject(Attributes); if (IE8_DOM_DEFINE) try { return nativeDefineProperty(O, P, Attributes); } catch (error) { } if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported'); if ('value' in Attributes) O[P] = Attributes.value; return O; }; /***/ }), /* 27 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var isObject = __w_pdfjs_require__(21); module.exports = function (it) { if (!isObject(it)) { throw TypeError(String(it) + ' is not an object'); } return it; }; /***/ }), /* 28 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); var createNonEnumerableProperty = __w_pdfjs_require__(25); var has = __w_pdfjs_require__(22); var setGlobal = __w_pdfjs_require__(29); var inspectSource = __w_pdfjs_require__(30); var InternalStateModule = __w_pdfjs_require__(32); var getInternalState = InternalStateModule.get; var enforceInternalState = InternalStateModule.enforce; var TEMPLATE = String(String).split('String'); (module.exports = function (O, key, value, options) { var unsafe = options ? !!options.unsafe : false; var simple = options ? !!options.enumerable : false; var noTargetGet = options ? !!options.noTargetGet : false; var state; if (typeof value == 'function') { if (typeof key == 'string' && !has(value, 'name')) { createNonEnumerableProperty(value, 'name', key); } state = enforceInternalState(value); if (!state.source) { state.source = TEMPLATE.join(typeof key == 'string' ? key : ''); } } if (O === global) { if (simple) O[key] = value; else setGlobal(key, value); return; } else if (!unsafe) { delete O[key]; } else if (!noTargetGet && O[key]) { simple = true; } if (simple) O[key] = value; else createNonEnumerableProperty(O, key, value); })(Function.prototype, 'toString', function toString() { return typeof this == 'function' && getInternalState(this).source || inspectSource(this); }); /***/ }), /* 29 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); var createNonEnumerableProperty = __w_pdfjs_require__(25); module.exports = function (key, value) { try { createNonEnumerableProperty(global, key, value); } catch (error) { global[key] = value; } return value; }; /***/ }), /* 30 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var store = __w_pdfjs_require__(31); var functionToString = Function.toString; if (typeof store.inspectSource != 'function') { store.inspectSource = function (it) { return functionToString.call(it); }; } module.exports = store.inspectSource; /***/ }), /* 31 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); var setGlobal = __w_pdfjs_require__(29); var SHARED = '__core-js_shared__'; var store = global[SHARED] || setGlobal(SHARED, {}); module.exports = store; /***/ }), /* 32 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var NATIVE_WEAK_MAP = __w_pdfjs_require__(33); var global = __w_pdfjs_require__(10); var isObject = __w_pdfjs_require__(21); var createNonEnumerableProperty = __w_pdfjs_require__(25); var objectHas = __w_pdfjs_require__(22); var shared = __w_pdfjs_require__(31); var sharedKey = __w_pdfjs_require__(34); var hiddenKeys = __w_pdfjs_require__(38); var WeakMap = global.WeakMap; var set, get, has; var enforce = function (it) { return has(it) ? get(it) : set(it, {}); }; var getterFor = function (TYPE) { return function (it) { var state; if (!isObject(it) || (state = get(it)).type !== TYPE) { throw TypeError('Incompatible receiver, ' + TYPE + ' required'); } return state; }; }; if (NATIVE_WEAK_MAP) { var store = shared.state || (shared.state = new WeakMap()); var wmget = store.get; var wmhas = store.has; var wmset = store.set; set = function (it, metadata) { metadata.facade = it; wmset.call(store, it, metadata); return metadata; }; get = function (it) { return wmget.call(store, it) || {}; }; has = function (it) { return wmhas.call(store, it); }; } else { var STATE = sharedKey('state'); hiddenKeys[STATE] = true; set = function (it, metadata) { metadata.facade = it; createNonEnumerableProperty(it, STATE, metadata); return metadata; }; get = function (it) { return objectHas(it, STATE) ? it[STATE] : {}; }; has = function (it) { return objectHas(it, STATE); }; } module.exports = { set: set, get: get, has: has, enforce: enforce, getterFor: getterFor }; /***/ }), /* 33 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); var inspectSource = __w_pdfjs_require__(30); var WeakMap = global.WeakMap; module.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap)); /***/ }), /* 34 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var shared = __w_pdfjs_require__(35); var uid = __w_pdfjs_require__(37); var keys = shared('keys'); module.exports = function (key) { return keys[key] || (keys[key] = uid(key)); }; /***/ }), /* 35 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var IS_PURE = __w_pdfjs_require__(36); var store = __w_pdfjs_require__(31); (module.exports = function (key, value) { return store[key] || (store[key] = value !== undefined ? value : {}); })('versions', []).push({ version: '3.8.3', mode: IS_PURE ? 'pure' : 'global', copyright: '© 2021 Denis Pushkarev (zloirock.ru)' }); /***/ }), /* 36 */ /***/ ((module) => { module.exports = false; /***/ }), /* 37 */ /***/ ((module) => { var id = 0; var postfix = Math.random(); module.exports = function (key) { return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36); }; /***/ }), /* 38 */ /***/ ((module) => { module.exports = {}; /***/ }), /* 39 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var has = __w_pdfjs_require__(22); var ownKeys = __w_pdfjs_require__(40); var getOwnPropertyDescriptorModule = __w_pdfjs_require__(11); var definePropertyModule = __w_pdfjs_require__(26); module.exports = function (target, source) { var keys = ownKeys(source); var defineProperty = definePropertyModule.f; var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; for (var i = 0; i < keys.length; i++) { var key = keys[i]; if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key)); } }; /***/ }), /* 40 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var getBuiltIn = __w_pdfjs_require__(41); var getOwnPropertyNamesModule = __w_pdfjs_require__(43); var getOwnPropertySymbolsModule = __w_pdfjs_require__(50); var anObject = __w_pdfjs_require__(27); module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { var keys = getOwnPropertyNamesModule.f(anObject(it)); var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys; }; /***/ }), /* 41 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var path = __w_pdfjs_require__(42); var global = __w_pdfjs_require__(10); var aFunction = function (variable) { return typeof variable == 'function' ? variable : undefined; }; module.exports = function (namespace, method) { return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace]) : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method]; }; /***/ }), /* 42 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); module.exports = global; /***/ }), /* 43 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { var internalObjectKeys = __w_pdfjs_require__(44); var enumBugKeys = __w_pdfjs_require__(49); var hiddenKeys = enumBugKeys.concat('length', 'prototype'); exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { return internalObjectKeys(O, hiddenKeys); }; /***/ }), /* 44 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var has = __w_pdfjs_require__(22); var toIndexedObject = __w_pdfjs_require__(16); var indexOf = __w_pdfjs_require__(45).indexOf; var hiddenKeys = __w_pdfjs_require__(38); module.exports = function (object, names) { var O = toIndexedObject(object); var i = 0; var result = []; var key; for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key); while (names.length > i) if (has(O, key = names[i++])) { ~indexOf(result, key) || result.push(key); } return result; }; /***/ }), /* 45 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var toIndexedObject = __w_pdfjs_require__(16); var toLength = __w_pdfjs_require__(46); var toAbsoluteIndex = __w_pdfjs_require__(48); var createMethod = function (IS_INCLUDES) { return function ($this, el, fromIndex) { var O = toIndexedObject($this); var length = toLength(O.length); var index = toAbsoluteIndex(fromIndex, length); var value; if (IS_INCLUDES && el != el) while (length > index) { value = O[index++]; if (value != value) return true; } else for (; length > index; index++) { if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; } return !IS_INCLUDES && -1; }; }; module.exports = { includes: createMethod(true), indexOf: createMethod(false) }; /***/ }), /* 46 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var toInteger = __w_pdfjs_require__(47); var min = Math.min; module.exports = function (argument) { return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; }; /***/ }), /* 47 */ /***/ ((module) => { var ceil = Math.ceil; var floor = Math.floor; module.exports = function (argument) { return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument); }; /***/ }), /* 48 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var toInteger = __w_pdfjs_require__(47); var max = Math.max; var min = Math.min; module.exports = function (index, length) { var integer = toInteger(index); return integer < 0 ? max(integer + length, 0) : min(integer, length); }; /***/ }), /* 49 */ /***/ ((module) => { module.exports = [ 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf' ]; /***/ }), /* 50 */ /***/ ((__unused_webpack_module, exports) => { exports.f = Object.getOwnPropertySymbols; /***/ }), /* 51 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var fails = __w_pdfjs_require__(13); var replacement = /#|\.prototype\./; var isForced = function (feature, detection) { var value = data[normalize(feature)]; return value == POLYFILL ? true : value == NATIVE ? false : typeof detection == 'function' ? fails(detection) : !!detection; }; var normalize = isForced.normalize = function (string) { return String(string).replace(replacement, '.').toLowerCase(); }; var data = isForced.data = {}; var NATIVE = isForced.NATIVE = 'N'; var POLYFILL = isForced.POLYFILL = 'P'; module.exports = isForced; /***/ }), /* 52 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { __w_pdfjs_require__(53); __w_pdfjs_require__(72); var path = __w_pdfjs_require__(42); module.exports = path.Object.fromEntries; /***/ }), /* 53 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var toIndexedObject = __w_pdfjs_require__(16); var addToUnscopables = __w_pdfjs_require__(54); var Iterators = __w_pdfjs_require__(62); var InternalStateModule = __w_pdfjs_require__(32); var defineIterator = __w_pdfjs_require__(63); var ARRAY_ITERATOR = 'Array Iterator'; var setInternalState = InternalStateModule.set; var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR); module.exports = defineIterator(Array, 'Array', function (iterated, kind) { setInternalState(this, { type: ARRAY_ITERATOR, target: toIndexedObject(iterated), index: 0, kind: kind }); }, function () { var state = getInternalState(this); var target = state.target; var kind = state.kind; var index = state.index++; if (!target || index >= target.length) { state.target = undefined; return { value: undefined, done: true }; } if (kind == 'keys') return { value: index, done: false }; if (kind == 'values') return { value: target[index], done: false }; return { value: [ index, target[index] ], done: false }; }, 'values'); Iterators.Arguments = Iterators.Array; addToUnscopables('keys'); addToUnscopables('values'); addToUnscopables('entries'); /***/ }), /* 54 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var wellKnownSymbol = __w_pdfjs_require__(55); var create = __w_pdfjs_require__(58); var definePropertyModule = __w_pdfjs_require__(26); var UNSCOPABLES = wellKnownSymbol('unscopables'); var ArrayPrototype = Array.prototype; if (ArrayPrototype[UNSCOPABLES] == undefined) { definePropertyModule.f(ArrayPrototype, UNSCOPABLES, { configurable: true, value: create(null) }); } module.exports = function (key) { ArrayPrototype[UNSCOPABLES][key] = true; }; /***/ }), /* 55 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); var shared = __w_pdfjs_require__(35); var has = __w_pdfjs_require__(22); var uid = __w_pdfjs_require__(37); var NATIVE_SYMBOL = __w_pdfjs_require__(56); var USE_SYMBOL_AS_UID = __w_pdfjs_require__(57); var WellKnownSymbolsStore = shared('wks'); var Symbol = global.Symbol; var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid; module.exports = function (name) { if (!has(WellKnownSymbolsStore, name)) { if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name]; else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name); } return WellKnownSymbolsStore[name]; }; /***/ }), /* 56 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var fails = __w_pdfjs_require__(13); module.exports = !!Object.getOwnPropertySymbols && !fails(function () { return !String(Symbol()); }); /***/ }), /* 57 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var NATIVE_SYMBOL = __w_pdfjs_require__(56); module.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == 'symbol'; /***/ }), /* 58 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var anObject = __w_pdfjs_require__(27); var defineProperties = __w_pdfjs_require__(59); var enumBugKeys = __w_pdfjs_require__(49); var hiddenKeys = __w_pdfjs_require__(38); var html = __w_pdfjs_require__(61); var documentCreateElement = __w_pdfjs_require__(24); var sharedKey = __w_pdfjs_require__(34); var GT = '>'; var LT = '<'; var PROTOTYPE = 'prototype'; var SCRIPT = 'script'; var IE_PROTO = sharedKey('IE_PROTO'); var EmptyConstructor = function () { }; var scriptTag = function (content) { return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; }; var NullProtoObjectViaActiveX = function (activeXDocument) { activeXDocument.write(scriptTag('')); activeXDocument.close(); var temp = activeXDocument.parentWindow.Object; activeXDocument = null; return temp; }; var NullProtoObjectViaIFrame = function () { var iframe = documentCreateElement('iframe'); var JS = 'java' + SCRIPT + ':'; var iframeDocument; iframe.style.display = 'none'; html.appendChild(iframe); iframe.src = String(JS); iframeDocument = iframe.contentWindow.document; iframeDocument.open(); iframeDocument.write(scriptTag('document.F=Object')); iframeDocument.close(); return iframeDocument.F; }; var activeXDocument; var NullProtoObject = function () { try { activeXDocument = document.domain && new ActiveXObject('htmlfile'); } catch (error) { } NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame(); var length = enumBugKeys.length; while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; return NullProtoObject(); }; hiddenKeys[IE_PROTO] = true; module.exports = Object.create || function create(O, Properties) { var result; if (O !== null) { EmptyConstructor[PROTOTYPE] = anObject(O); result = new EmptyConstructor(); EmptyConstructor[PROTOTYPE] = null; result[IE_PROTO] = O; } else result = NullProtoObject(); return Properties === undefined ? result : defineProperties(result, Properties); }; /***/ }), /* 59 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var DESCRIPTORS = __w_pdfjs_require__(12); var definePropertyModule = __w_pdfjs_require__(26); var anObject = __w_pdfjs_require__(27); var objectKeys = __w_pdfjs_require__(60); module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) { anObject(O); var keys = objectKeys(Properties); var length = keys.length; var index = 0; var key; while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]); return O; }; /***/ }), /* 60 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var internalObjectKeys = __w_pdfjs_require__(44); var enumBugKeys = __w_pdfjs_require__(49); module.exports = Object.keys || function keys(O) { return internalObjectKeys(O, enumBugKeys); }; /***/ }), /* 61 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var getBuiltIn = __w_pdfjs_require__(41); module.exports = getBuiltIn('document', 'documentElement'); /***/ }), /* 62 */ /***/ ((module) => { module.exports = {}; /***/ }), /* 63 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var $ = __w_pdfjs_require__(9); var createIteratorConstructor = __w_pdfjs_require__(64); var getPrototypeOf = __w_pdfjs_require__(66); var setPrototypeOf = __w_pdfjs_require__(70); var setToStringTag = __w_pdfjs_require__(69); var createNonEnumerableProperty = __w_pdfjs_require__(25); var redefine = __w_pdfjs_require__(28); var wellKnownSymbol = __w_pdfjs_require__(55); var IS_PURE = __w_pdfjs_require__(36); var Iterators = __w_pdfjs_require__(62); var IteratorsCore = __w_pdfjs_require__(65); var IteratorPrototype = IteratorsCore.IteratorPrototype; var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; var ITERATOR = wellKnownSymbol('iterator'); var KEYS = 'keys'; var VALUES = 'values'; var ENTRIES = 'entries'; var returnThis = function () { return this; }; module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { createIteratorConstructor(IteratorConstructor, NAME, next); var getIterationMethod = function (KIND) { if (KIND === DEFAULT && defaultIterator) return defaultIterator; if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND]; switch (KIND) { case KEYS: return function keys() { return new IteratorConstructor(this, KIND); }; case VALUES: return function values() { return new IteratorConstructor(this, KIND); }; case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); }; } return function () { return new IteratorConstructor(this); }; }; var TO_STRING_TAG = NAME + ' Iterator'; var INCORRECT_VALUES_NAME = false; var IterablePrototype = Iterable.prototype; var nativeIterator = IterablePrototype[ITERATOR] || IterablePrototype['@@iterator'] || DEFAULT && IterablePrototype[DEFAULT]; var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator; var CurrentIteratorPrototype, methods, KEY; if (anyNativeIterator) { CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable())); if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) { if (setPrototypeOf) { setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') { createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis); } } setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true); if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis; } } if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) { INCORRECT_VALUES_NAME = true; defaultIterator = function values() { return nativeIterator.call(this); }; } if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) { createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator); } Iterators[NAME] = defaultIterator; if (DEFAULT) { methods = { values: getIterationMethod(VALUES), keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), entries: getIterationMethod(ENTRIES) }; if (FORCED) for (KEY in methods) { if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { redefine(IterablePrototype, KEY, methods[KEY]); } } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods); } return methods; }; /***/ }), /* 64 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var IteratorPrototype = __w_pdfjs_require__(65).IteratorPrototype; var create = __w_pdfjs_require__(58); var createPropertyDescriptor = __w_pdfjs_require__(15); var setToStringTag = __w_pdfjs_require__(69); var Iterators = __w_pdfjs_require__(62); var returnThis = function () { return this; }; module.exports = function (IteratorConstructor, NAME, next) { var TO_STRING_TAG = NAME + ' Iterator'; IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) }); setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); Iterators[TO_STRING_TAG] = returnThis; return IteratorConstructor; }; /***/ }), /* 65 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var fails = __w_pdfjs_require__(13); var getPrototypeOf = __w_pdfjs_require__(66); var createNonEnumerableProperty = __w_pdfjs_require__(25); var has = __w_pdfjs_require__(22); var wellKnownSymbol = __w_pdfjs_require__(55); var IS_PURE = __w_pdfjs_require__(36); var ITERATOR = wellKnownSymbol('iterator'); var BUGGY_SAFARI_ITERATORS = false; var returnThis = function () { return this; }; var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator; if ([].keys) { arrayIterator = [].keys(); if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true; else { PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator)); if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype; } } var NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () { var test = {}; return IteratorPrototype[ITERATOR].call(test) !== test; }); if (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {}; if ((!IS_PURE || NEW_ITERATOR_PROTOTYPE) && !has(IteratorPrototype, ITERATOR)) { createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis); } module.exports = { IteratorPrototype: IteratorPrototype, BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS }; /***/ }), /* 66 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var has = __w_pdfjs_require__(22); var toObject = __w_pdfjs_require__(67); var sharedKey = __w_pdfjs_require__(34); var CORRECT_PROTOTYPE_GETTER = __w_pdfjs_require__(68); var IE_PROTO = sharedKey('IE_PROTO'); var ObjectPrototype = Object.prototype; module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) { O = toObject(O); if (has(O, IE_PROTO)) return O[IE_PROTO]; if (typeof O.constructor == 'function' && O instanceof O.constructor) { return O.constructor.prototype; } return O instanceof Object ? ObjectPrototype : null; }; /***/ }), /* 67 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var requireObjectCoercible = __w_pdfjs_require__(19); module.exports = function (argument) { return Object(requireObjectCoercible(argument)); }; /***/ }), /* 68 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var fails = __w_pdfjs_require__(13); module.exports = !fails(function () { function F() { } F.prototype.constructor = null; return Object.getPrototypeOf(new F()) !== F.prototype; }); /***/ }), /* 69 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var defineProperty = __w_pdfjs_require__(26).f; var has = __w_pdfjs_require__(22); var wellKnownSymbol = __w_pdfjs_require__(55); var TO_STRING_TAG = wellKnownSymbol('toStringTag'); module.exports = function (it, TAG, STATIC) { if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) { defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG }); } }; /***/ }), /* 70 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var anObject = __w_pdfjs_require__(27); var aPossiblePrototype = __w_pdfjs_require__(71); module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () { var CORRECT_SETTER = false; var test = {}; var setter; try { setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set; setter.call(test, []); CORRECT_SETTER = test instanceof Array; } catch (error) { } return function setPrototypeOf(O, proto) { anObject(O); aPossiblePrototype(proto); if (CORRECT_SETTER) setter.call(O, proto); else O.__proto__ = proto; return O; }; }() : undefined); /***/ }), /* 71 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var isObject = __w_pdfjs_require__(21); module.exports = function (it) { if (!isObject(it) && it !== null) { throw TypeError("Can't set " + String(it) + ' as a prototype'); } return it; }; /***/ }), /* 72 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { var $ = __w_pdfjs_require__(9); var iterate = __w_pdfjs_require__(73); var createProperty = __w_pdfjs_require__(81); $({ target: 'Object', stat: true }, { fromEntries: function fromEntries(iterable) { var obj = {}; iterate(iterable, function (k, v) { createProperty(obj, k, v); }, { AS_ENTRIES: true }); return obj; } }); /***/ }), /* 73 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var anObject = __w_pdfjs_require__(27); var isArrayIteratorMethod = __w_pdfjs_require__(74); var toLength = __w_pdfjs_require__(46); var bind = __w_pdfjs_require__(75); var getIteratorMethod = __w_pdfjs_require__(77); var iteratorClose = __w_pdfjs_require__(80); var Result = function (stopped, result) { this.stopped = stopped; this.result = result; }; module.exports = function (iterable, unboundFunction, options) { var that = options && options.that; var AS_ENTRIES = !!(options && options.AS_ENTRIES); var IS_ITERATOR = !!(options && options.IS_ITERATOR); var INTERRUPTED = !!(options && options.INTERRUPTED); var fn = bind(unboundFunction, that, 1 + AS_ENTRIES + INTERRUPTED); var iterator, iterFn, index, length, result, next, step; var stop = function (condition) { if (iterator) iteratorClose(iterator); return new Result(true, condition); }; var callFn = function (value) { if (AS_ENTRIES) { anObject(value); return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]); } return INTERRUPTED ? fn(value, stop) : fn(value); }; if (IS_ITERATOR) { iterator = iterable; } else { iterFn = getIteratorMethod(iterable); if (typeof iterFn != 'function') throw TypeError('Target is not iterable'); if (isArrayIteratorMethod(iterFn)) { for (index = 0, length = toLength(iterable.length); length > index; index++) { result = callFn(iterable[index]); if (result && result instanceof Result) return result; } return new Result(false); } iterator = iterFn.call(iterable); } next = iterator.next; while (!(step = next.call(iterator)).done) { try { result = callFn(step.value); } catch (error) { iteratorClose(iterator); throw error; } if (typeof result == 'object' && result && result instanceof Result) return result; } return new Result(false); }; /***/ }), /* 74 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var wellKnownSymbol = __w_pdfjs_require__(55); var Iterators = __w_pdfjs_require__(62); var ITERATOR = wellKnownSymbol('iterator'); var ArrayPrototype = Array.prototype; module.exports = function (it) { return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); }; /***/ }), /* 75 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var aFunction = __w_pdfjs_require__(76); module.exports = function (fn, that, length) { aFunction(fn); if (that === undefined) return fn; switch (length) { case 0: return function () { return fn.call(that); }; case 1: return function (a) { return fn.call(that, a); }; case 2: return function (a, b) { return fn.call(that, a, b); }; case 3: return function (a, b, c) { return fn.call(that, a, b, c); }; } return function () { return fn.apply(that, arguments); }; }; /***/ }), /* 76 */ /***/ ((module) => { module.exports = function (it) { if (typeof it != 'function') { throw TypeError(String(it) + ' is not a function'); } return it; }; /***/ }), /* 77 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var classof = __w_pdfjs_require__(78); var Iterators = __w_pdfjs_require__(62); var wellKnownSymbol = __w_pdfjs_require__(55); var ITERATOR = wellKnownSymbol('iterator'); module.exports = function (it) { if (it != undefined) return it[ITERATOR] || it['@@iterator'] || Iterators[classof(it)]; }; /***/ }), /* 78 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var TO_STRING_TAG_SUPPORT = __w_pdfjs_require__(79); var classofRaw = __w_pdfjs_require__(18); var wellKnownSymbol = __w_pdfjs_require__(55); var TO_STRING_TAG = wellKnownSymbol('toStringTag'); var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments'; var tryGet = function (it, key) { try { return it[key]; } catch (error) { } }; module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { var O, tag, result; return it === undefined ? 'Undefined' : it === null ? 'Null' : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag : CORRECT_ARGUMENTS ? classofRaw(O) : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result; }; /***/ }), /* 79 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var wellKnownSymbol = __w_pdfjs_require__(55); var TO_STRING_TAG = wellKnownSymbol('toStringTag'); var test = {}; test[TO_STRING_TAG] = 'z'; module.exports = String(test) === '[object z]'; /***/ }), /* 80 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var anObject = __w_pdfjs_require__(27); module.exports = function (iterator) { var returnMethod = iterator['return']; if (returnMethod !== undefined) { return anObject(returnMethod.call(iterator)).value; } }; /***/ }), /* 81 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var toPrimitive = __w_pdfjs_require__(20); var definePropertyModule = __w_pdfjs_require__(26); var createPropertyDescriptor = __w_pdfjs_require__(15); module.exports = function (object, key, value) { var propertyKey = toPrimitive(key); if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value)); else object[propertyKey] = value; }; /***/ }), /* 82 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { __w_pdfjs_require__(83); __w_pdfjs_require__(84); __w_pdfjs_require__(86); __w_pdfjs_require__(104); __w_pdfjs_require__(105); __w_pdfjs_require__(106); __w_pdfjs_require__(107); __w_pdfjs_require__(109); var path = __w_pdfjs_require__(42); module.exports = path.Promise; /***/ }), /* 83 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var $ = __w_pdfjs_require__(9); var getPrototypeOf = __w_pdfjs_require__(66); var setPrototypeOf = __w_pdfjs_require__(70); var create = __w_pdfjs_require__(58); var createNonEnumerableProperty = __w_pdfjs_require__(25); var createPropertyDescriptor = __w_pdfjs_require__(15); var iterate = __w_pdfjs_require__(73); var $AggregateError = function AggregateError(errors, message) { var that = this; if (!(that instanceof $AggregateError)) return new $AggregateError(errors, message); if (setPrototypeOf) { that = setPrototypeOf(new Error(undefined), getPrototypeOf(that)); } if (message !== undefined) createNonEnumerableProperty(that, 'message', String(message)); var errorsArray = []; iterate(errors, errorsArray.push, { that: errorsArray }); createNonEnumerableProperty(that, 'errors', errorsArray); return that; }; $AggregateError.prototype = create(Error.prototype, { constructor: createPropertyDescriptor(5, $AggregateError), message: createPropertyDescriptor(5, ''), name: createPropertyDescriptor(5, 'AggregateError') }); $({ global: true }, { AggregateError: $AggregateError }); /***/ }), /* 84 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { var TO_STRING_TAG_SUPPORT = __w_pdfjs_require__(79); var redefine = __w_pdfjs_require__(28); var toString = __w_pdfjs_require__(85); if (!TO_STRING_TAG_SUPPORT) { redefine(Object.prototype, 'toString', toString, { unsafe: true }); } /***/ }), /* 85 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var TO_STRING_TAG_SUPPORT = __w_pdfjs_require__(79); var classof = __w_pdfjs_require__(78); module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { return '[object ' + classof(this) + ']'; }; /***/ }), /* 86 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var $ = __w_pdfjs_require__(9); var IS_PURE = __w_pdfjs_require__(36); var global = __w_pdfjs_require__(10); var getBuiltIn = __w_pdfjs_require__(41); var NativePromise = __w_pdfjs_require__(87); var redefine = __w_pdfjs_require__(28); var redefineAll = __w_pdfjs_require__(88); var setToStringTag = __w_pdfjs_require__(69); var setSpecies = __w_pdfjs_require__(89); var isObject = __w_pdfjs_require__(21); var aFunction = __w_pdfjs_require__(76); var anInstance = __w_pdfjs_require__(90); var inspectSource = __w_pdfjs_require__(30); var iterate = __w_pdfjs_require__(73); var checkCorrectnessOfIteration = __w_pdfjs_require__(91); var speciesConstructor = __w_pdfjs_require__(92); var task = __w_pdfjs_require__(93).set; var microtask = __w_pdfjs_require__(97); var promiseResolve = __w_pdfjs_require__(99); var hostReportErrors = __w_pdfjs_require__(101); var newPromiseCapabilityModule = __w_pdfjs_require__(100); var perform = __w_pdfjs_require__(102); var InternalStateModule = __w_pdfjs_require__(32); var isForced = __w_pdfjs_require__(51); var wellKnownSymbol = __w_pdfjs_require__(55); var IS_NODE = __w_pdfjs_require__(96); var V8_VERSION = __w_pdfjs_require__(103); var SPECIES = wellKnownSymbol('species'); var PROMISE = 'Promise'; var getInternalState = InternalStateModule.get; var setInternalState = InternalStateModule.set; var getInternalPromiseState = InternalStateModule.getterFor(PROMISE); var PromiseConstructor = NativePromise; var TypeError = global.TypeError; var document = global.document; var process = global.process; var $fetch = getBuiltIn('fetch'); var newPromiseCapability = newPromiseCapabilityModule.f; var newGenericPromiseCapability = newPromiseCapability; var DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent); var NATIVE_REJECTION_EVENT = typeof PromiseRejectionEvent == 'function'; var UNHANDLED_REJECTION = 'unhandledrejection'; var REJECTION_HANDLED = 'rejectionhandled'; var PENDING = 0; var FULFILLED = 1; var REJECTED = 2; var HANDLED = 1; var UNHANDLED = 2; var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen; var FORCED = isForced(PROMISE, function () { var GLOBAL_CORE_JS_PROMISE = inspectSource(PromiseConstructor) !== String(PromiseConstructor); if (!GLOBAL_CORE_JS_PROMISE) { if (V8_VERSION === 66) return true; if (!IS_NODE && !NATIVE_REJECTION_EVENT) return true; } if (IS_PURE && !PromiseConstructor.prototype['finally']) return true; if (V8_VERSION >= 51 && /native code/.test(PromiseConstructor)) return false; var promise = PromiseConstructor.resolve(1); var FakePromise = function (exec) { exec(function () { }, function () { }); }; var constructor = promise.constructor = {}; constructor[SPECIES] = FakePromise; return !(promise.then(function () { }) instanceof FakePromise); }); var INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) { PromiseConstructor.all(iterable)['catch'](function () { }); }); var isThenable = function (it) { var then; return isObject(it) && typeof (then = it.then) == 'function' ? then : false; }; var notify = function (state, isReject) { if (state.notified) return; state.notified = true; var chain = state.reactions; microtask(function () { var value = state.value; var ok = state.state == FULFILLED; var index = 0; while (chain.length > index) { var reaction = chain[index++]; var handler = ok ? reaction.ok : reaction.fail; var resolve = reaction.resolve; var reject = reaction.reject; var domain = reaction.domain; var result, then, exited; try { if (handler) { if (!ok) { if (state.rejection === UNHANDLED) onHandleUnhandled(state); state.rejection = HANDLED; } if (handler === true) result = value; else { if (domain) domain.enter(); result = handler(value); if (domain) { domain.exit(); exited = true; } } if (result === reaction.promise) { reject(TypeError('Promise-chain cycle')); } else if (then = isThenable(result)) { then.call(result, resolve, reject); } else resolve(result); } else reject(value); } catch (error) { if (domain && !exited) domain.exit(); reject(error); } } state.reactions = []; state.notified = false; if (isReject && !state.rejection) onUnhandled(state); }); }; var dispatchEvent = function (name, promise, reason) { var event, handler; if (DISPATCH_EVENT) { event = document.createEvent('Event'); event.promise = promise; event.reason = reason; event.initEvent(name, false, true); global.dispatchEvent(event); } else event = { promise: promise, reason: reason }; if (!NATIVE_REJECTION_EVENT && (handler = global['on' + name])) handler(event); else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason); }; var onUnhandled = function (state) { task.call(global, function () { var promise = state.facade; var value = state.value; var IS_UNHANDLED = isUnhandled(state); var result; if (IS_UNHANDLED) { result = perform(function () { if (IS_NODE) { process.emit('unhandledRejection', value, promise); } else dispatchEvent(UNHANDLED_REJECTION, promise, value); }); state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED; if (result.error) throw result.value; } }); }; var isUnhandled = function (state) { return state.rejection !== HANDLED && !state.parent; }; var onHandleUnhandled = function (state) { task.call(global, function () { var promise = state.facade; if (IS_NODE) { process.emit('rejectionHandled', promise); } else dispatchEvent(REJECTION_HANDLED, promise, state.value); }); }; var bind = function (fn, state, unwrap) { return function (value) { fn(state, value, unwrap); }; }; var internalReject = function (state, value, unwrap) { if (state.done) return; state.done = true; if (unwrap) state = unwrap; state.value = value; state.state = REJECTED; notify(state, true); }; var internalResolve = function (state, value, unwrap) { if (state.done) return; state.done = true; if (unwrap) state = unwrap; try { if (state.facade === value) throw TypeError("Promise can't be resolved itself"); var then = isThenable(value); if (then) { microtask(function () { var wrapper = { done: false }; try { then.call(value, bind(internalResolve, wrapper, state), bind(internalReject, wrapper, state)); } catch (error) { internalReject(wrapper, error, state); } }); } else { state.value = value; state.state = FULFILLED; notify(state, false); } } catch (error) { internalReject({ done: false }, error, state); } }; if (FORCED) { PromiseConstructor = function Promise(executor) { anInstance(this, PromiseConstructor, PROMISE); aFunction(executor); Internal.call(this); var state = getInternalState(this); try { executor(bind(internalResolve, state), bind(internalReject, state)); } catch (error) { internalReject(state, error); } }; Internal = function Promise(executor) { setInternalState(this, { type: PROMISE, done: false, notified: false, parent: false, reactions: [], rejection: false, state: PENDING, value: undefined }); }; Internal.prototype = redefineAll(PromiseConstructor.prototype, { then: function then(onFulfilled, onRejected) { var state = getInternalPromiseState(this); var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor)); reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true; reaction.fail = typeof onRejected == 'function' && onRejected; reaction.domain = IS_NODE ? process.domain : undefined; state.parent = true; state.reactions.push(reaction); if (state.state != PENDING) notify(state, false); return reaction.promise; }, 'catch': function (onRejected) { return this.then(undefined, onRejected); } }); OwnPromiseCapability = function () { var promise = new Internal(); var state = getInternalState(promise); this.promise = promise; this.resolve = bind(internalResolve, state); this.reject = bind(internalReject, state); }; newPromiseCapabilityModule.f = newPromiseCapability = function (C) { return C === PromiseConstructor || C === PromiseWrapper ? new OwnPromiseCapability(C) : newGenericPromiseCapability(C); }; if (!IS_PURE && typeof NativePromise == 'function') { nativeThen = NativePromise.prototype.then; redefine(NativePromise.prototype, 'then', function then(onFulfilled, onRejected) { var that = this; return new PromiseConstructor(function (resolve, reject) { nativeThen.call(that, resolve, reject); }).then(onFulfilled, onRejected); }, { unsafe: true }); if (typeof $fetch == 'function') $({ global: true, enumerable: true, forced: true }, { fetch: function fetch(input) { return promiseResolve(PromiseConstructor, $fetch.apply(global, arguments)); } }); } } $({ global: true, wrap: true, forced: FORCED }, { Promise: PromiseConstructor }); setToStringTag(PromiseConstructor, PROMISE, false, true); setSpecies(PROMISE); PromiseWrapper = getBuiltIn(PROMISE); $({ target: PROMISE, stat: true, forced: FORCED }, { reject: function reject(r) { var capability = newPromiseCapability(this); capability.reject.call(undefined, r); return capability.promise; } }); $({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, { resolve: function resolve(x) { return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x); } }); $({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, { all: function all(iterable) { var C = this; var capability = newPromiseCapability(C); var resolve = capability.resolve; var reject = capability.reject; var result = perform(function () { var $promiseResolve = aFunction(C.resolve); var values = []; var counter = 0; var remaining = 1; iterate(iterable, function (promise) { var index = counter++; var alreadyCalled = false; values.push(undefined); remaining++; $promiseResolve.call(C, promise).then(function (value) { if (alreadyCalled) return; alreadyCalled = true; values[index] = value; --remaining || resolve(values); }, reject); }); --remaining || resolve(values); }); if (result.error) reject(result.value); return capability.promise; }, race: function race(iterable) { var C = this; var capability = newPromiseCapability(C); var reject = capability.reject; var result = perform(function () { var $promiseResolve = aFunction(C.resolve); iterate(iterable, function (promise) { $promiseResolve.call(C, promise).then(capability.resolve, reject); }); }); if (result.error) reject(result.value); return capability.promise; } }); /***/ }), /* 87 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); module.exports = global.Promise; /***/ }), /* 88 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var redefine = __w_pdfjs_require__(28); module.exports = function (target, src, options) { for (var key in src) redefine(target, key, src[key], options); return target; }; /***/ }), /* 89 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var getBuiltIn = __w_pdfjs_require__(41); var definePropertyModule = __w_pdfjs_require__(26); var wellKnownSymbol = __w_pdfjs_require__(55); var DESCRIPTORS = __w_pdfjs_require__(12); var SPECIES = wellKnownSymbol('species'); module.exports = function (CONSTRUCTOR_NAME) { var Constructor = getBuiltIn(CONSTRUCTOR_NAME); var defineProperty = definePropertyModule.f; if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) { defineProperty(Constructor, SPECIES, { configurable: true, get: function () { return this; } }); } }; /***/ }), /* 90 */ /***/ ((module) => { module.exports = function (it, Constructor, name) { if (!(it instanceof Constructor)) { throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation'); } return it; }; /***/ }), /* 91 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var wellKnownSymbol = __w_pdfjs_require__(55); var ITERATOR = wellKnownSymbol('iterator'); var SAFE_CLOSING = false; try { var called = 0; var iteratorWithReturn = { next: function () { return { done: !!called++ }; }, 'return': function () { SAFE_CLOSING = true; } }; iteratorWithReturn[ITERATOR] = function () { return this; }; Array.from(iteratorWithReturn, function () { throw 2; }); } catch (error) { } module.exports = function (exec, SKIP_CLOSING) { if (!SKIP_CLOSING && !SAFE_CLOSING) return false; var ITERATION_SUPPORT = false; try { var object = {}; object[ITERATOR] = function () { return { next: function () { return { done: ITERATION_SUPPORT = true }; } }; }; exec(object); } catch (error) { } return ITERATION_SUPPORT; }; /***/ }), /* 92 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var anObject = __w_pdfjs_require__(27); var aFunction = __w_pdfjs_require__(76); var wellKnownSymbol = __w_pdfjs_require__(55); var SPECIES = wellKnownSymbol('species'); module.exports = function (O, defaultConstructor) { var C = anObject(O).constructor; var S; return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S); }; /***/ }), /* 93 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); var fails = __w_pdfjs_require__(13); var bind = __w_pdfjs_require__(75); var html = __w_pdfjs_require__(61); var createElement = __w_pdfjs_require__(24); var IS_IOS = __w_pdfjs_require__(94); var IS_NODE = __w_pdfjs_require__(96); var location = global.location; var set = global.setImmediate; var clear = global.clearImmediate; var process = global.process; var MessageChannel = global.MessageChannel; var Dispatch = global.Dispatch; var counter = 0; var queue = {}; var ONREADYSTATECHANGE = 'onreadystatechange'; var defer, channel, port; var run = function (id) { if (queue.hasOwnProperty(id)) { var fn = queue[id]; delete queue[id]; fn(); } }; var runner = function (id) { return function () { run(id); }; }; var listener = function (event) { run(event.data); }; var post = function (id) { global.postMessage(id + '', location.protocol + '//' + location.host); }; if (!set || !clear) { set = function setImmediate(fn) { var args = []; var i = 1; while (arguments.length > i) args.push(arguments[i++]); queue[++counter] = function () { (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args); }; defer(counter); return counter; }; clear = function clearImmediate(id) { delete queue[id]; }; if (IS_NODE) { defer = function (id) { process.nextTick(runner(id)); }; } else if (Dispatch && Dispatch.now) { defer = function (id) { Dispatch.now(runner(id)); }; } else if (MessageChannel && !IS_IOS) { channel = new MessageChannel(); port = channel.port2; channel.port1.onmessage = listener; defer = bind(port.postMessage, port, 1); } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts && location && location.protocol !== 'file:' && !fails(post)) { defer = post; global.addEventListener('message', listener, false); } else if (ONREADYSTATECHANGE in createElement('script')) { defer = function (id) { html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () { html.removeChild(this); run(id); }; }; } else { defer = function (id) { setTimeout(runner(id), 0); }; } } module.exports = { set: set, clear: clear }; /***/ }), /* 94 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var userAgent = __w_pdfjs_require__(95); module.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent); /***/ }), /* 95 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var getBuiltIn = __w_pdfjs_require__(41); module.exports = getBuiltIn('navigator', 'userAgent') || ''; /***/ }), /* 96 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var classof = __w_pdfjs_require__(18); var global = __w_pdfjs_require__(10); module.exports = classof(global.process) == 'process'; /***/ }), /* 97 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); var getOwnPropertyDescriptor = __w_pdfjs_require__(11).f; var macrotask = __w_pdfjs_require__(93).set; var IS_IOS = __w_pdfjs_require__(94); var IS_WEBOS_WEBKIT = __w_pdfjs_require__(98); var IS_NODE = __w_pdfjs_require__(96); var MutationObserver = global.MutationObserver || global.WebKitMutationObserver; var document = global.document; var process = global.process; var Promise = global.Promise; var queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask'); var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value; var flush, head, last, notify, toggle, node, promise, then; if (!queueMicrotask) { flush = function () { var parent, fn; if (IS_NODE && (parent = process.domain)) parent.exit(); while (head) { fn = head.fn; head = head.next; try { fn(); } catch (error) { if (head) notify(); else last = undefined; throw error; } } last = undefined; if (parent) parent.enter(); }; if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) { toggle = true; node = document.createTextNode(''); new MutationObserver(flush).observe(node, { characterData: true }); notify = function () { node.data = toggle = !toggle; }; } else if (Promise && Promise.resolve) { promise = Promise.resolve(undefined); then = promise.then; notify = function () { then.call(promise, flush); }; } else if (IS_NODE) { notify = function () { process.nextTick(flush); }; } else { notify = function () { macrotask.call(global, flush); }; } } module.exports = queueMicrotask || function (fn) { var task = { fn: fn, next: undefined }; if (last) last.next = task; if (!head) { head = task; notify(); } last = task; }; /***/ }), /* 98 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var userAgent = __w_pdfjs_require__(95); module.exports = /web0s(?!.*chrome)/i.test(userAgent); /***/ }), /* 99 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var anObject = __w_pdfjs_require__(27); var isObject = __w_pdfjs_require__(21); var newPromiseCapability = __w_pdfjs_require__(100); module.exports = function (C, x) { anObject(C); if (isObject(x) && x.constructor === C) return x; var promiseCapability = newPromiseCapability.f(C); var resolve = promiseCapability.resolve; resolve(x); return promiseCapability.promise; }; /***/ }), /* 100 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var aFunction = __w_pdfjs_require__(76); var PromiseCapability = function (C) { var resolve, reject; this.promise = new C(function ($$resolve, $$reject) { if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); resolve = $$resolve; reject = $$reject; }); this.resolve = aFunction(resolve); this.reject = aFunction(reject); }; module.exports.f = function (C) { return new PromiseCapability(C); }; /***/ }), /* 101 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); module.exports = function (a, b) { var console = global.console; if (console && console.error) { arguments.length === 1 ? console.error(a) : console.error(a, b); } }; /***/ }), /* 102 */ /***/ ((module) => { module.exports = function (exec) { try { return { error: false, value: exec() }; } catch (error) { return { error: true, value: error }; } }; /***/ }), /* 103 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); var userAgent = __w_pdfjs_require__(95); var process = global.process; var versions = process && process.versions; var v8 = versions && versions.v8; var match, version; if (v8) { match = v8.split('.'); version = match[0] + match[1]; } else if (userAgent) { match = userAgent.match(/Edge\/(\d+)/); if (!match || match[1] >= 74) { match = userAgent.match(/Chrome\/(\d+)/); if (match) version = match[1]; } } module.exports = version && +version; /***/ }), /* 104 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var $ = __w_pdfjs_require__(9); var aFunction = __w_pdfjs_require__(76); var newPromiseCapabilityModule = __w_pdfjs_require__(100); var perform = __w_pdfjs_require__(102); var iterate = __w_pdfjs_require__(73); $({ target: 'Promise', stat: true }, { allSettled: function allSettled(iterable) { var C = this; var capability = newPromiseCapabilityModule.f(C); var resolve = capability.resolve; var reject = capability.reject; var result = perform(function () { var promiseResolve = aFunction(C.resolve); var values = []; var counter = 0; var remaining = 1; iterate(iterable, function (promise) { var index = counter++; var alreadyCalled = false; values.push(undefined); remaining++; promiseResolve.call(C, promise).then(function (value) { if (alreadyCalled) return; alreadyCalled = true; values[index] = { status: 'fulfilled', value: value }; --remaining || resolve(values); }, function (error) { if (alreadyCalled) return; alreadyCalled = true; values[index] = { status: 'rejected', reason: error }; --remaining || resolve(values); }); }); --remaining || resolve(values); }); if (result.error) reject(result.value); return capability.promise; } }); /***/ }), /* 105 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var $ = __w_pdfjs_require__(9); var aFunction = __w_pdfjs_require__(76); var getBuiltIn = __w_pdfjs_require__(41); var newPromiseCapabilityModule = __w_pdfjs_require__(100); var perform = __w_pdfjs_require__(102); var iterate = __w_pdfjs_require__(73); var PROMISE_ANY_ERROR = 'No one promise resolved'; $({ target: 'Promise', stat: true }, { any: function any(iterable) { var C = this; var capability = newPromiseCapabilityModule.f(C); var resolve = capability.resolve; var reject = capability.reject; var result = perform(function () { var promiseResolve = aFunction(C.resolve); var errors = []; var counter = 0; var remaining = 1; var alreadyResolved = false; iterate(iterable, function (promise) { var index = counter++; var alreadyRejected = false; errors.push(undefined); remaining++; promiseResolve.call(C, promise).then(function (value) { if (alreadyRejected || alreadyResolved) return; alreadyResolved = true; resolve(value); }, function (error) { if (alreadyRejected || alreadyResolved) return; alreadyRejected = true; errors[index] = error; --remaining || reject(new (getBuiltIn('AggregateError'))(errors, PROMISE_ANY_ERROR)); }); }); --remaining || reject(new (getBuiltIn('AggregateError'))(errors, PROMISE_ANY_ERROR)); }); if (result.error) reject(result.value); return capability.promise; } }); /***/ }), /* 106 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var $ = __w_pdfjs_require__(9); var IS_PURE = __w_pdfjs_require__(36); var NativePromise = __w_pdfjs_require__(87); var fails = __w_pdfjs_require__(13); var getBuiltIn = __w_pdfjs_require__(41); var speciesConstructor = __w_pdfjs_require__(92); var promiseResolve = __w_pdfjs_require__(99); var redefine = __w_pdfjs_require__(28); var NON_GENERIC = !!NativePromise && fails(function () { NativePromise.prototype['finally'].call({ then: function () { } }, function () { }); }); $({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, { 'finally': function (onFinally) { var C = speciesConstructor(this, getBuiltIn('Promise')); var isFunction = typeof onFinally == 'function'; return this.then(isFunction ? function (x) { return promiseResolve(C, onFinally()).then(function () { return x; }); } : onFinally, isFunction ? function (e) { return promiseResolve(C, onFinally()).then(function () { throw e; }); } : onFinally); } }); if (!IS_PURE && typeof NativePromise == 'function' && !NativePromise.prototype['finally']) { redefine(NativePromise.prototype, 'finally', getBuiltIn('Promise').prototype['finally']); } /***/ }), /* 107 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var charAt = __w_pdfjs_require__(108).charAt; var InternalStateModule = __w_pdfjs_require__(32); var defineIterator = __w_pdfjs_require__(63); var STRING_ITERATOR = 'String Iterator'; var setInternalState = InternalStateModule.set; var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR); defineIterator(String, 'String', function (iterated) { setInternalState(this, { type: STRING_ITERATOR, string: String(iterated), index: 0 }); }, function next() { var state = getInternalState(this); var string = state.string; var index = state.index; var point; if (index >= string.length) return { value: undefined, done: true }; point = charAt(string, index); state.index += point.length; return { value: point, done: false }; }); /***/ }), /* 108 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var toInteger = __w_pdfjs_require__(47); var requireObjectCoercible = __w_pdfjs_require__(19); var createMethod = function (CONVERT_TO_STRING) { return function ($this, pos) { var S = String(requireObjectCoercible($this)); var position = toInteger(pos); var size = S.length; var first, second; if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; first = S.charCodeAt(position); return first < 0xD800 || first > 0xDBFF || position + 1 === size || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF ? CONVERT_TO_STRING ? S.charAt(position) : first : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; }; }; module.exports = { codeAt: createMethod(false), charAt: createMethod(true) }; /***/ }), /* 109 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); var DOMIterables = __w_pdfjs_require__(110); var ArrayIteratorMethods = __w_pdfjs_require__(53); var createNonEnumerableProperty = __w_pdfjs_require__(25); var wellKnownSymbol = __w_pdfjs_require__(55); var ITERATOR = wellKnownSymbol('iterator'); var TO_STRING_TAG = wellKnownSymbol('toStringTag'); var ArrayValues = ArrayIteratorMethods.values; for (var COLLECTION_NAME in DOMIterables) { var Collection = global[COLLECTION_NAME]; var CollectionPrototype = Collection && Collection.prototype; if (CollectionPrototype) { if (CollectionPrototype[ITERATOR] !== ArrayValues) try { createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues); } catch (error) { CollectionPrototype[ITERATOR] = ArrayValues; } if (!CollectionPrototype[TO_STRING_TAG]) { createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME); } if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) { if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try { createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]); } catch (error) { CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME]; } } } } /***/ }), /* 110 */ /***/ ((module) => { module.exports = { CSSRuleList: 0, CSSStyleDeclaration: 0, CSSValueList: 0, ClientRectList: 0, DOMRectList: 0, DOMStringList: 0, DOMTokenList: 1, DataTransferItemList: 0, FileList: 0, HTMLAllCollection: 0, HTMLCollection: 0, HTMLFormElement: 0, HTMLSelectElement: 0, MediaList: 0, MimeTypeArray: 0, NamedNodeMap: 0, NodeList: 1, PaintRequestList: 0, Plugin: 0, PluginArray: 0, SVGLengthList: 0, SVGNumberList: 0, SVGPathSegList: 0, SVGPointList: 0, SVGStringList: 0, SVGTransformList: 0, SourceBufferList: 0, StyleSheetList: 0, TextTrackCueList: 0, TextTrackList: 0, TouchList: 0 }; /***/ }), /* 111 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { __w_pdfjs_require__(112); __w_pdfjs_require__(120); __w_pdfjs_require__(118); var path = __w_pdfjs_require__(42); module.exports = path.URL; /***/ }), /* 112 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; __w_pdfjs_require__(107); var $ = __w_pdfjs_require__(9); var DESCRIPTORS = __w_pdfjs_require__(12); var USE_NATIVE_URL = __w_pdfjs_require__(113); var global = __w_pdfjs_require__(10); var defineProperties = __w_pdfjs_require__(59); var redefine = __w_pdfjs_require__(28); var anInstance = __w_pdfjs_require__(90); var has = __w_pdfjs_require__(22); var assign = __w_pdfjs_require__(114); var arrayFrom = __w_pdfjs_require__(115); var codeAt = __w_pdfjs_require__(108).codeAt; var toASCII = __w_pdfjs_require__(117); var setToStringTag = __w_pdfjs_require__(69); var URLSearchParamsModule = __w_pdfjs_require__(118); var InternalStateModule = __w_pdfjs_require__(32); var NativeURL = global.URL; var URLSearchParams = URLSearchParamsModule.URLSearchParams; var getInternalSearchParamsState = URLSearchParamsModule.getState; var setInternalState = InternalStateModule.set; var getInternalURLState = InternalStateModule.getterFor('URL'); var floor = Math.floor; var pow = Math.pow; var INVALID_AUTHORITY = 'Invalid authority'; var INVALID_SCHEME = 'Invalid scheme'; var INVALID_HOST = 'Invalid host'; var INVALID_PORT = 'Invalid port'; var ALPHA = /[A-Za-z]/; var ALPHANUMERIC = /[\d+-.A-Za-z]/; var DIGIT = /\d/; var HEX_START = /^(0x|0X)/; var OCT = /^[0-7]+$/; var DEC = /^\d+$/; var HEX = /^[\dA-Fa-f]+$/; var FORBIDDEN_HOST_CODE_POINT = /[\u0000\u0009\u000A\u000D #%/:?@[\\]]/; var FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\u0000\u0009\u000A\u000D #/:?@[\\]]/; var LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\u0000-\u001F ]+|[\u0000-\u001F ]+$/g; var TAB_AND_NEW_LINE = /[\u0009\u000A\u000D]/g; var EOF; var parseHost = function (url, input) { var result, codePoints, index; if (input.charAt(0) == '[') { if (input.charAt(input.length - 1) != ']') return INVALID_HOST; result = parseIPv6(input.slice(1, -1)); if (!result) return INVALID_HOST; url.host = result; } else if (!isSpecial(url)) { if (FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT.test(input)) return INVALID_HOST; result = ''; codePoints = arrayFrom(input); for (index = 0; index < codePoints.length; index++) { result += percentEncode(codePoints[index], C0ControlPercentEncodeSet); } url.host = result; } else { input = toASCII(input); if (FORBIDDEN_HOST_CODE_POINT.test(input)) return INVALID_HOST; result = parseIPv4(input); if (result === null) return INVALID_HOST; url.host = result; } }; var parseIPv4 = function (input) { var parts = input.split('.'); var partsLength, numbers, index, part, radix, number, ipv4; if (parts.length && parts[parts.length - 1] == '') { parts.pop(); } partsLength = parts.length; if (partsLength > 4) return input; numbers = []; for (index = 0; index < partsLength; index++) { part = parts[index]; if (part == '') return input; radix = 10; if (part.length > 1 && part.charAt(0) == '0') { radix = HEX_START.test(part) ? 16 : 8; part = part.slice(radix == 8 ? 1 : 2); } if (part === '') { number = 0; } else { if (!(radix == 10 ? DEC : radix == 8 ? OCT : HEX).test(part)) return input; number = parseInt(part, radix); } numbers.push(number); } for (index = 0; index < partsLength; index++) { number = numbers[index]; if (index == partsLength - 1) { if (number >= pow(256, 5 - partsLength)) return null; } else if (number > 255) return null; } ipv4 = numbers.pop(); for (index = 0; index < numbers.length; index++) { ipv4 += numbers[index] * pow(256, 3 - index); } return ipv4; }; var parseIPv6 = function (input) { var address = [ 0, 0, 0, 0, 0, 0, 0, 0 ]; var pieceIndex = 0; var compress = null; var pointer = 0; var value, length, numbersSeen, ipv4Piece, number, swaps, swap; var char = function () { return input.charAt(pointer); }; if (char() == ':') { if (input.charAt(1) != ':') return; pointer += 2; pieceIndex++; compress = pieceIndex; } while (char()) { if (pieceIndex == 8) return; if (char() == ':') { if (compress !== null) return; pointer++; pieceIndex++; compress = pieceIndex; continue; } value = length = 0; while (length < 4 && HEX.test(char())) { value = value * 16 + parseInt(char(), 16); pointer++; length++; } if (char() == '.') { if (length == 0) return; pointer -= length; if (pieceIndex > 6) return; numbersSeen = 0; while (char()) { ipv4Piece = null; if (numbersSeen > 0) { if (char() == '.' && numbersSeen < 4) pointer++; else return; } if (!DIGIT.test(char())) return; while (DIGIT.test(char())) { number = parseInt(char(), 10); if (ipv4Piece === null) ipv4Piece = number; else if (ipv4Piece == 0) return; else ipv4Piece = ipv4Piece * 10 + number; if (ipv4Piece > 255) return; pointer++; } address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece; numbersSeen++; if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++; } if (numbersSeen != 4) return; break; } else if (char() == ':') { pointer++; if (!char()) return; } else if (char()) return; address[pieceIndex++] = value; } if (compress !== null) { swaps = pieceIndex - compress; pieceIndex = 7; while (pieceIndex != 0 && swaps > 0) { swap = address[pieceIndex]; address[pieceIndex--] = address[compress + swaps - 1]; address[compress + --swaps] = swap; } } else if (pieceIndex != 8) return; return address; }; var findLongestZeroSequence = function (ipv6) { var maxIndex = null; var maxLength = 1; var currStart = null; var currLength = 0; var index = 0; for (; index < 8; index++) { if (ipv6[index] !== 0) { if (currLength > maxLength) { maxIndex = currStart; maxLength = currLength; } currStart = null; currLength = 0; } else { if (currStart === null) currStart = index; ++currLength; } } if (currLength > maxLength) { maxIndex = currStart; maxLength = currLength; } return maxIndex; }; var serializeHost = function (host) { var result, index, compress, ignore0; if (typeof host == 'number') { result = []; for (index = 0; index < 4; index++) { result.unshift(host % 256); host = floor(host / 256); } return result.join('.'); } else if (typeof host == 'object') { result = ''; compress = findLongestZeroSequence(host); for (index = 0; index < 8; index++) { if (ignore0 && host[index] === 0) continue; if (ignore0) ignore0 = false; if (compress === index) { result += index ? ':' : '::'; ignore0 = true; } else { result += host[index].toString(16); if (index < 7) result += ':'; } } return '[' + result + ']'; } return host; }; var C0ControlPercentEncodeSet = {}; var fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, { ' ': 1, '"': 1, '<': 1, '>': 1, '`': 1 }); var pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, { '#': 1, '?': 1, '{': 1, '}': 1 }); var userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, { '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\': 1, ']': 1, '^': 1, '|': 1 }); var percentEncode = function (char, set) { var code = codeAt(char, 0); return code > 0x20 && code < 0x7F && !has(set, char) ? char : encodeURIComponent(char); }; var specialSchemes = { ftp: 21, file: null, http: 80, https: 443, ws: 80, wss: 443 }; var isSpecial = function (url) { return has(specialSchemes, url.scheme); }; var includesCredentials = function (url) { return url.username != '' || url.password != ''; }; var cannotHaveUsernamePasswordPort = function (url) { return !url.host || url.cannotBeABaseURL || url.scheme == 'file'; }; var isWindowsDriveLetter = function (string, normalized) { var second; return string.length == 2 && ALPHA.test(string.charAt(0)) && ((second = string.charAt(1)) == ':' || !normalized && second == '|'); }; var startsWithWindowsDriveLetter = function (string) { var third; return string.length > 1 && isWindowsDriveLetter(string.slice(0, 2)) && (string.length == 2 || ((third = string.charAt(2)) === '/' || third === '\\' || third === '?' || third === '#')); }; var shortenURLsPath = function (url) { var path = url.path; var pathSize = path.length; if (pathSize && (url.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) { path.pop(); } }; var isSingleDot = function (segment) { return segment === '.' || segment.toLowerCase() === '%2e'; }; var isDoubleDot = function (segment) { segment = segment.toLowerCase(); return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e'; }; var SCHEME_START = {}; var SCHEME = {}; var NO_SCHEME = {}; var SPECIAL_RELATIVE_OR_AUTHORITY = {}; var PATH_OR_AUTHORITY = {}; var RELATIVE = {}; var RELATIVE_SLASH = {}; var SPECIAL_AUTHORITY_SLASHES = {}; var SPECIAL_AUTHORITY_IGNORE_SLASHES = {}; var AUTHORITY = {}; var HOST = {}; var HOSTNAME = {}; var PORT = {}; var FILE = {}; var FILE_SLASH = {}; var FILE_HOST = {}; var PATH_START = {}; var PATH = {}; var CANNOT_BE_A_BASE_URL_PATH = {}; var QUERY = {}; var FRAGMENT = {}; var parseURL = function (url, input, stateOverride, base) { var state = stateOverride || SCHEME_START; var pointer = 0; var buffer = ''; var seenAt = false; var seenBracket = false; var seenPasswordToken = false; var codePoints, char, bufferCodePoints, failure; if (!stateOverride) { url.scheme = ''; url.username = ''; url.password = ''; url.host = null; url.port = null; url.path = []; url.query = null; url.fragment = null; url.cannotBeABaseURL = false; input = input.replace(LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, ''); } input = input.replace(TAB_AND_NEW_LINE, ''); codePoints = arrayFrom(input); while (pointer <= codePoints.length) { char = codePoints[pointer]; switch (state) { case SCHEME_START: if (char && ALPHA.test(char)) { buffer += char.toLowerCase(); state = SCHEME; } else if (!stateOverride) { state = NO_SCHEME; continue; } else return INVALID_SCHEME; break; case SCHEME: if (char && (ALPHANUMERIC.test(char) || char == '+' || char == '-' || char == '.')) { buffer += char.toLowerCase(); } else if (char == ':') { if (stateOverride && (isSpecial(url) != has(specialSchemes, buffer) || buffer == 'file' && (includesCredentials(url) || url.port !== null) || url.scheme == 'file' && !url.host)) return; url.scheme = buffer; if (stateOverride) { if (isSpecial(url) && specialSchemes[url.scheme] == url.port) url.port = null; return; } buffer = ''; if (url.scheme == 'file') { state = FILE; } else if (isSpecial(url) && base && base.scheme == url.scheme) { state = SPECIAL_RELATIVE_OR_AUTHORITY; } else if (isSpecial(url)) { state = SPECIAL_AUTHORITY_SLASHES; } else if (codePoints[pointer + 1] == '/') { state = PATH_OR_AUTHORITY; pointer++; } else { url.cannotBeABaseURL = true; url.path.push(''); state = CANNOT_BE_A_BASE_URL_PATH; } } else if (!stateOverride) { buffer = ''; state = NO_SCHEME; pointer = 0; continue; } else return INVALID_SCHEME; break; case NO_SCHEME: if (!base || base.cannotBeABaseURL && char != '#') return INVALID_SCHEME; if (base.cannotBeABaseURL && char == '#') { url.scheme = base.scheme; url.path = base.path.slice(); url.query = base.query; url.fragment = ''; url.cannotBeABaseURL = true; state = FRAGMENT; break; } state = base.scheme == 'file' ? FILE : RELATIVE; continue; case SPECIAL_RELATIVE_OR_AUTHORITY: if (char == '/' && codePoints[pointer + 1] == '/') { state = SPECIAL_AUTHORITY_IGNORE_SLASHES; pointer++; } else { state = RELATIVE; continue; } break; case PATH_OR_AUTHORITY: if (char == '/') { state = AUTHORITY; break; } else { state = PATH; continue; } case RELATIVE: url.scheme = base.scheme; if (char == EOF) { url.username = base.username; url.password = base.password; url.host = base.host; url.port = base.port; url.path = base.path.slice(); url.query = base.query; } else if (char == '/' || char == '\\' && isSpecial(url)) { state = RELATIVE_SLASH; } else if (char == '?') { url.username = base.username; url.password = base.password; url.host = base.host; url.port = base.port; url.path = base.path.slice(); url.query = ''; state = QUERY; } else if (char == '#') { url.username = base.username; url.password = base.password; url.host = base.host; url.port = base.port; url.path = base.path.slice(); url.query = base.query; url.fragment = ''; state = FRAGMENT; } else { url.username = base.username; url.password = base.password; url.host = base.host; url.port = base.port; url.path = base.path.slice(); url.path.pop(); state = PATH; continue; } break; case RELATIVE_SLASH: if (isSpecial(url) && (char == '/' || char == '\\')) { state = SPECIAL_AUTHORITY_IGNORE_SLASHES; } else if (char == '/') { state = AUTHORITY; } else { url.username = base.username; url.password = base.password; url.host = base.host; url.port = base.port; state = PATH; continue; } break; case SPECIAL_AUTHORITY_SLASHES: state = SPECIAL_AUTHORITY_IGNORE_SLASHES; if (char != '/' || buffer.charAt(pointer + 1) != '/') continue; pointer++; break; case SPECIAL_AUTHORITY_IGNORE_SLASHES: if (char != '/' && char != '\\') { state = AUTHORITY; continue; } break; case AUTHORITY: if (char == '@') { if (seenAt) buffer = '%40' + buffer; seenAt = true; bufferCodePoints = arrayFrom(buffer); for (var i = 0; i < bufferCodePoints.length; i++) { var codePoint = bufferCodePoints[i]; if (codePoint == ':' && !seenPasswordToken) { seenPasswordToken = true; continue; } var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet); if (seenPasswordToken) url.password += encodedCodePoints; else url.username += encodedCodePoints; } buffer = ''; } else if (char == EOF || char == '/' || char == '?' || char == '#' || char == '\\' && isSpecial(url)) { if (seenAt && buffer == '') return INVALID_AUTHORITY; pointer -= arrayFrom(buffer).length + 1; buffer = ''; state = HOST; } else buffer += char; break; case HOST: case HOSTNAME: if (stateOverride && url.scheme == 'file') { state = FILE_HOST; continue; } else if (char == ':' && !seenBracket) { if (buffer == '') return INVALID_HOST; failure = parseHost(url, buffer); if (failure) return failure; buffer = ''; state = PORT; if (stateOverride == HOSTNAME) return; } else if (char == EOF || char == '/' || char == '?' || char == '#' || char == '\\' && isSpecial(url)) { if (isSpecial(url) && buffer == '') return INVALID_HOST; if (stateOverride && buffer == '' && (includesCredentials(url) || url.port !== null)) return; failure = parseHost(url, buffer); if (failure) return failure; buffer = ''; state = PATH_START; if (stateOverride) return; continue; } else { if (char == '[') seenBracket = true; else if (char == ']') seenBracket = false; buffer += char; } break; case PORT: if (DIGIT.test(char)) { buffer += char; } else if (char == EOF || char == '/' || char == '?' || char == '#' || char == '\\' && isSpecial(url) || stateOverride) { if (buffer != '') { var port = parseInt(buffer, 10); if (port > 0xFFFF) return INVALID_PORT; url.port = isSpecial(url) && port === specialSchemes[url.scheme] ? null : port; buffer = ''; } if (stateOverride) return; state = PATH_START; continue; } else return INVALID_PORT; break; case FILE: url.scheme = 'file'; if (char == '/' || char == '\\') state = FILE_SLASH; else if (base && base.scheme == 'file') { if (char == EOF) { url.host = base.host; url.path = base.path.slice(); url.query = base.query; } else if (char == '?') { url.host = base.host; url.path = base.path.slice(); url.query = ''; state = QUERY; } else if (char == '#') { url.host = base.host; url.path = base.path.slice(); url.query = base.query; url.fragment = ''; state = FRAGMENT; } else { if (!startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) { url.host = base.host; url.path = base.path.slice(); shortenURLsPath(url); } state = PATH; continue; } } else { state = PATH; continue; } break; case FILE_SLASH: if (char == '/' || char == '\\') { state = FILE_HOST; break; } if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) { if (isWindowsDriveLetter(base.path[0], true)) url.path.push(base.path[0]); else url.host = base.host; } state = PATH; continue; case FILE_HOST: if (char == EOF || char == '/' || char == '\\' || char == '?' || char == '#') { if (!stateOverride && isWindowsDriveLetter(buffer)) { state = PATH; } else if (buffer == '') { url.host = ''; if (stateOverride) return; state = PATH_START; } else { failure = parseHost(url, buffer); if (failure) return failure; if (url.host == 'localhost') url.host = ''; if (stateOverride) return; buffer = ''; state = PATH_START; } continue; } else buffer += char; break; case PATH_START: if (isSpecial(url)) { state = PATH; if (char != '/' && char != '\\') continue; } else if (!stateOverride && char == '?') { url.query = ''; state = QUERY; } else if (!stateOverride && char == '#') { url.fragment = ''; state = FRAGMENT; } else if (char != EOF) { state = PATH; if (char != '/') continue; } break; case PATH: if (char == EOF || char == '/' || char == '\\' && isSpecial(url) || !stateOverride && (char == '?' || char == '#')) { if (isDoubleDot(buffer)) { shortenURLsPath(url); if (char != '/' && !(char == '\\' && isSpecial(url))) { url.path.push(''); } } else if (isSingleDot(buffer)) { if (char != '/' && !(char == '\\' && isSpecial(url))) { url.path.push(''); } } else { if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) { if (url.host) url.host = ''; buffer = buffer.charAt(0) + ':'; } url.path.push(buffer); } buffer = ''; if (url.scheme == 'file' && (char == EOF || char == '?' || char == '#')) { while (url.path.length > 1 && url.path[0] === '') { url.path.shift(); } } if (char == '?') { url.query = ''; state = QUERY; } else if (char == '#') { url.fragment = ''; state = FRAGMENT; } } else { buffer += percentEncode(char, pathPercentEncodeSet); } break; case CANNOT_BE_A_BASE_URL_PATH: if (char == '?') { url.query = ''; state = QUERY; } else if (char == '#') { url.fragment = ''; state = FRAGMENT; } else if (char != EOF) { url.path[0] += percentEncode(char, C0ControlPercentEncodeSet); } break; case QUERY: if (!stateOverride && char == '#') { url.fragment = ''; state = FRAGMENT; } else if (char != EOF) { if (char == "'" && isSpecial(url)) url.query += '%27'; else if (char == '#') url.query += '%23'; else url.query += percentEncode(char, C0ControlPercentEncodeSet); } break; case FRAGMENT: if (char != EOF) url.fragment += percentEncode(char, fragmentPercentEncodeSet); break; } pointer++; } }; var URLConstructor = function URL(url) { var that = anInstance(this, URLConstructor, 'URL'); var base = arguments.length > 1 ? arguments[1] : undefined; var urlString = String(url); var state = setInternalState(that, { type: 'URL' }); var baseState, failure; if (base !== undefined) { if (base instanceof URLConstructor) baseState = getInternalURLState(base); else { failure = parseURL(baseState = {}, String(base)); if (failure) throw TypeError(failure); } } failure = parseURL(state, urlString, null, baseState); if (failure) throw TypeError(failure); var searchParams = state.searchParams = new URLSearchParams(); var searchParamsState = getInternalSearchParamsState(searchParams); searchParamsState.updateSearchParams(state.query); searchParamsState.updateURL = function () { state.query = String(searchParams) || null; }; if (!DESCRIPTORS) { that.href = serializeURL.call(that); that.origin = getOrigin.call(that); that.protocol = getProtocol.call(that); that.username = getUsername.call(that); that.password = getPassword.call(that); that.host = getHost.call(that); that.hostname = getHostname.call(that); that.port = getPort.call(that); that.pathname = getPathname.call(that); that.search = getSearch.call(that); that.searchParams = getSearchParams.call(that); that.hash = getHash.call(that); } }; var URLPrototype = URLConstructor.prototype; var serializeURL = function () { var url = getInternalURLState(this); var scheme = url.scheme; var username = url.username; var password = url.password; var host = url.host; var port = url.port; var path = url.path; var query = url.query; var fragment = url.fragment; var output = scheme + ':'; if (host !== null) { output += '//'; if (includesCredentials(url)) { output += username + (password ? ':' + password : '') + '@'; } output += serializeHost(host); if (port !== null) output += ':' + port; } else if (scheme == 'file') output += '//'; output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : ''; if (query !== null) output += '?' + query; if (fragment !== null) output += '#' + fragment; return output; }; var getOrigin = function () { var url = getInternalURLState(this); var scheme = url.scheme; var port = url.port; if (scheme == 'blob') try { return new URL(scheme.path[0]).origin; } catch (error) { return 'null'; } if (scheme == 'file' || !isSpecial(url)) return 'null'; return scheme + '://' + serializeHost(url.host) + (port !== null ? ':' + port : ''); }; var getProtocol = function () { return getInternalURLState(this).scheme + ':'; }; var getUsername = function () { return getInternalURLState(this).username; }; var getPassword = function () { return getInternalURLState(this).password; }; var getHost = function () { var url = getInternalURLState(this); var host = url.host; var port = url.port; return host === null ? '' : port === null ? serializeHost(host) : serializeHost(host) + ':' + port; }; var getHostname = function () { var host = getInternalURLState(this).host; return host === null ? '' : serializeHost(host); }; var getPort = function () { var port = getInternalURLState(this).port; return port === null ? '' : String(port); }; var getPathname = function () { var url = getInternalURLState(this); var path = url.path; return url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : ''; }; var getSearch = function () { var query = getInternalURLState(this).query; return query ? '?' + query : ''; }; var getSearchParams = function () { return getInternalURLState(this).searchParams; }; var getHash = function () { var fragment = getInternalURLState(this).fragment; return fragment ? '#' + fragment : ''; }; var accessorDescriptor = function (getter, setter) { return { get: getter, set: setter, configurable: true, enumerable: true }; }; if (DESCRIPTORS) { defineProperties(URLPrototype, { href: accessorDescriptor(serializeURL, function (href) { var url = getInternalURLState(this); var urlString = String(href); var failure = parseURL(url, urlString); if (failure) throw TypeError(failure); getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query); }), origin: accessorDescriptor(getOrigin), protocol: accessorDescriptor(getProtocol, function (protocol) { var url = getInternalURLState(this); parseURL(url, String(protocol) + ':', SCHEME_START); }), username: accessorDescriptor(getUsername, function (username) { var url = getInternalURLState(this); var codePoints = arrayFrom(String(username)); if (cannotHaveUsernamePasswordPort(url)) return; url.username = ''; for (var i = 0; i < codePoints.length; i++) { url.username += percentEncode(codePoints[i], userinfoPercentEncodeSet); } }), password: accessorDescriptor(getPassword, function (password) { var url = getInternalURLState(this); var codePoints = arrayFrom(String(password)); if (cannotHaveUsernamePasswordPort(url)) return; url.password = ''; for (var i = 0; i < codePoints.length; i++) { url.password += percentEncode(codePoints[i], userinfoPercentEncodeSet); } }), host: accessorDescriptor(getHost, function (host) { var url = getInternalURLState(this); if (url.cannotBeABaseURL) return; parseURL(url, String(host), HOST); }), hostname: accessorDescriptor(getHostname, function (hostname) { var url = getInternalURLState(this); if (url.cannotBeABaseURL) return; parseURL(url, String(hostname), HOSTNAME); }), port: accessorDescriptor(getPort, function (port) { var url = getInternalURLState(this); if (cannotHaveUsernamePasswordPort(url)) return; port = String(port); if (port == '') url.port = null; else parseURL(url, port, PORT); }), pathname: accessorDescriptor(getPathname, function (pathname) { var url = getInternalURLState(this); if (url.cannotBeABaseURL) return; url.path = []; parseURL(url, pathname + '', PATH_START); }), search: accessorDescriptor(getSearch, function (search) { var url = getInternalURLState(this); search = String(search); if (search == '') { url.query = null; } else { if ('?' == search.charAt(0)) search = search.slice(1); url.query = ''; parseURL(url, search, QUERY); } getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query); }), searchParams: accessorDescriptor(getSearchParams), hash: accessorDescriptor(getHash, function (hash) { var url = getInternalURLState(this); hash = String(hash); if (hash == '') { url.fragment = null; return; } if ('#' == hash.charAt(0)) hash = hash.slice(1); url.fragment = ''; parseURL(url, hash, FRAGMENT); }) }); } redefine(URLPrototype, 'toJSON', function toJSON() { return serializeURL.call(this); }, { enumerable: true }); redefine(URLPrototype, 'toString', function toString() { return serializeURL.call(this); }, { enumerable: true }); if (NativeURL) { var nativeCreateObjectURL = NativeURL.createObjectURL; var nativeRevokeObjectURL = NativeURL.revokeObjectURL; if (nativeCreateObjectURL) redefine(URLConstructor, 'createObjectURL', function createObjectURL(blob) { return nativeCreateObjectURL.apply(NativeURL, arguments); }); if (nativeRevokeObjectURL) redefine(URLConstructor, 'revokeObjectURL', function revokeObjectURL(url) { return nativeRevokeObjectURL.apply(NativeURL, arguments); }); } setToStringTag(URLConstructor, 'URL'); $({ global: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, { URL: URLConstructor }); /***/ }), /* 113 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var fails = __w_pdfjs_require__(13); var wellKnownSymbol = __w_pdfjs_require__(55); var IS_PURE = __w_pdfjs_require__(36); var ITERATOR = wellKnownSymbol('iterator'); module.exports = !fails(function () { var url = new URL('b?a=1&b=2&c=3', 'http://a'); var searchParams = url.searchParams; var result = ''; url.pathname = 'c%20d'; searchParams.forEach(function (value, key) { searchParams['delete']('b'); result += key + value; }); return IS_PURE && !url.toJSON || !searchParams.sort || url.href !== 'http://a/c%20d?a=1&c=3' || searchParams.get('c') !== '3' || String(new URLSearchParams('?a=1')) !== 'a=1' || !searchParams[ITERATOR] || new URL('https://a@b').username !== 'a' || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b' || new URL('http://тест').host !== 'xn--e1aybc' || new URL('http://a#б').hash !== '#%D0%B1' || result !== 'a1c3' || new URL('http://x', undefined).host !== 'x'; }); /***/ }), /* 114 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var DESCRIPTORS = __w_pdfjs_require__(12); var fails = __w_pdfjs_require__(13); var objectKeys = __w_pdfjs_require__(60); var getOwnPropertySymbolsModule = __w_pdfjs_require__(50); var propertyIsEnumerableModule = __w_pdfjs_require__(14); var toObject = __w_pdfjs_require__(67); var IndexedObject = __w_pdfjs_require__(17); var nativeAssign = Object.assign; var defineProperty = Object.defineProperty; module.exports = !nativeAssign || fails(function () { if (DESCRIPTORS && nativeAssign({ b: 1 }, nativeAssign(defineProperty({}, 'a', { enumerable: true, get: function () { defineProperty(this, 'b', { value: 3, enumerable: false }); } }), { b: 2 })).b !== 1) return true; var A = {}; var B = {}; var symbol = Symbol(); var alphabet = 'abcdefghijklmnopqrst'; A[symbol] = 7; alphabet.split('').forEach(function (chr) { B[chr] = chr; }); return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet; }) ? function assign(target, source) { var T = toObject(target); var argumentsLength = arguments.length; var index = 1; var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; var propertyIsEnumerable = propertyIsEnumerableModule.f; while (argumentsLength > index) { var S = IndexedObject(arguments[index++]); var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S); var length = keys.length; var j = 0; var key; while (length > j) { key = keys[j++]; if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key]; } } return T; } : nativeAssign; /***/ }), /* 115 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var bind = __w_pdfjs_require__(75); var toObject = __w_pdfjs_require__(67); var callWithSafeIterationClosing = __w_pdfjs_require__(116); var isArrayIteratorMethod = __w_pdfjs_require__(74); var toLength = __w_pdfjs_require__(46); var createProperty = __w_pdfjs_require__(81); var getIteratorMethod = __w_pdfjs_require__(77); module.exports = function from(arrayLike) { var O = toObject(arrayLike); var C = typeof this == 'function' ? this : Array; var argumentsLength = arguments.length; var mapfn = argumentsLength > 1 ? arguments[1] : undefined; var mapping = mapfn !== undefined; var iteratorMethod = getIteratorMethod(O); var index = 0; var length, result, step, iterator, next, value; if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2); if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) { iterator = iteratorMethod.call(O); next = iterator.next; result = new C(); for (; !(step = next.call(iterator)).done; index++) { value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [ step.value, index ], true) : step.value; createProperty(result, index, value); } } else { length = toLength(O.length); result = new C(length); for (; length > index; index++) { value = mapping ? mapfn(O[index], index) : O[index]; createProperty(result, index, value); } } result.length = index; return result; }; /***/ }), /* 116 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var anObject = __w_pdfjs_require__(27); var iteratorClose = __w_pdfjs_require__(80); module.exports = function (iterator, fn, value, ENTRIES) { try { return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); } catch (error) { iteratorClose(iterator); throw error; } }; /***/ }), /* 117 */ /***/ ((module) => { "use strict"; var maxInt = 2147483647; var base = 36; var tMin = 1; var tMax = 26; var skew = 38; var damp = 700; var initialBias = 72; var initialN = 128; var delimiter = '-'; var regexNonASCII = /[^\0-\u007E]/; var regexSeparators = /[.\u3002\uFF0E\uFF61]/g; var OVERFLOW_ERROR = 'Overflow: input needs wider integers to process'; var baseMinusTMin = base - tMin; var floor = Math.floor; var stringFromCharCode = String.fromCharCode; var ucs2decode = function (string) { var output = []; var counter = 0; var length = string.length; while (counter < length) { var value = string.charCodeAt(counter++); if (value >= 0xD800 && value <= 0xDBFF && counter < length) { var extra = string.charCodeAt(counter++); if ((extra & 0xFC00) == 0xDC00) { output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); } else { output.push(value); counter--; } } else { output.push(value); } } return output; }; var digitToBasic = function (digit) { return digit + 22 + 75 * (digit < 26); }; var adapt = function (delta, numPoints, firstTime) { var k = 0; delta = firstTime ? floor(delta / damp) : delta >> 1; delta += floor(delta / numPoints); for (; delta > baseMinusTMin * tMax >> 1; k += base) { delta = floor(delta / baseMinusTMin); } return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); }; var encode = function (input) { var output = []; input = ucs2decode(input); var inputLength = input.length; var n = initialN; var delta = 0; var bias = initialBias; var i, currentValue; for (i = 0; i < input.length; i++) { currentValue = input[i]; if (currentValue < 0x80) { output.push(stringFromCharCode(currentValue)); } } var basicLength = output.length; var handledCPCount = basicLength; if (basicLength) { output.push(delimiter); } while (handledCPCount < inputLength) { var m = maxInt; for (i = 0; i < input.length; i++) { currentValue = input[i]; if (currentValue >= n && currentValue < m) { m = currentValue; } } var handledCPCountPlusOne = handledCPCount + 1; if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { throw RangeError(OVERFLOW_ERROR); } delta += (m - n) * handledCPCountPlusOne; n = m; for (i = 0; i < input.length; i++) { currentValue = input[i]; if (currentValue < n && ++delta > maxInt) { throw RangeError(OVERFLOW_ERROR); } if (currentValue == n) { var q = delta; for (var k = base;; k += base) { var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias; if (q < t) break; var qMinusT = q - t; var baseMinusT = base - t; output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT))); q = floor(qMinusT / baseMinusT); } output.push(stringFromCharCode(digitToBasic(q))); bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); delta = 0; ++handledCPCount; } } ++delta; ++n; } return output.join(''); }; module.exports = function (input) { var encoded = []; var labels = input.toLowerCase().replace(regexSeparators, '\u002E').split('.'); var i, label; for (i = 0; i < labels.length; i++) { label = labels[i]; encoded.push(regexNonASCII.test(label) ? 'xn--' + encode(label) : label); } return encoded.join('.'); }; /***/ }), /* 118 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; __w_pdfjs_require__(53); var $ = __w_pdfjs_require__(9); var getBuiltIn = __w_pdfjs_require__(41); var USE_NATIVE_URL = __w_pdfjs_require__(113); var redefine = __w_pdfjs_require__(28); var redefineAll = __w_pdfjs_require__(88); var setToStringTag = __w_pdfjs_require__(69); var createIteratorConstructor = __w_pdfjs_require__(64); var InternalStateModule = __w_pdfjs_require__(32); var anInstance = __w_pdfjs_require__(90); var hasOwn = __w_pdfjs_require__(22); var bind = __w_pdfjs_require__(75); var classof = __w_pdfjs_require__(78); var anObject = __w_pdfjs_require__(27); var isObject = __w_pdfjs_require__(21); var create = __w_pdfjs_require__(58); var createPropertyDescriptor = __w_pdfjs_require__(15); var getIterator = __w_pdfjs_require__(119); var getIteratorMethod = __w_pdfjs_require__(77); var wellKnownSymbol = __w_pdfjs_require__(55); var $fetch = getBuiltIn('fetch'); var Headers = getBuiltIn('Headers'); var ITERATOR = wellKnownSymbol('iterator'); var URL_SEARCH_PARAMS = 'URLSearchParams'; var URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator'; var setInternalState = InternalStateModule.set; var getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS); var getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR); var plus = /\+/g; var sequences = Array(4); var percentSequence = function (bytes) { return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\da-f]{2}){' + bytes + '})', 'gi')); }; var percentDecode = function (sequence) { try { return decodeURIComponent(sequence); } catch (error) { return sequence; } }; var deserialize = function (it) { var result = it.replace(plus, ' '); var bytes = 4; try { return decodeURIComponent(result); } catch (error) { while (bytes) { result = result.replace(percentSequence(bytes--), percentDecode); } return result; } }; var find = /[!'()~]|%20/g; var replace = { '!': '%21', "'": '%27', '(': '%28', ')': '%29', '~': '%7E', '%20': '+' }; var replacer = function (match) { return replace[match]; }; var serialize = function (it) { return encodeURIComponent(it).replace(find, replacer); }; var parseSearchParams = function (result, query) { if (query) { var attributes = query.split('&'); var index = 0; var attribute, entry; while (index < attributes.length) { attribute = attributes[index++]; if (attribute.length) { entry = attribute.split('='); result.push({ key: deserialize(entry.shift()), value: deserialize(entry.join('=')) }); } } } }; var updateSearchParams = function (query) { this.entries.length = 0; parseSearchParams(this.entries, query); }; var validateArgumentsLength = function (passed, required) { if (passed < required) throw TypeError('Not enough arguments'); }; var URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) { setInternalState(this, { type: URL_SEARCH_PARAMS_ITERATOR, iterator: getIterator(getInternalParamsState(params).entries), kind: kind }); }, 'Iterator', function next() { var state = getInternalIteratorState(this); var kind = state.kind; var step = state.iterator.next(); var entry = step.value; if (!step.done) { step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [ entry.key, entry.value ]; } return step; }); var URLSearchParamsConstructor = function URLSearchParams() { anInstance(this, URLSearchParamsConstructor, URL_SEARCH_PARAMS); var init = arguments.length > 0 ? arguments[0] : undefined; var that = this; var entries = []; var iteratorMethod, iterator, next, step, entryIterator, entryNext, first, second, key; setInternalState(that, { type: URL_SEARCH_PARAMS, entries: entries, updateURL: function () { }, updateSearchParams: updateSearchParams }); if (init !== undefined) { if (isObject(init)) { iteratorMethod = getIteratorMethod(init); if (typeof iteratorMethod === 'function') { iterator = iteratorMethod.call(init); next = iterator.next; while (!(step = next.call(iterator)).done) { entryIterator = getIterator(anObject(step.value)); entryNext = entryIterator.next; if ((first = entryNext.call(entryIterator)).done || (second = entryNext.call(entryIterator)).done || !entryNext.call(entryIterator).done) throw TypeError('Expected sequence with length 2'); entries.push({ key: first.value + '', value: second.value + '' }); } } else for (key in init) if (hasOwn(init, key)) entries.push({ key: key, value: init[key] + '' }); } else { parseSearchParams(entries, typeof init === 'string' ? init.charAt(0) === '?' ? init.slice(1) : init : init + ''); } } }; var URLSearchParamsPrototype = URLSearchParamsConstructor.prototype; redefineAll(URLSearchParamsPrototype, { append: function append(name, value) { validateArgumentsLength(arguments.length, 2); var state = getInternalParamsState(this); state.entries.push({ key: name + '', value: value + '' }); state.updateURL(); }, 'delete': function (name) { validateArgumentsLength(arguments.length, 1); var state = getInternalParamsState(this); var entries = state.entries; var key = name + ''; var index = 0; while (index < entries.length) { if (entries[index].key === key) entries.splice(index, 1); else index++; } state.updateURL(); }, get: function get(name) { validateArgumentsLength(arguments.length, 1); var entries = getInternalParamsState(this).entries; var key = name + ''; var index = 0; for (; index < entries.length; index++) { if (entries[index].key === key) return entries[index].value; } return null; }, getAll: function getAll(name) { validateArgumentsLength(arguments.length, 1); var entries = getInternalParamsState(this).entries; var key = name + ''; var result = []; var index = 0; for (; index < entries.length; index++) { if (entries[index].key === key) result.push(entries[index].value); } return result; }, has: function has(name) { validateArgumentsLength(arguments.length, 1); var entries = getInternalParamsState(this).entries; var key = name + ''; var index = 0; while (index < entries.length) { if (entries[index++].key === key) return true; } return false; }, set: function set(name, value) { validateArgumentsLength(arguments.length, 1); var state = getInternalParamsState(this); var entries = state.entries; var found = false; var key = name + ''; var val = value + ''; var index = 0; var entry; for (; index < entries.length; index++) { entry = entries[index]; if (entry.key === key) { if (found) entries.splice(index--, 1); else { found = true; entry.value = val; } } } if (!found) entries.push({ key: key, value: val }); state.updateURL(); }, sort: function sort() { var state = getInternalParamsState(this); var entries = state.entries; var slice = entries.slice(); var entry, entriesIndex, sliceIndex; entries.length = 0; for (sliceIndex = 0; sliceIndex < slice.length; sliceIndex++) { entry = slice[sliceIndex]; for (entriesIndex = 0; entriesIndex < sliceIndex; entriesIndex++) { if (entries[entriesIndex].key > entry.key) { entries.splice(entriesIndex, 0, entry); break; } } if (entriesIndex === sliceIndex) entries.push(entry); } state.updateURL(); }, forEach: function forEach(callback) { var entries = getInternalParamsState(this).entries; var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined, 3); var index = 0; var entry; while (index < entries.length) { entry = entries[index++]; boundFunction(entry.value, entry.key, this); } }, keys: function keys() { return new URLSearchParamsIterator(this, 'keys'); }, values: function values() { return new URLSearchParamsIterator(this, 'values'); }, entries: function entries() { return new URLSearchParamsIterator(this, 'entries'); } }, { enumerable: true }); redefine(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries); redefine(URLSearchParamsPrototype, 'toString', function toString() { var entries = getInternalParamsState(this).entries; var result = []; var index = 0; var entry; while (index < entries.length) { entry = entries[index++]; result.push(serialize(entry.key) + '=' + serialize(entry.value)); } return result.join('&'); }, { enumerable: true }); setToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS); $({ global: true, forced: !USE_NATIVE_URL }, { URLSearchParams: URLSearchParamsConstructor }); if (!USE_NATIVE_URL && typeof $fetch == 'function' && typeof Headers == 'function') { $({ global: true, enumerable: true, forced: true }, { fetch: function fetch(input) { var args = [input]; var init, body, headers; if (arguments.length > 1) { init = arguments[1]; if (isObject(init)) { body = init.body; if (classof(body) === URL_SEARCH_PARAMS) { headers = init.headers ? new Headers(init.headers) : new Headers(); if (!headers.has('content-type')) { headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8'); } init = create(init, { body: createPropertyDescriptor(0, String(body)), headers: createPropertyDescriptor(0, headers) }); } } args.push(init); } return $fetch.apply(this, args); } }); } module.exports = { URLSearchParams: URLSearchParamsConstructor, getState: getInternalParamsState }; /***/ }), /* 119 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var anObject = __w_pdfjs_require__(27); var getIteratorMethod = __w_pdfjs_require__(77); module.exports = function (it) { var iteratorMethod = getIteratorMethod(it); if (typeof iteratorMethod != 'function') { throw TypeError(String(it) + ' is not iterable'); } return anObject(iteratorMethod.call(it)); }; /***/ }), /* 120 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var $ = __w_pdfjs_require__(9); $({ target: 'URL', proto: true, enumerable: true }, { toJSON: function toJSON() { return URL.prototype.toString.call(this); } }); /***/ }), /* 121 */ /***/ (function(__unused_webpack_module, exports) { (function (global, factory) { true ? factory(exports) : 0; }(this, function (exports) { 'use strict'; var SymbolPolyfill = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol : function (description) { return "Symbol(" + description + ")"; }; function noop() { } function getGlobals() { if (typeof self !== 'undefined') { return self; } else if (typeof window !== 'undefined') { return window; } else if (typeof global !== 'undefined') { return global; } return undefined; } var globals = getGlobals(); function typeIsObject(x) { return typeof x === 'object' && x !== null || typeof x === 'function'; } var rethrowAssertionErrorRejection = noop; var originalPromise = Promise; var originalPromiseThen = Promise.prototype.then; var originalPromiseResolve = Promise.resolve.bind(originalPromise); var originalPromiseReject = Promise.reject.bind(originalPromise); function newPromise(executor) { return new originalPromise(executor); } function promiseResolvedWith(value) { return originalPromiseResolve(value); } function promiseRejectedWith(reason) { return originalPromiseReject(reason); } function PerformPromiseThen(promise, onFulfilled, onRejected) { return originalPromiseThen.call(promise, onFulfilled, onRejected); } function uponPromise(promise, onFulfilled, onRejected) { PerformPromiseThen(PerformPromiseThen(promise, onFulfilled, onRejected), undefined, rethrowAssertionErrorRejection); } function uponFulfillment(promise, onFulfilled) { uponPromise(promise, onFulfilled); } function uponRejection(promise, onRejected) { uponPromise(promise, undefined, onRejected); } function transformPromiseWith(promise, fulfillmentHandler, rejectionHandler) { return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler); } function setPromiseIsHandledToTrue(promise) { PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection); } var queueMicrotask = function () { var globalQueueMicrotask = globals && globals.queueMicrotask; if (typeof globalQueueMicrotask === 'function') { return globalQueueMicrotask; } var resolvedPromise = promiseResolvedWith(undefined); return function (fn) { return PerformPromiseThen(resolvedPromise, fn); }; }(); function reflectCall(F, V, args) { if (typeof F !== 'function') { throw new TypeError('Argument is not a function'); } return Function.prototype.apply.call(F, V, args); } function promiseCall(F, V, args) { try { return promiseResolvedWith(reflectCall(F, V, args)); } catch (value) { return promiseRejectedWith(value); } } var QUEUE_MAX_ARRAY_SIZE = 16384; var SimpleQueue = function () { function SimpleQueue() { this._cursor = 0; this._size = 0; this._front = { _elements: [], _next: undefined }; this._back = this._front; this._cursor = 0; this._size = 0; } Object.defineProperty(SimpleQueue.prototype, "length", { get: function () { return this._size; }, enumerable: false, configurable: true }); SimpleQueue.prototype.push = function (element) { var oldBack = this._back; var newBack = oldBack; if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) { newBack = { _elements: [], _next: undefined }; } oldBack._elements.push(element); if (newBack !== oldBack) { this._back = newBack; oldBack._next = newBack; } ++this._size; }; SimpleQueue.prototype.shift = function () { var oldFront = this._front; var newFront = oldFront; var oldCursor = this._cursor; var newCursor = oldCursor + 1; var elements = oldFront._elements; var element = elements[oldCursor]; if (newCursor === QUEUE_MAX_ARRAY_SIZE) { newFront = oldFront._next; newCursor = 0; } --this._size; this._cursor = newCursor; if (oldFront !== newFront) { this._front = newFront; } elements[oldCursor] = undefined; return element; }; SimpleQueue.prototype.forEach = function (callback) { var i = this._cursor; var node = this._front; var elements = node._elements; while (i !== elements.length || node._next !== undefined) { if (i === elements.length) { node = node._next; elements = node._elements; i = 0; if (elements.length === 0) { break; } } callback(elements[i]); ++i; } }; SimpleQueue.prototype.peek = function () { var front = this._front; var cursor = this._cursor; return front._elements[cursor]; }; return SimpleQueue; }(); function ReadableStreamReaderGenericInitialize(reader, stream) { reader._ownerReadableStream = stream; stream._reader = reader; if (stream._state === 'readable') { defaultReaderClosedPromiseInitialize(reader); } else if (stream._state === 'closed') { defaultReaderClosedPromiseInitializeAsResolved(reader); } else { defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError); } } function ReadableStreamReaderGenericCancel(reader, reason) { var stream = reader._ownerReadableStream; return ReadableStreamCancel(stream, reason); } function ReadableStreamReaderGenericRelease(reader) { if (reader._ownerReadableStream._state === 'readable') { defaultReaderClosedPromiseReject(reader, new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")); } else { defaultReaderClosedPromiseResetToRejected(reader, new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")); } reader._ownerReadableStream._reader = undefined; reader._ownerReadableStream = undefined; } function readerLockException(name) { return new TypeError('Cannot ' + name + ' a stream using a released reader'); } function defaultReaderClosedPromiseInitialize(reader) { reader._closedPromise = newPromise(function (resolve, reject) { reader._closedPromise_resolve = resolve; reader._closedPromise_reject = reject; }); } function defaultReaderClosedPromiseInitializeAsRejected(reader, reason) { defaultReaderClosedPromiseInitialize(reader); defaultReaderClosedPromiseReject(reader, reason); } function defaultReaderClosedPromiseInitializeAsResolved(reader) { defaultReaderClosedPromiseInitialize(reader); defaultReaderClosedPromiseResolve(reader); } function defaultReaderClosedPromiseReject(reader, reason) { if (reader._closedPromise_reject === undefined) { return; } setPromiseIsHandledToTrue(reader._closedPromise); reader._closedPromise_reject(reason); reader._closedPromise_resolve = undefined; reader._closedPromise_reject = undefined; } function defaultReaderClosedPromiseResetToRejected(reader, reason) { defaultReaderClosedPromiseInitializeAsRejected(reader, reason); } function defaultReaderClosedPromiseResolve(reader) { if (reader._closedPromise_resolve === undefined) { return; } reader._closedPromise_resolve(undefined); reader._closedPromise_resolve = undefined; reader._closedPromise_reject = undefined; } var AbortSteps = SymbolPolyfill('[[AbortSteps]]'); var ErrorSteps = SymbolPolyfill('[[ErrorSteps]]'); var CancelSteps = SymbolPolyfill('[[CancelSteps]]'); var PullSteps = SymbolPolyfill('[[PullSteps]]'); var NumberIsFinite = Number.isFinite || function (x) { return typeof x === 'number' && isFinite(x); }; var MathTrunc = Math.trunc || function (v) { return v < 0 ? Math.ceil(v) : Math.floor(v); }; function isDictionary(x) { return typeof x === 'object' || typeof x === 'function'; } function assertDictionary(obj, context) { if (obj !== undefined && !isDictionary(obj)) { throw new TypeError(context + " is not an object."); } } function assertFunction(x, context) { if (typeof x !== 'function') { throw new TypeError(context + " is not a function."); } } function isObject(x) { return typeof x === 'object' && x !== null || typeof x === 'function'; } function assertObject(x, context) { if (!isObject(x)) { throw new TypeError(context + " is not an object."); } } function assertRequiredArgument(x, position, context) { if (x === undefined) { throw new TypeError("Parameter " + position + " is required in '" + context + "'."); } } function assertRequiredField(x, field, context) { if (x === undefined) { throw new TypeError(field + " is required in '" + context + "'."); } } function convertUnrestrictedDouble(value) { return Number(value); } function censorNegativeZero(x) { return x === 0 ? 0 : x; } function integerPart(x) { return censorNegativeZero(MathTrunc(x)); } function convertUnsignedLongLongWithEnforceRange(value, context) { var lowerBound = 0; var upperBound = Number.MAX_SAFE_INTEGER; var x = Number(value); x = censorNegativeZero(x); if (!NumberIsFinite(x)) { throw new TypeError(context + " is not a finite number"); } x = integerPart(x); if (x < lowerBound || x > upperBound) { throw new TypeError(context + " is outside the accepted range of " + lowerBound + " to " + upperBound + ", inclusive"); } if (!NumberIsFinite(x) || x === 0) { return 0; } return x; } function assertReadableStream(x, context) { if (!IsReadableStream(x)) { throw new TypeError(context + " is not a ReadableStream."); } } function AcquireReadableStreamDefaultReader(stream) { return new ReadableStreamDefaultReader(stream); } function ReadableStreamAddReadRequest(stream, readRequest) { stream._reader._readRequests.push(readRequest); } function ReadableStreamFulfillReadRequest(stream, chunk, done) { var reader = stream._reader; var readRequest = reader._readRequests.shift(); if (done) { readRequest._closeSteps(); } else { readRequest._chunkSteps(chunk); } } function ReadableStreamGetNumReadRequests(stream) { return stream._reader._readRequests.length; } function ReadableStreamHasDefaultReader(stream) { var reader = stream._reader; if (reader === undefined) { return false; } if (!IsReadableStreamDefaultReader(reader)) { return false; } return true; } var ReadableStreamDefaultReader = function () { function ReadableStreamDefaultReader(stream) { assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader'); assertReadableStream(stream, 'First parameter'); if (IsReadableStreamLocked(stream)) { throw new TypeError('This stream has already been locked for exclusive reading by another reader'); } ReadableStreamReaderGenericInitialize(this, stream); this._readRequests = new SimpleQueue(); } Object.defineProperty(ReadableStreamDefaultReader.prototype, "closed", { get: function () { if (!IsReadableStreamDefaultReader(this)) { return promiseRejectedWith(defaultReaderBrandCheckException('closed')); } return this._closedPromise; }, enumerable: false, configurable: true }); ReadableStreamDefaultReader.prototype.cancel = function (reason) { if (reason === void 0) { reason = undefined; } if (!IsReadableStreamDefaultReader(this)) { return promiseRejectedWith(defaultReaderBrandCheckException('cancel')); } if (this._ownerReadableStream === undefined) { return promiseRejectedWith(readerLockException('cancel')); } return ReadableStreamReaderGenericCancel(this, reason); }; ReadableStreamDefaultReader.prototype.read = function () { if (!IsReadableStreamDefaultReader(this)) { return promiseRejectedWith(defaultReaderBrandCheckException('read')); } if (this._ownerReadableStream === undefined) { return promiseRejectedWith(readerLockException('read from')); } var resolvePromise; var rejectPromise; var promise = newPromise(function (resolve, reject) { resolvePromise = resolve; rejectPromise = reject; }); var readRequest = { _chunkSteps: function (chunk) { return resolvePromise({ value: chunk, done: false }); }, _closeSteps: function () { return resolvePromise({ value: undefined, done: true }); }, _errorSteps: function (e) { return rejectPromise(e); } }; ReadableStreamDefaultReaderRead(this, readRequest); return promise; }; ReadableStreamDefaultReader.prototype.releaseLock = function () { if (!IsReadableStreamDefaultReader(this)) { throw defaultReaderBrandCheckException('releaseLock'); } if (this._ownerReadableStream === undefined) { return; } if (this._readRequests.length > 0) { throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled'); } ReadableStreamReaderGenericRelease(this); }; return ReadableStreamDefaultReader; }(); Object.defineProperties(ReadableStreamDefaultReader.prototype, { cancel: { enumerable: true }, read: { enumerable: true }, releaseLock: { enumerable: true }, closed: { enumerable: true } }); if (typeof SymbolPolyfill.toStringTag === 'symbol') { Object.defineProperty(ReadableStreamDefaultReader.prototype, SymbolPolyfill.toStringTag, { value: 'ReadableStreamDefaultReader', configurable: true }); } function IsReadableStreamDefaultReader(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) { return false; } return true; } function ReadableStreamDefaultReaderRead(reader, readRequest) { var stream = reader._ownerReadableStream; stream._disturbed = true; if (stream._state === 'closed') { readRequest._closeSteps(); } else if (stream._state === 'errored') { readRequest._errorSteps(stream._storedError); } else { stream._readableStreamController[PullSteps](readRequest); } } function defaultReaderBrandCheckException(name) { return new TypeError("ReadableStreamDefaultReader.prototype." + name + " can only be used on a ReadableStreamDefaultReader"); } var _a; var AsyncIteratorPrototype; if (typeof SymbolPolyfill.asyncIterator === 'symbol') { AsyncIteratorPrototype = (_a = {}, _a[SymbolPolyfill.asyncIterator] = function () { return this; }, _a); Object.defineProperty(AsyncIteratorPrototype, SymbolPolyfill.asyncIterator, { enumerable: false }); } var ReadableStreamAsyncIteratorImpl = function () { function ReadableStreamAsyncIteratorImpl(reader, preventCancel) { this._ongoingPromise = undefined; this._isFinished = false; this._reader = reader; this._preventCancel = preventCancel; } ReadableStreamAsyncIteratorImpl.prototype.next = function () { var _this = this; var nextSteps = function () { return _this._nextSteps(); }; this._ongoingPromise = this._ongoingPromise ? transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) : nextSteps(); return this._ongoingPromise; }; ReadableStreamAsyncIteratorImpl.prototype.return = function (value) { var _this = this; var returnSteps = function () { return _this._returnSteps(value); }; return this._ongoingPromise ? transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) : returnSteps(); }; ReadableStreamAsyncIteratorImpl.prototype._nextSteps = function () { var _this = this; if (this._isFinished) { return Promise.resolve({ value: undefined, done: true }); } var reader = this._reader; if (reader._ownerReadableStream === undefined) { return promiseRejectedWith(readerLockException('iterate')); } var resolvePromise; var rejectPromise; var promise = newPromise(function (resolve, reject) { resolvePromise = resolve; rejectPromise = reject; }); var readRequest = { _chunkSteps: function (chunk) { _this._ongoingPromise = undefined; queueMicrotask(function () { return resolvePromise({ value: chunk, done: false }); }); }, _closeSteps: function () { _this._ongoingPromise = undefined; _this._isFinished = true; ReadableStreamReaderGenericRelease(reader); resolvePromise({ value: undefined, done: true }); }, _errorSteps: function (reason) { _this._ongoingPromise = undefined; _this._isFinished = true; ReadableStreamReaderGenericRelease(reader); rejectPromise(reason); } }; ReadableStreamDefaultReaderRead(reader, readRequest); return promise; }; ReadableStreamAsyncIteratorImpl.prototype._returnSteps = function (value) { if (this._isFinished) { return Promise.resolve({ value: value, done: true }); } this._isFinished = true; var reader = this._reader; if (reader._ownerReadableStream === undefined) { return promiseRejectedWith(readerLockException('finish iterating')); } if (!this._preventCancel) { var result = ReadableStreamReaderGenericCancel(reader, value); ReadableStreamReaderGenericRelease(reader); return transformPromiseWith(result, function () { return { value: value, done: true }; }); } ReadableStreamReaderGenericRelease(reader); return promiseResolvedWith({ value: value, done: true }); }; return ReadableStreamAsyncIteratorImpl; }(); var ReadableStreamAsyncIteratorPrototype = { next: function () { if (!IsReadableStreamAsyncIterator(this)) { return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next')); } return this._asyncIteratorImpl.next(); }, return: function (value) { if (!IsReadableStreamAsyncIterator(this)) { return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return')); } return this._asyncIteratorImpl.return(value); } }; if (AsyncIteratorPrototype !== undefined) { Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype); } function AcquireReadableStreamAsyncIterator(stream, preventCancel) { var reader = AcquireReadableStreamDefaultReader(stream); var impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel); var iterator = Object.create(ReadableStreamAsyncIteratorPrototype); iterator._asyncIteratorImpl = impl; return iterator; } function IsReadableStreamAsyncIterator(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) { return false; } return true; } function streamAsyncIteratorBrandCheckException(name) { return new TypeError("ReadableStreamAsyncIterator." + name + " can only be used on a ReadableSteamAsyncIterator"); } var NumberIsNaN = Number.isNaN || function (x) { return x !== x; }; function IsFiniteNonNegativeNumber(v) { if (!IsNonNegativeNumber(v)) { return false; } if (v === Infinity) { return false; } return true; } function IsNonNegativeNumber(v) { if (typeof v !== 'number') { return false; } if (NumberIsNaN(v)) { return false; } if (v < 0) { return false; } return true; } function DequeueValue(container) { var pair = container._queue.shift(); container._queueTotalSize -= pair.size; if (container._queueTotalSize < 0) { container._queueTotalSize = 0; } return pair.value; } function EnqueueValueWithSize(container, value, size) { size = Number(size); if (!IsFiniteNonNegativeNumber(size)) { throw new RangeError('Size must be a finite, non-NaN, non-negative number.'); } container._queue.push({ value: value, size: size }); container._queueTotalSize += size; } function PeekQueueValue(container) { var pair = container._queue.peek(); return pair.value; } function ResetQueue(container) { container._queue = new SimpleQueue(); container._queueTotalSize = 0; } function CreateArrayFromList(elements) { return elements.slice(); } function CopyDataBlockBytes(dest, destOffset, src, srcOffset, n) { new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset); } function TransferArrayBuffer(O) { return O; } function IsDetachedBuffer(O) { return false; } var ReadableStreamBYOBRequest = function () { function ReadableStreamBYOBRequest() { throw new TypeError('Illegal constructor'); } Object.defineProperty(ReadableStreamBYOBRequest.prototype, "view", { get: function () { if (!IsReadableStreamBYOBRequest(this)) { throw byobRequestBrandCheckException('view'); } return this._view; }, enumerable: false, configurable: true }); ReadableStreamBYOBRequest.prototype.respond = function (bytesWritten) { if (!IsReadableStreamBYOBRequest(this)) { throw byobRequestBrandCheckException('respond'); } assertRequiredArgument(bytesWritten, 1, 'respond'); bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter'); if (this._associatedReadableByteStreamController === undefined) { throw new TypeError('This BYOB request has been invalidated'); } if (IsDetachedBuffer(this._view.buffer)); ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten); }; ReadableStreamBYOBRequest.prototype.respondWithNewView = function (view) { if (!IsReadableStreamBYOBRequest(this)) { throw byobRequestBrandCheckException('respondWithNewView'); } assertRequiredArgument(view, 1, 'respondWithNewView'); if (!ArrayBuffer.isView(view)) { throw new TypeError('You can only respond with array buffer views'); } if (view.byteLength === 0) { throw new TypeError('chunk must have non-zero byteLength'); } if (view.buffer.byteLength === 0) { throw new TypeError("chunk's buffer must have non-zero byteLength"); } if (this._associatedReadableByteStreamController === undefined) { throw new TypeError('This BYOB request has been invalidated'); } ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view); }; return ReadableStreamBYOBRequest; }(); Object.defineProperties(ReadableStreamBYOBRequest.prototype, { respond: { enumerable: true }, respondWithNewView: { enumerable: true }, view: { enumerable: true } }); if (typeof SymbolPolyfill.toStringTag === 'symbol') { Object.defineProperty(ReadableStreamBYOBRequest.prototype, SymbolPolyfill.toStringTag, { value: 'ReadableStreamBYOBRequest', configurable: true }); } var ReadableByteStreamController = function () { function ReadableByteStreamController() { throw new TypeError('Illegal constructor'); } Object.defineProperty(ReadableByteStreamController.prototype, "byobRequest", { get: function () { if (!IsReadableByteStreamController(this)) { throw byteStreamControllerBrandCheckException('byobRequest'); } if (this._byobRequest === null && this._pendingPullIntos.length > 0) { var firstDescriptor = this._pendingPullIntos.peek(); var view = new Uint8Array(firstDescriptor.buffer, firstDescriptor.byteOffset + firstDescriptor.bytesFilled, firstDescriptor.byteLength - firstDescriptor.bytesFilled); var byobRequest = Object.create(ReadableStreamBYOBRequest.prototype); SetUpReadableStreamBYOBRequest(byobRequest, this, view); this._byobRequest = byobRequest; } return this._byobRequest; }, enumerable: false, configurable: true }); Object.defineProperty(ReadableByteStreamController.prototype, "desiredSize", { get: function () { if (!IsReadableByteStreamController(this)) { throw byteStreamControllerBrandCheckException('desiredSize'); } return ReadableByteStreamControllerGetDesiredSize(this); }, enumerable: false, configurable: true }); ReadableByteStreamController.prototype.close = function () { if (!IsReadableByteStreamController(this)) { throw byteStreamControllerBrandCheckException('close'); } if (this._closeRequested) { throw new TypeError('The stream has already been closed; do not close it again!'); } var state = this._controlledReadableByteStream._state; if (state !== 'readable') { throw new TypeError("The stream (in " + state + " state) is not in the readable state and cannot be closed"); } ReadableByteStreamControllerClose(this); }; ReadableByteStreamController.prototype.enqueue = function (chunk) { if (!IsReadableByteStreamController(this)) { throw byteStreamControllerBrandCheckException('enqueue'); } assertRequiredArgument(chunk, 1, 'enqueue'); if (!ArrayBuffer.isView(chunk)) { throw new TypeError('chunk must be an array buffer view'); } if (chunk.byteLength === 0) { throw new TypeError('chunk must have non-zero byteLength'); } if (chunk.buffer.byteLength === 0) { throw new TypeError("chunk's buffer must have non-zero byteLength"); } if (this._closeRequested) { throw new TypeError('stream is closed or draining'); } var state = this._controlledReadableByteStream._state; if (state !== 'readable') { throw new TypeError("The stream (in " + state + " state) is not in the readable state and cannot be enqueued to"); } ReadableByteStreamControllerEnqueue(this, chunk); }; ReadableByteStreamController.prototype.error = function (e) { if (e === void 0) { e = undefined; } if (!IsReadableByteStreamController(this)) { throw byteStreamControllerBrandCheckException('error'); } ReadableByteStreamControllerError(this, e); }; ReadableByteStreamController.prototype[CancelSteps] = function (reason) { if (this._pendingPullIntos.length > 0) { var firstDescriptor = this._pendingPullIntos.peek(); firstDescriptor.bytesFilled = 0; } ResetQueue(this); var result = this._cancelAlgorithm(reason); ReadableByteStreamControllerClearAlgorithms(this); return result; }; ReadableByteStreamController.prototype[PullSteps] = function (readRequest) { var stream = this._controlledReadableByteStream; if (this._queueTotalSize > 0) { var entry = this._queue.shift(); this._queueTotalSize -= entry.byteLength; ReadableByteStreamControllerHandleQueueDrain(this); var view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength); readRequest._chunkSteps(view); return; } var autoAllocateChunkSize = this._autoAllocateChunkSize; if (autoAllocateChunkSize !== undefined) { var buffer = void 0; try { buffer = new ArrayBuffer(autoAllocateChunkSize); } catch (bufferE) { readRequest._errorSteps(bufferE); return; } var pullIntoDescriptor = { buffer: buffer, byteOffset: 0, byteLength: autoAllocateChunkSize, bytesFilled: 0, elementSize: 1, viewConstructor: Uint8Array, readerType: 'default' }; this._pendingPullIntos.push(pullIntoDescriptor); } ReadableStreamAddReadRequest(stream, readRequest); ReadableByteStreamControllerCallPullIfNeeded(this); }; return ReadableByteStreamController; }(); Object.defineProperties(ReadableByteStreamController.prototype, { close: { enumerable: true }, enqueue: { enumerable: true }, error: { enumerable: true }, byobRequest: { enumerable: true }, desiredSize: { enumerable: true } }); if (typeof SymbolPolyfill.toStringTag === 'symbol') { Object.defineProperty(ReadableByteStreamController.prototype, SymbolPolyfill.toStringTag, { value: 'ReadableByteStreamController', configurable: true }); } function IsReadableByteStreamController(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) { return false; } return true; } function IsReadableStreamBYOBRequest(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) { return false; } return true; } function ReadableByteStreamControllerCallPullIfNeeded(controller) { var shouldPull = ReadableByteStreamControllerShouldCallPull(controller); if (!shouldPull) { return; } if (controller._pulling) { controller._pullAgain = true; return; } controller._pulling = true; var pullPromise = controller._pullAlgorithm(); uponPromise(pullPromise, function () { controller._pulling = false; if (controller._pullAgain) { controller._pullAgain = false; ReadableByteStreamControllerCallPullIfNeeded(controller); } }, function (e) { ReadableByteStreamControllerError(controller, e); }); } function ReadableByteStreamControllerClearPendingPullIntos(controller) { ReadableByteStreamControllerInvalidateBYOBRequest(controller); controller._pendingPullIntos = new SimpleQueue(); } function ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor) { var done = false; if (stream._state === 'closed') { done = true; } var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor); if (pullIntoDescriptor.readerType === 'default') { ReadableStreamFulfillReadRequest(stream, filledView, done); } else { ReadableStreamFulfillReadIntoRequest(stream, filledView, done); } } function ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor) { var bytesFilled = pullIntoDescriptor.bytesFilled; var elementSize = pullIntoDescriptor.elementSize; return new pullIntoDescriptor.viewConstructor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize); } function ReadableByteStreamControllerEnqueueChunkToQueue(controller, buffer, byteOffset, byteLength) { controller._queue.push({ buffer: buffer, byteOffset: byteOffset, byteLength: byteLength }); controller._queueTotalSize += byteLength; } function ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) { var elementSize = pullIntoDescriptor.elementSize; var currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize; var maxBytesToCopy = Math.min(controller._queueTotalSize, pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled); var maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy; var maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize; var totalBytesToCopyRemaining = maxBytesToCopy; var ready = false; if (maxAlignedBytes > currentAlignedBytes) { totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled; ready = true; } var queue = controller._queue; while (totalBytesToCopyRemaining > 0) { var headOfQueue = queue.peek(); var bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength); var destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled; CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy); if (headOfQueue.byteLength === bytesToCopy) { queue.shift(); } else { headOfQueue.byteOffset += bytesToCopy; headOfQueue.byteLength -= bytesToCopy; } controller._queueTotalSize -= bytesToCopy; ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor); totalBytesToCopyRemaining -= bytesToCopy; } return ready; } function ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, size, pullIntoDescriptor) { ReadableByteStreamControllerInvalidateBYOBRequest(controller); pullIntoDescriptor.bytesFilled += size; } function ReadableByteStreamControllerHandleQueueDrain(controller) { if (controller._queueTotalSize === 0 && controller._closeRequested) { ReadableByteStreamControllerClearAlgorithms(controller); ReadableStreamClose(controller._controlledReadableByteStream); } else { ReadableByteStreamControllerCallPullIfNeeded(controller); } } function ReadableByteStreamControllerInvalidateBYOBRequest(controller) { if (controller._byobRequest === null) { return; } controller._byobRequest._associatedReadableByteStreamController = undefined; controller._byobRequest._view = null; controller._byobRequest = null; } function ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller) { while (controller._pendingPullIntos.length > 0) { if (controller._queueTotalSize === 0) { return; } var pullIntoDescriptor = controller._pendingPullIntos.peek(); if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) { ReadableByteStreamControllerShiftPendingPullInto(controller); ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor); } } } function ReadableByteStreamControllerPullInto(controller, view, readIntoRequest) { var stream = controller._controlledReadableByteStream; var elementSize = 1; if (view.constructor !== DataView) { elementSize = view.constructor.BYTES_PER_ELEMENT; } var ctor = view.constructor; var buffer = TransferArrayBuffer(view.buffer); var pullIntoDescriptor = { buffer: buffer, byteOffset: view.byteOffset, byteLength: view.byteLength, bytesFilled: 0, elementSize: elementSize, viewConstructor: ctor, readerType: 'byob' }; if (controller._pendingPullIntos.length > 0) { controller._pendingPullIntos.push(pullIntoDescriptor); ReadableStreamAddReadIntoRequest(stream, readIntoRequest); return; } if (stream._state === 'closed') { var emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0); readIntoRequest._closeSteps(emptyView); return; } if (controller._queueTotalSize > 0) { if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) { var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor); ReadableByteStreamControllerHandleQueueDrain(controller); readIntoRequest._chunkSteps(filledView); return; } if (controller._closeRequested) { var e = new TypeError('Insufficient bytes to fill elements in the given buffer'); ReadableByteStreamControllerError(controller, e); readIntoRequest._errorSteps(e); return; } } controller._pendingPullIntos.push(pullIntoDescriptor); ReadableStreamAddReadIntoRequest(stream, readIntoRequest); ReadableByteStreamControllerCallPullIfNeeded(controller); } function ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor) { firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer); var stream = controller._controlledReadableByteStream; if (ReadableStreamHasBYOBReader(stream)) { while (ReadableStreamGetNumReadIntoRequests(stream) > 0) { var pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller); ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor); } } } function ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, pullIntoDescriptor) { if (pullIntoDescriptor.bytesFilled + bytesWritten > pullIntoDescriptor.byteLength) { throw new RangeError('bytesWritten out of range'); } ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor); if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) { return; } ReadableByteStreamControllerShiftPendingPullInto(controller); var remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize; if (remainderSize > 0) { var end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled; var remainder = pullIntoDescriptor.buffer.slice(end - remainderSize, end); ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength); } pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer); pullIntoDescriptor.bytesFilled -= remainderSize; ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor); ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller); } function ReadableByteStreamControllerRespondInternal(controller, bytesWritten) { var firstDescriptor = controller._pendingPullIntos.peek(); var state = controller._controlledReadableByteStream._state; if (state === 'closed') { if (bytesWritten !== 0) { throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream'); } ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor); } else { ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor); } ReadableByteStreamControllerCallPullIfNeeded(controller); } function ReadableByteStreamControllerShiftPendingPullInto(controller) { var descriptor = controller._pendingPullIntos.shift(); ReadableByteStreamControllerInvalidateBYOBRequest(controller); return descriptor; } function ReadableByteStreamControllerShouldCallPull(controller) { var stream = controller._controlledReadableByteStream; if (stream._state !== 'readable') { return false; } if (controller._closeRequested) { return false; } if (!controller._started) { return false; } if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) { return true; } if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) { return true; } var desiredSize = ReadableByteStreamControllerGetDesiredSize(controller); if (desiredSize > 0) { return true; } return false; } function ReadableByteStreamControllerClearAlgorithms(controller) { controller._pullAlgorithm = undefined; controller._cancelAlgorithm = undefined; } function ReadableByteStreamControllerClose(controller) { var stream = controller._controlledReadableByteStream; if (controller._closeRequested || stream._state !== 'readable') { return; } if (controller._queueTotalSize > 0) { controller._closeRequested = true; return; } if (controller._pendingPullIntos.length > 0) { var firstPendingPullInto = controller._pendingPullIntos.peek(); if (firstPendingPullInto.bytesFilled > 0) { var e = new TypeError('Insufficient bytes to fill elements in the given buffer'); ReadableByteStreamControllerError(controller, e); throw e; } } ReadableByteStreamControllerClearAlgorithms(controller); ReadableStreamClose(stream); } function ReadableByteStreamControllerEnqueue(controller, chunk) { var stream = controller._controlledReadableByteStream; if (controller._closeRequested || stream._state !== 'readable') { return; } var buffer = chunk.buffer; var byteOffset = chunk.byteOffset; var byteLength = chunk.byteLength; var transferredBuffer = TransferArrayBuffer(buffer); if (ReadableStreamHasDefaultReader(stream)) { if (ReadableStreamGetNumReadRequests(stream) === 0) { ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength); } else { var transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength); ReadableStreamFulfillReadRequest(stream, transferredView, false); } } else if (ReadableStreamHasBYOBReader(stream)) { ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength); ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller); } else { ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength); } ReadableByteStreamControllerCallPullIfNeeded(controller); } function ReadableByteStreamControllerError(controller, e) { var stream = controller._controlledReadableByteStream; if (stream._state !== 'readable') { return; } ReadableByteStreamControllerClearPendingPullIntos(controller); ResetQueue(controller); ReadableByteStreamControllerClearAlgorithms(controller); ReadableStreamError(stream, e); } function ReadableByteStreamControllerGetDesiredSize(controller) { var state = controller._controlledReadableByteStream._state; if (state === 'errored') { return null; } if (state === 'closed') { return 0; } return controller._strategyHWM - controller._queueTotalSize; } function ReadableByteStreamControllerRespond(controller, bytesWritten) { bytesWritten = Number(bytesWritten); if (!IsFiniteNonNegativeNumber(bytesWritten)) { throw new RangeError('bytesWritten must be a finite'); } ReadableByteStreamControllerRespondInternal(controller, bytesWritten); } function ReadableByteStreamControllerRespondWithNewView(controller, view) { var firstDescriptor = controller._pendingPullIntos.peek(); if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) { throw new RangeError('The region specified by view does not match byobRequest'); } if (firstDescriptor.byteLength !== view.byteLength) { throw new RangeError('The buffer of view has different capacity than byobRequest'); } firstDescriptor.buffer = view.buffer; ReadableByteStreamControllerRespondInternal(controller, view.byteLength); } function SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize) { controller._controlledReadableByteStream = stream; controller._pullAgain = false; controller._pulling = false; controller._byobRequest = null; controller._queue = controller._queueTotalSize = undefined; ResetQueue(controller); controller._closeRequested = false; controller._started = false; controller._strategyHWM = highWaterMark; controller._pullAlgorithm = pullAlgorithm; controller._cancelAlgorithm = cancelAlgorithm; controller._autoAllocateChunkSize = autoAllocateChunkSize; controller._pendingPullIntos = new SimpleQueue(); stream._readableStreamController = controller; var startResult = startAlgorithm(); uponPromise(promiseResolvedWith(startResult), function () { controller._started = true; ReadableByteStreamControllerCallPullIfNeeded(controller); }, function (r) { ReadableByteStreamControllerError(controller, r); }); } function SetUpReadableByteStreamControllerFromUnderlyingSource(stream, underlyingByteSource, highWaterMark) { var controller = Object.create(ReadableByteStreamController.prototype); var startAlgorithm = function () { return undefined; }; var pullAlgorithm = function () { return promiseResolvedWith(undefined); }; var cancelAlgorithm = function () { return promiseResolvedWith(undefined); }; if (underlyingByteSource.start !== undefined) { startAlgorithm = function () { return underlyingByteSource.start(controller); }; } if (underlyingByteSource.pull !== undefined) { pullAlgorithm = function () { return underlyingByteSource.pull(controller); }; } if (underlyingByteSource.cancel !== undefined) { cancelAlgorithm = function (reason) { return underlyingByteSource.cancel(reason); }; } var autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize; SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize); } function SetUpReadableStreamBYOBRequest(request, controller, view) { request._associatedReadableByteStreamController = controller; request._view = view; } function byobRequestBrandCheckException(name) { return new TypeError("ReadableStreamBYOBRequest.prototype." + name + " can only be used on a ReadableStreamBYOBRequest"); } function byteStreamControllerBrandCheckException(name) { return new TypeError("ReadableByteStreamController.prototype." + name + " can only be used on a ReadableByteStreamController"); } function AcquireReadableStreamBYOBReader(stream) { return new ReadableStreamBYOBReader(stream); } function ReadableStreamAddReadIntoRequest(stream, readIntoRequest) { stream._reader._readIntoRequests.push(readIntoRequest); } function ReadableStreamFulfillReadIntoRequest(stream, chunk, done) { var reader = stream._reader; var readIntoRequest = reader._readIntoRequests.shift(); if (done) { readIntoRequest._closeSteps(chunk); } else { readIntoRequest._chunkSteps(chunk); } } function ReadableStreamGetNumReadIntoRequests(stream) { return stream._reader._readIntoRequests.length; } function ReadableStreamHasBYOBReader(stream) { var reader = stream._reader; if (reader === undefined) { return false; } if (!IsReadableStreamBYOBReader(reader)) { return false; } return true; } var ReadableStreamBYOBReader = function () { function ReadableStreamBYOBReader(stream) { assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader'); assertReadableStream(stream, 'First parameter'); if (IsReadableStreamLocked(stream)) { throw new TypeError('This stream has already been locked for exclusive reading by another reader'); } if (!IsReadableByteStreamController(stream._readableStreamController)) { throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' + 'source'); } ReadableStreamReaderGenericInitialize(this, stream); this._readIntoRequests = new SimpleQueue(); } Object.defineProperty(ReadableStreamBYOBReader.prototype, "closed", { get: function () { if (!IsReadableStreamBYOBReader(this)) { return promiseRejectedWith(byobReaderBrandCheckException('closed')); } return this._closedPromise; }, enumerable: false, configurable: true }); ReadableStreamBYOBReader.prototype.cancel = function (reason) { if (reason === void 0) { reason = undefined; } if (!IsReadableStreamBYOBReader(this)) { return promiseRejectedWith(byobReaderBrandCheckException('cancel')); } if (this._ownerReadableStream === undefined) { return promiseRejectedWith(readerLockException('cancel')); } return ReadableStreamReaderGenericCancel(this, reason); }; ReadableStreamBYOBReader.prototype.read = function (view) { if (!IsReadableStreamBYOBReader(this)) { return promiseRejectedWith(byobReaderBrandCheckException('read')); } if (!ArrayBuffer.isView(view)) { return promiseRejectedWith(new TypeError('view must be an array buffer view')); } if (view.byteLength === 0) { return promiseRejectedWith(new TypeError('view must have non-zero byteLength')); } if (view.buffer.byteLength === 0) { return promiseRejectedWith(new TypeError("view's buffer must have non-zero byteLength")); } if (this._ownerReadableStream === undefined) { return promiseRejectedWith(readerLockException('read from')); } var resolvePromise; var rejectPromise; var promise = newPromise(function (resolve, reject) { resolvePromise = resolve; rejectPromise = reject; }); var readIntoRequest = { _chunkSteps: function (chunk) { return resolvePromise({ value: chunk, done: false }); }, _closeSteps: function (chunk) { return resolvePromise({ value: chunk, done: true }); }, _errorSteps: function (e) { return rejectPromise(e); } }; ReadableStreamBYOBReaderRead(this, view, readIntoRequest); return promise; }; ReadableStreamBYOBReader.prototype.releaseLock = function () { if (!IsReadableStreamBYOBReader(this)) { throw byobReaderBrandCheckException('releaseLock'); } if (this._ownerReadableStream === undefined) { return; } if (this._readIntoRequests.length > 0) { throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled'); } ReadableStreamReaderGenericRelease(this); }; return ReadableStreamBYOBReader; }(); Object.defineProperties(ReadableStreamBYOBReader.prototype, { cancel: { enumerable: true }, read: { enumerable: true }, releaseLock: { enumerable: true }, closed: { enumerable: true } }); if (typeof SymbolPolyfill.toStringTag === 'symbol') { Object.defineProperty(ReadableStreamBYOBReader.prototype, SymbolPolyfill.toStringTag, { value: 'ReadableStreamBYOBReader', configurable: true }); } function IsReadableStreamBYOBReader(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) { return false; } return true; } function ReadableStreamBYOBReaderRead(reader, view, readIntoRequest) { var stream = reader._ownerReadableStream; stream._disturbed = true; if (stream._state === 'errored') { readIntoRequest._errorSteps(stream._storedError); } else { ReadableByteStreamControllerPullInto(stream._readableStreamController, view, readIntoRequest); } } function byobReaderBrandCheckException(name) { return new TypeError("ReadableStreamBYOBReader.prototype." + name + " can only be used on a ReadableStreamBYOBReader"); } function ExtractHighWaterMark(strategy, defaultHWM) { var highWaterMark = strategy.highWaterMark; if (highWaterMark === undefined) { return defaultHWM; } if (NumberIsNaN(highWaterMark) || highWaterMark < 0) { throw new RangeError('Invalid highWaterMark'); } return highWaterMark; } function ExtractSizeAlgorithm(strategy) { var size = strategy.size; if (!size) { return function () { return 1; }; } return size; } function convertQueuingStrategy(init, context) { assertDictionary(init, context); var highWaterMark = init === null || init === void 0 ? void 0 : init.highWaterMark; var size = init === null || init === void 0 ? void 0 : init.size; return { highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark), size: size === undefined ? undefined : convertQueuingStrategySize(size, context + " has member 'size' that") }; } function convertQueuingStrategySize(fn, context) { assertFunction(fn, context); return function (chunk) { return convertUnrestrictedDouble(fn(chunk)); }; } function convertUnderlyingSink(original, context) { assertDictionary(original, context); var abort = original === null || original === void 0 ? void 0 : original.abort; var close = original === null || original === void 0 ? void 0 : original.close; var start = original === null || original === void 0 ? void 0 : original.start; var type = original === null || original === void 0 ? void 0 : original.type; var write = original === null || original === void 0 ? void 0 : original.write; return { abort: abort === undefined ? undefined : convertUnderlyingSinkAbortCallback(abort, original, context + " has member 'abort' that"), close: close === undefined ? undefined : convertUnderlyingSinkCloseCallback(close, original, context + " has member 'close' that"), start: start === undefined ? undefined : convertUnderlyingSinkStartCallback(start, original, context + " has member 'start' that"), write: write === undefined ? undefined : convertUnderlyingSinkWriteCallback(write, original, context + " has member 'write' that"), type: type }; } function convertUnderlyingSinkAbortCallback(fn, original, context) { assertFunction(fn, context); return function (reason) { return promiseCall(fn, original, [reason]); }; } function convertUnderlyingSinkCloseCallback(fn, original, context) { assertFunction(fn, context); return function () { return promiseCall(fn, original, []); }; } function convertUnderlyingSinkStartCallback(fn, original, context) { assertFunction(fn, context); return function (controller) { return reflectCall(fn, original, [controller]); }; } function convertUnderlyingSinkWriteCallback(fn, original, context) { assertFunction(fn, context); return function (chunk, controller) { return promiseCall(fn, original, [ chunk, controller ]); }; } function assertWritableStream(x, context) { if (!IsWritableStream(x)) { throw new TypeError(context + " is not a WritableStream."); } } var WritableStream = function () { function WritableStream(rawUnderlyingSink, rawStrategy) { if (rawUnderlyingSink === void 0) { rawUnderlyingSink = {}; } if (rawStrategy === void 0) { rawStrategy = {}; } if (rawUnderlyingSink === undefined) { rawUnderlyingSink = null; } else { assertObject(rawUnderlyingSink, 'First parameter'); } var strategy = convertQueuingStrategy(rawStrategy, 'Second parameter'); var underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter'); InitializeWritableStream(this); var type = underlyingSink.type; if (type !== undefined) { throw new RangeError('Invalid type is specified'); } var sizeAlgorithm = ExtractSizeAlgorithm(strategy); var highWaterMark = ExtractHighWaterMark(strategy, 1); SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm); } Object.defineProperty(WritableStream.prototype, "locked", { get: function () { if (!IsWritableStream(this)) { throw streamBrandCheckException('locked'); } return IsWritableStreamLocked(this); }, enumerable: false, configurable: true }); WritableStream.prototype.abort = function (reason) { if (reason === void 0) { reason = undefined; } if (!IsWritableStream(this)) { return promiseRejectedWith(streamBrandCheckException('abort')); } if (IsWritableStreamLocked(this)) { return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer')); } return WritableStreamAbort(this, reason); }; WritableStream.prototype.close = function () { if (!IsWritableStream(this)) { return promiseRejectedWith(streamBrandCheckException('close')); } if (IsWritableStreamLocked(this)) { return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer')); } if (WritableStreamCloseQueuedOrInFlight(this)) { return promiseRejectedWith(new TypeError('Cannot close an already-closing stream')); } return WritableStreamClose(this); }; WritableStream.prototype.getWriter = function () { if (!IsWritableStream(this)) { throw streamBrandCheckException('getWriter'); } return AcquireWritableStreamDefaultWriter(this); }; return WritableStream; }(); Object.defineProperties(WritableStream.prototype, { abort: { enumerable: true }, close: { enumerable: true }, getWriter: { enumerable: true }, locked: { enumerable: true } }); if (typeof SymbolPolyfill.toStringTag === 'symbol') { Object.defineProperty(WritableStream.prototype, SymbolPolyfill.toStringTag, { value: 'WritableStream', configurable: true }); } function AcquireWritableStreamDefaultWriter(stream) { return new WritableStreamDefaultWriter(stream); } function CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm) { if (highWaterMark === void 0) { highWaterMark = 1; } if (sizeAlgorithm === void 0) { sizeAlgorithm = function () { return 1; }; } var stream = Object.create(WritableStream.prototype); InitializeWritableStream(stream); var controller = Object.create(WritableStreamDefaultController.prototype); SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm); return stream; } function InitializeWritableStream(stream) { stream._state = 'writable'; stream._storedError = undefined; stream._writer = undefined; stream._writableStreamController = undefined; stream._writeRequests = new SimpleQueue(); stream._inFlightWriteRequest = undefined; stream._closeRequest = undefined; stream._inFlightCloseRequest = undefined; stream._pendingAbortRequest = undefined; stream._backpressure = false; } function IsWritableStream(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) { return false; } return true; } function IsWritableStreamLocked(stream) { if (stream._writer === undefined) { return false; } return true; } function WritableStreamAbort(stream, reason) { var state = stream._state; if (state === 'closed' || state === 'errored') { return promiseResolvedWith(undefined); } if (stream._pendingAbortRequest !== undefined) { return stream._pendingAbortRequest._promise; } var wasAlreadyErroring = false; if (state === 'erroring') { wasAlreadyErroring = true; reason = undefined; } var promise = newPromise(function (resolve, reject) { stream._pendingAbortRequest = { _promise: undefined, _resolve: resolve, _reject: reject, _reason: reason, _wasAlreadyErroring: wasAlreadyErroring }; }); stream._pendingAbortRequest._promise = promise; if (!wasAlreadyErroring) { WritableStreamStartErroring(stream, reason); } return promise; } function WritableStreamClose(stream) { var state = stream._state; if (state === 'closed' || state === 'errored') { return promiseRejectedWith(new TypeError("The stream (in " + state + " state) is not in the writable state and cannot be closed")); } var promise = newPromise(function (resolve, reject) { var closeRequest = { _resolve: resolve, _reject: reject }; stream._closeRequest = closeRequest; }); var writer = stream._writer; if (writer !== undefined && stream._backpressure && state === 'writable') { defaultWriterReadyPromiseResolve(writer); } WritableStreamDefaultControllerClose(stream._writableStreamController); return promise; } function WritableStreamAddWriteRequest(stream) { var promise = newPromise(function (resolve, reject) { var writeRequest = { _resolve: resolve, _reject: reject }; stream._writeRequests.push(writeRequest); }); return promise; } function WritableStreamDealWithRejection(stream, error) { var state = stream._state; if (state === 'writable') { WritableStreamStartErroring(stream, error); return; } WritableStreamFinishErroring(stream); } function WritableStreamStartErroring(stream, reason) { var controller = stream._writableStreamController; stream._state = 'erroring'; stream._storedError = reason; var writer = stream._writer; if (writer !== undefined) { WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason); } if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) { WritableStreamFinishErroring(stream); } } function WritableStreamFinishErroring(stream) { stream._state = 'errored'; stream._writableStreamController[ErrorSteps](); var storedError = stream._storedError; stream._writeRequests.forEach(function (writeRequest) { writeRequest._reject(storedError); }); stream._writeRequests = new SimpleQueue(); if (stream._pendingAbortRequest === undefined) { WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); return; } var abortRequest = stream._pendingAbortRequest; stream._pendingAbortRequest = undefined; if (abortRequest._wasAlreadyErroring) { abortRequest._reject(storedError); WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); return; } var promise = stream._writableStreamController[AbortSteps](abortRequest._reason); uponPromise(promise, function () { abortRequest._resolve(); WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); }, function (reason) { abortRequest._reject(reason); WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); }); } function WritableStreamFinishInFlightWrite(stream) { stream._inFlightWriteRequest._resolve(undefined); stream._inFlightWriteRequest = undefined; } function WritableStreamFinishInFlightWriteWithError(stream, error) { stream._inFlightWriteRequest._reject(error); stream._inFlightWriteRequest = undefined; WritableStreamDealWithRejection(stream, error); } function WritableStreamFinishInFlightClose(stream) { stream._inFlightCloseRequest._resolve(undefined); stream._inFlightCloseRequest = undefined; var state = stream._state; if (state === 'erroring') { stream._storedError = undefined; if (stream._pendingAbortRequest !== undefined) { stream._pendingAbortRequest._resolve(); stream._pendingAbortRequest = undefined; } } stream._state = 'closed'; var writer = stream._writer; if (writer !== undefined) { defaultWriterClosedPromiseResolve(writer); } } function WritableStreamFinishInFlightCloseWithError(stream, error) { stream._inFlightCloseRequest._reject(error); stream._inFlightCloseRequest = undefined; if (stream._pendingAbortRequest !== undefined) { stream._pendingAbortRequest._reject(error); stream._pendingAbortRequest = undefined; } WritableStreamDealWithRejection(stream, error); } function WritableStreamCloseQueuedOrInFlight(stream) { if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) { return false; } return true; } function WritableStreamHasOperationMarkedInFlight(stream) { if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) { return false; } return true; } function WritableStreamMarkCloseRequestInFlight(stream) { stream._inFlightCloseRequest = stream._closeRequest; stream._closeRequest = undefined; } function WritableStreamMarkFirstWriteRequestInFlight(stream) { stream._inFlightWriteRequest = stream._writeRequests.shift(); } function WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream) { if (stream._closeRequest !== undefined) { stream._closeRequest._reject(stream._storedError); stream._closeRequest = undefined; } var writer = stream._writer; if (writer !== undefined) { defaultWriterClosedPromiseReject(writer, stream._storedError); } } function WritableStreamUpdateBackpressure(stream, backpressure) { var writer = stream._writer; if (writer !== undefined && backpressure !== stream._backpressure) { if (backpressure) { defaultWriterReadyPromiseReset(writer); } else { defaultWriterReadyPromiseResolve(writer); } } stream._backpressure = backpressure; } var WritableStreamDefaultWriter = function () { function WritableStreamDefaultWriter(stream) { assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter'); assertWritableStream(stream, 'First parameter'); if (IsWritableStreamLocked(stream)) { throw new TypeError('This stream has already been locked for exclusive writing by another writer'); } this._ownerWritableStream = stream; stream._writer = this; var state = stream._state; if (state === 'writable') { if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) { defaultWriterReadyPromiseInitialize(this); } else { defaultWriterReadyPromiseInitializeAsResolved(this); } defaultWriterClosedPromiseInitialize(this); } else if (state === 'erroring') { defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError); defaultWriterClosedPromiseInitialize(this); } else if (state === 'closed') { defaultWriterReadyPromiseInitializeAsResolved(this); defaultWriterClosedPromiseInitializeAsResolved(this); } else { var storedError = stream._storedError; defaultWriterReadyPromiseInitializeAsRejected(this, storedError); defaultWriterClosedPromiseInitializeAsRejected(this, storedError); } } Object.defineProperty(WritableStreamDefaultWriter.prototype, "closed", { get: function () { if (!IsWritableStreamDefaultWriter(this)) { return promiseRejectedWith(defaultWriterBrandCheckException('closed')); } return this._closedPromise; }, enumerable: false, configurable: true }); Object.defineProperty(WritableStreamDefaultWriter.prototype, "desiredSize", { get: function () { if (!IsWritableStreamDefaultWriter(this)) { throw defaultWriterBrandCheckException('desiredSize'); } if (this._ownerWritableStream === undefined) { throw defaultWriterLockException('desiredSize'); } return WritableStreamDefaultWriterGetDesiredSize(this); }, enumerable: false, configurable: true }); Object.defineProperty(WritableStreamDefaultWriter.prototype, "ready", { get: function () { if (!IsWritableStreamDefaultWriter(this)) { return promiseRejectedWith(defaultWriterBrandCheckException('ready')); } return this._readyPromise; }, enumerable: false, configurable: true }); WritableStreamDefaultWriter.prototype.abort = function (reason) { if (reason === void 0) { reason = undefined; } if (!IsWritableStreamDefaultWriter(this)) { return promiseRejectedWith(defaultWriterBrandCheckException('abort')); } if (this._ownerWritableStream === undefined) { return promiseRejectedWith(defaultWriterLockException('abort')); } return WritableStreamDefaultWriterAbort(this, reason); }; WritableStreamDefaultWriter.prototype.close = function () { if (!IsWritableStreamDefaultWriter(this)) { return promiseRejectedWith(defaultWriterBrandCheckException('close')); } var stream = this._ownerWritableStream; if (stream === undefined) { return promiseRejectedWith(defaultWriterLockException('close')); } if (WritableStreamCloseQueuedOrInFlight(stream)) { return promiseRejectedWith(new TypeError('Cannot close an already-closing stream')); } return WritableStreamDefaultWriterClose(this); }; WritableStreamDefaultWriter.prototype.releaseLock = function () { if (!IsWritableStreamDefaultWriter(this)) { throw defaultWriterBrandCheckException('releaseLock'); } var stream = this._ownerWritableStream; if (stream === undefined) { return; } WritableStreamDefaultWriterRelease(this); }; WritableStreamDefaultWriter.prototype.write = function (chunk) { if (chunk === void 0) { chunk = undefined; } if (!IsWritableStreamDefaultWriter(this)) { return promiseRejectedWith(defaultWriterBrandCheckException('write')); } if (this._ownerWritableStream === undefined) { return promiseRejectedWith(defaultWriterLockException('write to')); } return WritableStreamDefaultWriterWrite(this, chunk); }; return WritableStreamDefaultWriter; }(); Object.defineProperties(WritableStreamDefaultWriter.prototype, { abort: { enumerable: true }, close: { enumerable: true }, releaseLock: { enumerable: true }, write: { enumerable: true }, closed: { enumerable: true }, desiredSize: { enumerable: true }, ready: { enumerable: true } }); if (typeof SymbolPolyfill.toStringTag === 'symbol') { Object.defineProperty(WritableStreamDefaultWriter.prototype, SymbolPolyfill.toStringTag, { value: 'WritableStreamDefaultWriter', configurable: true }); } function IsWritableStreamDefaultWriter(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) { return false; } return true; } function WritableStreamDefaultWriterAbort(writer, reason) { var stream = writer._ownerWritableStream; return WritableStreamAbort(stream, reason); } function WritableStreamDefaultWriterClose(writer) { var stream = writer._ownerWritableStream; return WritableStreamClose(stream); } function WritableStreamDefaultWriterCloseWithErrorPropagation(writer) { var stream = writer._ownerWritableStream; var state = stream._state; if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') { return promiseResolvedWith(undefined); } if (state === 'errored') { return promiseRejectedWith(stream._storedError); } return WritableStreamDefaultWriterClose(writer); } function WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, error) { if (writer._closedPromiseState === 'pending') { defaultWriterClosedPromiseReject(writer, error); } else { defaultWriterClosedPromiseResetToRejected(writer, error); } } function WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, error) { if (writer._readyPromiseState === 'pending') { defaultWriterReadyPromiseReject(writer, error); } else { defaultWriterReadyPromiseResetToRejected(writer, error); } } function WritableStreamDefaultWriterGetDesiredSize(writer) { var stream = writer._ownerWritableStream; var state = stream._state; if (state === 'errored' || state === 'erroring') { return null; } if (state === 'closed') { return 0; } return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController); } function WritableStreamDefaultWriterRelease(writer) { var stream = writer._ownerWritableStream; var releasedError = new TypeError("Writer was released and can no longer be used to monitor the stream's closedness"); WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError); WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError); stream._writer = undefined; writer._ownerWritableStream = undefined; } function WritableStreamDefaultWriterWrite(writer, chunk) { var stream = writer._ownerWritableStream; var controller = stream._writableStreamController; var chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk); if (stream !== writer._ownerWritableStream) { return promiseRejectedWith(defaultWriterLockException('write to')); } var state = stream._state; if (state === 'errored') { return promiseRejectedWith(stream._storedError); } if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') { return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to')); } if (state === 'erroring') { return promiseRejectedWith(stream._storedError); } var promise = WritableStreamAddWriteRequest(stream); WritableStreamDefaultControllerWrite(controller, chunk, chunkSize); return promise; } var closeSentinel = {}; var WritableStreamDefaultController = function () { function WritableStreamDefaultController() { throw new TypeError('Illegal constructor'); } WritableStreamDefaultController.prototype.error = function (e) { if (e === void 0) { e = undefined; } if (!IsWritableStreamDefaultController(this)) { throw new TypeError('WritableStreamDefaultController.prototype.error can only be used on a WritableStreamDefaultController'); } var state = this._controlledWritableStream._state; if (state !== 'writable') { return; } WritableStreamDefaultControllerError(this, e); }; WritableStreamDefaultController.prototype[AbortSteps] = function (reason) { var result = this._abortAlgorithm(reason); WritableStreamDefaultControllerClearAlgorithms(this); return result; }; WritableStreamDefaultController.prototype[ErrorSteps] = function () { ResetQueue(this); }; return WritableStreamDefaultController; }(); Object.defineProperties(WritableStreamDefaultController.prototype, { error: { enumerable: true } }); if (typeof SymbolPolyfill.toStringTag === 'symbol') { Object.defineProperty(WritableStreamDefaultController.prototype, SymbolPolyfill.toStringTag, { value: 'WritableStreamDefaultController', configurable: true }); } function IsWritableStreamDefaultController(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) { return false; } return true; } function SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm) { controller._controlledWritableStream = stream; stream._writableStreamController = controller; controller._queue = undefined; controller._queueTotalSize = undefined; ResetQueue(controller); controller._started = false; controller._strategySizeAlgorithm = sizeAlgorithm; controller._strategyHWM = highWaterMark; controller._writeAlgorithm = writeAlgorithm; controller._closeAlgorithm = closeAlgorithm; controller._abortAlgorithm = abortAlgorithm; var backpressure = WritableStreamDefaultControllerGetBackpressure(controller); WritableStreamUpdateBackpressure(stream, backpressure); var startResult = startAlgorithm(); var startPromise = promiseResolvedWith(startResult); uponPromise(startPromise, function () { controller._started = true; WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); }, function (r) { controller._started = true; WritableStreamDealWithRejection(stream, r); }); } function SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream, underlyingSink, highWaterMark, sizeAlgorithm) { var controller = Object.create(WritableStreamDefaultController.prototype); var startAlgorithm = function () { return undefined; }; var writeAlgorithm = function () { return promiseResolvedWith(undefined); }; var closeAlgorithm = function () { return promiseResolvedWith(undefined); }; var abortAlgorithm = function () { return promiseResolvedWith(undefined); }; if (underlyingSink.start !== undefined) { startAlgorithm = function () { return underlyingSink.start(controller); }; } if (underlyingSink.write !== undefined) { writeAlgorithm = function (chunk) { return underlyingSink.write(chunk, controller); }; } if (underlyingSink.close !== undefined) { closeAlgorithm = function () { return underlyingSink.close(); }; } if (underlyingSink.abort !== undefined) { abortAlgorithm = function (reason) { return underlyingSink.abort(reason); }; } SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm); } function WritableStreamDefaultControllerClearAlgorithms(controller) { controller._writeAlgorithm = undefined; controller._closeAlgorithm = undefined; controller._abortAlgorithm = undefined; controller._strategySizeAlgorithm = undefined; } function WritableStreamDefaultControllerClose(controller) { EnqueueValueWithSize(controller, closeSentinel, 0); WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); } function WritableStreamDefaultControllerGetChunkSize(controller, chunk) { try { return controller._strategySizeAlgorithm(chunk); } catch (chunkSizeE) { WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE); return 1; } } function WritableStreamDefaultControllerGetDesiredSize(controller) { return controller._strategyHWM - controller._queueTotalSize; } function WritableStreamDefaultControllerWrite(controller, chunk, chunkSize) { try { EnqueueValueWithSize(controller, chunk, chunkSize); } catch (enqueueE) { WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE); return; } var stream = controller._controlledWritableStream; if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') { var backpressure = WritableStreamDefaultControllerGetBackpressure(controller); WritableStreamUpdateBackpressure(stream, backpressure); } WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); } function WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller) { var stream = controller._controlledWritableStream; if (!controller._started) { return; } if (stream._inFlightWriteRequest !== undefined) { return; } var state = stream._state; if (state === 'erroring') { WritableStreamFinishErroring(stream); return; } if (controller._queue.length === 0) { return; } var value = PeekQueueValue(controller); if (value === closeSentinel) { WritableStreamDefaultControllerProcessClose(controller); } else { WritableStreamDefaultControllerProcessWrite(controller, value); } } function WritableStreamDefaultControllerErrorIfNeeded(controller, error) { if (controller._controlledWritableStream._state === 'writable') { WritableStreamDefaultControllerError(controller, error); } } function WritableStreamDefaultControllerProcessClose(controller) { var stream = controller._controlledWritableStream; WritableStreamMarkCloseRequestInFlight(stream); DequeueValue(controller); var sinkClosePromise = controller._closeAlgorithm(); WritableStreamDefaultControllerClearAlgorithms(controller); uponPromise(sinkClosePromise, function () { WritableStreamFinishInFlightClose(stream); }, function (reason) { WritableStreamFinishInFlightCloseWithError(stream, reason); }); } function WritableStreamDefaultControllerProcessWrite(controller, chunk) { var stream = controller._controlledWritableStream; WritableStreamMarkFirstWriteRequestInFlight(stream); var sinkWritePromise = controller._writeAlgorithm(chunk); uponPromise(sinkWritePromise, function () { WritableStreamFinishInFlightWrite(stream); var state = stream._state; DequeueValue(controller); if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') { var backpressure = WritableStreamDefaultControllerGetBackpressure(controller); WritableStreamUpdateBackpressure(stream, backpressure); } WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); }, function (reason) { if (stream._state === 'writable') { WritableStreamDefaultControllerClearAlgorithms(controller); } WritableStreamFinishInFlightWriteWithError(stream, reason); }); } function WritableStreamDefaultControllerGetBackpressure(controller) { var desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller); return desiredSize <= 0; } function WritableStreamDefaultControllerError(controller, error) { var stream = controller._controlledWritableStream; WritableStreamDefaultControllerClearAlgorithms(controller); WritableStreamStartErroring(stream, error); } function streamBrandCheckException(name) { return new TypeError("WritableStream.prototype." + name + " can only be used on a WritableStream"); } function defaultWriterBrandCheckException(name) { return new TypeError("WritableStreamDefaultWriter.prototype." + name + " can only be used on a WritableStreamDefaultWriter"); } function defaultWriterLockException(name) { return new TypeError('Cannot ' + name + ' a stream using a released writer'); } function defaultWriterClosedPromiseInitialize(writer) { writer._closedPromise = newPromise(function (resolve, reject) { writer._closedPromise_resolve = resolve; writer._closedPromise_reject = reject; writer._closedPromiseState = 'pending'; }); } function defaultWriterClosedPromiseInitializeAsRejected(writer, reason) { defaultWriterClosedPromiseInitialize(writer); defaultWriterClosedPromiseReject(writer, reason); } function defaultWriterClosedPromiseInitializeAsResolved(writer) { defaultWriterClosedPromiseInitialize(writer); defaultWriterClosedPromiseResolve(writer); } function defaultWriterClosedPromiseReject(writer, reason) { if (writer._closedPromise_reject === undefined) { return; } setPromiseIsHandledToTrue(writer._closedPromise); writer._closedPromise_reject(reason); writer._closedPromise_resolve = undefined; writer._closedPromise_reject = undefined; writer._closedPromiseState = 'rejected'; } function defaultWriterClosedPromiseResetToRejected(writer, reason) { defaultWriterClosedPromiseInitializeAsRejected(writer, reason); } function defaultWriterClosedPromiseResolve(writer) { if (writer._closedPromise_resolve === undefined) { return; } writer._closedPromise_resolve(undefined); writer._closedPromise_resolve = undefined; writer._closedPromise_reject = undefined; writer._closedPromiseState = 'resolved'; } function defaultWriterReadyPromiseInitialize(writer) { writer._readyPromise = newPromise(function (resolve, reject) { writer._readyPromise_resolve = resolve; writer._readyPromise_reject = reject; }); writer._readyPromiseState = 'pending'; } function defaultWriterReadyPromiseInitializeAsRejected(writer, reason) { defaultWriterReadyPromiseInitialize(writer); defaultWriterReadyPromiseReject(writer, reason); } function defaultWriterReadyPromiseInitializeAsResolved(writer) { defaultWriterReadyPromiseInitialize(writer); defaultWriterReadyPromiseResolve(writer); } function defaultWriterReadyPromiseReject(writer, reason) { if (writer._readyPromise_reject === undefined) { return; } setPromiseIsHandledToTrue(writer._readyPromise); writer._readyPromise_reject(reason); writer._readyPromise_resolve = undefined; writer._readyPromise_reject = undefined; writer._readyPromiseState = 'rejected'; } function defaultWriterReadyPromiseReset(writer) { defaultWriterReadyPromiseInitialize(writer); } function defaultWriterReadyPromiseResetToRejected(writer, reason) { defaultWriterReadyPromiseInitializeAsRejected(writer, reason); } function defaultWriterReadyPromiseResolve(writer) { if (writer._readyPromise_resolve === undefined) { return; } writer._readyPromise_resolve(undefined); writer._readyPromise_resolve = undefined; writer._readyPromise_reject = undefined; writer._readyPromiseState = 'fulfilled'; } function isAbortSignal(value) { if (typeof value !== 'object' || value === null) { return false; } try { return typeof value.aborted === 'boolean'; } catch (_a) { return false; } } var NativeDOMException = typeof DOMException !== 'undefined' ? DOMException : undefined; function isDOMExceptionConstructor(ctor) { if (!(typeof ctor === 'function' || typeof ctor === 'object')) { return false; } try { new ctor(); return true; } catch (_a) { return false; } } function createDOMExceptionPolyfill() { var ctor = function DOMException(message, name) { this.message = message || ''; this.name = name || 'Error'; if (Error.captureStackTrace) { Error.captureStackTrace(this, this.constructor); } }; ctor.prototype = Object.create(Error.prototype); Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true }); return ctor; } var DOMException$1 = isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill(); function ReadableStreamPipeTo(source, dest, preventClose, preventAbort, preventCancel, signal) { var reader = AcquireReadableStreamDefaultReader(source); var writer = AcquireWritableStreamDefaultWriter(dest); source._disturbed = true; var shuttingDown = false; var currentWrite = promiseResolvedWith(undefined); return newPromise(function (resolve, reject) { var abortAlgorithm; if (signal !== undefined) { abortAlgorithm = function () { var error = new DOMException$1('Aborted', 'AbortError'); var actions = []; if (!preventAbort) { actions.push(function () { if (dest._state === 'writable') { return WritableStreamAbort(dest, error); } return promiseResolvedWith(undefined); }); } if (!preventCancel) { actions.push(function () { if (source._state === 'readable') { return ReadableStreamCancel(source, error); } return promiseResolvedWith(undefined); }); } shutdownWithAction(function () { return Promise.all(actions.map(function (action) { return action(); })); }, true, error); }; if (signal.aborted) { abortAlgorithm(); return; } signal.addEventListener('abort', abortAlgorithm); } function pipeLoop() { return newPromise(function (resolveLoop, rejectLoop) { function next(done) { if (done) { resolveLoop(); } else { PerformPromiseThen(pipeStep(), next, rejectLoop); } } next(false); }); } function pipeStep() { if (shuttingDown) { return promiseResolvedWith(true); } return PerformPromiseThen(writer._readyPromise, function () { return newPromise(function (resolveRead, rejectRead) { ReadableStreamDefaultReaderRead(reader, { _chunkSteps: function (chunk) { currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop); resolveRead(false); }, _closeSteps: function () { return resolveRead(true); }, _errorSteps: rejectRead }); }); }); } isOrBecomesErrored(source, reader._closedPromise, function (storedError) { if (!preventAbort) { shutdownWithAction(function () { return WritableStreamAbort(dest, storedError); }, true, storedError); } else { shutdown(true, storedError); } }); isOrBecomesErrored(dest, writer._closedPromise, function (storedError) { if (!preventCancel) { shutdownWithAction(function () { return ReadableStreamCancel(source, storedError); }, true, storedError); } else { shutdown(true, storedError); } }); isOrBecomesClosed(source, reader._closedPromise, function () { if (!preventClose) { shutdownWithAction(function () { return WritableStreamDefaultWriterCloseWithErrorPropagation(writer); }); } else { shutdown(); } }); if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') { var destClosed_1 = new TypeError('the destination writable stream closed before all data could be piped to it'); if (!preventCancel) { shutdownWithAction(function () { return ReadableStreamCancel(source, destClosed_1); }, true, destClosed_1); } else { shutdown(true, destClosed_1); } } setPromiseIsHandledToTrue(pipeLoop()); function waitForWritesToFinish() { var oldCurrentWrite = currentWrite; return PerformPromiseThen(currentWrite, function () { return oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined; }); } function isOrBecomesErrored(stream, promise, action) { if (stream._state === 'errored') { action(stream._storedError); } else { uponRejection(promise, action); } } function isOrBecomesClosed(stream, promise, action) { if (stream._state === 'closed') { action(); } else { uponFulfillment(promise, action); } } function shutdownWithAction(action, originalIsError, originalError) { if (shuttingDown) { return; } shuttingDown = true; if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) { uponFulfillment(waitForWritesToFinish(), doTheRest); } else { doTheRest(); } function doTheRest() { uponPromise(action(), function () { return finalize(originalIsError, originalError); }, function (newError) { return finalize(true, newError); }); } } function shutdown(isError, error) { if (shuttingDown) { return; } shuttingDown = true; if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) { uponFulfillment(waitForWritesToFinish(), function () { return finalize(isError, error); }); } else { finalize(isError, error); } } function finalize(isError, error) { WritableStreamDefaultWriterRelease(writer); ReadableStreamReaderGenericRelease(reader); if (signal !== undefined) { signal.removeEventListener('abort', abortAlgorithm); } if (isError) { reject(error); } else { resolve(undefined); } } }); } var ReadableStreamDefaultController = function () { function ReadableStreamDefaultController() { throw new TypeError('Illegal constructor'); } Object.defineProperty(ReadableStreamDefaultController.prototype, "desiredSize", { get: function () { if (!IsReadableStreamDefaultController(this)) { throw defaultControllerBrandCheckException('desiredSize'); } return ReadableStreamDefaultControllerGetDesiredSize(this); }, enumerable: false, configurable: true }); ReadableStreamDefaultController.prototype.close = function () { if (!IsReadableStreamDefaultController(this)) { throw defaultControllerBrandCheckException('close'); } if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) { throw new TypeError('The stream is not in a state that permits close'); } ReadableStreamDefaultControllerClose(this); }; ReadableStreamDefaultController.prototype.enqueue = function (chunk) { if (chunk === void 0) { chunk = undefined; } if (!IsReadableStreamDefaultController(this)) { throw defaultControllerBrandCheckException('enqueue'); } if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) { throw new TypeError('The stream is not in a state that permits enqueue'); } return ReadableStreamDefaultControllerEnqueue(this, chunk); }; ReadableStreamDefaultController.prototype.error = function (e) { if (e === void 0) { e = undefined; } if (!IsReadableStreamDefaultController(this)) { throw defaultControllerBrandCheckException('error'); } ReadableStreamDefaultControllerError(this, e); }; ReadableStreamDefaultController.prototype[CancelSteps] = function (reason) { ResetQueue(this); var result = this._cancelAlgorithm(reason); ReadableStreamDefaultControllerClearAlgorithms(this); return result; }; ReadableStreamDefaultController.prototype[PullSteps] = function (readRequest) { var stream = this._controlledReadableStream; if (this._queue.length > 0) { var chunk = DequeueValue(this); if (this._closeRequested && this._queue.length === 0) { ReadableStreamDefaultControllerClearAlgorithms(this); ReadableStreamClose(stream); } else { ReadableStreamDefaultControllerCallPullIfNeeded(this); } readRequest._chunkSteps(chunk); } else { ReadableStreamAddReadRequest(stream, readRequest); ReadableStreamDefaultControllerCallPullIfNeeded(this); } }; return ReadableStreamDefaultController; }(); Object.defineProperties(ReadableStreamDefaultController.prototype, { close: { enumerable: true }, enqueue: { enumerable: true }, error: { enumerable: true }, desiredSize: { enumerable: true } }); if (typeof SymbolPolyfill.toStringTag === 'symbol') { Object.defineProperty(ReadableStreamDefaultController.prototype, SymbolPolyfill.toStringTag, { value: 'ReadableStreamDefaultController', configurable: true }); } function IsReadableStreamDefaultController(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) { return false; } return true; } function ReadableStreamDefaultControllerCallPullIfNeeded(controller) { var shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller); if (!shouldPull) { return; } if (controller._pulling) { controller._pullAgain = true; return; } controller._pulling = true; var pullPromise = controller._pullAlgorithm(); uponPromise(pullPromise, function () { controller._pulling = false; if (controller._pullAgain) { controller._pullAgain = false; ReadableStreamDefaultControllerCallPullIfNeeded(controller); } }, function (e) { ReadableStreamDefaultControllerError(controller, e); }); } function ReadableStreamDefaultControllerShouldCallPull(controller) { var stream = controller._controlledReadableStream; if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) { return false; } if (!controller._started) { return false; } if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) { return true; } var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller); if (desiredSize > 0) { return true; } return false; } function ReadableStreamDefaultControllerClearAlgorithms(controller) { controller._pullAlgorithm = undefined; controller._cancelAlgorithm = undefined; controller._strategySizeAlgorithm = undefined; } function ReadableStreamDefaultControllerClose(controller) { if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) { return; } var stream = controller._controlledReadableStream; controller._closeRequested = true; if (controller._queue.length === 0) { ReadableStreamDefaultControllerClearAlgorithms(controller); ReadableStreamClose(stream); } } function ReadableStreamDefaultControllerEnqueue(controller, chunk) { if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) { return; } var stream = controller._controlledReadableStream; if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) { ReadableStreamFulfillReadRequest(stream, chunk, false); } else { var chunkSize = void 0; try { chunkSize = controller._strategySizeAlgorithm(chunk); } catch (chunkSizeE) { ReadableStreamDefaultControllerError(controller, chunkSizeE); throw chunkSizeE; } try { EnqueueValueWithSize(controller, chunk, chunkSize); } catch (enqueueE) { ReadableStreamDefaultControllerError(controller, enqueueE); throw enqueueE; } } ReadableStreamDefaultControllerCallPullIfNeeded(controller); } function ReadableStreamDefaultControllerError(controller, e) { var stream = controller._controlledReadableStream; if (stream._state !== 'readable') { return; } ResetQueue(controller); ReadableStreamDefaultControllerClearAlgorithms(controller); ReadableStreamError(stream, e); } function ReadableStreamDefaultControllerGetDesiredSize(controller) { var state = controller._controlledReadableStream._state; if (state === 'errored') { return null; } if (state === 'closed') { return 0; } return controller._strategyHWM - controller._queueTotalSize; } function ReadableStreamDefaultControllerHasBackpressure(controller) { if (ReadableStreamDefaultControllerShouldCallPull(controller)) { return false; } return true; } function ReadableStreamDefaultControllerCanCloseOrEnqueue(controller) { var state = controller._controlledReadableStream._state; if (!controller._closeRequested && state === 'readable') { return true; } return false; } function SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm) { controller._controlledReadableStream = stream; controller._queue = undefined; controller._queueTotalSize = undefined; ResetQueue(controller); controller._started = false; controller._closeRequested = false; controller._pullAgain = false; controller._pulling = false; controller._strategySizeAlgorithm = sizeAlgorithm; controller._strategyHWM = highWaterMark; controller._pullAlgorithm = pullAlgorithm; controller._cancelAlgorithm = cancelAlgorithm; stream._readableStreamController = controller; var startResult = startAlgorithm(); uponPromise(promiseResolvedWith(startResult), function () { controller._started = true; ReadableStreamDefaultControllerCallPullIfNeeded(controller); }, function (r) { ReadableStreamDefaultControllerError(controller, r); }); } function SetUpReadableStreamDefaultControllerFromUnderlyingSource(stream, underlyingSource, highWaterMark, sizeAlgorithm) { var controller = Object.create(ReadableStreamDefaultController.prototype); var startAlgorithm = function () { return undefined; }; var pullAlgorithm = function () { return promiseResolvedWith(undefined); }; var cancelAlgorithm = function () { return promiseResolvedWith(undefined); }; if (underlyingSource.start !== undefined) { startAlgorithm = function () { return underlyingSource.start(controller); }; } if (underlyingSource.pull !== undefined) { pullAlgorithm = function () { return underlyingSource.pull(controller); }; } if (underlyingSource.cancel !== undefined) { cancelAlgorithm = function (reason) { return underlyingSource.cancel(reason); }; } SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm); } function defaultControllerBrandCheckException(name) { return new TypeError("ReadableStreamDefaultController.prototype." + name + " can only be used on a ReadableStreamDefaultController"); } function ReadableStreamTee(stream, cloneForBranch2) { var reader = AcquireReadableStreamDefaultReader(stream); var reading = false; var canceled1 = false; var canceled2 = false; var reason1; var reason2; var branch1; var branch2; var resolveCancelPromise; var cancelPromise = newPromise(function (resolve) { resolveCancelPromise = resolve; }); function pullAlgorithm() { if (reading) { return promiseResolvedWith(undefined); } reading = true; var readRequest = { _chunkSteps: function (value) { queueMicrotask(function () { reading = false; var value1 = value; var value2 = value; if (!canceled1) { ReadableStreamDefaultControllerEnqueue(branch1._readableStreamController, value1); } if (!canceled2) { ReadableStreamDefaultControllerEnqueue(branch2._readableStreamController, value2); } resolveCancelPromise(undefined); }); }, _closeSteps: function () { reading = false; if (!canceled1) { ReadableStreamDefaultControllerClose(branch1._readableStreamController); } if (!canceled2) { ReadableStreamDefaultControllerClose(branch2._readableStreamController); } }, _errorSteps: function () { reading = false; } }; ReadableStreamDefaultReaderRead(reader, readRequest); return promiseResolvedWith(undefined); } function cancel1Algorithm(reason) { canceled1 = true; reason1 = reason; if (canceled2) { var compositeReason = CreateArrayFromList([ reason1, reason2 ]); var cancelResult = ReadableStreamCancel(stream, compositeReason); resolveCancelPromise(cancelResult); } return cancelPromise; } function cancel2Algorithm(reason) { canceled2 = true; reason2 = reason; if (canceled1) { var compositeReason = CreateArrayFromList([ reason1, reason2 ]); var cancelResult = ReadableStreamCancel(stream, compositeReason); resolveCancelPromise(cancelResult); } return cancelPromise; } function startAlgorithm() { } branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm); branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm); uponRejection(reader._closedPromise, function (r) { ReadableStreamDefaultControllerError(branch1._readableStreamController, r); ReadableStreamDefaultControllerError(branch2._readableStreamController, r); resolveCancelPromise(undefined); }); return [ branch1, branch2 ]; } function convertUnderlyingDefaultOrByteSource(source, context) { assertDictionary(source, context); var original = source; var autoAllocateChunkSize = original === null || original === void 0 ? void 0 : original.autoAllocateChunkSize; var cancel = original === null || original === void 0 ? void 0 : original.cancel; var pull = original === null || original === void 0 ? void 0 : original.pull; var start = original === null || original === void 0 ? void 0 : original.start; var type = original === null || original === void 0 ? void 0 : original.type; return { autoAllocateChunkSize: autoAllocateChunkSize === undefined ? undefined : convertUnsignedLongLongWithEnforceRange(autoAllocateChunkSize, context + " has member 'autoAllocateChunkSize' that"), cancel: cancel === undefined ? undefined : convertUnderlyingSourceCancelCallback(cancel, original, context + " has member 'cancel' that"), pull: pull === undefined ? undefined : convertUnderlyingSourcePullCallback(pull, original, context + " has member 'pull' that"), start: start === undefined ? undefined : convertUnderlyingSourceStartCallback(start, original, context + " has member 'start' that"), type: type === undefined ? undefined : convertReadableStreamType(type, context + " has member 'type' that") }; } function convertUnderlyingSourceCancelCallback(fn, original, context) { assertFunction(fn, context); return function (reason) { return promiseCall(fn, original, [reason]); }; } function convertUnderlyingSourcePullCallback(fn, original, context) { assertFunction(fn, context); return function (controller) { return promiseCall(fn, original, [controller]); }; } function convertUnderlyingSourceStartCallback(fn, original, context) { assertFunction(fn, context); return function (controller) { return reflectCall(fn, original, [controller]); }; } function convertReadableStreamType(type, context) { type = "" + type; if (type !== 'bytes') { throw new TypeError(context + " '" + type + "' is not a valid enumeration value for ReadableStreamType"); } return type; } function convertReaderOptions(options, context) { assertDictionary(options, context); var mode = options === null || options === void 0 ? void 0 : options.mode; return { mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, context + " has member 'mode' that") }; } function convertReadableStreamReaderMode(mode, context) { mode = "" + mode; if (mode !== 'byob') { throw new TypeError(context + " '" + mode + "' is not a valid enumeration value for ReadableStreamReaderMode"); } return mode; } function convertIteratorOptions(options, context) { assertDictionary(options, context); var preventCancel = options === null || options === void 0 ? void 0 : options.preventCancel; return { preventCancel: Boolean(preventCancel) }; } function convertPipeOptions(options, context) { assertDictionary(options, context); var preventAbort = options === null || options === void 0 ? void 0 : options.preventAbort; var preventCancel = options === null || options === void 0 ? void 0 : options.preventCancel; var preventClose = options === null || options === void 0 ? void 0 : options.preventClose; var signal = options === null || options === void 0 ? void 0 : options.signal; if (signal !== undefined) { assertAbortSignal(signal, context + " has member 'signal' that"); } return { preventAbort: Boolean(preventAbort), preventCancel: Boolean(preventCancel), preventClose: Boolean(preventClose), signal: signal }; } function assertAbortSignal(signal, context) { if (!isAbortSignal(signal)) { throw new TypeError(context + " is not an AbortSignal."); } } function convertReadableWritablePair(pair, context) { assertDictionary(pair, context); var readable = pair === null || pair === void 0 ? void 0 : pair.readable; assertRequiredField(readable, 'readable', 'ReadableWritablePair'); assertReadableStream(readable, context + " has member 'readable' that"); var writable = pair === null || pair === void 0 ? void 0 : pair.writable; assertRequiredField(writable, 'writable', 'ReadableWritablePair'); assertWritableStream(writable, context + " has member 'writable' that"); return { readable: readable, writable: writable }; } var ReadableStream = function () { function ReadableStream(rawUnderlyingSource, rawStrategy) { if (rawUnderlyingSource === void 0) { rawUnderlyingSource = {}; } if (rawStrategy === void 0) { rawStrategy = {}; } if (rawUnderlyingSource === undefined) { rawUnderlyingSource = null; } else { assertObject(rawUnderlyingSource, 'First parameter'); } var strategy = convertQueuingStrategy(rawStrategy, 'Second parameter'); var underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter'); InitializeReadableStream(this); if (underlyingSource.type === 'bytes') { if (strategy.size !== undefined) { throw new RangeError('The strategy for a byte stream cannot have a size function'); } var highWaterMark = ExtractHighWaterMark(strategy, 0); SetUpReadableByteStreamControllerFromUnderlyingSource(this, underlyingSource, highWaterMark); } else { var sizeAlgorithm = ExtractSizeAlgorithm(strategy); var highWaterMark = ExtractHighWaterMark(strategy, 1); SetUpReadableStreamDefaultControllerFromUnderlyingSource(this, underlyingSource, highWaterMark, sizeAlgorithm); } } Object.defineProperty(ReadableStream.prototype, "locked", { get: function () { if (!IsReadableStream(this)) { throw streamBrandCheckException$1('locked'); } return IsReadableStreamLocked(this); }, enumerable: false, configurable: true }); ReadableStream.prototype.cancel = function (reason) { if (reason === void 0) { reason = undefined; } if (!IsReadableStream(this)) { return promiseRejectedWith(streamBrandCheckException$1('cancel')); } if (IsReadableStreamLocked(this)) { return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader')); } return ReadableStreamCancel(this, reason); }; ReadableStream.prototype.getReader = function (rawOptions) { if (rawOptions === void 0) { rawOptions = undefined; } if (!IsReadableStream(this)) { throw streamBrandCheckException$1('getReader'); } var options = convertReaderOptions(rawOptions, 'First parameter'); if (options.mode === undefined) { return AcquireReadableStreamDefaultReader(this); } return AcquireReadableStreamBYOBReader(this); }; ReadableStream.prototype.pipeThrough = function (rawTransform, rawOptions) { if (rawOptions === void 0) { rawOptions = {}; } if (!IsReadableStream(this)) { throw streamBrandCheckException$1('pipeThrough'); } assertRequiredArgument(rawTransform, 1, 'pipeThrough'); var transform = convertReadableWritablePair(rawTransform, 'First parameter'); var options = convertPipeOptions(rawOptions, 'Second parameter'); if (IsReadableStreamLocked(this)) { throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream'); } if (IsWritableStreamLocked(transform.writable)) { throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream'); } var promise = ReadableStreamPipeTo(this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal); setPromiseIsHandledToTrue(promise); return transform.readable; }; ReadableStream.prototype.pipeTo = function (destination, rawOptions) { if (rawOptions === void 0) { rawOptions = {}; } if (!IsReadableStream(this)) { return promiseRejectedWith(streamBrandCheckException$1('pipeTo')); } if (destination === undefined) { return promiseRejectedWith("Parameter 1 is required in 'pipeTo'."); } if (!IsWritableStream(destination)) { return promiseRejectedWith(new TypeError("ReadableStream.prototype.pipeTo's first argument must be a WritableStream")); } var options; try { options = convertPipeOptions(rawOptions, 'Second parameter'); } catch (e) { return promiseRejectedWith(e); } if (IsReadableStreamLocked(this)) { return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')); } if (IsWritableStreamLocked(destination)) { return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')); } return ReadableStreamPipeTo(this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal); }; ReadableStream.prototype.tee = function () { if (!IsReadableStream(this)) { throw streamBrandCheckException$1('tee'); } var branches = ReadableStreamTee(this); return CreateArrayFromList(branches); }; ReadableStream.prototype.values = function (rawOptions) { if (rawOptions === void 0) { rawOptions = undefined; } if (!IsReadableStream(this)) { throw streamBrandCheckException$1('values'); } var options = convertIteratorOptions(rawOptions, 'First parameter'); return AcquireReadableStreamAsyncIterator(this, options.preventCancel); }; return ReadableStream; }(); Object.defineProperties(ReadableStream.prototype, { cancel: { enumerable: true }, getReader: { enumerable: true }, pipeThrough: { enumerable: true }, pipeTo: { enumerable: true }, tee: { enumerable: true }, values: { enumerable: true }, locked: { enumerable: true } }); if (typeof SymbolPolyfill.toStringTag === 'symbol') { Object.defineProperty(ReadableStream.prototype, SymbolPolyfill.toStringTag, { value: 'ReadableStream', configurable: true }); } if (typeof SymbolPolyfill.asyncIterator === 'symbol') { Object.defineProperty(ReadableStream.prototype, SymbolPolyfill.asyncIterator, { value: ReadableStream.prototype.values, writable: true, configurable: true }); } function CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm) { if (highWaterMark === void 0) { highWaterMark = 1; } if (sizeAlgorithm === void 0) { sizeAlgorithm = function () { return 1; }; } var stream = Object.create(ReadableStream.prototype); InitializeReadableStream(stream); var controller = Object.create(ReadableStreamDefaultController.prototype); SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm); return stream; } function InitializeReadableStream(stream) { stream._state = 'readable'; stream._reader = undefined; stream._storedError = undefined; stream._disturbed = false; } function IsReadableStream(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) { return false; } return true; } function IsReadableStreamLocked(stream) { if (stream._reader === undefined) { return false; } return true; } function ReadableStreamCancel(stream, reason) { stream._disturbed = true; if (stream._state === 'closed') { return promiseResolvedWith(undefined); } if (stream._state === 'errored') { return promiseRejectedWith(stream._storedError); } ReadableStreamClose(stream); var sourceCancelPromise = stream._readableStreamController[CancelSteps](reason); return transformPromiseWith(sourceCancelPromise, noop); } function ReadableStreamClose(stream) { stream._state = 'closed'; var reader = stream._reader; if (reader === undefined) { return; } if (IsReadableStreamDefaultReader(reader)) { reader._readRequests.forEach(function (readRequest) { readRequest._closeSteps(); }); reader._readRequests = new SimpleQueue(); } defaultReaderClosedPromiseResolve(reader); } function ReadableStreamError(stream, e) { stream._state = 'errored'; stream._storedError = e; var reader = stream._reader; if (reader === undefined) { return; } if (IsReadableStreamDefaultReader(reader)) { reader._readRequests.forEach(function (readRequest) { readRequest._errorSteps(e); }); reader._readRequests = new SimpleQueue(); } else { reader._readIntoRequests.forEach(function (readIntoRequest) { readIntoRequest._errorSteps(e); }); reader._readIntoRequests = new SimpleQueue(); } defaultReaderClosedPromiseReject(reader, e); } function streamBrandCheckException$1(name) { return new TypeError("ReadableStream.prototype." + name + " can only be used on a ReadableStream"); } function convertQueuingStrategyInit(init, context) { assertDictionary(init, context); var highWaterMark = init === null || init === void 0 ? void 0 : init.highWaterMark; assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit'); return { highWaterMark: convertUnrestrictedDouble(highWaterMark) }; } var byteLengthSizeFunction = function size(chunk) { return chunk.byteLength; }; var ByteLengthQueuingStrategy = function () { function ByteLengthQueuingStrategy(options) { assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy'); options = convertQueuingStrategyInit(options, 'First parameter'); this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark; } Object.defineProperty(ByteLengthQueuingStrategy.prototype, "highWaterMark", { get: function () { if (!IsByteLengthQueuingStrategy(this)) { throw byteLengthBrandCheckException('highWaterMark'); } return this._byteLengthQueuingStrategyHighWaterMark; }, enumerable: false, configurable: true }); Object.defineProperty(ByteLengthQueuingStrategy.prototype, "size", { get: function () { if (!IsByteLengthQueuingStrategy(this)) { throw byteLengthBrandCheckException('size'); } return byteLengthSizeFunction; }, enumerable: false, configurable: true }); return ByteLengthQueuingStrategy; }(); Object.defineProperties(ByteLengthQueuingStrategy.prototype, { highWaterMark: { enumerable: true }, size: { enumerable: true } }); if (typeof SymbolPolyfill.toStringTag === 'symbol') { Object.defineProperty(ByteLengthQueuingStrategy.prototype, SymbolPolyfill.toStringTag, { value: 'ByteLengthQueuingStrategy', configurable: true }); } function byteLengthBrandCheckException(name) { return new TypeError("ByteLengthQueuingStrategy.prototype." + name + " can only be used on a ByteLengthQueuingStrategy"); } function IsByteLengthQueuingStrategy(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) { return false; } return true; } var countSizeFunction = function size() { return 1; }; var CountQueuingStrategy = function () { function CountQueuingStrategy(options) { assertRequiredArgument(options, 1, 'CountQueuingStrategy'); options = convertQueuingStrategyInit(options, 'First parameter'); this._countQueuingStrategyHighWaterMark = options.highWaterMark; } Object.defineProperty(CountQueuingStrategy.prototype, "highWaterMark", { get: function () { if (!IsCountQueuingStrategy(this)) { throw countBrandCheckException('highWaterMark'); } return this._countQueuingStrategyHighWaterMark; }, enumerable: false, configurable: true }); Object.defineProperty(CountQueuingStrategy.prototype, "size", { get: function () { if (!IsCountQueuingStrategy(this)) { throw countBrandCheckException('size'); } return countSizeFunction; }, enumerable: false, configurable: true }); return CountQueuingStrategy; }(); Object.defineProperties(CountQueuingStrategy.prototype, { highWaterMark: { enumerable: true }, size: { enumerable: true } }); if (typeof SymbolPolyfill.toStringTag === 'symbol') { Object.defineProperty(CountQueuingStrategy.prototype, SymbolPolyfill.toStringTag, { value: 'CountQueuingStrategy', configurable: true }); } function countBrandCheckException(name) { return new TypeError("CountQueuingStrategy.prototype." + name + " can only be used on a CountQueuingStrategy"); } function IsCountQueuingStrategy(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) { return false; } return true; } function convertTransformer(original, context) { assertDictionary(original, context); var flush = original === null || original === void 0 ? void 0 : original.flush; var readableType = original === null || original === void 0 ? void 0 : original.readableType; var start = original === null || original === void 0 ? void 0 : original.start; var transform = original === null || original === void 0 ? void 0 : original.transform; var writableType = original === null || original === void 0 ? void 0 : original.writableType; return { flush: flush === undefined ? undefined : convertTransformerFlushCallback(flush, original, context + " has member 'flush' that"), readableType: readableType, start: start === undefined ? undefined : convertTransformerStartCallback(start, original, context + " has member 'start' that"), transform: transform === undefined ? undefined : convertTransformerTransformCallback(transform, original, context + " has member 'transform' that"), writableType: writableType }; } function convertTransformerFlushCallback(fn, original, context) { assertFunction(fn, context); return function (controller) { return promiseCall(fn, original, [controller]); }; } function convertTransformerStartCallback(fn, original, context) { assertFunction(fn, context); return function (controller) { return reflectCall(fn, original, [controller]); }; } function convertTransformerTransformCallback(fn, original, context) { assertFunction(fn, context); return function (chunk, controller) { return promiseCall(fn, original, [ chunk, controller ]); }; } var TransformStream = function () { function TransformStream(rawTransformer, rawWritableStrategy, rawReadableStrategy) { if (rawTransformer === void 0) { rawTransformer = {}; } if (rawWritableStrategy === void 0) { rawWritableStrategy = {}; } if (rawReadableStrategy === void 0) { rawReadableStrategy = {}; } if (rawTransformer === undefined) { rawTransformer = null; } var writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter'); var readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter'); var transformer = convertTransformer(rawTransformer, 'First parameter'); if (transformer.readableType !== undefined) { throw new RangeError('Invalid readableType specified'); } if (transformer.writableType !== undefined) { throw new RangeError('Invalid writableType specified'); } var readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0); var readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy); var writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1); var writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy); var startPromise_resolve; var startPromise = newPromise(function (resolve) { startPromise_resolve = resolve; }); InitializeTransformStream(this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm); SetUpTransformStreamDefaultControllerFromTransformer(this, transformer); if (transformer.start !== undefined) { startPromise_resolve(transformer.start(this._transformStreamController)); } else { startPromise_resolve(undefined); } } Object.defineProperty(TransformStream.prototype, "readable", { get: function () { if (!IsTransformStream(this)) { throw streamBrandCheckException$2('readable'); } return this._readable; }, enumerable: false, configurable: true }); Object.defineProperty(TransformStream.prototype, "writable", { get: function () { if (!IsTransformStream(this)) { throw streamBrandCheckException$2('writable'); } return this._writable; }, enumerable: false, configurable: true }); return TransformStream; }(); Object.defineProperties(TransformStream.prototype, { readable: { enumerable: true }, writable: { enumerable: true } }); if (typeof SymbolPolyfill.toStringTag === 'symbol') { Object.defineProperty(TransformStream.prototype, SymbolPolyfill.toStringTag, { value: 'TransformStream', configurable: true }); } function InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm) { function startAlgorithm() { return startPromise; } function writeAlgorithm(chunk) { return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk); } function abortAlgorithm(reason) { return TransformStreamDefaultSinkAbortAlgorithm(stream, reason); } function closeAlgorithm() { return TransformStreamDefaultSinkCloseAlgorithm(stream); } stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, writableHighWaterMark, writableSizeAlgorithm); function pullAlgorithm() { return TransformStreamDefaultSourcePullAlgorithm(stream); } function cancelAlgorithm(reason) { TransformStreamErrorWritableAndUnblockWrite(stream, reason); return promiseResolvedWith(undefined); } stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark, readableSizeAlgorithm); stream._backpressure = undefined; stream._backpressureChangePromise = undefined; stream._backpressureChangePromise_resolve = undefined; TransformStreamSetBackpressure(stream, true); stream._transformStreamController = undefined; } function IsTransformStream(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) { return false; } return true; } function TransformStreamError(stream, e) { ReadableStreamDefaultControllerError(stream._readable._readableStreamController, e); TransformStreamErrorWritableAndUnblockWrite(stream, e); } function TransformStreamErrorWritableAndUnblockWrite(stream, e) { TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController); WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e); if (stream._backpressure) { TransformStreamSetBackpressure(stream, false); } } function TransformStreamSetBackpressure(stream, backpressure) { if (stream._backpressureChangePromise !== undefined) { stream._backpressureChangePromise_resolve(); } stream._backpressureChangePromise = newPromise(function (resolve) { stream._backpressureChangePromise_resolve = resolve; }); stream._backpressure = backpressure; } var TransformStreamDefaultController = function () { function TransformStreamDefaultController() { throw new TypeError('Illegal constructor'); } Object.defineProperty(TransformStreamDefaultController.prototype, "desiredSize", { get: function () { if (!IsTransformStreamDefaultController(this)) { throw defaultControllerBrandCheckException$1('desiredSize'); } var readableController = this._controlledTransformStream._readable._readableStreamController; return ReadableStreamDefaultControllerGetDesiredSize(readableController); }, enumerable: false, configurable: true }); TransformStreamDefaultController.prototype.enqueue = function (chunk) { if (chunk === void 0) { chunk = undefined; } if (!IsTransformStreamDefaultController(this)) { throw defaultControllerBrandCheckException$1('enqueue'); } TransformStreamDefaultControllerEnqueue(this, chunk); }; TransformStreamDefaultController.prototype.error = function (reason) { if (reason === void 0) { reason = undefined; } if (!IsTransformStreamDefaultController(this)) { throw defaultControllerBrandCheckException$1('error'); } TransformStreamDefaultControllerError(this, reason); }; TransformStreamDefaultController.prototype.terminate = function () { if (!IsTransformStreamDefaultController(this)) { throw defaultControllerBrandCheckException$1('terminate'); } TransformStreamDefaultControllerTerminate(this); }; return TransformStreamDefaultController; }(); Object.defineProperties(TransformStreamDefaultController.prototype, { enqueue: { enumerable: true }, error: { enumerable: true }, terminate: { enumerable: true }, desiredSize: { enumerable: true } }); if (typeof SymbolPolyfill.toStringTag === 'symbol') { Object.defineProperty(TransformStreamDefaultController.prototype, SymbolPolyfill.toStringTag, { value: 'TransformStreamDefaultController', configurable: true }); } function IsTransformStreamDefaultController(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) { return false; } return true; } function SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm) { controller._controlledTransformStream = stream; stream._transformStreamController = controller; controller._transformAlgorithm = transformAlgorithm; controller._flushAlgorithm = flushAlgorithm; } function SetUpTransformStreamDefaultControllerFromTransformer(stream, transformer) { var controller = Object.create(TransformStreamDefaultController.prototype); var transformAlgorithm = function (chunk) { try { TransformStreamDefaultControllerEnqueue(controller, chunk); return promiseResolvedWith(undefined); } catch (transformResultE) { return promiseRejectedWith(transformResultE); } }; var flushAlgorithm = function () { return promiseResolvedWith(undefined); }; if (transformer.transform !== undefined) { transformAlgorithm = function (chunk) { return transformer.transform(chunk, controller); }; } if (transformer.flush !== undefined) { flushAlgorithm = function () { return transformer.flush(controller); }; } SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm); } function TransformStreamDefaultControllerClearAlgorithms(controller) { controller._transformAlgorithm = undefined; controller._flushAlgorithm = undefined; } function TransformStreamDefaultControllerEnqueue(controller, chunk) { var stream = controller._controlledTransformStream; var readableController = stream._readable._readableStreamController; if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) { throw new TypeError('Readable side is not in a state that permits enqueue'); } try { ReadableStreamDefaultControllerEnqueue(readableController, chunk); } catch (e) { TransformStreamErrorWritableAndUnblockWrite(stream, e); throw stream._readable._storedError; } var backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController); if (backpressure !== stream._backpressure) { TransformStreamSetBackpressure(stream, true); } } function TransformStreamDefaultControllerError(controller, e) { TransformStreamError(controller._controlledTransformStream, e); } function TransformStreamDefaultControllerPerformTransform(controller, chunk) { var transformPromise = controller._transformAlgorithm(chunk); return transformPromiseWith(transformPromise, undefined, function (r) { TransformStreamError(controller._controlledTransformStream, r); throw r; }); } function TransformStreamDefaultControllerTerminate(controller) { var stream = controller._controlledTransformStream; var readableController = stream._readable._readableStreamController; ReadableStreamDefaultControllerClose(readableController); var error = new TypeError('TransformStream terminated'); TransformStreamErrorWritableAndUnblockWrite(stream, error); } function TransformStreamDefaultSinkWriteAlgorithm(stream, chunk) { var controller = stream._transformStreamController; if (stream._backpressure) { var backpressureChangePromise = stream._backpressureChangePromise; return transformPromiseWith(backpressureChangePromise, function () { var writable = stream._writable; var state = writable._state; if (state === 'erroring') { throw writable._storedError; } return TransformStreamDefaultControllerPerformTransform(controller, chunk); }); } return TransformStreamDefaultControllerPerformTransform(controller, chunk); } function TransformStreamDefaultSinkAbortAlgorithm(stream, reason) { TransformStreamError(stream, reason); return promiseResolvedWith(undefined); } function TransformStreamDefaultSinkCloseAlgorithm(stream) { var readable = stream._readable; var controller = stream._transformStreamController; var flushPromise = controller._flushAlgorithm(); TransformStreamDefaultControllerClearAlgorithms(controller); return transformPromiseWith(flushPromise, function () { if (readable._state === 'errored') { throw readable._storedError; } ReadableStreamDefaultControllerClose(readable._readableStreamController); }, function (r) { TransformStreamError(stream, r); throw readable._storedError; }); } function TransformStreamDefaultSourcePullAlgorithm(stream) { TransformStreamSetBackpressure(stream, false); return stream._backpressureChangePromise; } function defaultControllerBrandCheckException$1(name) { return new TypeError("TransformStreamDefaultController.prototype." + name + " can only be used on a TransformStreamDefaultController"); } function streamBrandCheckException$2(name) { return new TypeError("TransformStream.prototype." + name + " can only be used on a TransformStream"); } exports.ByteLengthQueuingStrategy = ByteLengthQueuingStrategy; exports.CountQueuingStrategy = CountQueuingStrategy; exports.ReadableByteStreamController = ReadableByteStreamController; exports.ReadableStream = ReadableStream; exports.ReadableStreamBYOBReader = ReadableStreamBYOBReader; exports.ReadableStreamBYOBRequest = ReadableStreamBYOBRequest; exports.ReadableStreamDefaultController = ReadableStreamDefaultController; exports.ReadableStreamDefaultReader = ReadableStreamDefaultReader; exports.TransformStream = TransformStream; exports.TransformStreamDefaultController = TransformStreamDefaultController; exports.WritableStream = WritableStream; exports.WritableStreamDefaultController = WritableStreamDefaultController; exports.WritableStreamDefaultWriter = WritableStreamDefaultWriter; Object.defineProperty(exports, '__esModule', { value: true }); })); /***/ }), /* 122 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { __w_pdfjs_require__(123); var entryUnbind = __w_pdfjs_require__(127); module.exports = entryUnbind('String', 'padStart'); /***/ }), /* 123 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var $ = __w_pdfjs_require__(9); var $padStart = __w_pdfjs_require__(124).start; var WEBKIT_BUG = __w_pdfjs_require__(126); $({ target: 'String', proto: true, forced: WEBKIT_BUG }, { padStart: function padStart(maxLength) { return $padStart(this, maxLength, arguments.length > 1 ? arguments[1] : undefined); } }); /***/ }), /* 124 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var toLength = __w_pdfjs_require__(46); var repeat = __w_pdfjs_require__(125); var requireObjectCoercible = __w_pdfjs_require__(19); var ceil = Math.ceil; var createMethod = function (IS_END) { return function ($this, maxLength, fillString) { var S = String(requireObjectCoercible($this)); var stringLength = S.length; var fillStr = fillString === undefined ? ' ' : String(fillString); var intMaxLength = toLength(maxLength); var fillLen, stringFiller; if (intMaxLength <= stringLength || fillStr == '') return S; fillLen = intMaxLength - stringLength; stringFiller = repeat.call(fillStr, ceil(fillLen / fillStr.length)); if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen); return IS_END ? S + stringFiller : stringFiller + S; }; }; module.exports = { start: createMethod(false), end: createMethod(true) }; /***/ }), /* 125 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var toInteger = __w_pdfjs_require__(47); var requireObjectCoercible = __w_pdfjs_require__(19); module.exports = ''.repeat || function repeat(count) { var str = String(requireObjectCoercible(this)); var result = ''; var n = toInteger(count); if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions'); for (; n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str; return result; }; /***/ }), /* 126 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var userAgent = __w_pdfjs_require__(95); module.exports = /Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(userAgent); /***/ }), /* 127 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var global = __w_pdfjs_require__(10); var bind = __w_pdfjs_require__(75); var call = Function.call; module.exports = function (CONSTRUCTOR, METHOD, length) { return bind(call, global[CONSTRUCTOR].prototype[METHOD], length); }; /***/ }), /* 128 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { __w_pdfjs_require__(129); var entryUnbind = __w_pdfjs_require__(127); module.exports = entryUnbind('String', 'padEnd'); /***/ }), /* 129 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { "use strict"; var $ = __w_pdfjs_require__(9); var $padEnd = __w_pdfjs_require__(124).end; var WEBKIT_BUG = __w_pdfjs_require__(126); $({ target: 'String', proto: true, forced: WEBKIT_BUG }, { padEnd: function padEnd(maxLength) { return $padEnd(this, maxLength, arguments.length > 1 ? arguments[1] : undefined); } }); /***/ }), /* 130 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { __w_pdfjs_require__(131); var path = __w_pdfjs_require__(42); module.exports = path.Object.values; /***/ }), /* 131 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { var $ = __w_pdfjs_require__(9); var $values = __w_pdfjs_require__(132).values; $({ target: 'Object', stat: true }, { values: function values(O) { return $values(O); } }); /***/ }), /* 132 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { var DESCRIPTORS = __w_pdfjs_require__(12); var objectKeys = __w_pdfjs_require__(60); var toIndexedObject = __w_pdfjs_require__(16); var propertyIsEnumerable = __w_pdfjs_require__(14).f; var createMethod = function (TO_ENTRIES) { return function (it) { var O = toIndexedObject(it); var keys = objectKeys(O); var length = keys.length; var i = 0; var result = []; var key; while (length > i) { key = keys[i++]; if (!DESCRIPTORS || propertyIsEnumerable.call(O, key)) { result.push(TO_ENTRIES ? [ key, O[key] ] : O[key]); } } return result; }; }; module.exports = { entries: createMethod(true), values: createMethod(false) }; /***/ }), /* 133 */ /***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { __w_pdfjs_require__(134); var path = __w_pdfjs_require__(42); module.exports = path.Object.entries; /***/ }), /* 134 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { var $ = __w_pdfjs_require__(9); var $entries = __w_pdfjs_require__(132).entries; $({ target: 'Object', stat: true }, { entries: function entries(O) { return $entries(O); } }); /***/ }), /* 135 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.clearPrimitiveCaches = clearPrimitiveCaches; exports.isCmd = isCmd; exports.isDict = isDict; exports.isEOF = isEOF; exports.isName = isName; exports.isRef = isRef; exports.isRefsEqual = isRefsEqual; exports.isStream = isStream; exports.RefSetCache = exports.RefSet = exports.Ref = exports.Name = exports.EOF = exports.Dict = exports.Cmd = void 0; var _regenerator = _interopRequireDefault(__w_pdfjs_require__(2)); var _util = __w_pdfjs_require__(4); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } var EOF = {}; exports.EOF = EOF; var Name = function NameClosure() { var nameCache = Object.create(null); function Name(name) { this.name = name; } Name.prototype = {}; Name.get = function Name_get(name) { var nameValue = nameCache[name]; return nameValue ? nameValue : nameCache[name] = new Name(name); }; Name._clearCache = function () { nameCache = Object.create(null); }; return Name; }(); exports.Name = Name; var Cmd = function CmdClosure() { var cmdCache = Object.create(null); function Cmd(cmd) { this.cmd = cmd; } Cmd.prototype = {}; Cmd.get = function Cmd_get(cmd) { var cmdValue = cmdCache[cmd]; return cmdValue ? cmdValue : cmdCache[cmd] = new Cmd(cmd); }; Cmd._clearCache = function () { cmdCache = Object.create(null); }; return Cmd; }(); exports.Cmd = Cmd; var Dict = function DictClosure() { var nonSerializable = function nonSerializableClosure() { return nonSerializable; }; function Dict(xref) { this._map = Object.create(null); this.xref = xref; this.objId = null; this.suppressEncryption = false; this.__nonSerializable__ = nonSerializable; } Dict.prototype = { assignXref: function Dict_assignXref(newXref) { this.xref = newXref; }, get size() { return Object.keys(this._map).length; }, get: function get(key1, key2, key3) { var value = this._map[key1]; if (value === undefined && key2 !== undefined) { value = this._map[key2]; if (value === undefined && key3 !== undefined) { value = this._map[key3]; } } if (value instanceof Ref && this.xref) { return this.xref.fetch(value, this.suppressEncryption); } return value; }, getAsync: function getAsync(key1, key2, key3) { var _this = this; return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() { var value; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: value = _this._map[key1]; if (value === undefined && key2 !== undefined) { value = _this._map[key2]; if (value === undefined && key3 !== undefined) { value = _this._map[key3]; } } if (!(value instanceof Ref && _this.xref)) { _context.next = 4; break; } return _context.abrupt("return", _this.xref.fetchAsync(value, _this.suppressEncryption)); case 4: return _context.abrupt("return", value); case 5: case "end": return _context.stop(); } } }, _callee); }))(); }, getArray: function getArray(key1, key2, key3) { var value = this.get(key1, key2, key3); if (!Array.isArray(value) || !this.xref) { return value; } value = value.slice(); for (var i = 0, ii = value.length; i < ii; i++) { if (!(value[i] instanceof Ref)) { continue; } value[i] = this.xref.fetch(value[i], this.suppressEncryption); } return value; }, getRaw: function Dict_getRaw(key) { return this._map[key]; }, getKeys: function Dict_getKeys() { return Object.keys(this._map); }, getRawValues: function Dict_getRawValues() { return Object.values(this._map); }, set: function Dict_set(key, value) { this._map[key] = value; }, has: function Dict_has(key) { return this._map[key] !== undefined; }, forEach: function Dict_forEach(callback) { for (var key in this._map) { callback(key, this.get(key)); } } }; Dict.empty = function () { var emptyDict = new Dict(null); emptyDict.set = function (key, value) { (0, _util.unreachable)("Should not call `set` on the empty dictionary."); }; return emptyDict; }(); Dict.merge = function (_ref) { var xref = _ref.xref, dictArray = _ref.dictArray, _ref$mergeSubDicts = _ref.mergeSubDicts, mergeSubDicts = _ref$mergeSubDicts === void 0 ? false : _ref$mergeSubDicts; var mergedDict = new Dict(xref); if (!mergeSubDicts) { var _iterator = _createForOfIteratorHelper(dictArray), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var dict = _step.value; if (!(dict instanceof Dict)) { continue; } for (var _i = 0, _Object$entries = Object.entries(dict._map); _i < _Object$entries.length; _i++) { var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2), key = _Object$entries$_i[0], value = _Object$entries$_i[1]; if (mergedDict._map[key] === undefined) { mergedDict._map[key] = value; } } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } return mergedDict.size > 0 ? mergedDict : Dict.empty; } var properties = new Map(); var _iterator2 = _createForOfIteratorHelper(dictArray), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var _dict = _step2.value; if (!(_dict instanceof Dict)) { continue; } for (var _i2 = 0, _Object$entries2 = Object.entries(_dict._map); _i2 < _Object$entries2.length; _i2++) { var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i2], 2), _key = _Object$entries2$_i[0], _value = _Object$entries2$_i[1]; var property = properties.get(_key); if (property === undefined) { property = []; properties.set(_key, property); } property.push(_value); } } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } var _iterator3 = _createForOfIteratorHelper(properties), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var _step3$value = _slicedToArray(_step3.value, 2), name = _step3$value[0], values = _step3$value[1]; if (values.length === 1 || !(values[0] instanceof Dict)) { mergedDict._map[name] = values[0]; continue; } var subDict = new Dict(xref); var _iterator4 = _createForOfIteratorHelper(values), _step4; try { for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { var _dict2 = _step4.value; if (!(_dict2 instanceof Dict)) { continue; } for (var _i3 = 0, _Object$entries3 = Object.entries(_dict2._map); _i3 < _Object$entries3.length; _i3++) { var _Object$entries3$_i = _slicedToArray(_Object$entries3[_i3], 2), _key2 = _Object$entries3$_i[0], _value2 = _Object$entries3$_i[1]; if (subDict._map[_key2] === undefined) { subDict._map[_key2] = _value2; } } } } catch (err) { _iterator4.e(err); } finally { _iterator4.f(); } if (subDict.size > 0) { mergedDict._map[name] = subDict; } } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } properties.clear(); return mergedDict.size > 0 ? mergedDict : Dict.empty; }; return Dict; }(); exports.Dict = Dict; var Ref = function RefClosure() { var refCache = Object.create(null); function Ref(num, gen) { this.num = num; this.gen = gen; } Ref.prototype = { toString: function Ref_toString() { if (this.gen === 0) { return "".concat(this.num, "R"); } return "".concat(this.num, "R").concat(this.gen); } }; Ref.get = function (num, gen) { var key = gen === 0 ? "".concat(num, "R") : "".concat(num, "R").concat(gen); var refValue = refCache[key]; return refValue ? refValue : refCache[key] = new Ref(num, gen); }; Ref._clearCache = function () { refCache = Object.create(null); }; return Ref; }(); exports.Ref = Ref; var RefSet = /*#__PURE__*/function () { function RefSet() { var parent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; _classCallCheck(this, RefSet); this._set = new Set(parent && parent._set); } _createClass(RefSet, [{ key: "has", value: function has(ref) { return this._set.has(ref.toString()); } }, { key: "put", value: function put(ref) { this._set.add(ref.toString()); } }, { key: "remove", value: function remove(ref) { this._set["delete"](ref.toString()); } }, { key: "forEach", value: function forEach(callback) { var _iterator5 = _createForOfIteratorHelper(this._set.values()), _step5; try { for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { var ref = _step5.value; callback(ref); } } catch (err) { _iterator5.e(err); } finally { _iterator5.f(); } } }, { key: "clear", value: function clear() { this._set.clear(); } }]); return RefSet; }(); exports.RefSet = RefSet; var RefSetCache = /*#__PURE__*/function () { function RefSetCache() { _classCallCheck(this, RefSetCache); this._map = new Map(); } _createClass(RefSetCache, [{ key: "size", get: function get() { return this._map.size; } }, { key: "get", value: function get(ref) { return this._map.get(ref.toString()); } }, { key: "has", value: function has(ref) { return this._map.has(ref.toString()); } }, { key: "put", value: function put(ref, obj) { this._map.set(ref.toString(), obj); } }, { key: "putAlias", value: function putAlias(ref, aliasRef) { this._map.set(ref.toString(), this.get(aliasRef)); } }, { key: "forEach", value: function forEach(callback) { var _iterator6 = _createForOfIteratorHelper(this._map.values()), _step6; try { for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) { var value = _step6.value; callback(value); } } catch (err) { _iterator6.e(err); } finally { _iterator6.f(); } } }, { key: "clear", value: function clear() { this._map.clear(); } }]); return RefSetCache; }(); exports.RefSetCache = RefSetCache; function isEOF(v) { return v === EOF; } function isName(v, name) { return v instanceof Name && (name === undefined || v.name === name); } function isCmd(v, cmd) { return v instanceof Cmd && (cmd === undefined || v.cmd === cmd); } function isDict(v, type) { return v instanceof Dict && (type === undefined || isName(v.get("Type"), type)); } function isRef(v) { return v instanceof Ref; } function isRefsEqual(v1, v2) { return v1.num === v2.num && v1.gen === v2.gen; } function isStream(v) { return _typeof(v) === "object" && v !== null && v.getBytes !== undefined; } function clearPrimitiveCaches() { Cmd._clearCache(); Name._clearCache(); Ref._clearCache(); } /***/ }), /* 136 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", ({ value: true })); exports.NetworkPdfManager = exports.LocalPdfManager = void 0; var _regenerator = _interopRequireDefault(__w_pdfjs_require__(2)); var _util = __w_pdfjs_require__(4); var _chunked_stream = __w_pdfjs_require__(137); var _core_utils = __w_pdfjs_require__(138); var _document = __w_pdfjs_require__(139); var _stream = __w_pdfjs_require__(142); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var BasePdfManager = /*#__PURE__*/function () { function BasePdfManager() { _classCallCheck(this, BasePdfManager); if (this.constructor === BasePdfManager) { (0, _util.unreachable)("Cannot initialize BasePdfManager."); } } _createClass(BasePdfManager, [{ key: "docId", get: function get() { return this._docId; } }, { key: "password", get: function get() { return this._password; } }, { key: "docBaseUrl", get: function get() { var docBaseUrl = null; if (this._docBaseUrl) { var absoluteUrl = (0, _util.createValidAbsoluteUrl)(this._docBaseUrl); if (absoluteUrl) { docBaseUrl = absoluteUrl.href; } else { (0, _util.warn)("Invalid absolute docBaseUrl: \"".concat(this._docBaseUrl, "\".")); } } return (0, _util.shadow)(this, "docBaseUrl", docBaseUrl); } }, { key: "onLoadedStream", value: function onLoadedStream() { (0, _util.unreachable)("Abstract method `onLoadedStream` called"); } }, { key: "ensureDoc", value: function ensureDoc(prop, args) { return this.ensure(this.pdfDocument, prop, args); } }, { key: "ensureXRef", value: function ensureXRef(prop, args) { return this.ensure(this.pdfDocument.xref, prop, args); } }, { key: "ensureCatalog", value: function ensureCatalog(prop, args) { return this.ensure(this.pdfDocument.catalog, prop, args); } }, { key: "getPage", value: function getPage(pageIndex) { return this.pdfDocument.getPage(pageIndex); } }, { key: "fontFallback", value: function fontFallback(id, handler) { return this.pdfDocument.fontFallback(id, handler); } }, { key: "cleanup", value: function cleanup() { var manuallyTriggered = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; return this.pdfDocument.cleanup(manuallyTriggered); } }, { key: "ensure", value: function () { var _ensure = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(obj, prop, args) { return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: (0, _util.unreachable)("Abstract method `ensure` called"); case 1: case "end": return _context.stop(); } } }, _callee); })); function ensure(_x, _x2, _x3) { return _ensure.apply(this, arguments); } return ensure; }() }, { key: "requestRange", value: function requestRange(begin, end) { (0, _util.unreachable)("Abstract method `requestRange` called"); } }, { key: "requestLoadedStream", value: function requestLoadedStream() { (0, _util.unreachable)("Abstract method `requestLoadedStream` called"); } }, { key: "sendProgressiveData", value: function sendProgressiveData(chunk) { (0, _util.unreachable)("Abstract method `sendProgressiveData` called"); } }, { key: "updatePassword", value: function updatePassword(password) { this._password = password; } }, { key: "terminate", value: function terminate(reason) { (0, _util.unreachable)("Abstract method `terminate` called"); } }]); return BasePdfManager; }(); var LocalPdfManager = /*#__PURE__*/function (_BasePdfManager) { _inherits(LocalPdfManager, _BasePdfManager); var _super = _createSuper(LocalPdfManager); function LocalPdfManager(docId, data, password, evaluatorOptions, docBaseUrl) { var _this; _classCallCheck(this, LocalPdfManager); _this = _super.call(this); _this._docId = docId; _this._password = password; _this._docBaseUrl = docBaseUrl; _this.evaluatorOptions = evaluatorOptions; var stream = new _stream.Stream(data); _this.pdfDocument = new _document.PDFDocument(_assertThisInitialized(_this), stream); _this._loadedStreamPromise = Promise.resolve(stream); return _this; } _createClass(LocalPdfManager, [{ key: "ensure", value: function () { var _ensure2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2(obj, prop, args) { var value; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: value = obj[prop]; if (!(typeof value === "function")) { _context2.next = 3; break; } return _context2.abrupt("return", value.apply(obj, args)); case 3: return _context2.abrupt("return", value); case 4: case "end": return _context2.stop(); } } }, _callee2); })); function ensure(_x4, _x5, _x6) { return _ensure2.apply(this, arguments); } return ensure; }() }, { key: "requestRange", value: function requestRange(begin, end) { return Promise.resolve(); } }, { key: "requestLoadedStream", value: function requestLoadedStream() {} }, { key: "onLoadedStream", value: function onLoadedStream() { return this._loadedStreamPromise; } }, { key: "terminate", value: function terminate(reason) {} }]); return LocalPdfManager; }(BasePdfManager); exports.LocalPdfManager = LocalPdfManager; var NetworkPdfManager = /*#__PURE__*/function (_BasePdfManager2) { _inherits(NetworkPdfManager, _BasePdfManager2); var _super2 = _createSuper(NetworkPdfManager); function NetworkPdfManager(docId, pdfNetworkStream, args, evaluatorOptions, docBaseUrl) { var _this2; _classCallCheck(this, NetworkPdfManager); _this2 = _super2.call(this); _this2._docId = docId; _this2._password = args.password; _this2._docBaseUrl = docBaseUrl; _this2.msgHandler = args.msgHandler; _this2.evaluatorOptions = evaluatorOptions; _this2.streamManager = new _chunked_stream.ChunkedStreamManager(pdfNetworkStream, { msgHandler: args.msgHandler, length: args.length, disableAutoFetch: args.disableAutoFetch, rangeChunkSize: args.rangeChunkSize }); _this2.pdfDocument = new _document.PDFDocument(_assertThisInitialized(_this2), _this2.streamManager.getStream()); return _this2; } _createClass(NetworkPdfManager, [{ key: "ensure", value: function () { var _ensure3 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee3(obj, prop, args) { var value; return _regenerator["default"].wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: _context3.prev = 0; value = obj[prop]; if (!(typeof value === "function")) { _context3.next = 4; break; } return _context3.abrupt("return", value.apply(obj, args)); case 4: return _context3.abrupt("return", value); case 7: _context3.prev = 7; _context3.t0 = _context3["catch"](0); if (_context3.t0 instanceof _core_utils.MissingDataException) { _context3.next = 11; break; } throw _context3.t0; case 11: _context3.next = 13; return this.requestRange(_context3.t0.begin, _context3.t0.end); case 13: return _context3.abrupt("return", this.ensure(obj, prop, args)); case 14: case "end": return _context3.stop(); } } }, _callee3, this, [[0, 7]]); })); function ensure(_x7, _x8, _x9) { return _ensure3.apply(this, arguments); } return ensure; }() }, { key: "requestRange", value: function requestRange(begin, end) { return this.streamManager.requestRange(begin, end); } }, { key: "requestLoadedStream", value: function requestLoadedStream() { this.streamManager.requestAllChunks(); } }, { key: "sendProgressiveData", value: function sendProgressiveData(chunk) { this.streamManager.onReceiveData({ chunk: chunk }); } }, { key: "onLoadedStream", value: function onLoadedStream() { return this.streamManager.onLoadedStream(); } }, { key: "terminate", value: function terminate(reason) { this.streamManager.abort(reason); } }]); return NetworkPdfManager; }(BasePdfManager); exports.NetworkPdfManager = NetworkPdfManager; /***/ }), /* 137 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ChunkedStreamManager = exports.ChunkedStream = void 0; var _util = __w_pdfjs_require__(4); var _core_utils = __w_pdfjs_require__(138); function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var ChunkedStream = /*#__PURE__*/function () { function ChunkedStream(length, chunkSize, manager) { _classCallCheck(this, ChunkedStream); this.bytes = new Uint8Array(length); this.start = 0; this.pos = 0; this.end = length; this.chunkSize = chunkSize; this._loadedChunks = new Set(); this.numChunks = Math.ceil(length / chunkSize); this.manager = manager; this.progressiveDataLength = 0; this.lastSuccessfulEnsureByteChunk = -1; } _createClass(ChunkedStream, [{ key: "getMissingChunks", value: function getMissingChunks() { var chunks = []; for (var chunk = 0, n = this.numChunks; chunk < n; ++chunk) { if (!this._loadedChunks.has(chunk)) { chunks.push(chunk); } } return chunks; } }, { key: "getBaseStreams", value: function getBaseStreams() { return [this]; } }, { key: "numChunksLoaded", get: function get() { return this._loadedChunks.size; } }, { key: "allChunksLoaded", value: function allChunksLoaded() { return this.numChunksLoaded === this.numChunks; } }, { key: "onReceiveData", value: function onReceiveData(begin, chunk) { var chunkSize = this.chunkSize; if (begin % chunkSize !== 0) { throw new Error("Bad begin offset: ".concat(begin)); } var end = begin + chunk.byteLength; if (end % chunkSize !== 0 && end !== this.bytes.length) { throw new Error("Bad end offset: ".concat(end)); } this.bytes.set(new Uint8Array(chunk), begin); var beginChunk = Math.floor(begin / chunkSize); var endChunk = Math.floor((end - 1) / chunkSize) + 1; for (var curChunk = beginChunk; curChunk < endChunk; ++curChunk) { this._loadedChunks.add(curChunk); } } }, { key: "onReceiveProgressiveData", value: function onReceiveProgressiveData(data) { var position = this.progressiveDataLength; var beginChunk = Math.floor(position / this.chunkSize); this.bytes.set(new Uint8Array(data), position); position += data.byteLength; this.progressiveDataLength = position; var endChunk = position >= this.end ? this.numChunks : Math.floor(position / this.chunkSize); for (var curChunk = beginChunk; curChunk < endChunk; ++curChunk) { this._loadedChunks.add(curChunk); } } }, { key: "ensureByte", value: function ensureByte(pos) { if (pos < this.progressiveDataLength) { return; } var chunk = Math.floor(pos / this.chunkSize); if (chunk === this.lastSuccessfulEnsureByteChunk) { return; } if (!this._loadedChunks.has(chunk)) { throw new _core_utils.MissingDataException(pos, pos + 1); } this.lastSuccessfulEnsureByteChunk = chunk; } }, { key: "ensureRange", value: function ensureRange(begin, end) { if (begin >= end) { return; } if (end <= this.progressiveDataLength) { return; } var chunkSize = this.chunkSize; var beginChunk = Math.floor(begin / chunkSize); var endChunk = Math.floor((end - 1) / chunkSize) + 1; for (var chunk = beginChunk; chunk < endChunk; ++chunk) { if (!this._loadedChunks.has(chunk)) { throw new _core_utils.MissingDataException(begin, end); } } } }, { key: "nextEmptyChunk", value: function nextEmptyChunk(beginChunk) { var numChunks = this.numChunks; for (var i = 0; i < numChunks; ++i) { var chunk = (beginChunk + i) % numChunks; if (!this._loadedChunks.has(chunk)) { return chunk; } } return null; } }, { key: "hasChunk", value: function hasChunk(chunk) { return this._loadedChunks.has(chunk); } }, { key: "length", get: function get() { return this.end - this.start; } }, { key: "isEmpty", get: function get() { return this.length === 0; } }, { key: "getByte", value: function getByte() { var pos = this.pos; if (pos >= this.end) { return -1; } if (pos >= this.progressiveDataLength) { this.ensureByte(pos); } return this.bytes[this.pos++]; } }, { key: "getUint16", value: function getUint16() { var b0 = this.getByte(); var b1 = this.getByte(); if (b0 === -1 || b1 === -1) { return -1; } return (b0 << 8) + b1; } }, { key: "getInt32", value: function getInt32() { var b0 = this.getByte(); var b1 = this.getByte(); var b2 = this.getByte(); var b3 = this.getByte(); return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; } }, { key: "getBytes", value: function getBytes(length) { var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var bytes = this.bytes; var pos = this.pos; var strEnd = this.end; if (!length) { if (strEnd > this.progressiveDataLength) { this.ensureRange(pos, strEnd); } var _subarray = bytes.subarray(pos, strEnd); return forceClamped ? new Uint8ClampedArray(_subarray) : _subarray; } var end = pos + length; if (end > strEnd) { end = strEnd; } if (end > this.progressiveDataLength) { this.ensureRange(pos, end); } this.pos = end; var subarray = bytes.subarray(pos, end); return forceClamped ? new Uint8ClampedArray(subarray) : subarray; } }, { key: "peekByte", value: function peekByte() { var peekedByte = this.getByte(); if (peekedByte !== -1) { this.pos--; } return peekedByte; } }, { key: "peekBytes", value: function peekBytes(length) { var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var bytes = this.getBytes(length, forceClamped); this.pos -= bytes.length; return bytes; } }, { key: "getByteRange", value: function getByteRange(begin, end) { if (begin < 0) { begin = 0; } if (end > this.end) { end = this.end; } if (end > this.progressiveDataLength) { this.ensureRange(begin, end); } return this.bytes.subarray(begin, end); } }, { key: "skip", value: function skip(n) { if (!n) { n = 1; } this.pos += n; } }, { key: "reset", value: function reset() { this.pos = this.start; } }, { key: "moveStart", value: function moveStart() { this.start = this.pos; } }, { key: "makeSubStream", value: function makeSubStream(start, length, dict) { if (length) { if (start + length > this.progressiveDataLength) { this.ensureRange(start, start + length); } } else { if (start >= this.progressiveDataLength) { this.ensureByte(start); } } function ChunkedStreamSubstream() {} ChunkedStreamSubstream.prototype = Object.create(this); ChunkedStreamSubstream.prototype.getMissingChunks = function () { var chunkSize = this.chunkSize; var beginChunk = Math.floor(this.start / chunkSize); var endChunk = Math.floor((this.end - 1) / chunkSize) + 1; var missingChunks = []; for (var chunk = beginChunk; chunk < endChunk; ++chunk) { if (!this._loadedChunks.has(chunk)) { missingChunks.push(chunk); } } return missingChunks; }; ChunkedStreamSubstream.prototype.allChunksLoaded = function () { if (this.numChunksLoaded === this.numChunks) { return true; } return this.getMissingChunks().length === 0; }; var subStream = new ChunkedStreamSubstream(); subStream.pos = subStream.start = start; subStream.end = start + length || this.end; subStream.dict = dict; return subStream; } }]); return ChunkedStream; }(); exports.ChunkedStream = ChunkedStream; var ChunkedStreamManager = /*#__PURE__*/function () { function ChunkedStreamManager(pdfNetworkStream, args) { _classCallCheck(this, ChunkedStreamManager); this.length = args.length; this.chunkSize = args.rangeChunkSize; this.stream = new ChunkedStream(this.length, this.chunkSize, this); this.pdfNetworkStream = pdfNetworkStream; this.disableAutoFetch = args.disableAutoFetch; this.msgHandler = args.msgHandler; this.currRequestId = 0; this._chunksNeededByRequest = new Map(); this._requestsByChunk = new Map(); this._promisesByRequest = new Map(); this.progressiveDataLength = 0; this.aborted = false; this._loadedStreamCapability = (0, _util.createPromiseCapability)(); } _createClass(ChunkedStreamManager, [{ key: "onLoadedStream", value: function onLoadedStream() { return this._loadedStreamCapability.promise; } }, { key: "sendRequest", value: function sendRequest(begin, end) { var _this = this; var rangeReader = this.pdfNetworkStream.getRangeReader(begin, end); if (!rangeReader.isStreamingSupported) { rangeReader.onProgress = this.onProgress.bind(this); } var chunks = [], loaded = 0; var promise = new Promise(function (resolve, reject) { var readChunk = function readChunk(chunk) { try { if (!chunk.done) { var data = chunk.value; chunks.push(data); loaded += (0, _util.arrayByteLength)(data); if (rangeReader.isStreamingSupported) { _this.onProgress({ loaded: loaded }); } rangeReader.read().then(readChunk, reject); return; } var chunkData = (0, _util.arraysToBytes)(chunks); chunks = null; resolve(chunkData); } catch (e) { reject(e); } }; rangeReader.read().then(readChunk, reject); }); promise.then(function (data) { if (_this.aborted) { return; } _this.onReceiveData({ chunk: data, begin: begin }); }); } }, { key: "requestAllChunks", value: function requestAllChunks() { var missingChunks = this.stream.getMissingChunks(); this._requestChunks(missingChunks); return this._loadedStreamCapability.promise; } }, { key: "_requestChunks", value: function _requestChunks(chunks) { var _this2 = this; var requestId = this.currRequestId++; var chunksNeeded = new Set(); this._chunksNeededByRequest.set(requestId, chunksNeeded); var _iterator = _createForOfIteratorHelper(chunks), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var chunk = _step.value; if (!this.stream.hasChunk(chunk)) { chunksNeeded.add(chunk); } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } if (chunksNeeded.size === 0) { return Promise.resolve(); } var capability = (0, _util.createPromiseCapability)(); this._promisesByRequest.set(requestId, capability); var chunksToRequest = []; var _iterator2 = _createForOfIteratorHelper(chunksNeeded), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var _chunk = _step2.value; var requestIds = this._requestsByChunk.get(_chunk); if (!requestIds) { requestIds = []; this._requestsByChunk.set(_chunk, requestIds); chunksToRequest.push(_chunk); } requestIds.push(requestId); } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } if (chunksToRequest.length > 0) { var groupedChunksToRequest = this.groupChunks(chunksToRequest); var _iterator3 = _createForOfIteratorHelper(groupedChunksToRequest), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var groupedChunk = _step3.value; var begin = groupedChunk.beginChunk * this.chunkSize; var end = Math.min(groupedChunk.endChunk * this.chunkSize, this.length); this.sendRequest(begin, end); } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } } return capability.promise["catch"](function (reason) { if (_this2.aborted) { return; } throw reason; }); } }, { key: "getStream", value: function getStream() { return this.stream; } }, { key: "requestRange", value: function requestRange(begin, end) { end = Math.min(end, this.length); var beginChunk = this.getBeginChunk(begin); var endChunk = this.getEndChunk(end); var chunks = []; for (var chunk = beginChunk; chunk < endChunk; ++chunk) { chunks.push(chunk); } return this._requestChunks(chunks); } }, { key: "requestRanges", value: function requestRanges() { var ranges = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var chunksToRequest = []; var _iterator4 = _createForOfIteratorHelper(ranges), _step4; try { for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { var range = _step4.value; var beginChunk = this.getBeginChunk(range.begin); var endChunk = this.getEndChunk(range.end); for (var chunk = beginChunk; chunk < endChunk; ++chunk) { if (!chunksToRequest.includes(chunk)) { chunksToRequest.push(chunk); } } } } catch (err) { _iterator4.e(err); } finally { _iterator4.f(); } chunksToRequest.sort(function (a, b) { return a - b; }); return this._requestChunks(chunksToRequest); } }, { key: "groupChunks", value: function groupChunks(chunks) { var groupedChunks = []; var beginChunk = -1; var prevChunk = -1; for (var i = 0, ii = chunks.length; i < ii; ++i) { var chunk = chunks[i]; if (beginChunk < 0) { beginChunk = chunk; } if (prevChunk >= 0 && prevChunk + 1 !== chunk) { groupedChunks.push({ beginChunk: beginChunk, endChunk: prevChunk + 1 }); beginChunk = chunk; } if (i + 1 === chunks.length) { groupedChunks.push({ beginChunk: beginChunk, endChunk: chunk + 1 }); } prevChunk = chunk; } return groupedChunks; } }, { key: "onProgress", value: function onProgress(args) { this.msgHandler.send("DocProgress", { loaded: this.stream.numChunksLoaded * this.chunkSize + args.loaded, total: this.length }); } }, { key: "onReceiveData", value: function onReceiveData(args) { var chunk = args.chunk; var isProgressive = args.begin === undefined; var begin = isProgressive ? this.progressiveDataLength : args.begin; var end = begin + chunk.byteLength; var beginChunk = Math.floor(begin / this.chunkSize); var endChunk = end < this.length ? Math.floor(end / this.chunkSize) : Math.ceil(end / this.chunkSize); if (isProgressive) { this.stream.onReceiveProgressiveData(chunk); this.progressiveDataLength = end; } else { this.stream.onReceiveData(begin, chunk); } if (this.stream.allChunksLoaded()) { this._loadedStreamCapability.resolve(this.stream); } var loadedRequests = []; for (var curChunk = beginChunk; curChunk < endChunk; ++curChunk) { var requestIds = this._requestsByChunk.get(curChunk); if (!requestIds) { continue; } this._requestsByChunk["delete"](curChunk); var _iterator5 = _createForOfIteratorHelper(requestIds), _step5; try { for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { var requestId = _step5.value; var chunksNeeded = this._chunksNeededByRequest.get(requestId); if (chunksNeeded.has(curChunk)) { chunksNeeded["delete"](curChunk); } if (chunksNeeded.size > 0) { continue; } loadedRequests.push(requestId); } } catch (err) { _iterator5.e(err); } finally { _iterator5.f(); } } if (!this.disableAutoFetch && this._requestsByChunk.size === 0) { var nextEmptyChunk; if (this.stream.numChunksLoaded === 1) { var lastChunk = this.stream.numChunks - 1; if (!this.stream.hasChunk(lastChunk)) { nextEmptyChunk = lastChunk; } } else { nextEmptyChunk = this.stream.nextEmptyChunk(endChunk); } if (Number.isInteger(nextEmptyChunk)) { this._requestChunks([nextEmptyChunk]); } } for (var _i = 0, _loadedRequests = loadedRequests; _i < _loadedRequests.length; _i++) { var _requestId = _loadedRequests[_i]; var capability = this._promisesByRequest.get(_requestId); this._promisesByRequest["delete"](_requestId); capability.resolve(); } this.msgHandler.send("DocProgress", { loaded: this.stream.numChunksLoaded * this.chunkSize, total: this.length }); } }, { key: "onError", value: function onError(err) { this._loadedStreamCapability.reject(err); } }, { key: "getBeginChunk", value: function getBeginChunk(begin) { return Math.floor(begin / this.chunkSize); } }, { key: "getEndChunk", value: function getEndChunk(end) { return Math.floor((end - 1) / this.chunkSize) + 1; } }, { key: "abort", value: function abort(reason) { this.aborted = true; if (this.pdfNetworkStream) { this.pdfNetworkStream.cancelAllRequests(reason); } var _iterator6 = _createForOfIteratorHelper(this._promisesByRequest.values()), _step6; try { for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) { var capability = _step6.value; capability.reject(reason); } } catch (err) { _iterator6.e(err); } finally { _iterator6.f(); } } }]); return ChunkedStreamManager; }(); exports.ChunkedStreamManager = ChunkedStreamManager; /***/ }), /* 138 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", ({ value: true })); exports.collectActions = collectActions; exports.escapePDFName = escapePDFName; exports.getArrayLookupTableFactory = getArrayLookupTableFactory; exports.getInheritableProperty = getInheritableProperty; exports.getLookupTableFactory = getLookupTableFactory; exports.isWhiteSpace = isWhiteSpace; exports.log2 = log2; exports.parseXFAPath = parseXFAPath; exports.readInt8 = readInt8; exports.readUint16 = readUint16; exports.readUint32 = readUint32; exports.toRomanNumerals = toRomanNumerals; exports.XRefParseException = exports.XRefEntryException = exports.MissingDataException = void 0; var _util = __w_pdfjs_require__(4); var _primitives = __w_pdfjs_require__(135); function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function getLookupTableFactory(initializer) { var lookup; return function () { if (initializer) { lookup = Object.create(null); initializer(lookup); initializer = null; } return lookup; }; } function getArrayLookupTableFactory(initializer) { var lookup; return function () { if (initializer) { var arr = initializer(); initializer = null; lookup = Object.create(null); for (var i = 0, ii = arr.length; i < ii; i += 2) { lookup[arr[i]] = arr[i + 1]; } arr = null; } return lookup; }; } var MissingDataException = /*#__PURE__*/function (_BaseException) { _inherits(MissingDataException, _BaseException); var _super = _createSuper(MissingDataException); function MissingDataException(begin, end) { var _this; _classCallCheck(this, MissingDataException); _this = _super.call(this, "Missing data [".concat(begin, ", ").concat(end, ")")); _this.begin = begin; _this.end = end; return _this; } return MissingDataException; }(_util.BaseException); exports.MissingDataException = MissingDataException; var XRefEntryException = /*#__PURE__*/function (_BaseException2) { _inherits(XRefEntryException, _BaseException2); var _super2 = _createSuper(XRefEntryException); function XRefEntryException() { _classCallCheck(this, XRefEntryException); return _super2.apply(this, arguments); } return XRefEntryException; }(_util.BaseException); exports.XRefEntryException = XRefEntryException; var XRefParseException = /*#__PURE__*/function (_BaseException3) { _inherits(XRefParseException, _BaseException3); var _super3 = _createSuper(XRefParseException); function XRefParseException() { _classCallCheck(this, XRefParseException); return _super3.apply(this, arguments); } return XRefParseException; }(_util.BaseException); exports.XRefParseException = XRefParseException; function getInheritableProperty(_ref) { var dict = _ref.dict, key = _ref.key, _ref$getArray = _ref.getArray, getArray = _ref$getArray === void 0 ? false : _ref$getArray, _ref$stopWhenFound = _ref.stopWhenFound, stopWhenFound = _ref$stopWhenFound === void 0 ? true : _ref$stopWhenFound; var LOOP_LIMIT = 100; var loopCount = 0; var values; while (dict) { var value = getArray ? dict.getArray(key) : dict.get(key); if (value !== undefined) { if (stopWhenFound) { return value; } if (!values) { values = []; } values.push(value); } if (++loopCount > LOOP_LIMIT) { (0, _util.warn)("getInheritableProperty: maximum loop count exceeded for \"".concat(key, "\"")); break; } dict = dict.get("Parent"); } return values; } var ROMAN_NUMBER_MAP = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM", "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC", "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"]; function toRomanNumerals(number) { var lowerCase = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; (0, _util.assert)(Number.isInteger(number) && number > 0, "The number should be a positive integer."); var romanBuf = []; var pos; while (number >= 1000) { number -= 1000; romanBuf.push("M"); } pos = number / 100 | 0; number %= 100; romanBuf.push(ROMAN_NUMBER_MAP[pos]); pos = number / 10 | 0; number %= 10; romanBuf.push(ROMAN_NUMBER_MAP[10 + pos]); romanBuf.push(ROMAN_NUMBER_MAP[20 + number]); var romanStr = romanBuf.join(""); return lowerCase ? romanStr.toLowerCase() : romanStr; } function log2(x) { if (x <= 0) { return 0; } return Math.ceil(Math.log2(x)); } function readInt8(data, offset) { return data[offset] << 24 >> 24; } function readUint16(data, offset) { return data[offset] << 8 | data[offset + 1]; } function readUint32(data, offset) { return (data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]) >>> 0; } function isWhiteSpace(ch) { return ch === 0x20 || ch === 0x09 || ch === 0x0d || ch === 0x0a; } function parseXFAPath(path) { var positionPattern = /(.+)\[([0-9]+)\]$/; return path.split(".").map(function (component) { var m = component.match(positionPattern); if (m) { return { name: m[1], pos: parseInt(m[2], 10) }; } return { name: component, pos: 0 }; }); } function escapePDFName(str) { var buffer = []; var start = 0; for (var i = 0, ii = str.length; i < ii; i++) { var _char = str.charCodeAt(i); if (_char < 0x21 || _char > 0x7e || _char === 0x23 || _char === 0x28 || _char === 0x29 || _char === 0x3c || _char === 0x3e || _char === 0x5b || _char === 0x5d || _char === 0x7b || _char === 0x7d || _char === 0x2f || _char === 0x25) { if (start < i) { buffer.push(str.substring(start, i)); } buffer.push("#".concat(_char.toString(16))); start = i + 1; } } if (buffer.length === 0) { return str; } if (start < str.length) { buffer.push(str.substring(start, str.length)); } return buffer.join(""); } function _collectJS(entry, xref, list, parents) { if (!entry) { return; } var parent = null; if ((0, _primitives.isRef)(entry)) { if (parents.has(entry)) { return; } parent = entry; parents.put(parent); entry = xref.fetch(entry); } if (Array.isArray(entry)) { var _iterator = _createForOfIteratorHelper(entry), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var element = _step.value; _collectJS(element, xref, list, parents); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } } else if (entry instanceof _primitives.Dict) { if ((0, _primitives.isName)(entry.get("S"), "JavaScript") && entry.has("JS")) { var js = entry.get("JS"); var code; if ((0, _primitives.isStream)(js)) { code = (0, _util.bytesToString)(js.getBytes()); } else { code = js; } code = (0, _util.stringToPDFString)(code); if (code) { list.push(code); } } _collectJS(entry.getRaw("Next"), xref, list, parents); } if (parent) { parents.remove(parent); } } function collectActions(xref, dict, eventType) { var actions = Object.create(null); if (dict.has("AA")) { var additionalActions = dict.get("AA"); var _iterator2 = _createForOfIteratorHelper(additionalActions.getKeys()), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var key = _step2.value; var action = eventType[key]; if (!action) { continue; } var actionDict = additionalActions.getRaw(key); var parents = new _primitives.RefSet(); var list = []; _collectJS(actionDict, xref, list, parents); if (list.length > 0) { actions[action] = list; } } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } } if (dict.has("A")) { var _actionDict = dict.get("A"); var _parents = new _primitives.RefSet(); var _list = []; _collectJS(_actionDict, xref, _list, _parents); if (_list.length > 0) { actions.Action = _list; } } return (0, _util.objectSize)(actions) > 0 ? actions : null; } /***/ }), /* 139 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFDocument = exports.Page = void 0; var _regenerator = _interopRequireDefault(__w_pdfjs_require__(2)); var _util = __w_pdfjs_require__(4); var _obj = __w_pdfjs_require__(140); var _primitives = __w_pdfjs_require__(135); var _core_utils = __w_pdfjs_require__(138); var _stream = __w_pdfjs_require__(142); var _annotation = __w_pdfjs_require__(155); var _crypto = __w_pdfjs_require__(152); var _parser = __w_pdfjs_require__(141); var _operator_list = __w_pdfjs_require__(174); var _evaluator = __w_pdfjs_require__(157); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var DEFAULT_USER_UNIT = 1.0; var LETTER_SIZE_MEDIABOX = [0, 0, 612, 792]; function isAnnotationRenderable(annotation, intent) { return intent === "display" && annotation.viewable || intent === "print" && annotation.printable; } var Page = /*#__PURE__*/function () { function Page(_ref) { var pdfManager = _ref.pdfManager, xref = _ref.xref, pageIndex = _ref.pageIndex, pageDict = _ref.pageDict, ref = _ref.ref, globalIdFactory = _ref.globalIdFactory, fontCache = _ref.fontCache, builtInCMapCache = _ref.builtInCMapCache, globalImageCache = _ref.globalImageCache, nonBlendModesSet = _ref.nonBlendModesSet; _classCallCheck(this, Page); this.pdfManager = pdfManager; this.pageIndex = pageIndex; this.pageDict = pageDict; this.xref = xref; this.ref = ref; this.fontCache = fontCache; this.builtInCMapCache = builtInCMapCache; this.globalImageCache = globalImageCache; this.nonBlendModesSet = nonBlendModesSet; this.evaluatorOptions = pdfManager.evaluatorOptions; this.resourcesPromise = null; var idCounters = { obj: 0 }; this._localIdFactory = /*#__PURE__*/function (_globalIdFactory) { _inherits(_class, _globalIdFactory); var _super = _createSuper(_class); function _class() { _classCallCheck(this, _class); return _super.apply(this, arguments); } _createClass(_class, null, [{ key: "createObjId", value: function createObjId() { return "p".concat(pageIndex, "_").concat(++idCounters.obj); } }]); return _class; }(globalIdFactory); } _createClass(Page, [{ key: "_getInheritableProperty", value: function _getInheritableProperty(key) { var getArray = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var value = (0, _core_utils.getInheritableProperty)({ dict: this.pageDict, key: key, getArray: getArray, stopWhenFound: false }); if (!Array.isArray(value)) { return value; } if (value.length === 1 || !(0, _primitives.isDict)(value[0])) { return value[0]; } return _primitives.Dict.merge({ xref: this.xref, dictArray: value }); } }, { key: "content", get: function get() { return this.pageDict.get("Contents"); } }, { key: "resources", get: function get() { return (0, _util.shadow)(this, "resources", this._getInheritableProperty("Resources") || _primitives.Dict.empty); } }, { key: "_getBoundingBox", value: function _getBoundingBox(name) { var box = this._getInheritableProperty(name, true); if (Array.isArray(box) && box.length === 4) { if (box[2] - box[0] !== 0 && box[3] - box[1] !== 0) { return box; } (0, _util.warn)("Empty /".concat(name, " entry.")); } return null; } }, { key: "mediaBox", get: function get() { return (0, _util.shadow)(this, "mediaBox", this._getBoundingBox("MediaBox") || LETTER_SIZE_MEDIABOX); } }, { key: "cropBox", get: function get() { return (0, _util.shadow)(this, "cropBox", this._getBoundingBox("CropBox") || this.mediaBox); } }, { key: "userUnit", get: function get() { var obj = this.pageDict.get("UserUnit"); if (!(0, _util.isNum)(obj) || obj <= 0) { obj = DEFAULT_USER_UNIT; } return (0, _util.shadow)(this, "userUnit", obj); } }, { key: "view", get: function get() { var cropBox = this.cropBox, mediaBox = this.mediaBox; var view; if (cropBox === mediaBox || (0, _util.isArrayEqual)(cropBox, mediaBox)) { view = mediaBox; } else { var box = _util.Util.intersect(cropBox, mediaBox); if (box && box[2] - box[0] !== 0 && box[3] - box[1] !== 0) { view = box; } else { (0, _util.warn)("Empty /CropBox and /MediaBox intersection."); } } return (0, _util.shadow)(this, "view", view || mediaBox); } }, { key: "rotate", get: function get() { var rotate = this._getInheritableProperty("Rotate") || 0; if (rotate % 90 !== 0) { rotate = 0; } else if (rotate >= 360) { rotate = rotate % 360; } else if (rotate < 0) { rotate = (rotate % 360 + 360) % 360; } return (0, _util.shadow)(this, "rotate", rotate); } }, { key: "getContentStream", value: function getContentStream() { var content = this.content; var stream; if (Array.isArray(content)) { var xref = this.xref; var streams = []; var _iterator = _createForOfIteratorHelper(content), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var subStream = _step.value; streams.push(xref.fetchIfRef(subStream)); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } stream = new _stream.StreamsSequenceStream(streams); } else if ((0, _primitives.isStream)(content)) { stream = content; } else { stream = new _stream.NullStream(); } return stream; } }, { key: "save", value: function save(handler, task, annotationStorage) { var partialEvaluator = new _evaluator.PartialEvaluator({ xref: this.xref, handler: handler, pageIndex: this.pageIndex, idFactory: this._localIdFactory, fontCache: this.fontCache, builtInCMapCache: this.builtInCMapCache, globalImageCache: this.globalImageCache, options: this.evaluatorOptions }); return this._parsedAnnotations.then(function (annotations) { var newRefsPromises = []; var _iterator2 = _createForOfIteratorHelper(annotations), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var annotation = _step2.value; if (!isAnnotationRenderable(annotation, "print")) { continue; } newRefsPromises.push(annotation.save(partialEvaluator, task, annotationStorage)["catch"](function (reason) { (0, _util.warn)("save - ignoring annotation data during " + "\"".concat(task.name, "\" task: \"").concat(reason, "\".")); return null; })); } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } return Promise.all(newRefsPromises); }); } }, { key: "loadResources", value: function loadResources(keys) { var _this = this; if (!this.resourcesPromise) { this.resourcesPromise = this.pdfManager.ensure(this, "resources"); } return this.resourcesPromise.then(function () { var objectLoader = new _obj.ObjectLoader(_this.resources, keys, _this.xref); return objectLoader.load(); }); } }, { key: "getOperatorList", value: function getOperatorList(_ref2) { var _this2 = this; var handler = _ref2.handler, sink = _ref2.sink, task = _ref2.task, intent = _ref2.intent, renderInteractiveForms = _ref2.renderInteractiveForms, annotationStorage = _ref2.annotationStorage; var contentStreamPromise = this.pdfManager.ensure(this, "getContentStream"); var resourcesPromise = this.loadResources(["ExtGState", "ColorSpace", "Pattern", "Shading", "XObject", "Font"]); var partialEvaluator = new _evaluator.PartialEvaluator({ xref: this.xref, handler: handler, pageIndex: this.pageIndex, idFactory: this._localIdFactory, fontCache: this.fontCache, builtInCMapCache: this.builtInCMapCache, globalImageCache: this.globalImageCache, options: this.evaluatorOptions }); var dataPromises = Promise.all([contentStreamPromise, resourcesPromise]); var pageListPromise = dataPromises.then(function (_ref3) { var _ref4 = _slicedToArray(_ref3, 1), contentStream = _ref4[0]; var opList = new _operator_list.OperatorList(intent, sink); handler.send("StartRenderPage", { transparency: partialEvaluator.hasBlendModes(_this2.resources, _this2.nonBlendModesSet), pageIndex: _this2.pageIndex, intent: intent }); return partialEvaluator.getOperatorList({ stream: contentStream, task: task, resources: _this2.resources, operatorList: opList }).then(function () { return opList; }); }); return Promise.all([pageListPromise, this._parsedAnnotations]).then(function (_ref5) { var _ref6 = _slicedToArray(_ref5, 2), pageOpList = _ref6[0], annotations = _ref6[1]; if (annotations.length === 0) { pageOpList.flush(true); return { length: pageOpList.totalLength }; } var opListPromises = []; var _iterator3 = _createForOfIteratorHelper(annotations), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var annotation = _step3.value; if (isAnnotationRenderable(annotation, intent) && !annotation.isHidden(annotationStorage)) { opListPromises.push(annotation.getOperatorList(partialEvaluator, task, renderInteractiveForms, annotationStorage)["catch"](function (reason) { (0, _util.warn)("getOperatorList - ignoring annotation data during " + "\"".concat(task.name, "\" task: \"").concat(reason, "\".")); return null; })); } } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } return Promise.all(opListPromises).then(function (opLists) { pageOpList.addOp(_util.OPS.beginAnnotations, []); var _iterator4 = _createForOfIteratorHelper(opLists), _step4; try { for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { var opList = _step4.value; pageOpList.addOpList(opList); } } catch (err) { _iterator4.e(err); } finally { _iterator4.f(); } pageOpList.addOp(_util.OPS.endAnnotations, []); pageOpList.flush(true); return { length: pageOpList.totalLength }; }); }); } }, { key: "extractTextContent", value: function extractTextContent(_ref7) { var _this3 = this; var handler = _ref7.handler, task = _ref7.task, normalizeWhitespace = _ref7.normalizeWhitespace, sink = _ref7.sink, combineTextItems = _ref7.combineTextItems; var contentStreamPromise = this.pdfManager.ensure(this, "getContentStream"); var resourcesPromise = this.loadResources(["ExtGState", "XObject", "Font"]); var dataPromises = Promise.all([contentStreamPromise, resourcesPromise]); return dataPromises.then(function (_ref8) { var _ref9 = _slicedToArray(_ref8, 1), contentStream = _ref9[0]; var partialEvaluator = new _evaluator.PartialEvaluator({ xref: _this3.xref, handler: handler, pageIndex: _this3.pageIndex, idFactory: _this3._localIdFactory, fontCache: _this3.fontCache, builtInCMapCache: _this3.builtInCMapCache, globalImageCache: _this3.globalImageCache, options: _this3.evaluatorOptions }); return partialEvaluator.getTextContent({ stream: contentStream, task: task, resources: _this3.resources, normalizeWhitespace: normalizeWhitespace, combineTextItems: combineTextItems, sink: sink }); }); } }, { key: "getAnnotationsData", value: function getAnnotationsData(intent) { return this._parsedAnnotations.then(function (annotations) { var annotationsData = []; for (var i = 0, ii = annotations.length; i < ii; i++) { if (!intent || isAnnotationRenderable(annotations[i], intent)) { annotationsData.push(annotations[i].data); } } return annotationsData; }); } }, { key: "annotations", get: function get() { var annots = this._getInheritableProperty("Annots"); return (0, _util.shadow)(this, "annotations", Array.isArray(annots) ? annots : []); } }, { key: "_parsedAnnotations", get: function get() { var _this4 = this; var parsedAnnotations = this.pdfManager.ensure(this, "annotations").then(function () { var annotationPromises = []; var _iterator5 = _createForOfIteratorHelper(_this4.annotations), _step5; try { for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { var annotationRef = _step5.value; annotationPromises.push(_annotation.AnnotationFactory.create(_this4.xref, annotationRef, _this4.pdfManager, _this4._localIdFactory)["catch"](function (reason) { (0, _util.warn)("_parsedAnnotations: \"".concat(reason, "\".")); return null; })); } } catch (err) { _iterator5.e(err); } finally { _iterator5.f(); } return Promise.all(annotationPromises).then(function (annotations) { return annotations.filter(function (annotation) { return !!annotation; }); }); }); return (0, _util.shadow)(this, "_parsedAnnotations", parsedAnnotations); } }, { key: "jsActions", get: function get() { var actions = (0, _core_utils.collectActions)(this.xref, this.pageDict, _util.PageActionEventType); return (0, _util.shadow)(this, "jsActions", actions); } }]); return Page; }(); exports.Page = Page; var PDF_HEADER_SIGNATURE = new Uint8Array([0x25, 0x50, 0x44, 0x46, 0x2d]); var STARTXREF_SIGNATURE = new Uint8Array([0x73, 0x74, 0x61, 0x72, 0x74, 0x78, 0x72, 0x65, 0x66]); var ENDOBJ_SIGNATURE = new Uint8Array([0x65, 0x6e, 0x64, 0x6f, 0x62, 0x6a]); var FINGERPRINT_FIRST_BYTES = 1024; var EMPTY_FINGERPRINT = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"; var PDF_HEADER_VERSION_REGEXP = /^[1-9]\.[0-9]$/; function find(stream, signature) { var limit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1024; var backwards = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; var signatureLength = signature.length; var scanBytes = stream.peekBytes(limit); var scanLength = scanBytes.length - signatureLength; if (scanLength <= 0) { return false; } if (backwards) { var signatureEnd = signatureLength - 1; var pos = scanBytes.length - 1; while (pos >= signatureEnd) { var j = 0; while (j < signatureLength && scanBytes[pos - j] === signature[signatureEnd - j]) { j++; } if (j >= signatureLength) { stream.pos += pos - signatureEnd; return true; } pos--; } } else { var _pos = 0; while (_pos <= scanLength) { var _j = 0; while (_j < signatureLength && scanBytes[_pos + _j] === signature[_j]) { _j++; } if (_j >= signatureLength) { stream.pos += _pos; return true; } _pos++; } } return false; } var PDFDocument = /*#__PURE__*/function () { function PDFDocument(pdfManager, arg) { _classCallCheck(this, PDFDocument); var stream; if ((0, _primitives.isStream)(arg)) { stream = arg; } else if ((0, _util.isArrayBuffer)(arg)) { stream = new _stream.Stream(arg); } else { throw new Error("PDFDocument: Unknown argument type"); } if (stream.length <= 0) { throw new _util.InvalidPDFException("The PDF file is empty, i.e. its size is zero bytes."); } this.pdfManager = pdfManager; this.stream = stream; this.xref = new _obj.XRef(stream, pdfManager); this._pagePromises = []; this._version = null; var idCounters = { font: 0 }; this._globalIdFactory = /*#__PURE__*/function () { function _class2() { _classCallCheck(this, _class2); } _createClass(_class2, null, [{ key: "getDocId", value: function getDocId() { return "g_".concat(pdfManager.docId); } }, { key: "createFontId", value: function createFontId() { return "f".concat(++idCounters.font); } }, { key: "createObjId", value: function createObjId() { (0, _util.unreachable)("Abstract method `createObjId` called."); } }]); return _class2; }(); } _createClass(PDFDocument, [{ key: "parse", value: function parse(recoveryMode) { this.xref.parse(recoveryMode); this.catalog = new _obj.Catalog(this.pdfManager, this.xref); if (this.catalog.version) { this._version = this.catalog.version; } } }, { key: "linearization", get: function get() { var linearization = null; try { linearization = _parser.Linearization.create(this.stream); } catch (err) { if (err instanceof _core_utils.MissingDataException) { throw err; } (0, _util.info)(err); } return (0, _util.shadow)(this, "linearization", linearization); } }, { key: "startXRef", get: function get() { var stream = this.stream; var startXRef = 0; if (this.linearization) { stream.reset(); if (find(stream, ENDOBJ_SIGNATURE)) { startXRef = stream.pos + 6 - stream.start; } } else { var step = 1024; var startXRefLength = STARTXREF_SIGNATURE.length; var found = false, pos = stream.end; while (!found && pos > 0) { pos -= step - startXRefLength; if (pos < 0) { pos = 0; } stream.pos = pos; found = find(stream, STARTXREF_SIGNATURE, step, true); } if (found) { stream.skip(9); var ch; do { ch = stream.getByte(); } while ((0, _core_utils.isWhiteSpace)(ch)); var str = ""; while (ch >= 0x20 && ch <= 0x39) { str += String.fromCharCode(ch); ch = stream.getByte(); } startXRef = parseInt(str, 10); if (isNaN(startXRef)) { startXRef = 0; } } } return (0, _util.shadow)(this, "startXRef", startXRef); } }, { key: "checkHeader", value: function checkHeader() { var stream = this.stream; stream.reset(); if (!find(stream, PDF_HEADER_SIGNATURE)) { return; } stream.moveStart(); var MAX_PDF_VERSION_LENGTH = 12; var version = "", ch; while ((ch = stream.getByte()) > 0x20) { if (version.length >= MAX_PDF_VERSION_LENGTH) { break; } version += String.fromCharCode(ch); } if (!this._version) { this._version = version.substring(5); } } }, { key: "parseStartXRef", value: function parseStartXRef() { this.xref.setStartXRef(this.startXRef); } }, { key: "numPages", get: function get() { var linearization = this.linearization; var num = linearization ? linearization.numPages : this.catalog.numPages; return (0, _util.shadow)(this, "numPages", num); } }, { key: "_hasOnlyDocumentSignatures", value: function _hasOnlyDocumentSignatures(fields) { var _this5 = this; var recursionDepth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; var RECURSION_LIMIT = 10; if (!Array.isArray(fields)) { return false; } return fields.every(function (field) { field = _this5.xref.fetchIfRef(field); if (!(field instanceof _primitives.Dict)) { return false; } if (field.has("Kids")) { if (++recursionDepth > RECURSION_LIMIT) { (0, _util.warn)("_hasOnlyDocumentSignatures: maximum recursion depth reached"); return false; } return _this5._hasOnlyDocumentSignatures(field.get("Kids"), recursionDepth); } var isSignature = (0, _primitives.isName)(field.get("FT"), "Sig"); var rectangle = field.get("Rect"); var isInvisible = Array.isArray(rectangle) && rectangle.every(function (value) { return value === 0; }); return isSignature && isInvisible; }); } }, { key: "formInfo", get: function get() { var formInfo = { hasFields: false, hasAcroForm: false, hasXfa: false }; var acroForm = this.catalog.acroForm; if (!acroForm) { return (0, _util.shadow)(this, "formInfo", formInfo); } try { var fields = acroForm.get("Fields"); var hasFields = Array.isArray(fields) && fields.length > 0; formInfo.hasFields = hasFields; var xfa = acroForm.get("XFA"); formInfo.hasXfa = Array.isArray(xfa) && xfa.length > 0 || (0, _primitives.isStream)(xfa) && !xfa.isEmpty; var sigFlags = acroForm.get("SigFlags"); var hasOnlyDocumentSignatures = !!(sigFlags & 0x1) && this._hasOnlyDocumentSignatures(fields); formInfo.hasAcroForm = hasFields && !hasOnlyDocumentSignatures; } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)("Cannot fetch form information: \"".concat(ex, "\".")); } return (0, _util.shadow)(this, "formInfo", formInfo); } }, { key: "documentInfo", get: function get() { var DocumentInfoValidators = { Title: _util.isString, Author: _util.isString, Subject: _util.isString, Keywords: _util.isString, Creator: _util.isString, Producer: _util.isString, CreationDate: _util.isString, ModDate: _util.isString, Trapped: _primitives.isName }; var version = this._version; if (typeof version !== "string" || !PDF_HEADER_VERSION_REGEXP.test(version)) { (0, _util.warn)("Invalid PDF header version number: ".concat(version)); version = null; } var docInfo = { PDFFormatVersion: version, IsLinearized: !!this.linearization, IsAcroFormPresent: this.formInfo.hasAcroForm, IsXFAPresent: this.formInfo.hasXfa, IsCollectionPresent: !!this.catalog.collection }; var infoDict; try { infoDict = this.xref.trailer.get("Info"); } catch (err) { if (err instanceof _core_utils.MissingDataException) { throw err; } (0, _util.info)("The document information dictionary is invalid."); } if ((0, _primitives.isDict)(infoDict)) { var _iterator6 = _createForOfIteratorHelper(infoDict.getKeys()), _step6; try { for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) { var key = _step6.value; var value = infoDict.get(key); if (DocumentInfoValidators[key]) { if (DocumentInfoValidators[key](value)) { docInfo[key] = typeof value !== "string" ? value : (0, _util.stringToPDFString)(value); } else { (0, _util.info)("Bad value in document info for \"".concat(key, "\".")); } } else if (typeof key === "string") { var customValue = void 0; if ((0, _util.isString)(value)) { customValue = (0, _util.stringToPDFString)(value); } else if ((0, _primitives.isName)(value) || (0, _util.isNum)(value) || (0, _util.isBool)(value)) { customValue = value; } else { (0, _util.info)("Unsupported value in document info for (custom) \"".concat(key, "\".")); continue; } if (!docInfo.Custom) { docInfo.Custom = Object.create(null); } docInfo.Custom[key] = customValue; } } } catch (err) { _iterator6.e(err); } finally { _iterator6.f(); } } return (0, _util.shadow)(this, "documentInfo", docInfo); } }, { key: "fingerprint", get: function get() { var hash; var idArray = this.xref.trailer.get("ID"); if (Array.isArray(idArray) && idArray[0] && (0, _util.isString)(idArray[0]) && idArray[0] !== EMPTY_FINGERPRINT) { hash = (0, _util.stringToBytes)(idArray[0]); } else { hash = (0, _crypto.calculateMD5)(this.stream.getByteRange(0, FINGERPRINT_FIRST_BYTES), 0, FINGERPRINT_FIRST_BYTES); } var fingerprintBuf = []; for (var i = 0, ii = hash.length; i < ii; i++) { var hex = hash[i].toString(16); fingerprintBuf.push(hex.padStart(2, "0")); } return (0, _util.shadow)(this, "fingerprint", fingerprintBuf.join("")); } }, { key: "_getLinearizationPage", value: function _getLinearizationPage(pageIndex) { var catalog = this.catalog, linearization = this.linearization; var ref = _primitives.Ref.get(linearization.objectNumberFirst, 0); return this.xref.fetchAsync(ref).then(function (obj) { if ((0, _primitives.isDict)(obj, "Page") || (0, _primitives.isDict)(obj) && !obj.has("Type") && obj.has("Contents")) { if (ref && !catalog.pageKidsCountCache.has(ref)) { catalog.pageKidsCountCache.put(ref, 1); } return [obj, ref]; } throw new _util.FormatError("The Linearization dictionary doesn't point " + "to a valid Page dictionary."); })["catch"](function (reason) { (0, _util.info)(reason); return catalog.getPageDict(pageIndex); }); } }, { key: "getPage", value: function getPage(pageIndex) { var _this6 = this; if (this._pagePromises[pageIndex] !== undefined) { return this._pagePromises[pageIndex]; } var catalog = this.catalog, linearization = this.linearization; var promise = linearization && linearization.pageFirst === pageIndex ? this._getLinearizationPage(pageIndex) : catalog.getPageDict(pageIndex); return this._pagePromises[pageIndex] = promise.then(function (_ref10) { var _ref11 = _slicedToArray(_ref10, 2), pageDict = _ref11[0], ref = _ref11[1]; return new Page({ pdfManager: _this6.pdfManager, xref: _this6.xref, pageIndex: pageIndex, pageDict: pageDict, ref: ref, globalIdFactory: _this6._globalIdFactory, fontCache: catalog.fontCache, builtInCMapCache: catalog.builtInCMapCache, globalImageCache: catalog.globalImageCache, nonBlendModesSet: catalog.nonBlendModesSet }); }); } }, { key: "checkFirstPage", value: function checkFirstPage() { var _this7 = this; return this.getPage(0)["catch"]( /*#__PURE__*/function () { var _ref12 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(reason) { return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (!(reason instanceof _core_utils.XRefEntryException)) { _context.next = 5; break; } _this7._pagePromises.length = 0; _context.next = 4; return _this7.cleanup(); case 4: throw new _core_utils.XRefParseException(); case 5: case "end": return _context.stop(); } } }, _callee); })); return function (_x) { return _ref12.apply(this, arguments); }; }()); } }, { key: "fontFallback", value: function fontFallback(id, handler) { return this.catalog.fontFallback(id, handler); } }, { key: "cleanup", value: function () { var _cleanup = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { var manuallyTriggered, _args2 = arguments; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: manuallyTriggered = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : false; return _context2.abrupt("return", this.catalog ? this.catalog.cleanup(manuallyTriggered) : (0, _primitives.clearPrimitiveCaches)()); case 2: case "end": return _context2.stop(); } } }, _callee2, this); })); function cleanup() { return _cleanup.apply(this, arguments); } return cleanup; }() }, { key: "_collectFieldObjects", value: function _collectFieldObjects(name, fieldRef, promises) { var field = this.xref.fetchIfRef(fieldRef); if (field.has("T")) { var partName = (0, _util.stringToPDFString)(field.get("T")); if (name === "") { name = partName; } else { name = "".concat(name, ".").concat(partName); } } if (!promises.has(name)) { promises.set(name, []); } promises.get(name).push(_annotation.AnnotationFactory.create(this.xref, fieldRef, this.pdfManager, this._localIdFactory).then(function (annotation) { return annotation && annotation.getFieldObject(); })["catch"](function (reason) { (0, _util.warn)("_collectFieldObjects: \"".concat(reason, "\".")); return null; })); if (field.has("Kids")) { var kids = field.get("Kids"); var _iterator7 = _createForOfIteratorHelper(kids), _step7; try { for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) { var kid = _step7.value; this._collectFieldObjects(name, kid, promises); } } catch (err) { _iterator7.e(err); } finally { _iterator7.f(); } } } }, { key: "fieldObjects", get: function get() { if (!this.formInfo.hasFields) { return (0, _util.shadow)(this, "fieldObjects", Promise.resolve(null)); } var allFields = Object.create(null); var fieldPromises = new Map(); var _iterator8 = _createForOfIteratorHelper(this.catalog.acroForm.get("Fields")), _step8; try { for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) { var fieldRef = _step8.value; this._collectFieldObjects("", fieldRef, fieldPromises); } } catch (err) { _iterator8.e(err); } finally { _iterator8.f(); } var allPromises = []; var _iterator9 = _createForOfIteratorHelper(fieldPromises), _step9; try { var _loop = function _loop() { var _step9$value = _slicedToArray(_step9.value, 2), name = _step9$value[0], promises = _step9$value[1]; allPromises.push(Promise.all(promises).then(function (fields) { fields = fields.filter(function (field) { return !!field; }); if (fields.length > 0) { allFields[name] = fields; } })); }; for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) { _loop(); } } catch (err) { _iterator9.e(err); } finally { _iterator9.f(); } return (0, _util.shadow)(this, "fieldObjects", Promise.all(allPromises).then(function () { return allFields; })); } }, { key: "hasJSActions", get: function get() { var _this8 = this; return (0, _util.shadow)(this, "hasJSActions", this.fieldObjects.then(function (fieldObjects) { return fieldObjects !== null && Object.values(fieldObjects).some(function (fieldObject) { return fieldObject.some(function (object) { return object.actions !== null; }); }) || !!_this8.catalog.jsActions; })); } }, { key: "calculationOrderIds", get: function get() { var acroForm = this.catalog.acroForm; if (!acroForm || !acroForm.has("CO")) { return (0, _util.shadow)(this, "calculationOrderIds", null); } var calculationOrder = acroForm.get("CO"); if (!Array.isArray(calculationOrder) || calculationOrder.length === 0) { return (0, _util.shadow)(this, "calculationOrderIds", null); } var ids = calculationOrder.filter(_primitives.isRef).map(function (ref) { return ref.toString(); }); if (ids.length === 0) { return (0, _util.shadow)(this, "calculationOrderIds", null); } return (0, _util.shadow)(this, "calculationOrderIds", ids); } }]); return PDFDocument; }(); exports.PDFDocument = PDFDocument; /***/ }), /* 140 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.XRef = exports.ObjectLoader = exports.FileSpec = exports.Catalog = void 0; var _regenerator = _interopRequireDefault(__w_pdfjs_require__(2)); var _util = __w_pdfjs_require__(4); var _primitives = __w_pdfjs_require__(135); var _core_utils = __w_pdfjs_require__(138); var _parser = __w_pdfjs_require__(141); var _crypto = __w_pdfjs_require__(152); var _colorspace = __w_pdfjs_require__(153); var _image_utils = __w_pdfjs_require__(154); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function fetchDestination(dest) { return (0, _primitives.isDict)(dest) ? dest.get("D") : dest; } var Catalog = /*#__PURE__*/function () { function Catalog(pdfManager, xref) { _classCallCheck(this, Catalog); this.pdfManager = pdfManager; this.xref = xref; this._catDict = xref.getCatalogObj(); if (!(0, _primitives.isDict)(this._catDict)) { throw new _util.FormatError("Catalog object is not a dictionary."); } this.fontCache = new _primitives.RefSetCache(); this.builtInCMapCache = new Map(); this.globalImageCache = new _image_utils.GlobalImageCache(); this.pageKidsCountCache = new _primitives.RefSetCache(); this.nonBlendModesSet = new _primitives.RefSet(); } _createClass(Catalog, [{ key: "version", get: function get() { var version = this._catDict.get("Version"); if (!(0, _primitives.isName)(version)) { return (0, _util.shadow)(this, "version", null); } return (0, _util.shadow)(this, "version", version.name); } }, { key: "collection", get: function get() { var collection = null; try { var obj = this._catDict.get("Collection"); if ((0, _primitives.isDict)(obj) && obj.size > 0) { collection = obj; } } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.info)("Cannot fetch Collection entry; assuming no collection is present."); } return (0, _util.shadow)(this, "collection", collection); } }, { key: "acroForm", get: function get() { var acroForm = null; try { var obj = this._catDict.get("AcroForm"); if ((0, _primitives.isDict)(obj) && obj.size > 0) { acroForm = obj; } } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.info)("Cannot fetch AcroForm entry; assuming no forms are present."); } return (0, _util.shadow)(this, "acroForm", acroForm); } }, { key: "metadata", get: function get() { var streamRef = this._catDict.getRaw("Metadata"); if (!(0, _primitives.isRef)(streamRef)) { return (0, _util.shadow)(this, "metadata", null); } var suppressEncryption = !(this.xref.encrypt && this.xref.encrypt.encryptMetadata); var stream = this.xref.fetch(streamRef, suppressEncryption); var metadata; if (stream && (0, _primitives.isDict)(stream.dict)) { var type = stream.dict.get("Type"); var subtype = stream.dict.get("Subtype"); if ((0, _primitives.isName)(type, "Metadata") && (0, _primitives.isName)(subtype, "XML")) { try { metadata = (0, _util.stringToUTF8String)((0, _util.bytesToString)(stream.getBytes())); } catch (e) { if (e instanceof _core_utils.MissingDataException) { throw e; } (0, _util.info)("Skipping invalid metadata."); } } } return (0, _util.shadow)(this, "metadata", metadata); } }, { key: "markInfo", get: function get() { var markInfo = null; try { markInfo = this._readMarkInfo(); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)("Unable to read mark info."); } return (0, _util.shadow)(this, "markInfo", markInfo); } }, { key: "_readMarkInfo", value: function _readMarkInfo() { var obj = this._catDict.get("MarkInfo"); if (!(0, _primitives.isDict)(obj)) { return null; } var markInfo = Object.assign(Object.create(null), { Marked: false, UserProperties: false, Suspects: false }); for (var key in markInfo) { if (!obj.has(key)) { continue; } var value = obj.get(key); if (!(0, _util.isBool)(value)) { continue; } markInfo[key] = value; } return markInfo; } }, { key: "toplevelPagesDict", get: function get() { var pagesObj = this._catDict.get("Pages"); if (!(0, _primitives.isDict)(pagesObj)) { throw new _util.FormatError("Invalid top-level pages dictionary."); } return (0, _util.shadow)(this, "toplevelPagesDict", pagesObj); } }, { key: "documentOutline", get: function get() { var obj = null; try { obj = this._readDocumentOutline(); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)("Unable to read document outline."); } return (0, _util.shadow)(this, "documentOutline", obj); } }, { key: "_readDocumentOutline", value: function _readDocumentOutline() { var obj = this._catDict.get("Outlines"); if (!(0, _primitives.isDict)(obj)) { return null; } obj = obj.getRaw("First"); if (!(0, _primitives.isRef)(obj)) { return null; } var root = { items: [] }; var queue = [{ obj: obj, parent: root }]; var processed = new _primitives.RefSet(); processed.put(obj); var xref = this.xref, blackColor = new Uint8ClampedArray(3); while (queue.length > 0) { var i = queue.shift(); var outlineDict = xref.fetchIfRef(i.obj); if (outlineDict === null) { continue; } if (!outlineDict.has("Title")) { throw new _util.FormatError("Invalid outline item encountered."); } var data = { url: null, dest: null }; Catalog.parseDestDictionary({ destDict: outlineDict, resultObj: data, docBaseUrl: this.pdfManager.docBaseUrl }); var title = outlineDict.get("Title"); var flags = outlineDict.get("F") || 0; var color = outlineDict.getArray("C"); var count = outlineDict.get("Count"); var rgbColor = blackColor; if (Array.isArray(color) && color.length === 3 && (color[0] !== 0 || color[1] !== 0 || color[2] !== 0)) { rgbColor = _colorspace.ColorSpace.singletons.rgb.getRgb(color, 0); } var outlineItem = { dest: data.dest, url: data.url, unsafeUrl: data.unsafeUrl, newWindow: data.newWindow, title: (0, _util.stringToPDFString)(title), color: rgbColor, count: Number.isInteger(count) ? count : undefined, bold: !!(flags & 2), italic: !!(flags & 1), items: [] }; i.parent.items.push(outlineItem); obj = outlineDict.getRaw("First"); if ((0, _primitives.isRef)(obj) && !processed.has(obj)) { queue.push({ obj: obj, parent: outlineItem }); processed.put(obj); } obj = outlineDict.getRaw("Next"); if ((0, _primitives.isRef)(obj) && !processed.has(obj)) { queue.push({ obj: obj, parent: i.parent }); processed.put(obj); } } return root.items.length > 0 ? root.items : null; } }, { key: "permissions", get: function get() { var permissions = null; try { permissions = this._readPermissions(); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)("Unable to read permissions."); } return (0, _util.shadow)(this, "permissions", permissions); } }, { key: "_readPermissions", value: function _readPermissions() { var encrypt = this.xref.trailer.get("Encrypt"); if (!(0, _primitives.isDict)(encrypt)) { return null; } var flags = encrypt.get("P"); if (!(0, _util.isNum)(flags)) { return null; } flags += Math.pow(2, 32); var permissions = []; for (var key in _util.PermissionFlag) { var value = _util.PermissionFlag[key]; if (flags & value) { permissions.push(value); } } return permissions; } }, { key: "optionalContentConfig", get: function get() { var config = null; try { var properties = this._catDict.get("OCProperties"); if (!properties) { return (0, _util.shadow)(this, "optionalContentConfig", null); } var defaultConfig = properties.get("D"); if (!defaultConfig) { return (0, _util.shadow)(this, "optionalContentConfig", null); } var groupsData = properties.get("OCGs"); if (!Array.isArray(groupsData)) { return (0, _util.shadow)(this, "optionalContentConfig", null); } var groups = []; var groupRefs = []; var _iterator = _createForOfIteratorHelper(groupsData), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var groupRef = _step.value; if (!(0, _primitives.isRef)(groupRef)) { continue; } groupRefs.push(groupRef); var group = this.xref.fetchIfRef(groupRef); groups.push({ id: groupRef.toString(), name: (0, _util.isString)(group.get("Name")) ? (0, _util.stringToPDFString)(group.get("Name")) : null, intent: (0, _util.isString)(group.get("Intent")) ? (0, _util.stringToPDFString)(group.get("Intent")) : null }); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } config = this._readOptionalContentConfig(defaultConfig, groupRefs); config.groups = groups; } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)("Unable to read optional content config: ".concat(ex)); } return (0, _util.shadow)(this, "optionalContentConfig", config); } }, { key: "_readOptionalContentConfig", value: function _readOptionalContentConfig(config, contentGroupRefs) { function parseOnOff(refs) { var onParsed = []; if (Array.isArray(refs)) { var _iterator2 = _createForOfIteratorHelper(refs), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var value = _step2.value; if (!(0, _primitives.isRef)(value)) { continue; } if (contentGroupRefs.includes(value)) { onParsed.push(value.toString()); } } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } } return onParsed; } function parseOrder(refs) { var nestedLevels = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; if (!Array.isArray(refs)) { return null; } var order = []; var _iterator3 = _createForOfIteratorHelper(refs), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var value = _step3.value; if ((0, _primitives.isRef)(value) && contentGroupRefs.includes(value)) { parsedOrderRefs.put(value); order.push(value.toString()); continue; } var nestedOrder = parseNestedOrder(value, nestedLevels); if (nestedOrder) { order.push(nestedOrder); } } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } if (nestedLevels > 0) { return order; } var hiddenGroups = []; var _iterator4 = _createForOfIteratorHelper(contentGroupRefs), _step4; try { for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { var groupRef = _step4.value; if (parsedOrderRefs.has(groupRef)) { continue; } hiddenGroups.push(groupRef.toString()); } } catch (err) { _iterator4.e(err); } finally { _iterator4.f(); } if (hiddenGroups.length) { order.push({ name: null, order: hiddenGroups }); } return order; } function parseNestedOrder(ref, nestedLevels) { if (++nestedLevels > MAX_NESTED_LEVELS) { (0, _util.warn)("parseNestedOrder - reached MAX_NESTED_LEVELS."); return null; } var value = xref.fetchIfRef(ref); if (!Array.isArray(value)) { return null; } var nestedName = xref.fetchIfRef(value[0]); if (typeof nestedName !== "string") { return null; } var nestedOrder = parseOrder(value.slice(1), nestedLevels); if (!nestedOrder || !nestedOrder.length) { return null; } return { name: (0, _util.stringToPDFString)(nestedName), order: nestedOrder }; } var xref = this.xref, parsedOrderRefs = new _primitives.RefSet(), MAX_NESTED_LEVELS = 10; return { name: (0, _util.isString)(config.get("Name")) ? (0, _util.stringToPDFString)(config.get("Name")) : null, creator: (0, _util.isString)(config.get("Creator")) ? (0, _util.stringToPDFString)(config.get("Creator")) : null, baseState: (0, _primitives.isName)(config.get("BaseState")) ? config.get("BaseState").name : null, on: parseOnOff(config.get("ON")), off: parseOnOff(config.get("OFF")), order: parseOrder(config.get("Order")), groups: null }; } }, { key: "numPages", get: function get() { var obj = this.toplevelPagesDict.get("Count"); if (!Number.isInteger(obj)) { throw new _util.FormatError("Page count in top-level pages dictionary is not an integer."); } return (0, _util.shadow)(this, "numPages", obj); } }, { key: "destinations", get: function get() { var obj = this._readDests(), dests = Object.create(null); if (obj instanceof NameTree) { var names = obj.getAll(); for (var name in names) { dests[name] = fetchDestination(names[name]); } } else if (obj instanceof _primitives.Dict) { obj.forEach(function (key, value) { if (value) { dests[key] = fetchDestination(value); } }); } return (0, _util.shadow)(this, "destinations", dests); } }, { key: "getDestination", value: function getDestination(destinationId) { var obj = this._readDests(); if (obj instanceof NameTree || obj instanceof _primitives.Dict) { return fetchDestination(obj.get(destinationId) || null); } return null; } }, { key: "_readDests", value: function _readDests() { var obj = this._catDict.get("Names"); if (obj && obj.has("Dests")) { return new NameTree(obj.getRaw("Dests"), this.xref); } else if (this._catDict.has("Dests")) { return this._catDict.get("Dests"); } return undefined; } }, { key: "pageLabels", get: function get() { var obj = null; try { obj = this._readPageLabels(); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)("Unable to read page labels."); } return (0, _util.shadow)(this, "pageLabels", obj); } }, { key: "_readPageLabels", value: function _readPageLabels() { var obj = this._catDict.getRaw("PageLabels"); if (!obj) { return null; } var pageLabels = new Array(this.numPages); var style = null, prefix = ""; var numberTree = new NumberTree(obj, this.xref); var nums = numberTree.getAll(); var currentLabel = "", currentIndex = 1; for (var i = 0, ii = this.numPages; i < ii; i++) { if (i in nums) { var labelDict = nums[i]; if (!(0, _primitives.isDict)(labelDict)) { throw new _util.FormatError("PageLabel is not a dictionary."); } if (labelDict.has("Type") && !(0, _primitives.isName)(labelDict.get("Type"), "PageLabel")) { throw new _util.FormatError("Invalid type in PageLabel dictionary."); } if (labelDict.has("S")) { var s = labelDict.get("S"); if (!(0, _primitives.isName)(s)) { throw new _util.FormatError("Invalid style in PageLabel dictionary."); } style = s.name; } else { style = null; } if (labelDict.has("P")) { var p = labelDict.get("P"); if (!(0, _util.isString)(p)) { throw new _util.FormatError("Invalid prefix in PageLabel dictionary."); } prefix = (0, _util.stringToPDFString)(p); } else { prefix = ""; } if (labelDict.has("St")) { var st = labelDict.get("St"); if (!(Number.isInteger(st) && st >= 1)) { throw new _util.FormatError("Invalid start in PageLabel dictionary."); } currentIndex = st; } else { currentIndex = 1; } } switch (style) { case "D": currentLabel = currentIndex; break; case "R": case "r": currentLabel = (0, _core_utils.toRomanNumerals)(currentIndex, style === "r"); break; case "A": case "a": var LIMIT = 26; var A_UPPER_CASE = 0x41, A_LOWER_CASE = 0x61; var baseCharCode = style === "a" ? A_LOWER_CASE : A_UPPER_CASE; var letterIndex = currentIndex - 1; var character = String.fromCharCode(baseCharCode + letterIndex % LIMIT); var charBuf = []; for (var j = 0, jj = letterIndex / LIMIT | 0; j <= jj; j++) { charBuf.push(character); } currentLabel = charBuf.join(""); break; default: if (style) { throw new _util.FormatError("Invalid style \"".concat(style, "\" in PageLabel dictionary.")); } currentLabel = ""; } pageLabels[i] = prefix + currentLabel; currentIndex++; } return pageLabels; } }, { key: "pageLayout", get: function get() { var obj = this._catDict.get("PageLayout"); var pageLayout = ""; if ((0, _primitives.isName)(obj)) { switch (obj.name) { case "SinglePage": case "OneColumn": case "TwoColumnLeft": case "TwoColumnRight": case "TwoPageLeft": case "TwoPageRight": pageLayout = obj.name; } } return (0, _util.shadow)(this, "pageLayout", pageLayout); } }, { key: "pageMode", get: function get() { var obj = this._catDict.get("PageMode"); var pageMode = "UseNone"; if ((0, _primitives.isName)(obj)) { switch (obj.name) { case "UseNone": case "UseOutlines": case "UseThumbs": case "FullScreen": case "UseOC": case "UseAttachments": pageMode = obj.name; } } return (0, _util.shadow)(this, "pageMode", pageMode); } }, { key: "viewerPreferences", get: function get() { var _this = this; var ViewerPreferencesValidators = { HideToolbar: _util.isBool, HideMenubar: _util.isBool, HideWindowUI: _util.isBool, FitWindow: _util.isBool, CenterWindow: _util.isBool, DisplayDocTitle: _util.isBool, NonFullScreenPageMode: _primitives.isName, Direction: _primitives.isName, ViewArea: _primitives.isName, ViewClip: _primitives.isName, PrintArea: _primitives.isName, PrintClip: _primitives.isName, PrintScaling: _primitives.isName, Duplex: _primitives.isName, PickTrayByPDFSize: _util.isBool, PrintPageRange: Array.isArray, NumCopies: Number.isInteger }; var obj = this._catDict.get("ViewerPreferences"); var prefs = null; if ((0, _primitives.isDict)(obj)) { for (var key in ViewerPreferencesValidators) { if (!obj.has(key)) { continue; } var value = obj.get(key); if (!ViewerPreferencesValidators[key](value)) { (0, _util.info)("Bad value in ViewerPreferences for \"".concat(key, "\".")); continue; } var prefValue = void 0; switch (key) { case "NonFullScreenPageMode": switch (value.name) { case "UseNone": case "UseOutlines": case "UseThumbs": case "UseOC": prefValue = value.name; break; default: prefValue = "UseNone"; } break; case "Direction": switch (value.name) { case "L2R": case "R2L": prefValue = value.name; break; default: prefValue = "L2R"; } break; case "ViewArea": case "ViewClip": case "PrintArea": case "PrintClip": switch (value.name) { case "MediaBox": case "CropBox": case "BleedBox": case "TrimBox": case "ArtBox": prefValue = value.name; break; default: prefValue = "CropBox"; } break; case "PrintScaling": switch (value.name) { case "None": case "AppDefault": prefValue = value.name; break; default: prefValue = "AppDefault"; } break; case "Duplex": switch (value.name) { case "Simplex": case "DuplexFlipShortEdge": case "DuplexFlipLongEdge": prefValue = value.name; break; default: prefValue = "None"; } break; case "PrintPageRange": var length = value.length; if (length % 2 !== 0) { break; } var isValid = value.every(function (page, i, arr) { return Number.isInteger(page) && page > 0 && (i === 0 || page >= arr[i - 1]) && page <= _this.numPages; }); if (isValid) { prefValue = value; } break; case "NumCopies": if (value > 0) { prefValue = value; } break; default: if (typeof value !== "boolean") { throw new _util.FormatError("viewerPreferences - expected a boolean value for: ".concat(key)); } prefValue = value; } if (prefValue !== undefined) { if (!prefs) { prefs = Object.create(null); } prefs[key] = prefValue; } else { (0, _util.info)("Bad value in ViewerPreferences for \"".concat(key, "\".")); } } } return (0, _util.shadow)(this, "viewerPreferences", prefs); } }, { key: "openAction", get: function get() { var obj = this._catDict.get("OpenAction"); var openAction = Object.create(null); if ((0, _primitives.isDict)(obj)) { var destDict = new _primitives.Dict(this.xref); destDict.set("A", obj); var resultObj = { url: null, dest: null, action: null }; Catalog.parseDestDictionary({ destDict: destDict, resultObj: resultObj }); if (Array.isArray(resultObj.dest)) { openAction.dest = resultObj.dest; } else if (resultObj.action) { openAction.action = resultObj.action; } } else if (Array.isArray(obj)) { openAction.dest = obj; } return (0, _util.shadow)(this, "openAction", (0, _util.objectSize)(openAction) > 0 ? openAction : null); } }, { key: "attachments", get: function get() { var obj = this._catDict.get("Names"); var attachments = null; if (obj && obj.has("EmbeddedFiles")) { var nameTree = new NameTree(obj.getRaw("EmbeddedFiles"), this.xref); var names = nameTree.getAll(); for (var name in names) { var fs = new FileSpec(names[name], this.xref); if (!attachments) { attachments = Object.create(null); } attachments[(0, _util.stringToPDFString)(name)] = fs.serializable; } } return (0, _util.shadow)(this, "attachments", attachments); } }, { key: "_collectJavaScript", value: function _collectJavaScript() { var obj = this._catDict.get("Names"); var javaScript = null; function appendIfJavaScriptDict(name, jsDict) { var type = jsDict.get("S"); if (!(0, _primitives.isName)(type, "JavaScript")) { return; } var js = jsDict.get("JS"); if ((0, _primitives.isStream)(js)) { js = (0, _util.bytesToString)(js.getBytes()); } else if (!(0, _util.isString)(js)) { return; } if (javaScript === null) { javaScript = Object.create(null); } javaScript[name] = (0, _util.stringToPDFString)(js); } if (obj && obj.has("JavaScript")) { var nameTree = new NameTree(obj.getRaw("JavaScript"), this.xref); var names = nameTree.getAll(); for (var name in names) { var jsDict = names[name]; if ((0, _primitives.isDict)(jsDict)) { appendIfJavaScriptDict(name, jsDict); } } } var openAction = this._catDict.get("OpenAction"); if ((0, _primitives.isDict)(openAction) && (0, _primitives.isName)(openAction.get("S"), "JavaScript")) { appendIfJavaScriptDict("OpenAction", openAction); } return javaScript; } }, { key: "javaScript", get: function get() { var javaScript = this._collectJavaScript(); return (0, _util.shadow)(this, "javaScript", javaScript ? Object.values(javaScript) : null); } }, { key: "jsActions", get: function get() { var js = this._collectJavaScript(); var actions = (0, _core_utils.collectActions)(this.xref, this._catDict, _util.DocumentActionEventType); if (!actions && js) { actions = Object.create(null); } if (actions && js) { for (var _i = 0, _Object$entries = Object.entries(js); _i < _Object$entries.length; _i++) { var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2), key = _Object$entries$_i[0], val = _Object$entries$_i[1]; if (key in actions) { actions[key].push(val); } else { actions[key] = [val]; } } } return (0, _util.shadow)(this, "jsActions", actions); } }, { key: "fontFallback", value: function fontFallback(id, handler) { var promises = []; this.fontCache.forEach(function (promise) { promises.push(promise); }); return Promise.all(promises).then(function (translatedFonts) { var _iterator5 = _createForOfIteratorHelper(translatedFonts), _step5; try { for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { var translatedFont = _step5.value; if (translatedFont.loadedName === id) { translatedFont.fallback(handler); return; } } } catch (err) { _iterator5.e(err); } finally { _iterator5.f(); } }); } }, { key: "cleanup", value: function cleanup() { var _this2 = this; var manuallyTriggered = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; (0, _primitives.clearPrimitiveCaches)(); this.globalImageCache.clear(manuallyTriggered); this.pageKidsCountCache.clear(); this.nonBlendModesSet.clear(); var promises = []; this.fontCache.forEach(function (promise) { promises.push(promise); }); return Promise.all(promises).then(function (translatedFonts) { var _iterator6 = _createForOfIteratorHelper(translatedFonts), _step6; try { for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) { var dict = _step6.value.dict; delete dict.cacheKey; } } catch (err) { _iterator6.e(err); } finally { _iterator6.f(); } _this2.fontCache.clear(); _this2.builtInCMapCache.clear(); }); } }, { key: "getPageDict", value: function getPageDict(pageIndex) { var capability = (0, _util.createPromiseCapability)(); var nodesToVisit = [this._catDict.getRaw("Pages")]; var visitedNodes = new _primitives.RefSet(); var xref = this.xref, pageKidsCountCache = this.pageKidsCountCache; var count, currentPageIndex = 0; function next() { var _loop = function _loop() { var currentNode = nodesToVisit.pop(); if ((0, _primitives.isRef)(currentNode)) { count = pageKidsCountCache.get(currentNode); if (count > 0 && currentPageIndex + count < pageIndex) { currentPageIndex += count; return "continue"; } if (visitedNodes.has(currentNode)) { capability.reject(new _util.FormatError("Pages tree contains circular reference.")); return { v: void 0 }; } visitedNodes.put(currentNode); xref.fetchAsync(currentNode).then(function (obj) { if ((0, _primitives.isDict)(obj, "Page") || (0, _primitives.isDict)(obj) && !obj.has("Kids")) { if (pageIndex === currentPageIndex) { if (currentNode && !pageKidsCountCache.has(currentNode)) { pageKidsCountCache.put(currentNode, 1); } capability.resolve([obj, currentNode]); } else { currentPageIndex++; next(); } return; } nodesToVisit.push(obj); next(); }, capability.reject); return { v: void 0 }; } if (!(0, _primitives.isDict)(currentNode)) { capability.reject(new _util.FormatError("Page dictionary kid reference points to wrong type of object.")); return { v: void 0 }; } count = currentNode.get("Count"); if (Number.isInteger(count) && count >= 0) { var objId = currentNode.objId; if (objId && !pageKidsCountCache.has(objId)) { pageKidsCountCache.put(objId, count); } if (currentPageIndex + count <= pageIndex) { currentPageIndex += count; return "continue"; } } var kids = currentNode.get("Kids"); if (!Array.isArray(kids)) { if ((0, _primitives.isName)(currentNode.get("Type"), "Page") || !currentNode.has("Type") && currentNode.has("Contents")) { if (currentPageIndex === pageIndex) { capability.resolve([currentNode, null]); return { v: void 0 }; } currentPageIndex++; return "continue"; } capability.reject(new _util.FormatError("Page dictionary kids object is not an array.")); return { v: void 0 }; } for (var last = kids.length - 1; last >= 0; last--) { nodesToVisit.push(kids[last]); } }; while (nodesToVisit.length) { var _ret = _loop(); if (_ret === "continue") continue; if (_typeof(_ret) === "object") return _ret.v; } capability.reject(new Error("Page index ".concat(pageIndex, " not found."))); } next(); return capability.promise; } }, { key: "getPageIndex", value: function getPageIndex(pageRef) { var xref = this.xref; function pagesBeforeRef(kidRef) { var total = 0, parentRef; return xref.fetchAsync(kidRef).then(function (node) { if ((0, _primitives.isRefsEqual)(kidRef, pageRef) && !(0, _primitives.isDict)(node, "Page") && !((0, _primitives.isDict)(node) && !node.has("Type") && node.has("Contents"))) { throw new _util.FormatError("The reference does not point to a /Page dictionary."); } if (!node) { return null; } if (!(0, _primitives.isDict)(node)) { throw new _util.FormatError("Node must be a dictionary."); } parentRef = node.getRaw("Parent"); return node.getAsync("Parent"); }).then(function (parent) { if (!parent) { return null; } if (!(0, _primitives.isDict)(parent)) { throw new _util.FormatError("Parent must be a dictionary."); } return parent.getAsync("Kids"); }).then(function (kids) { if (!kids) { return null; } var kidPromises = []; var found = false; for (var i = 0, ii = kids.length; i < ii; i++) { var kid = kids[i]; if (!(0, _primitives.isRef)(kid)) { throw new _util.FormatError("Kid must be a reference."); } if ((0, _primitives.isRefsEqual)(kid, kidRef)) { found = true; break; } kidPromises.push(xref.fetchAsync(kid).then(function (obj) { if (!(0, _primitives.isDict)(obj)) { throw new _util.FormatError("Kid node must be a dictionary."); } if (obj.has("Count")) { total += obj.get("Count"); } else { total++; } })); } if (!found) { throw new _util.FormatError("Kid reference not found in parent's kids."); } return Promise.all(kidPromises).then(function () { return [total, parentRef]; }); }); } var total = 0; function next(ref) { return pagesBeforeRef(ref).then(function (args) { if (!args) { return total; } var _args = _slicedToArray(args, 2), count = _args[0], parentRef = _args[1]; total += count; return next(parentRef); }); } return next(pageRef); } }], [{ key: "parseDestDictionary", value: function parseDestDictionary(params) { function addDefaultProtocolToUrl(url) { return url.startsWith("www.") ? "http://".concat(url) : url; } function tryConvertUrlEncoding(url) { try { return (0, _util.stringToUTF8String)(url); } catch (e) { return url; } } var destDict = params.destDict; if (!(0, _primitives.isDict)(destDict)) { (0, _util.warn)("parseDestDictionary: `destDict` must be a dictionary."); return; } var resultObj = params.resultObj; if (_typeof(resultObj) !== "object") { (0, _util.warn)("parseDestDictionary: `resultObj` must be an object."); return; } var docBaseUrl = params.docBaseUrl || null; var action = destDict.get("A"), url, dest; if (!(0, _primitives.isDict)(action)) { if (destDict.has("Dest")) { action = destDict.get("Dest"); } else { action = destDict.get("AA"); if ((0, _primitives.isDict)(action)) { if (action.has("D")) { action = action.get("D"); } else if (action.has("U")) { action = action.get("U"); } } } } if ((0, _primitives.isDict)(action)) { var actionType = action.get("S"); if (!(0, _primitives.isName)(actionType)) { (0, _util.warn)("parseDestDictionary: Invalid type in Action dictionary."); return; } var actionName = actionType.name; switch (actionName) { case "URI": url = action.get("URI"); if ((0, _primitives.isName)(url)) { url = "/" + url.name; } else if ((0, _util.isString)(url)) { url = addDefaultProtocolToUrl(url); } break; case "GoTo": dest = action.get("D"); break; case "Launch": case "GoToR": var urlDict = action.get("F"); if ((0, _primitives.isDict)(urlDict)) { url = urlDict.get("F") || null; } else if ((0, _util.isString)(urlDict)) { url = urlDict; } var remoteDest = action.get("D"); if (remoteDest) { if ((0, _primitives.isName)(remoteDest)) { remoteDest = remoteDest.name; } if ((0, _util.isString)(url)) { var baseUrl = url.split("#")[0]; if ((0, _util.isString)(remoteDest)) { url = baseUrl + "#" + remoteDest; } else if (Array.isArray(remoteDest)) { url = baseUrl + "#" + JSON.stringify(remoteDest); } } } var newWindow = action.get("NewWindow"); if ((0, _util.isBool)(newWindow)) { resultObj.newWindow = newWindow; } break; case "Named": var namedAction = action.get("N"); if ((0, _primitives.isName)(namedAction)) { resultObj.action = namedAction.name; } break; case "JavaScript": var jsAction = action.get("JS"); var js; if ((0, _primitives.isStream)(jsAction)) { js = (0, _util.bytesToString)(jsAction.getBytes()); } else if ((0, _util.isString)(jsAction)) { js = jsAction; } if (js) { var URL_OPEN_METHODS = ["app.launchURL", "window.open"]; var regex = new RegExp("^\\s*(" + URL_OPEN_METHODS.join("|").split(".").join("\\.") + ")\\((?:'|\")([^'\"]*)(?:'|\")(?:,\\s*(\\w+)\\)|\\))", "i"); var jsUrl = regex.exec((0, _util.stringToPDFString)(js)); if (jsUrl && jsUrl[2]) { url = jsUrl[2]; if (jsUrl[3] === "true" && jsUrl[1] === "app.launchURL") { resultObj.newWindow = true; } break; } } default: (0, _util.warn)("parseDestDictionary: unsupported action type \"".concat(actionName, "\".")); break; } } else if (destDict.has("Dest")) { dest = destDict.get("Dest"); } if ((0, _util.isString)(url)) { url = tryConvertUrlEncoding(url); var absoluteUrl = (0, _util.createValidAbsoluteUrl)(url, docBaseUrl); if (absoluteUrl) { resultObj.url = absoluteUrl.href; } resultObj.unsafeUrl = url; } if (dest) { if ((0, _primitives.isName)(dest)) { dest = dest.name; } if ((0, _util.isString)(dest) || Array.isArray(dest)) { resultObj.dest = dest; } } } }]); return Catalog; }(); exports.Catalog = Catalog; var XRef = function XRefClosure() { function XRef(stream, pdfManager) { this.stream = stream; this.pdfManager = pdfManager; this.entries = []; this.xrefstms = Object.create(null); this._cacheMap = new Map(); this.stats = { streamTypes: Object.create(null), fontTypes: Object.create(null) }; this._newRefNum = null; } XRef.prototype = { getNewRef: function XRef_getNewRef() { if (this._newRefNum === null) { this._newRefNum = this.entries.length; } return _primitives.Ref.get(this._newRefNum++, 0); }, resetNewRef: function XRef_resetNewRef() { this._newRefNum = null; }, setStartXRef: function XRef_setStartXRef(startXRef) { this.startXRefQueue = [startXRef]; }, parse: function XRef_parse(recoveryMode) { var trailerDict; if (!recoveryMode) { trailerDict = this.readXRef(); } else { (0, _util.warn)("Indexing all PDF objects"); trailerDict = this.indexObjects(); } trailerDict.assignXref(this); this.trailer = trailerDict; var encrypt; try { encrypt = trailerDict.get("Encrypt"); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)("XRef.parse - Invalid \"Encrypt\" reference: \"".concat(ex, "\".")); } if ((0, _primitives.isDict)(encrypt)) { var ids = trailerDict.get("ID"); var fileId = ids && ids.length ? ids[0] : ""; encrypt.suppressEncryption = true; this.encrypt = new _crypto.CipherTransformFactory(encrypt, fileId, this.pdfManager.password); } var root; try { root = trailerDict.get("Root"); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)("XRef.parse - Invalid \"Root\" reference: \"".concat(ex, "\".")); } if ((0, _primitives.isDict)(root) && root.has("Pages")) { this.root = root; } else { if (!recoveryMode) { throw new _core_utils.XRefParseException(); } throw new _util.FormatError("Invalid root reference"); } }, processXRefTable: function XRef_processXRefTable(parser) { if (!("tableState" in this)) { this.tableState = { entryNum: 0, streamPos: parser.lexer.stream.pos, parserBuf1: parser.buf1, parserBuf2: parser.buf2 }; } var obj = this.readXRefTable(parser); if (!(0, _primitives.isCmd)(obj, "trailer")) { throw new _util.FormatError("Invalid XRef table: could not find trailer dictionary"); } var dict = parser.getObj(); if (!(0, _primitives.isDict)(dict) && dict.dict) { dict = dict.dict; } if (!(0, _primitives.isDict)(dict)) { throw new _util.FormatError("Invalid XRef table: could not parse trailer dictionary"); } delete this.tableState; return dict; }, readXRefTable: function XRef_readXRefTable(parser) { var stream = parser.lexer.stream; var tableState = this.tableState; stream.pos = tableState.streamPos; parser.buf1 = tableState.parserBuf1; parser.buf2 = tableState.parserBuf2; var obj; while (true) { if (!("firstEntryNum" in tableState) || !("entryCount" in tableState)) { if ((0, _primitives.isCmd)(obj = parser.getObj(), "trailer")) { break; } tableState.firstEntryNum = obj; tableState.entryCount = parser.getObj(); } var first = tableState.firstEntryNum; var count = tableState.entryCount; if (!Number.isInteger(first) || !Number.isInteger(count)) { throw new _util.FormatError("Invalid XRef table: wrong types in subsection header"); } for (var i = tableState.entryNum; i < count; i++) { tableState.streamPos = stream.pos; tableState.entryNum = i; tableState.parserBuf1 = parser.buf1; tableState.parserBuf2 = parser.buf2; var entry = {}; entry.offset = parser.getObj(); entry.gen = parser.getObj(); var type = parser.getObj(); if (type instanceof _primitives.Cmd) { switch (type.cmd) { case "f": entry.free = true; break; case "n": entry.uncompressed = true; break; } } if (!Number.isInteger(entry.offset) || !Number.isInteger(entry.gen) || !(entry.free || entry.uncompressed)) { throw new _util.FormatError("Invalid entry in XRef subsection: ".concat(first, ", ").concat(count)); } if (i === 0 && entry.free && first === 1) { first = 0; } if (!this.entries[i + first]) { this.entries[i + first] = entry; } } tableState.entryNum = 0; tableState.streamPos = stream.pos; tableState.parserBuf1 = parser.buf1; tableState.parserBuf2 = parser.buf2; delete tableState.firstEntryNum; delete tableState.entryCount; } if (this.entries[0] && !this.entries[0].free) { throw new _util.FormatError("Invalid XRef table: unexpected first object"); } return obj; }, processXRefStream: function XRef_processXRefStream(stream) { if (!("streamState" in this)) { var streamParameters = stream.dict; var byteWidths = streamParameters.get("W"); var range = streamParameters.get("Index"); if (!range) { range = [0, streamParameters.get("Size")]; } this.streamState = { entryRanges: range, byteWidths: byteWidths, entryNum: 0, streamPos: stream.pos }; } this.readXRefStream(stream); delete this.streamState; return stream.dict; }, readXRefStream: function XRef_readXRefStream(stream) { var i, j; var streamState = this.streamState; stream.pos = streamState.streamPos; var byteWidths = streamState.byteWidths; var typeFieldWidth = byteWidths[0]; var offsetFieldWidth = byteWidths[1]; var generationFieldWidth = byteWidths[2]; var entryRanges = streamState.entryRanges; while (entryRanges.length > 0) { var first = entryRanges[0]; var n = entryRanges[1]; if (!Number.isInteger(first) || !Number.isInteger(n)) { throw new _util.FormatError("Invalid XRef range fields: ".concat(first, ", ").concat(n)); } if (!Number.isInteger(typeFieldWidth) || !Number.isInteger(offsetFieldWidth) || !Number.isInteger(generationFieldWidth)) { throw new _util.FormatError("Invalid XRef entry fields length: ".concat(first, ", ").concat(n)); } for (i = streamState.entryNum; i < n; ++i) { streamState.entryNum = i; streamState.streamPos = stream.pos; var type = 0, offset = 0, generation = 0; for (j = 0; j < typeFieldWidth; ++j) { type = type << 8 | stream.getByte(); } if (typeFieldWidth === 0) { type = 1; } for (j = 0; j < offsetFieldWidth; ++j) { offset = offset << 8 | stream.getByte(); } for (j = 0; j < generationFieldWidth; ++j) { generation = generation << 8 | stream.getByte(); } var entry = {}; entry.offset = offset; entry.gen = generation; switch (type) { case 0: entry.free = true; break; case 1: entry.uncompressed = true; break; case 2: break; default: throw new _util.FormatError("Invalid XRef entry type: ".concat(type)); } if (!this.entries[first + i]) { this.entries[first + i] = entry; } } streamState.entryNum = 0; streamState.streamPos = stream.pos; entryRanges.splice(0, 2); } }, indexObjects: function XRef_indexObjects() { var TAB = 0x9, LF = 0xa, CR = 0xd, SPACE = 0x20; var PERCENT = 0x25, LT = 0x3c; function readToken(data, offset) { var token = "", ch = data[offset]; while (ch !== LF && ch !== CR && ch !== LT) { if (++offset >= data.length) { break; } token += String.fromCharCode(ch); ch = data[offset]; } return token; } function skipUntil(data, offset, what) { var length = what.length, dataLength = data.length; var skipped = 0; while (offset < dataLength) { var i = 0; while (i < length && data[offset + i] === what[i]) { ++i; } if (i >= length) { break; } offset++; skipped++; } return skipped; } var objRegExp = /^(\d+)\s+(\d+)\s+obj\b/; var endobjRegExp = /\bendobj[\b\s]$/; var nestedObjRegExp = /\s+(\d+\s+\d+\s+obj[\b\s<])$/; var CHECK_CONTENT_LENGTH = 25; var trailerBytes = new Uint8Array([116, 114, 97, 105, 108, 101, 114]); var startxrefBytes = new Uint8Array([115, 116, 97, 114, 116, 120, 114, 101, 102]); var objBytes = new Uint8Array([111, 98, 106]); var xrefBytes = new Uint8Array([47, 88, 82, 101, 102]); this.entries.length = 0; var stream = this.stream; stream.pos = 0; var buffer = stream.getBytes(); var position = stream.start, length = buffer.length; var trailers = [], xrefStms = []; while (position < length) { var ch = buffer[position]; if (ch === TAB || ch === LF || ch === CR || ch === SPACE) { ++position; continue; } if (ch === PERCENT) { do { ++position; if (position >= length) { break; } ch = buffer[position]; } while (ch !== LF && ch !== CR); continue; } var token = readToken(buffer, position); var m; if (token.startsWith("xref") && (token.length === 4 || /\s/.test(token[4]))) { position += skipUntil(buffer, position, trailerBytes); trailers.push(position); position += skipUntil(buffer, position, startxrefBytes); } else if (m = objRegExp.exec(token)) { var num = m[1] | 0, gen = m[2] | 0; if (!this.entries[num] || this.entries[num].gen === gen) { this.entries[num] = { offset: position - stream.start, gen: gen, uncompressed: true }; } var contentLength = void 0, startPos = position + token.length; while (startPos < buffer.length) { var endPos = startPos + skipUntil(buffer, startPos, objBytes) + 4; contentLength = endPos - position; var checkPos = Math.max(endPos - CHECK_CONTENT_LENGTH, startPos); var tokenStr = (0, _util.bytesToString)(buffer.subarray(checkPos, endPos)); if (endobjRegExp.test(tokenStr)) { break; } else { var objToken = nestedObjRegExp.exec(tokenStr); if (objToken && objToken[1]) { (0, _util.warn)('indexObjects: Found new "obj" inside of another "obj", ' + 'caused by missing "endobj" -- trying to recover.'); contentLength -= objToken[1].length; break; } } startPos = endPos; } var content = buffer.subarray(position, position + contentLength); var xrefTagOffset = skipUntil(content, 0, xrefBytes); if (xrefTagOffset < contentLength && content[xrefTagOffset + 5] < 64) { xrefStms.push(position - stream.start); this.xrefstms[position - stream.start] = 1; } position += contentLength; } else if (token.startsWith("trailer") && (token.length === 7 || /\s/.test(token[7]))) { trailers.push(position); position += skipUntil(buffer, position, startxrefBytes); } else { position += token.length + 1; } } for (var i = 0, ii = xrefStms.length; i < ii; ++i) { this.startXRefQueue.push(xrefStms[i]); this.readXRef(true); } var trailerDict; for (var _i2 = 0, _ii = trailers.length; _i2 < _ii; ++_i2) { stream.pos = trailers[_i2]; var parser = new _parser.Parser({ lexer: new _parser.Lexer(stream), xref: this, allowStreams: true, recoveryMode: true }); var obj = parser.getObj(); if (!(0, _primitives.isCmd)(obj, "trailer")) { continue; } var dict = parser.getObj(); if (!(0, _primitives.isDict)(dict)) { continue; } try { var rootDict = dict.get("Root"); if (!(rootDict instanceof _primitives.Dict)) { continue; } var pagesDict = rootDict.get("Pages"); if (!(pagesDict instanceof _primitives.Dict)) { continue; } var pagesCount = pagesDict.get("Count"); if (!Number.isInteger(pagesCount)) { continue; } } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } continue; } if (dict.has("ID")) { return dict; } trailerDict = dict; } if (trailerDict) { return trailerDict; } throw new _util.InvalidPDFException("Invalid PDF structure."); }, readXRef: function XRef_readXRef(recoveryMode) { var stream = this.stream; var startXRefParsedCache = Object.create(null); try { while (this.startXRefQueue.length) { var startXRef = this.startXRefQueue[0]; if (startXRefParsedCache[startXRef]) { (0, _util.warn)("readXRef - skipping XRef table since it was already parsed."); this.startXRefQueue.shift(); continue; } startXRefParsedCache[startXRef] = true; stream.pos = startXRef + stream.start; var parser = new _parser.Parser({ lexer: new _parser.Lexer(stream), xref: this, allowStreams: true }); var obj = parser.getObj(); var dict; if ((0, _primitives.isCmd)(obj, "xref")) { dict = this.processXRefTable(parser); if (!this.topDict) { this.topDict = dict; } obj = dict.get("XRefStm"); if (Number.isInteger(obj)) { var pos = obj; if (!(pos in this.xrefstms)) { this.xrefstms[pos] = 1; this.startXRefQueue.push(pos); } } } else if (Number.isInteger(obj)) { if (!Number.isInteger(parser.getObj()) || !(0, _primitives.isCmd)(parser.getObj(), "obj") || !(0, _primitives.isStream)(obj = parser.getObj())) { throw new _util.FormatError("Invalid XRef stream"); } dict = this.processXRefStream(obj); if (!this.topDict) { this.topDict = dict; } if (!dict) { throw new _util.FormatError("Failed to read XRef stream"); } } else { throw new _util.FormatError("Invalid XRef stream header"); } obj = dict.get("Prev"); if (Number.isInteger(obj)) { this.startXRefQueue.push(obj); } else if ((0, _primitives.isRef)(obj)) { this.startXRefQueue.push(obj.num); } this.startXRefQueue.shift(); } return this.topDict; } catch (e) { if (e instanceof _core_utils.MissingDataException) { throw e; } (0, _util.info)("(while reading XRef): " + e); } if (recoveryMode) { return undefined; } throw new _core_utils.XRefParseException(); }, getEntry: function XRef_getEntry(i) { var xrefEntry = this.entries[i]; if (xrefEntry && !xrefEntry.free && xrefEntry.offset) { return xrefEntry; } return null; }, fetchIfRef: function XRef_fetchIfRef(obj, suppressEncryption) { if (obj instanceof _primitives.Ref) { return this.fetch(obj, suppressEncryption); } return obj; }, fetch: function XRef_fetch(ref, suppressEncryption) { if (!(ref instanceof _primitives.Ref)) { throw new Error("ref object is not a reference"); } var num = ref.num; var cacheEntry = this._cacheMap.get(num); if (cacheEntry !== undefined) { if (cacheEntry instanceof _primitives.Dict && !cacheEntry.objId) { cacheEntry.objId = ref.toString(); } return cacheEntry; } var xrefEntry = this.getEntry(num); if (xrefEntry === null) { this._cacheMap.set(num, xrefEntry); return xrefEntry; } if (xrefEntry.uncompressed) { xrefEntry = this.fetchUncompressed(ref, xrefEntry, suppressEncryption); } else { xrefEntry = this.fetchCompressed(ref, xrefEntry, suppressEncryption); } if ((0, _primitives.isDict)(xrefEntry)) { xrefEntry.objId = ref.toString(); } else if ((0, _primitives.isStream)(xrefEntry)) { xrefEntry.dict.objId = ref.toString(); } return xrefEntry; }, fetchUncompressed: function fetchUncompressed(ref, xrefEntry) { var suppressEncryption = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var gen = ref.gen; var num = ref.num; if (xrefEntry.gen !== gen) { throw new _core_utils.XRefEntryException("Inconsistent generation in XRef: ".concat(ref)); } var stream = this.stream.makeSubStream(xrefEntry.offset + this.stream.start); var parser = new _parser.Parser({ lexer: new _parser.Lexer(stream), xref: this, allowStreams: true }); var obj1 = parser.getObj(); var obj2 = parser.getObj(); var obj3 = parser.getObj(); if (obj1 !== num || obj2 !== gen || !(obj3 instanceof _primitives.Cmd)) { throw new _core_utils.XRefEntryException("Bad (uncompressed) XRef entry: ".concat(ref)); } if (obj3.cmd !== "obj") { if (obj3.cmd.startsWith("obj")) { num = parseInt(obj3.cmd.substring(3), 10); if (!Number.isNaN(num)) { return num; } } throw new _core_utils.XRefEntryException("Bad (uncompressed) XRef entry: ".concat(ref)); } if (this.encrypt && !suppressEncryption) { xrefEntry = parser.getObj(this.encrypt.createCipherTransform(num, gen)); } else { xrefEntry = parser.getObj(); } if (!(0, _primitives.isStream)(xrefEntry)) { this._cacheMap.set(num, xrefEntry); } return xrefEntry; }, fetchCompressed: function fetchCompressed(ref, xrefEntry) { var suppressEncryption = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var tableOffset = xrefEntry.offset; var stream = this.fetch(_primitives.Ref.get(tableOffset, 0)); if (!(0, _primitives.isStream)(stream)) { throw new _util.FormatError("bad ObjStm stream"); } var first = stream.dict.get("First"); var n = stream.dict.get("N"); if (!Number.isInteger(first) || !Number.isInteger(n)) { throw new _util.FormatError("invalid first and n parameters for ObjStm stream"); } var parser = new _parser.Parser({ lexer: new _parser.Lexer(stream), xref: this, allowStreams: true }); var nums = new Array(n); for (var i = 0; i < n; ++i) { var num = parser.getObj(); if (!Number.isInteger(num)) { throw new _util.FormatError("invalid object number in the ObjStm stream: ".concat(num)); } var offset = parser.getObj(); if (!Number.isInteger(offset)) { throw new _util.FormatError("invalid object offset in the ObjStm stream: ".concat(offset)); } nums[i] = num; } var entries = new Array(n); for (var _i3 = 0; _i3 < n; ++_i3) { var obj = parser.getObj(); entries[_i3] = obj; if (parser.buf1 instanceof _primitives.Cmd && parser.buf1.cmd === "endobj") { parser.shift(); } if ((0, _primitives.isStream)(obj)) { continue; } var _num = nums[_i3], entry = this.entries[_num]; if (entry && entry.offset === tableOffset && entry.gen === _i3) { this._cacheMap.set(_num, obj); } } xrefEntry = entries[xrefEntry.gen]; if (xrefEntry === undefined) { throw new _core_utils.XRefEntryException("Bad (compressed) XRef entry: ".concat(ref)); } return xrefEntry; }, fetchIfRefAsync: function fetchIfRefAsync(obj, suppressEncryption) { var _this3 = this; return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() { return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (!(obj instanceof _primitives.Ref)) { _context.next = 2; break; } return _context.abrupt("return", _this3.fetchAsync(obj, suppressEncryption)); case 2: return _context.abrupt("return", obj); case 3: case "end": return _context.stop(); } } }, _callee); }))(); }, fetchAsync: function fetchAsync(ref, suppressEncryption) { var _this4 = this; return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.prev = 0; return _context2.abrupt("return", _this4.fetch(ref, suppressEncryption)); case 4: _context2.prev = 4; _context2.t0 = _context2["catch"](0); if (_context2.t0 instanceof _core_utils.MissingDataException) { _context2.next = 8; break; } throw _context2.t0; case 8: _context2.next = 10; return _this4.pdfManager.requestRange(_context2.t0.begin, _context2.t0.end); case 10: return _context2.abrupt("return", _this4.fetchAsync(ref, suppressEncryption)); case 11: case "end": return _context2.stop(); } } }, _callee2, null, [[0, 4]]); }))(); }, getCatalogObj: function XRef_getCatalogObj() { return this.root; } }; return XRef; }(); exports.XRef = XRef; var NameOrNumberTree = /*#__PURE__*/function () { function NameOrNumberTree(root, xref, type) { _classCallCheck(this, NameOrNumberTree); if (this.constructor === NameOrNumberTree) { (0, _util.unreachable)("Cannot initialize NameOrNumberTree."); } this.root = root; this.xref = xref; this._type = type; } _createClass(NameOrNumberTree, [{ key: "getAll", value: function getAll() { var dict = Object.create(null); if (!this.root) { return dict; } var xref = this.xref; var processed = new _primitives.RefSet(); processed.put(this.root); var queue = [this.root]; while (queue.length > 0) { var obj = xref.fetchIfRef(queue.shift()); if (!(0, _primitives.isDict)(obj)) { continue; } if (obj.has("Kids")) { var kids = obj.get("Kids"); for (var i = 0, ii = kids.length; i < ii; i++) { var kid = kids[i]; if (processed.has(kid)) { throw new _util.FormatError("Duplicate entry in \"".concat(this._type, "\" tree.")); } queue.push(kid); processed.put(kid); } continue; } var entries = obj.get(this._type); if (Array.isArray(entries)) { for (var _i4 = 0, _ii2 = entries.length; _i4 < _ii2; _i4 += 2) { dict[xref.fetchIfRef(entries[_i4])] = xref.fetchIfRef(entries[_i4 + 1]); } } } return dict; } }, { key: "get", value: function get(key) { if (!this.root) { return null; } var xref = this.xref; var kidsOrEntries = xref.fetchIfRef(this.root); var loopCount = 0; var MAX_LEVELS = 10; while (kidsOrEntries.has("Kids")) { if (++loopCount > MAX_LEVELS) { (0, _util.warn)("Search depth limit reached for \"".concat(this._type, "\" tree.")); return null; } var kids = kidsOrEntries.get("Kids"); if (!Array.isArray(kids)) { return null; } var l = 0, r = kids.length - 1; while (l <= r) { var m = l + r >> 1; var kid = xref.fetchIfRef(kids[m]); var limits = kid.get("Limits"); if (key < xref.fetchIfRef(limits[0])) { r = m - 1; } else if (key > xref.fetchIfRef(limits[1])) { l = m + 1; } else { kidsOrEntries = xref.fetchIfRef(kids[m]); break; } } if (l > r) { return null; } } var entries = kidsOrEntries.get(this._type); if (Array.isArray(entries)) { var _l = 0, _r = entries.length - 2; while (_l <= _r) { var tmp = _l + _r >> 1, _m = tmp + (tmp & 1); var currentKey = xref.fetchIfRef(entries[_m]); if (key < currentKey) { _r = _m - 2; } else if (key > currentKey) { _l = _m + 2; } else { return xref.fetchIfRef(entries[_m + 1]); } } (0, _util.info)("Falling back to an exhaustive search, for key \"".concat(key, "\", ") + "in \"".concat(this._type, "\" tree.")); for (var _m2 = 0, mm = entries.length; _m2 < mm; _m2 += 2) { var _currentKey = xref.fetchIfRef(entries[_m2]); if (_currentKey === key) { (0, _util.warn)("The \"".concat(key, "\" key was found at an incorrect, ") + "i.e. out-of-order, position in \"".concat(this._type, "\" tree.")); return xref.fetchIfRef(entries[_m2 + 1]); } } } return null; } }]); return NameOrNumberTree; }(); var NameTree = /*#__PURE__*/function (_NameOrNumberTree) { _inherits(NameTree, _NameOrNumberTree); var _super = _createSuper(NameTree); function NameTree(root, xref) { _classCallCheck(this, NameTree); return _super.call(this, root, xref, "Names"); } return NameTree; }(NameOrNumberTree); var NumberTree = /*#__PURE__*/function (_NameOrNumberTree2) { _inherits(NumberTree, _NameOrNumberTree2); var _super2 = _createSuper(NumberTree); function NumberTree(root, xref) { _classCallCheck(this, NumberTree); return _super2.call(this, root, xref, "Nums"); } return NumberTree; }(NameOrNumberTree); var FileSpec = function FileSpecClosure() { function FileSpec(root, xref) { if (!root || !(0, _primitives.isDict)(root)) { return; } this.xref = xref; this.root = root; if (root.has("FS")) { this.fs = root.get("FS"); } this.description = root.has("Desc") ? (0, _util.stringToPDFString)(root.get("Desc")) : ""; if (root.has("RF")) { (0, _util.warn)("Related file specifications are not supported"); } this.contentAvailable = true; if (!root.has("EF")) { this.contentAvailable = false; (0, _util.warn)("Non-embedded file specifications are not supported"); } } function pickPlatformItem(dict) { if (dict.has("UF")) { return dict.get("UF"); } else if (dict.has("F")) { return dict.get("F"); } else if (dict.has("Unix")) { return dict.get("Unix"); } else if (dict.has("Mac")) { return dict.get("Mac"); } else if (dict.has("DOS")) { return dict.get("DOS"); } return null; } FileSpec.prototype = { get filename() { if (!this._filename && this.root) { var filename = pickPlatformItem(this.root) || "unnamed"; this._filename = (0, _util.stringToPDFString)(filename).replace(/\\\\/g, "\\").replace(/\\\//g, "/").replace(/\\/g, "/"); } return this._filename; }, get content() { if (!this.contentAvailable) { return null; } if (!this.contentRef && this.root) { this.contentRef = pickPlatformItem(this.root.get("EF")); } var content = null; if (this.contentRef) { var xref = this.xref; var fileObj = xref.fetchIfRef(this.contentRef); if (fileObj && (0, _primitives.isStream)(fileObj)) { content = fileObj.getBytes(); } else { (0, _util.warn)("Embedded file specification points to non-existing/invalid " + "content"); } } else { (0, _util.warn)("Embedded file specification does not have a content"); } return content; }, get serializable() { return { filename: this.filename, content: this.content }; } }; return FileSpec; }(); exports.FileSpec = FileSpec; var ObjectLoader = function () { function mayHaveChildren(value) { return value instanceof _primitives.Ref || value instanceof _primitives.Dict || Array.isArray(value) || (0, _primitives.isStream)(value); } function addChildren(node, nodesToVisit) { if (node instanceof _primitives.Dict) { node = node.getRawValues(); } else if ((0, _primitives.isStream)(node)) { node = node.dict.getRawValues(); } else if (!Array.isArray(node)) { return; } var _iterator7 = _createForOfIteratorHelper(node), _step7; try { for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) { var rawValue = _step7.value; if (mayHaveChildren(rawValue)) { nodesToVisit.push(rawValue); } } } catch (err) { _iterator7.e(err); } finally { _iterator7.f(); } } function ObjectLoader(dict, keys, xref) { this.dict = dict; this.keys = keys; this.xref = xref; this.refSet = null; } ObjectLoader.prototype = { load: function load() { var _this5 = this; return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee3() { var keys, dict, nodesToVisit, i, ii, rawValue; return _regenerator["default"].wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: if (!(!_this5.xref.stream.allChunksLoaded || _this5.xref.stream.allChunksLoaded())) { _context3.next = 2; break; } return _context3.abrupt("return", undefined); case 2: keys = _this5.keys, dict = _this5.dict; _this5.refSet = new _primitives.RefSet(); nodesToVisit = []; for (i = 0, ii = keys.length; i < ii; i++) { rawValue = dict.getRaw(keys[i]); if (rawValue !== undefined) { nodesToVisit.push(rawValue); } } return _context3.abrupt("return", _this5._walk(nodesToVisit)); case 7: case "end": return _context3.stop(); } } }, _callee3); }))(); }, _walk: function _walk(nodesToVisit) { var _this6 = this; return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee4() { var nodesToRevisit, pendingRequests, currentNode, manager, baseStreams, foundMissingData, i, ii, stream, _i5, _ii3, node; return _regenerator["default"].wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: nodesToRevisit = []; pendingRequests = []; case 2: if (!nodesToVisit.length) { _context4.next = 25; break; } currentNode = nodesToVisit.pop(); if (!(currentNode instanceof _primitives.Ref)) { _context4.next = 21; break; } if (!_this6.refSet.has(currentNode)) { _context4.next = 7; break; } return _context4.abrupt("continue", 2); case 7: _context4.prev = 7; _this6.refSet.put(currentNode); currentNode = _this6.xref.fetch(currentNode); _context4.next = 21; break; case 12: _context4.prev = 12; _context4.t0 = _context4["catch"](7); if (_context4.t0 instanceof _core_utils.MissingDataException) { _context4.next = 19; break; } (0, _util.warn)("ObjectLoader._walk - requesting all data: \"".concat(_context4.t0, "\".")); _this6.refSet = null; manager = _this6.xref.stream.manager; return _context4.abrupt("return", manager.requestAllChunks()); case 19: nodesToRevisit.push(currentNode); pendingRequests.push({ begin: _context4.t0.begin, end: _context4.t0.end }); case 21: if (currentNode && currentNode.getBaseStreams) { baseStreams = currentNode.getBaseStreams(); foundMissingData = false; for (i = 0, ii = baseStreams.length; i < ii; i++) { stream = baseStreams[i]; if (stream.allChunksLoaded && !stream.allChunksLoaded()) { foundMissingData = true; pendingRequests.push({ begin: stream.start, end: stream.end }); } } if (foundMissingData) { nodesToRevisit.push(currentNode); } } addChildren(currentNode, nodesToVisit); _context4.next = 2; break; case 25: if (!pendingRequests.length) { _context4.next = 30; break; } _context4.next = 28; return _this6.xref.stream.manager.requestRanges(pendingRequests); case 28: for (_i5 = 0, _ii3 = nodesToRevisit.length; _i5 < _ii3; _i5++) { node = nodesToRevisit[_i5]; if (node instanceof _primitives.Ref) { _this6.refSet.remove(node); } } return _context4.abrupt("return", _this6._walk(nodesToRevisit)); case 30: _this6.refSet = null; return _context4.abrupt("return", undefined); case 32: case "end": return _context4.stop(); } } }, _callee4, null, [[7, 12]]); }))(); } }; return ObjectLoader; }(); exports.ObjectLoader = ObjectLoader; /***/ }), /* 141 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Parser = exports.Linearization = exports.Lexer = void 0; var _stream = __w_pdfjs_require__(142); var _util = __w_pdfjs_require__(4); var _primitives = __w_pdfjs_require__(135); var _core_utils = __w_pdfjs_require__(138); var _ccitt_stream = __w_pdfjs_require__(143); var _jbig2_stream = __w_pdfjs_require__(145); var _jpeg_stream = __w_pdfjs_require__(148); var _jpx_stream = __w_pdfjs_require__(150); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var MAX_LENGTH_TO_CACHE = 1000; var MAX_ADLER32_LENGTH = 5552; function computeAdler32(bytes) { var bytesLength = bytes.length; var a = 1, b = 0; for (var i = 0; i < bytesLength; ++i) { a += bytes[i] & 0xff; b += a; } return b % 65521 << 16 | a % 65521; } var Parser = /*#__PURE__*/function () { function Parser(_ref) { var lexer = _ref.lexer, xref = _ref.xref, _ref$allowStreams = _ref.allowStreams, allowStreams = _ref$allowStreams === void 0 ? false : _ref$allowStreams, _ref$recoveryMode = _ref.recoveryMode, recoveryMode = _ref$recoveryMode === void 0 ? false : _ref$recoveryMode; _classCallCheck(this, Parser); this.lexer = lexer; this.xref = xref; this.allowStreams = allowStreams; this.recoveryMode = recoveryMode; this.imageCache = Object.create(null); this.refill(); } _createClass(Parser, [{ key: "refill", value: function refill() { this.buf1 = this.lexer.getObj(); this.buf2 = this.lexer.getObj(); } }, { key: "shift", value: function shift() { if (this.buf2 instanceof _primitives.Cmd && this.buf2.cmd === "ID") { this.buf1 = this.buf2; this.buf2 = null; } else { this.buf1 = this.buf2; this.buf2 = this.lexer.getObj(); } } }, { key: "tryShift", value: function tryShift() { try { this.shift(); return true; } catch (e) { if (e instanceof _core_utils.MissingDataException) { throw e; } return false; } } }, { key: "getObj", value: function getObj() { var cipherTransform = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var buf1 = this.buf1; this.shift(); if (buf1 instanceof _primitives.Cmd) { switch (buf1.cmd) { case "BI": return this.makeInlineImage(cipherTransform); case "[": var array = []; while (!(0, _primitives.isCmd)(this.buf1, "]") && !(0, _primitives.isEOF)(this.buf1)) { array.push(this.getObj(cipherTransform)); } if ((0, _primitives.isEOF)(this.buf1)) { if (!this.recoveryMode) { throw new _util.FormatError("End of file inside array"); } return array; } this.shift(); return array; case "<<": var dict = new _primitives.Dict(this.xref); while (!(0, _primitives.isCmd)(this.buf1, ">>") && !(0, _primitives.isEOF)(this.buf1)) { if (!(0, _primitives.isName)(this.buf1)) { (0, _util.info)("Malformed dictionary: key must be a name object"); this.shift(); continue; } var key = this.buf1.name; this.shift(); if ((0, _primitives.isEOF)(this.buf1)) { break; } dict.set(key, this.getObj(cipherTransform)); } if ((0, _primitives.isEOF)(this.buf1)) { if (!this.recoveryMode) { throw new _util.FormatError("End of file inside dictionary"); } return dict; } if ((0, _primitives.isCmd)(this.buf2, "stream")) { return this.allowStreams ? this.makeStream(dict, cipherTransform) : dict; } this.shift(); return dict; default: return buf1; } } if (Number.isInteger(buf1)) { if (Number.isInteger(this.buf1) && (0, _primitives.isCmd)(this.buf2, "R")) { var ref = _primitives.Ref.get(buf1, this.buf1); this.shift(); this.shift(); return ref; } return buf1; } if (typeof buf1 === "string") { if (cipherTransform) { return cipherTransform.decryptString(buf1); } return buf1; } return buf1; } }, { key: "findDefaultInlineStreamEnd", value: function findDefaultInlineStreamEnd(stream) { var E = 0x45, I = 0x49, SPACE = 0x20, LF = 0xa, CR = 0xd, NUL = 0x0; var lexer = this.lexer, startPos = stream.pos, n = 10; var state = 0, ch, maybeEIPos; while ((ch = stream.getByte()) !== -1) { if (state === 0) { state = ch === E ? 1 : 0; } else if (state === 1) { state = ch === I ? 2 : 0; } else { (0, _util.assert)(state === 2, "findDefaultInlineStreamEnd - invalid state."); if (ch === SPACE || ch === LF || ch === CR) { maybeEIPos = stream.pos; var followingBytes = stream.peekBytes(n); for (var i = 0, ii = followingBytes.length; i < ii; i++) { ch = followingBytes[i]; if (ch === NUL && followingBytes[i + 1] !== NUL) { continue; } if (ch !== LF && ch !== CR && (ch < SPACE || ch > 0x7f)) { state = 0; break; } } if (state !== 2) { continue; } if (lexer.knownCommands) { var nextObj = lexer.peekObj(); if (nextObj instanceof _primitives.Cmd && !lexer.knownCommands[nextObj.cmd]) { state = 0; } } else { (0, _util.warn)("findDefaultInlineStreamEnd - `lexer.knownCommands` is undefined."); } if (state === 2) { break; } } else { state = 0; } } } if (ch === -1) { (0, _util.warn)("findDefaultInlineStreamEnd: " + "Reached the end of the stream without finding a valid EI marker"); if (maybeEIPos) { (0, _util.warn)('... trying to recover by using the last "EI" occurrence.'); stream.skip(-(stream.pos - maybeEIPos)); } } var endOffset = 4; stream.skip(-endOffset); ch = stream.peekByte(); stream.skip(endOffset); if (!(0, _core_utils.isWhiteSpace)(ch)) { endOffset--; } return stream.pos - endOffset - startPos; } }, { key: "findDCTDecodeInlineStreamEnd", value: function findDCTDecodeInlineStreamEnd(stream) { var startPos = stream.pos; var foundEOI = false, b, markerLength; while ((b = stream.getByte()) !== -1) { if (b !== 0xff) { continue; } switch (stream.getByte()) { case 0x00: break; case 0xff: stream.skip(-1); break; case 0xd9: foundEOI = true; break; case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc5: case 0xc6: case 0xc7: case 0xc9: case 0xca: case 0xcb: case 0xcd: case 0xce: case 0xcf: case 0xc4: case 0xcc: case 0xda: case 0xdb: case 0xdc: case 0xdd: case 0xde: case 0xdf: case 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7: case 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef: case 0xfe: markerLength = stream.getUint16(); if (markerLength > 2) { stream.skip(markerLength - 2); } else { stream.skip(-2); } break; } if (foundEOI) { break; } } var length = stream.pos - startPos; if (b === -1) { (0, _util.warn)("Inline DCTDecode image stream: " + "EOI marker not found, searching for /EI/ instead."); stream.skip(-length); return this.findDefaultInlineStreamEnd(stream); } this.inlineStreamSkipEI(stream); return length; } }, { key: "findASCII85DecodeInlineStreamEnd", value: function findASCII85DecodeInlineStreamEnd(stream) { var TILDE = 0x7e, GT = 0x3e; var startPos = stream.pos; var ch; while ((ch = stream.getByte()) !== -1) { if (ch === TILDE) { var tildePos = stream.pos; ch = stream.peekByte(); while ((0, _core_utils.isWhiteSpace)(ch)) { stream.skip(); ch = stream.peekByte(); } if (ch === GT) { stream.skip(); break; } if (stream.pos > tildePos) { var maybeEI = stream.peekBytes(2); if (maybeEI[0] === 0x45 && maybeEI[1] === 0x49) { break; } } } } var length = stream.pos - startPos; if (ch === -1) { (0, _util.warn)("Inline ASCII85Decode image stream: " + "EOD marker not found, searching for /EI/ instead."); stream.skip(-length); return this.findDefaultInlineStreamEnd(stream); } this.inlineStreamSkipEI(stream); return length; } }, { key: "findASCIIHexDecodeInlineStreamEnd", value: function findASCIIHexDecodeInlineStreamEnd(stream) { var GT = 0x3e; var startPos = stream.pos; var ch; while ((ch = stream.getByte()) !== -1) { if (ch === GT) { break; } } var length = stream.pos - startPos; if (ch === -1) { (0, _util.warn)("Inline ASCIIHexDecode image stream: " + "EOD marker not found, searching for /EI/ instead."); stream.skip(-length); return this.findDefaultInlineStreamEnd(stream); } this.inlineStreamSkipEI(stream); return length; } }, { key: "inlineStreamSkipEI", value: function inlineStreamSkipEI(stream) { var E = 0x45, I = 0x49; var state = 0, ch; while ((ch = stream.getByte()) !== -1) { if (state === 0) { state = ch === E ? 1 : 0; } else if (state === 1) { state = ch === I ? 2 : 0; } else if (state === 2) { break; } } } }, { key: "makeInlineImage", value: function makeInlineImage(cipherTransform) { var lexer = this.lexer; var stream = lexer.stream; var dict = new _primitives.Dict(this.xref); var dictLength; while (!(0, _primitives.isCmd)(this.buf1, "ID") && !(0, _primitives.isEOF)(this.buf1)) { if (!(0, _primitives.isName)(this.buf1)) { throw new _util.FormatError("Dictionary key must be a name object"); } var key = this.buf1.name; this.shift(); if ((0, _primitives.isEOF)(this.buf1)) { break; } dict.set(key, this.getObj(cipherTransform)); } if (lexer.beginInlineImagePos !== -1) { dictLength = stream.pos - lexer.beginInlineImagePos; } var filter = dict.get("Filter", "F"); var filterName; if ((0, _primitives.isName)(filter)) { filterName = filter.name; } else if (Array.isArray(filter)) { var filterZero = this.xref.fetchIfRef(filter[0]); if ((0, _primitives.isName)(filterZero)) { filterName = filterZero.name; } } var startPos = stream.pos; var length; if (filterName === "DCTDecode" || filterName === "DCT") { length = this.findDCTDecodeInlineStreamEnd(stream); } else if (filterName === "ASCII85Decode" || filterName === "A85") { length = this.findASCII85DecodeInlineStreamEnd(stream); } else if (filterName === "ASCIIHexDecode" || filterName === "AHx") { length = this.findASCIIHexDecodeInlineStreamEnd(stream); } else { length = this.findDefaultInlineStreamEnd(stream); } var imageStream = stream.makeSubStream(startPos, length, dict); var cacheKey; if (length < MAX_LENGTH_TO_CACHE && dictLength < MAX_ADLER32_LENGTH) { var imageBytes = imageStream.getBytes(); imageStream.reset(); var initialStreamPos = stream.pos; stream.pos = lexer.beginInlineImagePos; var dictBytes = stream.getBytes(dictLength); stream.pos = initialStreamPos; cacheKey = computeAdler32(imageBytes) + "_" + computeAdler32(dictBytes); var cacheEntry = this.imageCache[cacheKey]; if (cacheEntry !== undefined) { this.buf2 = _primitives.Cmd.get("EI"); this.shift(); cacheEntry.reset(); return cacheEntry; } } if (cipherTransform) { imageStream = cipherTransform.createStream(imageStream, length); } imageStream = this.filter(imageStream, dict, length); imageStream.dict = dict; if (cacheKey !== undefined) { imageStream.cacheKey = "inline_".concat(length, "_").concat(cacheKey); this.imageCache[cacheKey] = imageStream; } this.buf2 = _primitives.Cmd.get("EI"); this.shift(); return imageStream; } }, { key: "_findStreamLength", value: function _findStreamLength(startPos, signature) { var stream = this.lexer.stream; stream.pos = startPos; var SCAN_BLOCK_LENGTH = 2048; var signatureLength = signature.length; while (stream.pos < stream.end) { var scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH); var scanLength = scanBytes.length - signatureLength; if (scanLength <= 0) { break; } var pos = 0; while (pos < scanLength) { var j = 0; while (j < signatureLength && scanBytes[pos + j] === signature[j]) { j++; } if (j >= signatureLength) { stream.pos += pos; return stream.pos - startPos; } pos++; } stream.pos += scanLength; } return -1; } }, { key: "makeStream", value: function makeStream(dict, cipherTransform) { var lexer = this.lexer; var stream = lexer.stream; lexer.skipToNextLine(); var startPos = stream.pos - 1; var length = dict.get("Length"); if (!Number.isInteger(length)) { (0, _util.info)("Bad length \"".concat(length, "\" in stream")); length = 0; } stream.pos = startPos + length; lexer.nextChar(); if (this.tryShift() && (0, _primitives.isCmd)(this.buf2, "endstream")) { this.shift(); } else { var ENDSTREAM_SIGNATURE = new Uint8Array([0x65, 0x6E, 0x64, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6D]); var actualLength = this._findStreamLength(startPos, ENDSTREAM_SIGNATURE); if (actualLength < 0) { var MAX_TRUNCATION = 1; for (var i = 1; i <= MAX_TRUNCATION; i++) { var end = ENDSTREAM_SIGNATURE.length - i; var TRUNCATED_SIGNATURE = ENDSTREAM_SIGNATURE.slice(0, end); var maybeLength = this._findStreamLength(startPos, TRUNCATED_SIGNATURE); if (maybeLength >= 0) { var lastByte = stream.peekBytes(end + 1)[end]; if (!(0, _core_utils.isWhiteSpace)(lastByte)) { break; } (0, _util.info)("Found \"".concat((0, _util.bytesToString)(TRUNCATED_SIGNATURE), "\" when ") + "searching for endstream command."); actualLength = maybeLength; break; } } if (actualLength < 0) { throw new _util.FormatError("Missing endstream command."); } } length = actualLength; lexer.nextChar(); this.shift(); this.shift(); } this.shift(); stream = stream.makeSubStream(startPos, length, dict); if (cipherTransform) { stream = cipherTransform.createStream(stream, length); } stream = this.filter(stream, dict, length); stream.dict = dict; return stream; } }, { key: "filter", value: function filter(stream, dict, length) { var filter = dict.get("Filter", "F"); var params = dict.get("DecodeParms", "DP"); if ((0, _primitives.isName)(filter)) { if (Array.isArray(params)) { (0, _util.warn)("/DecodeParms should not contain an Array, " + "when /Filter contains a Name."); } return this.makeFilter(stream, filter.name, length, params); } var maybeLength = length; if (Array.isArray(filter)) { var filterArray = filter; var paramsArray = params; for (var i = 0, ii = filterArray.length; i < ii; ++i) { filter = this.xref.fetchIfRef(filterArray[i]); if (!(0, _primitives.isName)(filter)) { throw new _util.FormatError("Bad filter name \"".concat(filter, "\"")); } params = null; if (Array.isArray(paramsArray) && i in paramsArray) { params = this.xref.fetchIfRef(paramsArray[i]); } stream = this.makeFilter(stream, filter.name, maybeLength, params); maybeLength = null; } } return stream; } }, { key: "makeFilter", value: function makeFilter(stream, name, maybeLength, params) { if (maybeLength === 0) { (0, _util.warn)("Empty \"".concat(name, "\" stream.")); return new _stream.NullStream(); } try { var xrefStreamStats = this.xref.stats.streamTypes; if (name === "FlateDecode" || name === "Fl") { xrefStreamStats[_util.StreamType.FLATE] = true; if (params) { return new _stream.PredictorStream(new _stream.FlateStream(stream, maybeLength), maybeLength, params); } return new _stream.FlateStream(stream, maybeLength); } if (name === "LZWDecode" || name === "LZW") { xrefStreamStats[_util.StreamType.LZW] = true; var earlyChange = 1; if (params) { if (params.has("EarlyChange")) { earlyChange = params.get("EarlyChange"); } return new _stream.PredictorStream(new _stream.LZWStream(stream, maybeLength, earlyChange), maybeLength, params); } return new _stream.LZWStream(stream, maybeLength, earlyChange); } if (name === "DCTDecode" || name === "DCT") { xrefStreamStats[_util.StreamType.DCT] = true; return new _jpeg_stream.JpegStream(stream, maybeLength, stream.dict, params); } if (name === "JPXDecode" || name === "JPX") { xrefStreamStats[_util.StreamType.JPX] = true; return new _jpx_stream.JpxStream(stream, maybeLength, stream.dict, params); } if (name === "ASCII85Decode" || name === "A85") { xrefStreamStats[_util.StreamType.A85] = true; return new _stream.Ascii85Stream(stream, maybeLength); } if (name === "ASCIIHexDecode" || name === "AHx") { xrefStreamStats[_util.StreamType.AHX] = true; return new _stream.AsciiHexStream(stream, maybeLength); } if (name === "CCITTFaxDecode" || name === "CCF") { xrefStreamStats[_util.StreamType.CCF] = true; return new _ccitt_stream.CCITTFaxStream(stream, maybeLength, params); } if (name === "RunLengthDecode" || name === "RL") { xrefStreamStats[_util.StreamType.RLX] = true; return new _stream.RunLengthStream(stream, maybeLength); } if (name === "JBIG2Decode") { xrefStreamStats[_util.StreamType.JBIG] = true; return new _jbig2_stream.Jbig2Stream(stream, maybeLength, stream.dict, params); } (0, _util.warn)("Filter \"".concat(name, "\" is not supported.")); return stream; } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)("Invalid stream: \"".concat(ex, "\"")); return new _stream.NullStream(); } } }]); return Parser; }(); exports.Parser = Parser; var specialChars = [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; function toHexDigit(ch) { if (ch >= 0x30 && ch <= 0x39) { return ch & 0x0f; } if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) { return (ch & 0x0f) + 9; } return -1; } var Lexer = /*#__PURE__*/function () { function Lexer(stream) { var knownCommands = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; _classCallCheck(this, Lexer); this.stream = stream; this.nextChar(); this.strBuf = []; this.knownCommands = knownCommands; this._hexStringNumWarn = 0; this.beginInlineImagePos = -1; } _createClass(Lexer, [{ key: "nextChar", value: function nextChar() { return this.currentChar = this.stream.getByte(); } }, { key: "peekChar", value: function peekChar() { return this.stream.peekByte(); } }, { key: "getNumber", value: function getNumber() { var ch = this.currentChar; var eNotation = false; var divideBy = 0; var sign = 0; if (ch === 0x2d) { sign = -1; ch = this.nextChar(); if (ch === 0x2d) { ch = this.nextChar(); } } else if (ch === 0x2b) { sign = 1; ch = this.nextChar(); } if (ch === 0x0a || ch === 0x0d) { do { ch = this.nextChar(); } while (ch === 0x0a || ch === 0x0d); } if (ch === 0x2e) { divideBy = 10; ch = this.nextChar(); } if (ch < 0x30 || ch > 0x39) { if (divideBy === 10 && sign === 0 && ((0, _core_utils.isWhiteSpace)(ch) || ch === -1)) { (0, _util.warn)("Lexer.getNumber - treating a single decimal point as zero."); return 0; } throw new _util.FormatError("Invalid number: ".concat(String.fromCharCode(ch), " (charCode ").concat(ch, ")")); } sign = sign || 1; var baseValue = ch - 0x30; var powerValue = 0; var powerValueSign = 1; while ((ch = this.nextChar()) >= 0) { if (ch >= 0x30 && ch <= 0x39) { var currentDigit = ch - 0x30; if (eNotation) { powerValue = powerValue * 10 + currentDigit; } else { if (divideBy !== 0) { divideBy *= 10; } baseValue = baseValue * 10 + currentDigit; } } else if (ch === 0x2e) { if (divideBy === 0) { divideBy = 1; } else { break; } } else if (ch === 0x2d) { (0, _util.warn)("Badly formatted number: minus sign in the middle"); } else if (ch === 0x45 || ch === 0x65) { ch = this.peekChar(); if (ch === 0x2b || ch === 0x2d) { powerValueSign = ch === 0x2d ? -1 : 1; this.nextChar(); } else if (ch < 0x30 || ch > 0x39) { break; } eNotation = true; } else { break; } } if (divideBy !== 0) { baseValue /= divideBy; } if (eNotation) { baseValue *= Math.pow(10, powerValueSign * powerValue); } return sign * baseValue; } }, { key: "getString", value: function getString() { var numParen = 1; var done = false; var strBuf = this.strBuf; strBuf.length = 0; var ch = this.nextChar(); while (true) { var charBuffered = false; switch (ch | 0) { case -1: (0, _util.warn)("Unterminated string"); done = true; break; case 0x28: ++numParen; strBuf.push("("); break; case 0x29: if (--numParen === 0) { this.nextChar(); done = true; } else { strBuf.push(")"); } break; case 0x5c: ch = this.nextChar(); switch (ch) { case -1: (0, _util.warn)("Unterminated string"); done = true; break; case 0x6e: strBuf.push("\n"); break; case 0x72: strBuf.push("\r"); break; case 0x74: strBuf.push("\t"); break; case 0x62: strBuf.push("\b"); break; case 0x66: strBuf.push("\f"); break; case 0x5c: case 0x28: case 0x29: strBuf.push(String.fromCharCode(ch)); break; case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: var x = ch & 0x0f; ch = this.nextChar(); charBuffered = true; if (ch >= 0x30 && ch <= 0x37) { x = (x << 3) + (ch & 0x0f); ch = this.nextChar(); if (ch >= 0x30 && ch <= 0x37) { charBuffered = false; x = (x << 3) + (ch & 0x0f); } } strBuf.push(String.fromCharCode(x)); break; case 0x0d: if (this.peekChar() === 0x0a) { this.nextChar(); } break; case 0x0a: break; default: strBuf.push(String.fromCharCode(ch)); break; } break; default: strBuf.push(String.fromCharCode(ch)); break; } if (done) { break; } if (!charBuffered) { ch = this.nextChar(); } } return strBuf.join(""); } }, { key: "getName", value: function getName() { var ch, previousCh; var strBuf = this.strBuf; strBuf.length = 0; while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) { if (ch === 0x23) { ch = this.nextChar(); if (specialChars[ch]) { (0, _util.warn)("Lexer_getName: " + "NUMBER SIGN (#) should be followed by a hexadecimal number."); strBuf.push("#"); break; } var x = toHexDigit(ch); if (x !== -1) { previousCh = ch; ch = this.nextChar(); var x2 = toHexDigit(ch); if (x2 === -1) { (0, _util.warn)("Lexer_getName: Illegal digit (".concat(String.fromCharCode(ch), ") ") + "in hexadecimal number."); strBuf.push("#", String.fromCharCode(previousCh)); if (specialChars[ch]) { break; } strBuf.push(String.fromCharCode(ch)); continue; } strBuf.push(String.fromCharCode(x << 4 | x2)); } else { strBuf.push("#", String.fromCharCode(ch)); } } else { strBuf.push(String.fromCharCode(ch)); } } if (strBuf.length > 127) { (0, _util.warn)("Name token is longer than allowed by the spec: ".concat(strBuf.length)); } return _primitives.Name.get(strBuf.join("")); } }, { key: "_hexStringWarn", value: function _hexStringWarn(ch) { var MAX_HEX_STRING_NUM_WARN = 5; if (this._hexStringNumWarn++ === MAX_HEX_STRING_NUM_WARN) { (0, _util.warn)("getHexString - ignoring additional invalid characters."); return; } if (this._hexStringNumWarn > MAX_HEX_STRING_NUM_WARN) { return; } (0, _util.warn)("getHexString - ignoring invalid character: ".concat(ch)); } }, { key: "getHexString", value: function getHexString() { var strBuf = this.strBuf; strBuf.length = 0; var ch = this.currentChar; var isFirstHex = true; var firstDigit, secondDigit; this._hexStringNumWarn = 0; while (true) { if (ch < 0) { (0, _util.warn)("Unterminated hex string"); break; } else if (ch === 0x3e) { this.nextChar(); break; } else if (specialChars[ch] === 1) { ch = this.nextChar(); continue; } else { if (isFirstHex) { firstDigit = toHexDigit(ch); if (firstDigit === -1) { this._hexStringWarn(ch); ch = this.nextChar(); continue; } } else { secondDigit = toHexDigit(ch); if (secondDigit === -1) { this._hexStringWarn(ch); ch = this.nextChar(); continue; } strBuf.push(String.fromCharCode(firstDigit << 4 | secondDigit)); } isFirstHex = !isFirstHex; ch = this.nextChar(); } } return strBuf.join(""); } }, { key: "getObj", value: function getObj() { var comment = false; var ch = this.currentChar; while (true) { if (ch < 0) { return _primitives.EOF; } if (comment) { if (ch === 0x0a || ch === 0x0d) { comment = false; } } else if (ch === 0x25) { comment = true; } else if (specialChars[ch] !== 1) { break; } ch = this.nextChar(); } switch (ch | 0) { case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: case 0x2b: case 0x2d: case 0x2e: return this.getNumber(); case 0x28: return this.getString(); case 0x2f: return this.getName(); case 0x5b: this.nextChar(); return _primitives.Cmd.get("["); case 0x5d: this.nextChar(); return _primitives.Cmd.get("]"); case 0x3c: ch = this.nextChar(); if (ch === 0x3c) { this.nextChar(); return _primitives.Cmd.get("<<"); } return this.getHexString(); case 0x3e: ch = this.nextChar(); if (ch === 0x3e) { this.nextChar(); return _primitives.Cmd.get(">>"); } return _primitives.Cmd.get(">"); case 0x7b: this.nextChar(); return _primitives.Cmd.get("{"); case 0x7d: this.nextChar(); return _primitives.Cmd.get("}"); case 0x29: this.nextChar(); throw new _util.FormatError("Illegal character: ".concat(ch)); } var str = String.fromCharCode(ch); var knownCommands = this.knownCommands; var knownCommandFound = knownCommands && knownCommands[str] !== undefined; while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) { var possibleCommand = str + String.fromCharCode(ch); if (knownCommandFound && knownCommands[possibleCommand] === undefined) { break; } if (str.length === 128) { throw new _util.FormatError("Command token too long: ".concat(str.length)); } str = possibleCommand; knownCommandFound = knownCommands && knownCommands[str] !== undefined; } if (str === "true") { return true; } if (str === "false") { return false; } if (str === "null") { return null; } if (str === "BI") { this.beginInlineImagePos = this.stream.pos; } return _primitives.Cmd.get(str); } }, { key: "peekObj", value: function peekObj() { var streamPos = this.stream.pos, currentChar = this.currentChar, beginInlineImagePos = this.beginInlineImagePos; var nextObj; try { nextObj = this.getObj(); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)("peekObj: ".concat(ex)); } this.stream.pos = streamPos; this.currentChar = currentChar; this.beginInlineImagePos = beginInlineImagePos; return nextObj; } }, { key: "skipToNextLine", value: function skipToNextLine() { var ch = this.currentChar; while (ch >= 0) { if (ch === 0x0d) { ch = this.nextChar(); if (ch === 0x0a) { this.nextChar(); } break; } else if (ch === 0x0a) { this.nextChar(); break; } ch = this.nextChar(); } } }]); return Lexer; }(); exports.Lexer = Lexer; var Linearization = /*#__PURE__*/function () { function Linearization() { _classCallCheck(this, Linearization); } _createClass(Linearization, null, [{ key: "create", value: function create(stream) { function getInt(linDict, name) { var allowZeroValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var obj = linDict.get(name); if (Number.isInteger(obj) && (allowZeroValue ? obj >= 0 : obj > 0)) { return obj; } throw new Error("The \"".concat(name, "\" parameter in the linearization ") + "dictionary is invalid."); } function getHints(linDict) { var hints = linDict.get("H"); var hintsLength; if (Array.isArray(hints) && ((hintsLength = hints.length) === 2 || hintsLength === 4)) { for (var index = 0; index < hintsLength; index++) { var hint = hints[index]; if (!(Number.isInteger(hint) && hint > 0)) { throw new Error("Hint (".concat(index, ") in the linearization dictionary is invalid.")); } } return hints; } throw new Error("Hint array in the linearization dictionary is invalid."); } var parser = new Parser({ lexer: new Lexer(stream), xref: null }); var obj1 = parser.getObj(); var obj2 = parser.getObj(); var obj3 = parser.getObj(); var linDict = parser.getObj(); var obj, length; if (!(Number.isInteger(obj1) && Number.isInteger(obj2) && (0, _primitives.isCmd)(obj3, "obj") && (0, _primitives.isDict)(linDict) && (0, _util.isNum)(obj = linDict.get("Linearized")) && obj > 0)) { return null; } else if ((length = getInt(linDict, "L")) !== stream.length) { throw new Error('The "L" parameter in the linearization dictionary ' + "does not equal the stream length."); } return { length: length, hints: getHints(linDict), objectNumberFirst: getInt(linDict, "O"), endFirst: getInt(linDict, "E"), numPages: getInt(linDict, "N"), mainXRefEntriesOffset: getInt(linDict, "T"), pageFirst: linDict.has("P") ? getInt(linDict, "P", true) : 0 }; } }]); return Linearization; }(); exports.Linearization = Linearization; /***/ }), /* 142 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.StringStream = exports.StreamsSequenceStream = exports.Stream = exports.RunLengthStream = exports.PredictorStream = exports.NullStream = exports.LZWStream = exports.FlateStream = exports.DecryptStream = exports.DecodeStream = exports.AsciiHexStream = exports.Ascii85Stream = void 0; var _util = __w_pdfjs_require__(4); var _primitives = __w_pdfjs_require__(135); var _core_utils = __w_pdfjs_require__(138); function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } var Stream = function StreamClosure() { function Stream(arrayBuffer, start, length, dict) { this.bytes = arrayBuffer instanceof Uint8Array ? arrayBuffer : new Uint8Array(arrayBuffer); this.start = start || 0; this.pos = this.start; this.end = start + length || this.bytes.length; this.dict = dict; } Stream.prototype = { get length() { return this.end - this.start; }, get isEmpty() { return this.length === 0; }, getByte: function Stream_getByte() { if (this.pos >= this.end) { return -1; } return this.bytes[this.pos++]; }, getUint16: function Stream_getUint16() { var b0 = this.getByte(); var b1 = this.getByte(); if (b0 === -1 || b1 === -1) { return -1; } return (b0 << 8) + b1; }, getInt32: function Stream_getInt32() { var b0 = this.getByte(); var b1 = this.getByte(); var b2 = this.getByte(); var b3 = this.getByte(); return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; }, getBytes: function getBytes(length) { var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var bytes = this.bytes; var pos = this.pos; var strEnd = this.end; if (!length) { var _subarray = bytes.subarray(pos, strEnd); return forceClamped ? new Uint8ClampedArray(_subarray) : _subarray; } var end = pos + length; if (end > strEnd) { end = strEnd; } this.pos = end; var subarray = bytes.subarray(pos, end); return forceClamped ? new Uint8ClampedArray(subarray) : subarray; }, peekByte: function Stream_peekByte() { var peekedByte = this.getByte(); if (peekedByte !== -1) { this.pos--; } return peekedByte; }, peekBytes: function peekBytes(length) { var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var bytes = this.getBytes(length, forceClamped); this.pos -= bytes.length; return bytes; }, getByteRange: function getByteRange(begin, end) { if (begin < 0) { begin = 0; } if (end > this.end) { end = this.end; } return this.bytes.subarray(begin, end); }, skip: function Stream_skip(n) { if (!n) { n = 1; } this.pos += n; }, reset: function Stream_reset() { this.pos = this.start; }, moveStart: function Stream_moveStart() { this.start = this.pos; }, makeSubStream: function Stream_makeSubStream(start, length, dict) { return new Stream(this.bytes.buffer, start, length, dict); } }; return Stream; }(); exports.Stream = Stream; var StringStream = function StringStreamClosure() { function StringStream(str) { var bytes = (0, _util.stringToBytes)(str); Stream.call(this, bytes); } StringStream.prototype = Stream.prototype; return StringStream; }(); exports.StringStream = StringStream; var DecodeStream = function DecodeStreamClosure() { var emptyBuffer = new Uint8Array(0); function DecodeStream(maybeMinBufferLength) { this._rawMinBufferLength = maybeMinBufferLength || 0; this.pos = 0; this.bufferLength = 0; this.eof = false; this.buffer = emptyBuffer; this.minBufferLength = 512; if (maybeMinBufferLength) { while (this.minBufferLength < maybeMinBufferLength) { this.minBufferLength *= 2; } } } DecodeStream.prototype = { get length() { (0, _util.unreachable)("Should not access DecodeStream.length"); }, get isEmpty() { while (!this.eof && this.bufferLength === 0) { this.readBlock(); } return this.bufferLength === 0; }, ensureBuffer: function DecodeStream_ensureBuffer(requested) { var buffer = this.buffer; if (requested <= buffer.byteLength) { return buffer; } var size = this.minBufferLength; while (size < requested) { size *= 2; } var buffer2 = new Uint8Array(size); buffer2.set(buffer); return this.buffer = buffer2; }, getByte: function DecodeStream_getByte() { var pos = this.pos; while (this.bufferLength <= pos) { if (this.eof) { return -1; } this.readBlock(); } return this.buffer[this.pos++]; }, getUint16: function DecodeStream_getUint16() { var b0 = this.getByte(); var b1 = this.getByte(); if (b0 === -1 || b1 === -1) { return -1; } return (b0 << 8) + b1; }, getInt32: function DecodeStream_getInt32() { var b0 = this.getByte(); var b1 = this.getByte(); var b2 = this.getByte(); var b3 = this.getByte(); return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; }, getBytes: function getBytes(length) { var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var end, pos = this.pos; if (length) { this.ensureBuffer(pos + length); end = pos + length; while (!this.eof && this.bufferLength < end) { this.readBlock(); } var bufEnd = this.bufferLength; if (end > bufEnd) { end = bufEnd; } } else { while (!this.eof) { this.readBlock(); } end = this.bufferLength; } this.pos = end; var subarray = this.buffer.subarray(pos, end); return forceClamped && !(subarray instanceof Uint8ClampedArray) ? new Uint8ClampedArray(subarray) : subarray; }, peekByte: function DecodeStream_peekByte() { var peekedByte = this.getByte(); if (peekedByte !== -1) { this.pos--; } return peekedByte; }, peekBytes: function peekBytes(length) { var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var bytes = this.getBytes(length, forceClamped); this.pos -= bytes.length; return bytes; }, makeSubStream: function DecodeStream_makeSubStream(start, length, dict) { var end = start + length; while (this.bufferLength <= end && !this.eof) { this.readBlock(); } return new Stream(this.buffer, start, length, dict); }, getByteRange: function getByteRange(begin, end) { (0, _util.unreachable)("Should not call DecodeStream.getByteRange"); }, skip: function DecodeStream_skip(n) { if (!n) { n = 1; } this.pos += n; }, reset: function DecodeStream_reset() { this.pos = 0; }, getBaseStreams: function DecodeStream_getBaseStreams() { if (this.str && this.str.getBaseStreams) { return this.str.getBaseStreams(); } return []; } }; return DecodeStream; }(); exports.DecodeStream = DecodeStream; var StreamsSequenceStream = function StreamsSequenceStreamClosure() { function StreamsSequenceStream(streams) { this.streams = streams; var maybeLength = 0; for (var i = 0, ii = streams.length; i < ii; i++) { var stream = streams[i]; if (stream instanceof DecodeStream) { maybeLength += stream._rawMinBufferLength; } else { maybeLength += stream.length; } } DecodeStream.call(this, maybeLength); } StreamsSequenceStream.prototype = Object.create(DecodeStream.prototype); StreamsSequenceStream.prototype.readBlock = function streamSequenceStreamReadBlock() { var streams = this.streams; if (streams.length === 0) { this.eof = true; return; } var stream = streams.shift(); var chunk = stream.getBytes(); var bufferLength = this.bufferLength; var newLength = bufferLength + chunk.length; var buffer = this.ensureBuffer(newLength); buffer.set(chunk, bufferLength); this.bufferLength = newLength; }; StreamsSequenceStream.prototype.getBaseStreams = function StreamsSequenceStream_getBaseStreams() { var baseStreams = []; for (var i = 0, ii = this.streams.length; i < ii; i++) { var stream = this.streams[i]; if (stream.getBaseStreams) { baseStreams.push.apply(baseStreams, _toConsumableArray(stream.getBaseStreams())); } } return baseStreams; }; return StreamsSequenceStream; }(); exports.StreamsSequenceStream = StreamsSequenceStream; var FlateStream = function FlateStreamClosure() { var codeLenCodeMap = new Int32Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]); var lengthDecode = new Int32Array([0x00003, 0x00004, 0x00005, 0x00006, 0x00007, 0x00008, 0x00009, 0x0000a, 0x1000b, 0x1000d, 0x1000f, 0x10011, 0x20013, 0x20017, 0x2001b, 0x2001f, 0x30023, 0x3002b, 0x30033, 0x3003b, 0x40043, 0x40053, 0x40063, 0x40073, 0x50083, 0x500a3, 0x500c3, 0x500e3, 0x00102, 0x00102, 0x00102]); var distDecode = new Int32Array([0x00001, 0x00002, 0x00003, 0x00004, 0x10005, 0x10007, 0x20009, 0x2000d, 0x30011, 0x30019, 0x40021, 0x40031, 0x50041, 0x50061, 0x60081, 0x600c1, 0x70101, 0x70181, 0x80201, 0x80301, 0x90401, 0x90601, 0xa0801, 0xa0c01, 0xb1001, 0xb1801, 0xc2001, 0xc3001, 0xd4001, 0xd6001]); var fixedLitCodeTab = [new Int32Array([0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c0, 0x70108, 0x80060, 0x80020, 0x900a0, 0x80000, 0x80080, 0x80040, 0x900e0, 0x70104, 0x80058, 0x80018, 0x90090, 0x70114, 0x80078, 0x80038, 0x900d0, 0x7010c, 0x80068, 0x80028, 0x900b0, 0x80008, 0x80088, 0x80048, 0x900f0, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c8, 0x7010a, 0x80064, 0x80024, 0x900a8, 0x80004, 0x80084, 0x80044, 0x900e8, 0x70106, 0x8005c, 0x8001c, 0x90098, 0x70116, 0x8007c, 0x8003c, 0x900d8, 0x7010e, 0x8006c, 0x8002c, 0x900b8, 0x8000c, 0x8008c, 0x8004c, 0x900f8, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c4, 0x70109, 0x80062, 0x80022, 0x900a4, 0x80002, 0x80082, 0x80042, 0x900e4, 0x70105, 0x8005a, 0x8001a, 0x90094, 0x70115, 0x8007a, 0x8003a, 0x900d4, 0x7010d, 0x8006a, 0x8002a, 0x900b4, 0x8000a, 0x8008a, 0x8004a, 0x900f4, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cc, 0x7010b, 0x80066, 0x80026, 0x900ac, 0x80006, 0x80086, 0x80046, 0x900ec, 0x70107, 0x8005e, 0x8001e, 0x9009c, 0x70117, 0x8007e, 0x8003e, 0x900dc, 0x7010f, 0x8006e, 0x8002e, 0x900bc, 0x8000e, 0x8008e, 0x8004e, 0x900fc, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c2, 0x70108, 0x80061, 0x80021, 0x900a2, 0x80001, 0x80081, 0x80041, 0x900e2, 0x70104, 0x80059, 0x80019, 0x90092, 0x70114, 0x80079, 0x80039, 0x900d2, 0x7010c, 0x80069, 0x80029, 0x900b2, 0x80009, 0x80089, 0x80049, 0x900f2, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900ca, 0x7010a, 0x80065, 0x80025, 0x900aa, 0x80005, 0x80085, 0x80045, 0x900ea, 0x70106, 0x8005d, 0x8001d, 0x9009a, 0x70116, 0x8007d, 0x8003d, 0x900da, 0x7010e, 0x8006d, 0x8002d, 0x900ba, 0x8000d, 0x8008d, 0x8004d, 0x900fa, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c6, 0x70109, 0x80063, 0x80023, 0x900a6, 0x80003, 0x80083, 0x80043, 0x900e6, 0x70105, 0x8005b, 0x8001b, 0x90096, 0x70115, 0x8007b, 0x8003b, 0x900d6, 0x7010d, 0x8006b, 0x8002b, 0x900b6, 0x8000b, 0x8008b, 0x8004b, 0x900f6, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900ce, 0x7010b, 0x80067, 0x80027, 0x900ae, 0x80007, 0x80087, 0x80047, 0x900ee, 0x70107, 0x8005f, 0x8001f, 0x9009e, 0x70117, 0x8007f, 0x8003f, 0x900de, 0x7010f, 0x8006f, 0x8002f, 0x900be, 0x8000f, 0x8008f, 0x8004f, 0x900fe, 0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c1, 0x70108, 0x80060, 0x80020, 0x900a1, 0x80000, 0x80080, 0x80040, 0x900e1, 0x70104, 0x80058, 0x80018, 0x90091, 0x70114, 0x80078, 0x80038, 0x900d1, 0x7010c, 0x80068, 0x80028, 0x900b1, 0x80008, 0x80088, 0x80048, 0x900f1, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c9, 0x7010a, 0x80064, 0x80024, 0x900a9, 0x80004, 0x80084, 0x80044, 0x900e9, 0x70106, 0x8005c, 0x8001c, 0x90099, 0x70116, 0x8007c, 0x8003c, 0x900d9, 0x7010e, 0x8006c, 0x8002c, 0x900b9, 0x8000c, 0x8008c, 0x8004c, 0x900f9, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c5, 0x70109, 0x80062, 0x80022, 0x900a5, 0x80002, 0x80082, 0x80042, 0x900e5, 0x70105, 0x8005a, 0x8001a, 0x90095, 0x70115, 0x8007a, 0x8003a, 0x900d5, 0x7010d, 0x8006a, 0x8002a, 0x900b5, 0x8000a, 0x8008a, 0x8004a, 0x900f5, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cd, 0x7010b, 0x80066, 0x80026, 0x900ad, 0x80006, 0x80086, 0x80046, 0x900ed, 0x70107, 0x8005e, 0x8001e, 0x9009d, 0x70117, 0x8007e, 0x8003e, 0x900dd, 0x7010f, 0x8006e, 0x8002e, 0x900bd, 0x8000e, 0x8008e, 0x8004e, 0x900fd, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c3, 0x70108, 0x80061, 0x80021, 0x900a3, 0x80001, 0x80081, 0x80041, 0x900e3, 0x70104, 0x80059, 0x80019, 0x90093, 0x70114, 0x80079, 0x80039, 0x900d3, 0x7010c, 0x80069, 0x80029, 0x900b3, 0x80009, 0x80089, 0x80049, 0x900f3, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900cb, 0x7010a, 0x80065, 0x80025, 0x900ab, 0x80005, 0x80085, 0x80045, 0x900eb, 0x70106, 0x8005d, 0x8001d, 0x9009b, 0x70116, 0x8007d, 0x8003d, 0x900db, 0x7010e, 0x8006d, 0x8002d, 0x900bb, 0x8000d, 0x8008d, 0x8004d, 0x900fb, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c7, 0x70109, 0x80063, 0x80023, 0x900a7, 0x80003, 0x80083, 0x80043, 0x900e7, 0x70105, 0x8005b, 0x8001b, 0x90097, 0x70115, 0x8007b, 0x8003b, 0x900d7, 0x7010d, 0x8006b, 0x8002b, 0x900b7, 0x8000b, 0x8008b, 0x8004b, 0x900f7, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900cf, 0x7010b, 0x80067, 0x80027, 0x900af, 0x80007, 0x80087, 0x80047, 0x900ef, 0x70107, 0x8005f, 0x8001f, 0x9009f, 0x70117, 0x8007f, 0x8003f, 0x900df, 0x7010f, 0x8006f, 0x8002f, 0x900bf, 0x8000f, 0x8008f, 0x8004f, 0x900ff]), 9]; var fixedDistCodeTab = [new Int32Array([0x50000, 0x50010, 0x50008, 0x50018, 0x50004, 0x50014, 0x5000c, 0x5001c, 0x50002, 0x50012, 0x5000a, 0x5001a, 0x50006, 0x50016, 0x5000e, 0x00000, 0x50001, 0x50011, 0x50009, 0x50019, 0x50005, 0x50015, 0x5000d, 0x5001d, 0x50003, 0x50013, 0x5000b, 0x5001b, 0x50007, 0x50017, 0x5000f, 0x00000]), 5]; function FlateStream(str, maybeLength) { this.str = str; this.dict = str.dict; var cmf = str.getByte(); var flg = str.getByte(); if (cmf === -1 || flg === -1) { throw new _util.FormatError("Invalid header in flate stream: ".concat(cmf, ", ").concat(flg)); } if ((cmf & 0x0f) !== 0x08) { throw new _util.FormatError("Unknown compression method in flate stream: ".concat(cmf, ", ").concat(flg)); } if (((cmf << 8) + flg) % 31 !== 0) { throw new _util.FormatError("Bad FCHECK in flate stream: ".concat(cmf, ", ").concat(flg)); } if (flg & 0x20) { throw new _util.FormatError("FDICT bit set in flate stream: ".concat(cmf, ", ").concat(flg)); } this.codeSize = 0; this.codeBuf = 0; DecodeStream.call(this, maybeLength); } FlateStream.prototype = Object.create(DecodeStream.prototype); FlateStream.prototype.getBits = function FlateStream_getBits(bits) { var str = this.str; var codeSize = this.codeSize; var codeBuf = this.codeBuf; var b; while (codeSize < bits) { if ((b = str.getByte()) === -1) { throw new _util.FormatError("Bad encoding in flate stream"); } codeBuf |= b << codeSize; codeSize += 8; } b = codeBuf & (1 << bits) - 1; this.codeBuf = codeBuf >> bits; this.codeSize = codeSize -= bits; return b; }; FlateStream.prototype.getCode = function FlateStream_getCode(table) { var str = this.str; var codes = table[0]; var maxLen = table[1]; var codeSize = this.codeSize; var codeBuf = this.codeBuf; var b; while (codeSize < maxLen) { if ((b = str.getByte()) === -1) { break; } codeBuf |= b << codeSize; codeSize += 8; } var code = codes[codeBuf & (1 << maxLen) - 1]; var codeLen = code >> 16; var codeVal = code & 0xffff; if (codeLen < 1 || codeSize < codeLen) { throw new _util.FormatError("Bad encoding in flate stream"); } this.codeBuf = codeBuf >> codeLen; this.codeSize = codeSize - codeLen; return codeVal; }; FlateStream.prototype.generateHuffmanTable = function flateStreamGenerateHuffmanTable(lengths) { var n = lengths.length; var maxLen = 0; var i; for (i = 0; i < n; ++i) { if (lengths[i] > maxLen) { maxLen = lengths[i]; } } var size = 1 << maxLen; var codes = new Int32Array(size); for (var len = 1, code = 0, skip = 2; len <= maxLen; ++len, code <<= 1, skip <<= 1) { for (var val = 0; val < n; ++val) { if (lengths[val] === len) { var code2 = 0; var t = code; for (i = 0; i < len; ++i) { code2 = code2 << 1 | t & 1; t >>= 1; } for (i = code2; i < size; i += skip) { codes[i] = len << 16 | val; } ++code; } } } return [codes, maxLen]; }; FlateStream.prototype.readBlock = function FlateStream_readBlock() { var buffer, len; var str = this.str; var hdr = this.getBits(3); if (hdr & 1) { this.eof = true; } hdr >>= 1; if (hdr === 0) { var b; if ((b = str.getByte()) === -1) { throw new _util.FormatError("Bad block header in flate stream"); } var blockLen = b; if ((b = str.getByte()) === -1) { throw new _util.FormatError("Bad block header in flate stream"); } blockLen |= b << 8; if ((b = str.getByte()) === -1) { throw new _util.FormatError("Bad block header in flate stream"); } var check = b; if ((b = str.getByte()) === -1) { throw new _util.FormatError("Bad block header in flate stream"); } check |= b << 8; if (check !== (~blockLen & 0xffff) && (blockLen !== 0 || check !== 0)) { throw new _util.FormatError("Bad uncompressed block length in flate stream"); } this.codeBuf = 0; this.codeSize = 0; var bufferLength = this.bufferLength, end = bufferLength + blockLen; buffer = this.ensureBuffer(end); this.bufferLength = end; if (blockLen === 0) { if (str.peekByte() === -1) { this.eof = true; } } else { var block = str.getBytes(blockLen); buffer.set(block, bufferLength); if (block.length < blockLen) { this.eof = true; } } return; } var litCodeTable; var distCodeTable; if (hdr === 1) { litCodeTable = fixedLitCodeTab; distCodeTable = fixedDistCodeTab; } else if (hdr === 2) { var numLitCodes = this.getBits(5) + 257; var numDistCodes = this.getBits(5) + 1; var numCodeLenCodes = this.getBits(4) + 4; var codeLenCodeLengths = new Uint8Array(codeLenCodeMap.length); var i; for (i = 0; i < numCodeLenCodes; ++i) { codeLenCodeLengths[codeLenCodeMap[i]] = this.getBits(3); } var codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths); len = 0; i = 0; var codes = numLitCodes + numDistCodes; var codeLengths = new Uint8Array(codes); var bitsLength, bitsOffset, what; while (i < codes) { var code = this.getCode(codeLenCodeTab); if (code === 16) { bitsLength = 2; bitsOffset = 3; what = len; } else if (code === 17) { bitsLength = 3; bitsOffset = 3; what = len = 0; } else if (code === 18) { bitsLength = 7; bitsOffset = 11; what = len = 0; } else { codeLengths[i++] = len = code; continue; } var repeatLength = this.getBits(bitsLength) + bitsOffset; while (repeatLength-- > 0) { codeLengths[i++] = what; } } litCodeTable = this.generateHuffmanTable(codeLengths.subarray(0, numLitCodes)); distCodeTable = this.generateHuffmanTable(codeLengths.subarray(numLitCodes, codes)); } else { throw new _util.FormatError("Unknown block type in flate stream"); } buffer = this.buffer; var limit = buffer ? buffer.length : 0; var pos = this.bufferLength; while (true) { var code1 = this.getCode(litCodeTable); if (code1 < 256) { if (pos + 1 >= limit) { buffer = this.ensureBuffer(pos + 1); limit = buffer.length; } buffer[pos++] = code1; continue; } if (code1 === 256) { this.bufferLength = pos; return; } code1 -= 257; code1 = lengthDecode[code1]; var code2 = code1 >> 16; if (code2 > 0) { code2 = this.getBits(code2); } len = (code1 & 0xffff) + code2; code1 = this.getCode(distCodeTable); code1 = distDecode[code1]; code2 = code1 >> 16; if (code2 > 0) { code2 = this.getBits(code2); } var dist = (code1 & 0xffff) + code2; if (pos + len >= limit) { buffer = this.ensureBuffer(pos + len); limit = buffer.length; } for (var k = 0; k < len; ++k, ++pos) { buffer[pos] = buffer[pos - dist]; } } }; return FlateStream; }(); exports.FlateStream = FlateStream; var PredictorStream = function PredictorStreamClosure() { function PredictorStream(str, maybeLength, params) { if (!(0, _primitives.isDict)(params)) { return str; } var predictor = this.predictor = params.get("Predictor") || 1; if (predictor <= 1) { return str; } if (predictor !== 2 && (predictor < 10 || predictor > 15)) { throw new _util.FormatError("Unsupported predictor: ".concat(predictor)); } if (predictor === 2) { this.readBlock = this.readBlockTiff; } else { this.readBlock = this.readBlockPng; } this.str = str; this.dict = str.dict; var colors = this.colors = params.get("Colors") || 1; var bits = this.bits = params.get("BitsPerComponent") || 8; var columns = this.columns = params.get("Columns") || 1; this.pixBytes = colors * bits + 7 >> 3; this.rowBytes = columns * colors * bits + 7 >> 3; DecodeStream.call(this, maybeLength); return this; } PredictorStream.prototype = Object.create(DecodeStream.prototype); PredictorStream.prototype.readBlockTiff = function predictorStreamReadBlockTiff() { var rowBytes = this.rowBytes; var bufferLength = this.bufferLength; var buffer = this.ensureBuffer(bufferLength + rowBytes); var bits = this.bits; var colors = this.colors; var rawBytes = this.str.getBytes(rowBytes); this.eof = !rawBytes.length; if (this.eof) { return; } var inbuf = 0, outbuf = 0; var inbits = 0, outbits = 0; var pos = bufferLength; var i; if (bits === 1 && colors === 1) { for (i = 0; i < rowBytes; ++i) { var c = rawBytes[i] ^ inbuf; c ^= c >> 1; c ^= c >> 2; c ^= c >> 4; inbuf = (c & 1) << 7; buffer[pos++] = c; } } else if (bits === 8) { for (i = 0; i < colors; ++i) { buffer[pos++] = rawBytes[i]; } for (; i < rowBytes; ++i) { buffer[pos] = buffer[pos - colors] + rawBytes[i]; pos++; } } else if (bits === 16) { var bytesPerPixel = colors * 2; for (i = 0; i < bytesPerPixel; ++i) { buffer[pos++] = rawBytes[i]; } for (; i < rowBytes; i += 2) { var sum = ((rawBytes[i] & 0xff) << 8) + (rawBytes[i + 1] & 0xff) + ((buffer[pos - bytesPerPixel] & 0xff) << 8) + (buffer[pos - bytesPerPixel + 1] & 0xff); buffer[pos++] = sum >> 8 & 0xff; buffer[pos++] = sum & 0xff; } } else { var compArray = new Uint8Array(colors + 1); var bitMask = (1 << bits) - 1; var j = 0, k = bufferLength; var columns = this.columns; for (i = 0; i < columns; ++i) { for (var kk = 0; kk < colors; ++kk) { if (inbits < bits) { inbuf = inbuf << 8 | rawBytes[j++] & 0xff; inbits += 8; } compArray[kk] = compArray[kk] + (inbuf >> inbits - bits) & bitMask; inbits -= bits; outbuf = outbuf << bits | compArray[kk]; outbits += bits; if (outbits >= 8) { buffer[k++] = outbuf >> outbits - 8 & 0xff; outbits -= 8; } } } if (outbits > 0) { buffer[k++] = (outbuf << 8 - outbits) + (inbuf & (1 << 8 - outbits) - 1); } } this.bufferLength += rowBytes; }; PredictorStream.prototype.readBlockPng = function predictorStreamReadBlockPng() { var rowBytes = this.rowBytes; var pixBytes = this.pixBytes; var predictor = this.str.getByte(); var rawBytes = this.str.getBytes(rowBytes); this.eof = !rawBytes.length; if (this.eof) { return; } var bufferLength = this.bufferLength; var buffer = this.ensureBuffer(bufferLength + rowBytes); var prevRow = buffer.subarray(bufferLength - rowBytes, bufferLength); if (prevRow.length === 0) { prevRow = new Uint8Array(rowBytes); } var i, j = bufferLength, up, c; switch (predictor) { case 0: for (i = 0; i < rowBytes; ++i) { buffer[j++] = rawBytes[i]; } break; case 1: for (i = 0; i < pixBytes; ++i) { buffer[j++] = rawBytes[i]; } for (; i < rowBytes; ++i) { buffer[j] = buffer[j - pixBytes] + rawBytes[i] & 0xff; j++; } break; case 2: for (i = 0; i < rowBytes; ++i) { buffer[j++] = prevRow[i] + rawBytes[i] & 0xff; } break; case 3: for (i = 0; i < pixBytes; ++i) { buffer[j++] = (prevRow[i] >> 1) + rawBytes[i]; } for (; i < rowBytes; ++i) { buffer[j] = (prevRow[i] + buffer[j - pixBytes] >> 1) + rawBytes[i] & 0xff; j++; } break; case 4: for (i = 0; i < pixBytes; ++i) { up = prevRow[i]; c = rawBytes[i]; buffer[j++] = up + c; } for (; i < rowBytes; ++i) { up = prevRow[i]; var upLeft = prevRow[i - pixBytes]; var left = buffer[j - pixBytes]; var p = left + up - upLeft; var pa = p - left; if (pa < 0) { pa = -pa; } var pb = p - up; if (pb < 0) { pb = -pb; } var pc = p - upLeft; if (pc < 0) { pc = -pc; } c = rawBytes[i]; if (pa <= pb && pa <= pc) { buffer[j++] = left + c; } else if (pb <= pc) { buffer[j++] = up + c; } else { buffer[j++] = upLeft + c; } } break; default: throw new _util.FormatError("Unsupported predictor: ".concat(predictor)); } this.bufferLength += rowBytes; }; return PredictorStream; }(); exports.PredictorStream = PredictorStream; var DecryptStream = function DecryptStreamClosure() { function DecryptStream(str, maybeLength, decrypt) { this.str = str; this.dict = str.dict; this.decrypt = decrypt; this.nextChunk = null; this.initialized = false; DecodeStream.call(this, maybeLength); } var chunkSize = 512; DecryptStream.prototype = Object.create(DecodeStream.prototype); DecryptStream.prototype.readBlock = function DecryptStream_readBlock() { var chunk; if (this.initialized) { chunk = this.nextChunk; } else { chunk = this.str.getBytes(chunkSize); this.initialized = true; } if (!chunk || chunk.length === 0) { this.eof = true; return; } this.nextChunk = this.str.getBytes(chunkSize); var hasMoreData = this.nextChunk && this.nextChunk.length > 0; var decrypt = this.decrypt; chunk = decrypt(chunk, !hasMoreData); var bufferLength = this.bufferLength; var i, n = chunk.length; var buffer = this.ensureBuffer(bufferLength + n); for (i = 0; i < n; i++) { buffer[bufferLength++] = chunk[i]; } this.bufferLength = bufferLength; }; return DecryptStream; }(); exports.DecryptStream = DecryptStream; var Ascii85Stream = function Ascii85StreamClosure() { function Ascii85Stream(str, maybeLength) { this.str = str; this.dict = str.dict; this.input = new Uint8Array(5); if (maybeLength) { maybeLength = 0.8 * maybeLength; } DecodeStream.call(this, maybeLength); } Ascii85Stream.prototype = Object.create(DecodeStream.prototype); Ascii85Stream.prototype.readBlock = function Ascii85Stream_readBlock() { var TILDA_CHAR = 0x7e; var Z_LOWER_CHAR = 0x7a; var EOF = -1; var str = this.str; var c = str.getByte(); while ((0, _core_utils.isWhiteSpace)(c)) { c = str.getByte(); } if (c === EOF || c === TILDA_CHAR) { this.eof = true; return; } var bufferLength = this.bufferLength, buffer; var i; if (c === Z_LOWER_CHAR) { buffer = this.ensureBuffer(bufferLength + 4); for (i = 0; i < 4; ++i) { buffer[bufferLength + i] = 0; } this.bufferLength += 4; } else { var input = this.input; input[0] = c; for (i = 1; i < 5; ++i) { c = str.getByte(); while ((0, _core_utils.isWhiteSpace)(c)) { c = str.getByte(); } input[i] = c; if (c === EOF || c === TILDA_CHAR) { break; } } buffer = this.ensureBuffer(bufferLength + i - 1); this.bufferLength += i - 1; if (i < 5) { for (; i < 5; ++i) { input[i] = 0x21 + 84; } this.eof = true; } var t = 0; for (i = 0; i < 5; ++i) { t = t * 85 + (input[i] - 0x21); } for (i = 3; i >= 0; --i) { buffer[bufferLength + i] = t & 0xff; t >>= 8; } } }; return Ascii85Stream; }(); exports.Ascii85Stream = Ascii85Stream; var AsciiHexStream = function AsciiHexStreamClosure() { function AsciiHexStream(str, maybeLength) { this.str = str; this.dict = str.dict; this.firstDigit = -1; if (maybeLength) { maybeLength = 0.5 * maybeLength; } DecodeStream.call(this, maybeLength); } AsciiHexStream.prototype = Object.create(DecodeStream.prototype); AsciiHexStream.prototype.readBlock = function AsciiHexStream_readBlock() { var UPSTREAM_BLOCK_SIZE = 8000; var bytes = this.str.getBytes(UPSTREAM_BLOCK_SIZE); if (!bytes.length) { this.eof = true; return; } var maxDecodeLength = bytes.length + 1 >> 1; var buffer = this.ensureBuffer(this.bufferLength + maxDecodeLength); var bufferLength = this.bufferLength; var firstDigit = this.firstDigit; for (var i = 0, ii = bytes.length; i < ii; i++) { var ch = bytes[i], digit; if (ch >= 0x30 && ch <= 0x39) { digit = ch & 0x0f; } else if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) { digit = (ch & 0x0f) + 9; } else if (ch === 0x3e) { this.eof = true; break; } else { continue; } if (firstDigit < 0) { firstDigit = digit; } else { buffer[bufferLength++] = firstDigit << 4 | digit; firstDigit = -1; } } if (firstDigit >= 0 && this.eof) { buffer[bufferLength++] = firstDigit << 4; firstDigit = -1; } this.firstDigit = firstDigit; this.bufferLength = bufferLength; }; return AsciiHexStream; }(); exports.AsciiHexStream = AsciiHexStream; var RunLengthStream = function RunLengthStreamClosure() { function RunLengthStream(str, maybeLength) { this.str = str; this.dict = str.dict; DecodeStream.call(this, maybeLength); } RunLengthStream.prototype = Object.create(DecodeStream.prototype); RunLengthStream.prototype.readBlock = function RunLengthStream_readBlock() { var repeatHeader = this.str.getBytes(2); if (!repeatHeader || repeatHeader.length < 2 || repeatHeader[0] === 128) { this.eof = true; return; } var buffer; var bufferLength = this.bufferLength; var n = repeatHeader[0]; if (n < 128) { buffer = this.ensureBuffer(bufferLength + n + 1); buffer[bufferLength++] = repeatHeader[1]; if (n > 0) { var source = this.str.getBytes(n); buffer.set(source, bufferLength); bufferLength += n; } } else { n = 257 - n; var b = repeatHeader[1]; buffer = this.ensureBuffer(bufferLength + n + 1); for (var i = 0; i < n; i++) { buffer[bufferLength++] = b; } } this.bufferLength = bufferLength; }; return RunLengthStream; }(); exports.RunLengthStream = RunLengthStream; var LZWStream = function LZWStreamClosure() { function LZWStream(str, maybeLength, earlyChange) { this.str = str; this.dict = str.dict; this.cachedData = 0; this.bitsCached = 0; var maxLzwDictionarySize = 4096; var lzwState = { earlyChange: earlyChange, codeLength: 9, nextCode: 258, dictionaryValues: new Uint8Array(maxLzwDictionarySize), dictionaryLengths: new Uint16Array(maxLzwDictionarySize), dictionaryPrevCodes: new Uint16Array(maxLzwDictionarySize), currentSequence: new Uint8Array(maxLzwDictionarySize), currentSequenceLength: 0 }; for (var i = 0; i < 256; ++i) { lzwState.dictionaryValues[i] = i; lzwState.dictionaryLengths[i] = 1; } this.lzwState = lzwState; DecodeStream.call(this, maybeLength); } LZWStream.prototype = Object.create(DecodeStream.prototype); LZWStream.prototype.readBits = function LZWStream_readBits(n) { var bitsCached = this.bitsCached; var cachedData = this.cachedData; while (bitsCached < n) { var c = this.str.getByte(); if (c === -1) { this.eof = true; return null; } cachedData = cachedData << 8 | c; bitsCached += 8; } this.bitsCached = bitsCached -= n; this.cachedData = cachedData; this.lastCode = null; return cachedData >>> bitsCached & (1 << n) - 1; }; LZWStream.prototype.readBlock = function LZWStream_readBlock() { var blockSize = 512; var estimatedDecodedSize = blockSize * 2, decodedSizeDelta = blockSize; var i, j, q; var lzwState = this.lzwState; if (!lzwState) { return; } var earlyChange = lzwState.earlyChange; var nextCode = lzwState.nextCode; var dictionaryValues = lzwState.dictionaryValues; var dictionaryLengths = lzwState.dictionaryLengths; var dictionaryPrevCodes = lzwState.dictionaryPrevCodes; var codeLength = lzwState.codeLength; var prevCode = lzwState.prevCode; var currentSequence = lzwState.currentSequence; var currentSequenceLength = lzwState.currentSequenceLength; var decodedLength = 0; var currentBufferLength = this.bufferLength; var buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize); for (i = 0; i < blockSize; i++) { var code = this.readBits(codeLength); var hasPrev = currentSequenceLength > 0; if (code < 256) { currentSequence[0] = code; currentSequenceLength = 1; } else if (code >= 258) { if (code < nextCode) { currentSequenceLength = dictionaryLengths[code]; for (j = currentSequenceLength - 1, q = code; j >= 0; j--) { currentSequence[j] = dictionaryValues[q]; q = dictionaryPrevCodes[q]; } } else { currentSequence[currentSequenceLength++] = currentSequence[0]; } } else if (code === 256) { codeLength = 9; nextCode = 258; currentSequenceLength = 0; continue; } else { this.eof = true; delete this.lzwState; break; } if (hasPrev) { dictionaryPrevCodes[nextCode] = prevCode; dictionaryLengths[nextCode] = dictionaryLengths[prevCode] + 1; dictionaryValues[nextCode] = currentSequence[0]; nextCode++; codeLength = nextCode + earlyChange & nextCode + earlyChange - 1 ? codeLength : Math.min(Math.log(nextCode + earlyChange) / 0.6931471805599453 + 1, 12) | 0; } prevCode = code; decodedLength += currentSequenceLength; if (estimatedDecodedSize < decodedLength) { do { estimatedDecodedSize += decodedSizeDelta; } while (estimatedDecodedSize < decodedLength); buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize); } for (j = 0; j < currentSequenceLength; j++) { buffer[currentBufferLength++] = currentSequence[j]; } } lzwState.nextCode = nextCode; lzwState.codeLength = codeLength; lzwState.prevCode = prevCode; lzwState.currentSequenceLength = currentSequenceLength; this.bufferLength = currentBufferLength; }; return LZWStream; }(); exports.LZWStream = LZWStream; var NullStream = function NullStreamClosure() { function NullStream() { Stream.call(this, new Uint8Array(0)); } NullStream.prototype = Stream.prototype; return NullStream; }(); exports.NullStream = NullStream; /***/ }), /* 143 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.CCITTFaxStream = void 0; var _primitives = __w_pdfjs_require__(135); var _ccitt = __w_pdfjs_require__(144); var _stream = __w_pdfjs_require__(142); var CCITTFaxStream = function CCITTFaxStreamClosure() { function CCITTFaxStream(str, maybeLength, params) { this.str = str; this.dict = str.dict; if (!(0, _primitives.isDict)(params)) { params = _primitives.Dict.empty; } var source = { next: function next() { return str.getByte(); } }; this.ccittFaxDecoder = new _ccitt.CCITTFaxDecoder(source, { K: params.get("K"), EndOfLine: params.get("EndOfLine"), EncodedByteAlign: params.get("EncodedByteAlign"), Columns: params.get("Columns"), Rows: params.get("Rows"), EndOfBlock: params.get("EndOfBlock"), BlackIs1: params.get("BlackIs1") }); _stream.DecodeStream.call(this, maybeLength); } CCITTFaxStream.prototype = Object.create(_stream.DecodeStream.prototype); CCITTFaxStream.prototype.readBlock = function () { while (!this.eof) { var c = this.ccittFaxDecoder.readNextChar(); if (c === -1) { this.eof = true; return; } this.ensureBuffer(this.bufferLength + 1); this.buffer[this.bufferLength++] = c; } }; return CCITTFaxStream; }(); exports.CCITTFaxStream = CCITTFaxStream; /***/ }), /* 144 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.CCITTFaxDecoder = void 0; var _util = __w_pdfjs_require__(4); var CCITTFaxDecoder = function CCITTFaxDecoder() { var ccittEOL = -2; var ccittEOF = -1; var twoDimPass = 0; var twoDimHoriz = 1; var twoDimVert0 = 2; var twoDimVertR1 = 3; var twoDimVertL1 = 4; var twoDimVertR2 = 5; var twoDimVertL2 = 6; var twoDimVertR3 = 7; var twoDimVertL3 = 8; var twoDimTable = [[-1, -1], [-1, -1], [7, twoDimVertL3], [7, twoDimVertR3], [6, twoDimVertL2], [6, twoDimVertL2], [6, twoDimVertR2], [6, twoDimVertR2], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0]]; var whiteTable1 = [[-1, -1], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [12, 1984], [12, 2048], [12, 2112], [12, 2176], [12, 2240], [12, 2304], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [12, 2368], [12, 2432], [12, 2496], [12, 2560]]; var whiteTable2 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [8, 29], [8, 29], [8, 30], [8, 30], [8, 45], [8, 45], [8, 46], [8, 46], [7, 22], [7, 22], [7, 22], [7, 22], [7, 23], [7, 23], [7, 23], [7, 23], [8, 47], [8, 47], [8, 48], [8, 48], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [7, 20], [7, 20], [7, 20], [7, 20], [8, 33], [8, 33], [8, 34], [8, 34], [8, 35], [8, 35], [8, 36], [8, 36], [8, 37], [8, 37], [8, 38], [8, 38], [7, 19], [7, 19], [7, 19], [7, 19], [8, 31], [8, 31], [8, 32], [8, 32], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [8, 53], [8, 53], [8, 54], [8, 54], [7, 26], [7, 26], [7, 26], [7, 26], [8, 39], [8, 39], [8, 40], [8, 40], [8, 41], [8, 41], [8, 42], [8, 42], [8, 43], [8, 43], [8, 44], [8, 44], [7, 21], [7, 21], [7, 21], [7, 21], [7, 28], [7, 28], [7, 28], [7, 28], [8, 61], [8, 61], [8, 62], [8, 62], [8, 63], [8, 63], [8, 0], [8, 0], [8, 320], [8, 320], [8, 384], [8, 384], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [7, 27], [7, 27], [7, 27], [7, 27], [8, 59], [8, 59], [8, 60], [8, 60], [9, 1472], [9, 1536], [9, 1600], [9, 1728], [7, 18], [7, 18], [7, 18], [7, 18], [7, 24], [7, 24], [7, 24], [7, 24], [8, 49], [8, 49], [8, 50], [8, 50], [8, 51], [8, 51], [8, 52], [8, 52], [7, 25], [7, 25], [7, 25], [7, 25], [8, 55], [8, 55], [8, 56], [8, 56], [8, 57], [8, 57], [8, 58], [8, 58], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [8, 448], [8, 448], [8, 512], [8, 512], [9, 704], [9, 768], [8, 640], [8, 640], [8, 576], [8, 576], [9, 832], [9, 896], [9, 960], [9, 1024], [9, 1088], [9, 1152], [9, 1216], [9, 1280], [9, 1344], [9, 1408], [7, 256], [7, 256], [7, 256], [7, 256], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7]]; var blackTable1 = [[-1, -1], [-1, -1], [12, ccittEOL], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [11, 1792], [11, 1792], [12, 1984], [12, 1984], [12, 2048], [12, 2048], [12, 2112], [12, 2112], [12, 2176], [12, 2176], [12, 2240], [12, 2240], [12, 2304], [12, 2304], [11, 1856], [11, 1856], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [11, 1920], [11, 1920], [12, 2368], [12, 2368], [12, 2432], [12, 2432], [12, 2496], [12, 2496], [12, 2560], [12, 2560], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [12, 52], [12, 52], [13, 640], [13, 704], [13, 768], [13, 832], [12, 55], [12, 55], [12, 56], [12, 56], [13, 1280], [13, 1344], [13, 1408], [13, 1472], [12, 59], [12, 59], [12, 60], [12, 60], [13, 1536], [13, 1600], [11, 24], [11, 24], [11, 24], [11, 24], [11, 25], [11, 25], [11, 25], [11, 25], [13, 1664], [13, 1728], [12, 320], [12, 320], [12, 384], [12, 384], [12, 448], [12, 448], [13, 512], [13, 576], [12, 53], [12, 53], [12, 54], [12, 54], [13, 896], [13, 960], [13, 1024], [13, 1088], [13, 1152], [13, 1216], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64]]; var blackTable2 = [[8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [11, 23], [11, 23], [12, 50], [12, 51], [12, 44], [12, 45], [12, 46], [12, 47], [12, 57], [12, 58], [12, 61], [12, 256], [10, 16], [10, 16], [10, 16], [10, 16], [10, 17], [10, 17], [10, 17], [10, 17], [12, 48], [12, 49], [12, 62], [12, 63], [12, 30], [12, 31], [12, 32], [12, 33], [12, 40], [12, 41], [11, 22], [11, 22], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [12, 128], [12, 192], [12, 26], [12, 27], [12, 28], [12, 29], [11, 19], [11, 19], [11, 20], [11, 20], [12, 34], [12, 35], [12, 36], [12, 37], [12, 38], [12, 39], [11, 21], [11, 21], [12, 42], [12, 43], [10, 0], [10, 0], [10, 0], [10, 0], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12]]; var blackTable3 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [6, 9], [6, 8], [5, 7], [5, 7], [4, 6], [4, 6], [4, 6], [4, 6], [4, 5], [4, 5], [4, 5], [4, 5], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2]]; function CCITTFaxDecoder(source) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if (!source || typeof source.next !== "function") { throw new Error('CCITTFaxDecoder - invalid "source" parameter.'); } this.source = source; this.eof = false; this.encoding = options.K || 0; this.eoline = options.EndOfLine || false; this.byteAlign = options.EncodedByteAlign || false; this.columns = options.Columns || 1728; this.rows = options.Rows || 0; var eoblock = options.EndOfBlock; if (eoblock === null || eoblock === undefined) { eoblock = true; } this.eoblock = eoblock; this.black = options.BlackIs1 || false; this.codingLine = new Uint32Array(this.columns + 1); this.refLine = new Uint32Array(this.columns + 2); this.codingLine[0] = this.columns; this.codingPos = 0; this.row = 0; this.nextLine2D = this.encoding < 0; this.inputBits = 0; this.inputBuf = 0; this.outputBits = 0; this.rowsDone = false; var code1; while ((code1 = this._lookBits(12)) === 0) { this._eatBits(1); } if (code1 === 1) { this._eatBits(12); } if (this.encoding > 0) { this.nextLine2D = !this._lookBits(1); this._eatBits(1); } } CCITTFaxDecoder.prototype = { readNextChar: function readNextChar() { if (this.eof) { return -1; } var refLine = this.refLine; var codingLine = this.codingLine; var columns = this.columns; var refPos, blackPixels, bits, i; if (this.outputBits === 0) { if (this.rowsDone) { this.eof = true; } if (this.eof) { return -1; } this.err = false; var code1, code2, code3; if (this.nextLine2D) { for (i = 0; codingLine[i] < columns; ++i) { refLine[i] = codingLine[i]; } refLine[i++] = columns; refLine[i] = columns; codingLine[0] = 0; this.codingPos = 0; refPos = 0; blackPixels = 0; while (codingLine[this.codingPos] < columns) { code1 = this._getTwoDimCode(); switch (code1) { case twoDimPass: this._addPixels(refLine[refPos + 1], blackPixels); if (refLine[refPos + 1] < columns) { refPos += 2; } break; case twoDimHoriz: code1 = code2 = 0; if (blackPixels) { do { code1 += code3 = this._getBlackCode(); } while (code3 >= 64); do { code2 += code3 = this._getWhiteCode(); } while (code3 >= 64); } else { do { code1 += code3 = this._getWhiteCode(); } while (code3 >= 64); do { code2 += code3 = this._getBlackCode(); } while (code3 >= 64); } this._addPixels(codingLine[this.codingPos] + code1, blackPixels); if (codingLine[this.codingPos] < columns) { this._addPixels(codingLine[this.codingPos] + code2, blackPixels ^ 1); } while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { refPos += 2; } break; case twoDimVertR3: this._addPixels(refLine[refPos] + 3, blackPixels); blackPixels ^= 1; if (codingLine[this.codingPos] < columns) { ++refPos; while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { refPos += 2; } } break; case twoDimVertR2: this._addPixels(refLine[refPos] + 2, blackPixels); blackPixels ^= 1; if (codingLine[this.codingPos] < columns) { ++refPos; while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { refPos += 2; } } break; case twoDimVertR1: this._addPixels(refLine[refPos] + 1, blackPixels); blackPixels ^= 1; if (codingLine[this.codingPos] < columns) { ++refPos; while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { refPos += 2; } } break; case twoDimVert0: this._addPixels(refLine[refPos], blackPixels); blackPixels ^= 1; if (codingLine[this.codingPos] < columns) { ++refPos; while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { refPos += 2; } } break; case twoDimVertL3: this._addPixelsNeg(refLine[refPos] - 3, blackPixels); blackPixels ^= 1; if (codingLine[this.codingPos] < columns) { if (refPos > 0) { --refPos; } else { ++refPos; } while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { refPos += 2; } } break; case twoDimVertL2: this._addPixelsNeg(refLine[refPos] - 2, blackPixels); blackPixels ^= 1; if (codingLine[this.codingPos] < columns) { if (refPos > 0) { --refPos; } else { ++refPos; } while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { refPos += 2; } } break; case twoDimVertL1: this._addPixelsNeg(refLine[refPos] - 1, blackPixels); blackPixels ^= 1; if (codingLine[this.codingPos] < columns) { if (refPos > 0) { --refPos; } else { ++refPos; } while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { refPos += 2; } } break; case ccittEOF: this._addPixels(columns, 0); this.eof = true; break; default: (0, _util.info)("bad 2d code"); this._addPixels(columns, 0); this.err = true; } } } else { codingLine[0] = 0; this.codingPos = 0; blackPixels = 0; while (codingLine[this.codingPos] < columns) { code1 = 0; if (blackPixels) { do { code1 += code3 = this._getBlackCode(); } while (code3 >= 64); } else { do { code1 += code3 = this._getWhiteCode(); } while (code3 >= 64); } this._addPixels(codingLine[this.codingPos] + code1, blackPixels); blackPixels ^= 1; } } var gotEOL = false; if (this.byteAlign) { this.inputBits &= ~7; } if (!this.eoblock && this.row === this.rows - 1) { this.rowsDone = true; } else { code1 = this._lookBits(12); if (this.eoline) { while (code1 !== ccittEOF && code1 !== 1) { this._eatBits(1); code1 = this._lookBits(12); } } else { while (code1 === 0) { this._eatBits(1); code1 = this._lookBits(12); } } if (code1 === 1) { this._eatBits(12); gotEOL = true; } else if (code1 === ccittEOF) { this.eof = true; } } if (!this.eof && this.encoding > 0 && !this.rowsDone) { this.nextLine2D = !this._lookBits(1); this._eatBits(1); } if (this.eoblock && gotEOL && this.byteAlign) { code1 = this._lookBits(12); if (code1 === 1) { this._eatBits(12); if (this.encoding > 0) { this._lookBits(1); this._eatBits(1); } if (this.encoding >= 0) { for (i = 0; i < 4; ++i) { code1 = this._lookBits(12); if (code1 !== 1) { (0, _util.info)("bad rtc code: " + code1); } this._eatBits(12); if (this.encoding > 0) { this._lookBits(1); this._eatBits(1); } } } this.eof = true; } } else if (this.err && this.eoline) { while (true) { code1 = this._lookBits(13); if (code1 === ccittEOF) { this.eof = true; return -1; } if (code1 >> 1 === 1) { break; } this._eatBits(1); } this._eatBits(12); if (this.encoding > 0) { this._eatBits(1); this.nextLine2D = !(code1 & 1); } } if (codingLine[0] > 0) { this.outputBits = codingLine[this.codingPos = 0]; } else { this.outputBits = codingLine[this.codingPos = 1]; } this.row++; } var c; if (this.outputBits >= 8) { c = this.codingPos & 1 ? 0 : 0xff; this.outputBits -= 8; if (this.outputBits === 0 && codingLine[this.codingPos] < columns) { this.codingPos++; this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1]; } } else { bits = 8; c = 0; do { if (this.outputBits > bits) { c <<= bits; if (!(this.codingPos & 1)) { c |= 0xff >> 8 - bits; } this.outputBits -= bits; bits = 0; } else { c <<= this.outputBits; if (!(this.codingPos & 1)) { c |= 0xff >> 8 - this.outputBits; } bits -= this.outputBits; this.outputBits = 0; if (codingLine[this.codingPos] < columns) { this.codingPos++; this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1]; } else if (bits > 0) { c <<= bits; bits = 0; } } } while (bits); } if (this.black) { c ^= 0xff; } return c; }, _addPixels: function _addPixels(a1, blackPixels) { var codingLine = this.codingLine; var codingPos = this.codingPos; if (a1 > codingLine[codingPos]) { if (a1 > this.columns) { (0, _util.info)("row is wrong length"); this.err = true; a1 = this.columns; } if (codingPos & 1 ^ blackPixels) { ++codingPos; } codingLine[codingPos] = a1; } this.codingPos = codingPos; }, _addPixelsNeg: function _addPixelsNeg(a1, blackPixels) { var codingLine = this.codingLine; var codingPos = this.codingPos; if (a1 > codingLine[codingPos]) { if (a1 > this.columns) { (0, _util.info)("row is wrong length"); this.err = true; a1 = this.columns; } if (codingPos & 1 ^ blackPixels) { ++codingPos; } codingLine[codingPos] = a1; } else if (a1 < codingLine[codingPos]) { if (a1 < 0) { (0, _util.info)("invalid code"); this.err = true; a1 = 0; } while (codingPos > 0 && a1 < codingLine[codingPos - 1]) { --codingPos; } codingLine[codingPos] = a1; } this.codingPos = codingPos; }, _findTableCode: function _findTableCode(start, end, table, limit) { var limitValue = limit || 0; for (var i = start; i <= end; ++i) { var code = this._lookBits(i); if (code === ccittEOF) { return [true, 1, false]; } if (i < end) { code <<= end - i; } if (!limitValue || code >= limitValue) { var p = table[code - limitValue]; if (p[0] === i) { this._eatBits(i); return [true, p[1], true]; } } } return [false, 0, false]; }, _getTwoDimCode: function _getTwoDimCode() { var code = 0; var p; if (this.eoblock) { code = this._lookBits(7); p = twoDimTable[code]; if (p && p[0] > 0) { this._eatBits(p[0]); return p[1]; } } else { var result = this._findTableCode(1, 7, twoDimTable); if (result[0] && result[2]) { return result[1]; } } (0, _util.info)("Bad two dim code"); return ccittEOF; }, _getWhiteCode: function _getWhiteCode() { var code = 0; var p; if (this.eoblock) { code = this._lookBits(12); if (code === ccittEOF) { return 1; } if (code >> 5 === 0) { p = whiteTable1[code]; } else { p = whiteTable2[code >> 3]; } if (p[0] > 0) { this._eatBits(p[0]); return p[1]; } } else { var result = this._findTableCode(1, 9, whiteTable2); if (result[0]) { return result[1]; } result = this._findTableCode(11, 12, whiteTable1); if (result[0]) { return result[1]; } } (0, _util.info)("bad white code"); this._eatBits(1); return 1; }, _getBlackCode: function _getBlackCode() { var code, p; if (this.eoblock) { code = this._lookBits(13); if (code === ccittEOF) { return 1; } if (code >> 7 === 0) { p = blackTable1[code]; } else if (code >> 9 === 0 && code >> 7 !== 0) { p = blackTable2[(code >> 1) - 64]; } else { p = blackTable3[code >> 7]; } if (p[0] > 0) { this._eatBits(p[0]); return p[1]; } } else { var result = this._findTableCode(2, 6, blackTable3); if (result[0]) { return result[1]; } result = this._findTableCode(7, 12, blackTable2, 64); if (result[0]) { return result[1]; } result = this._findTableCode(10, 13, blackTable1); if (result[0]) { return result[1]; } } (0, _util.info)("bad black code"); this._eatBits(1); return 1; }, _lookBits: function _lookBits(n) { var c; while (this.inputBits < n) { if ((c = this.source.next()) === -1) { if (this.inputBits === 0) { return ccittEOF; } return this.inputBuf << n - this.inputBits & 0xffff >> 16 - n; } this.inputBuf = this.inputBuf << 8 | c; this.inputBits += 8; } return this.inputBuf >> this.inputBits - n & 0xffff >> 16 - n; }, _eatBits: function _eatBits(n) { if ((this.inputBits -= n) < 0) { this.inputBits = 0; } } }; return CCITTFaxDecoder; }(); exports.CCITTFaxDecoder = CCITTFaxDecoder; /***/ }), /* 145 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Jbig2Stream = void 0; var _primitives = __w_pdfjs_require__(135); var _stream = __w_pdfjs_require__(142); var _jbig = __w_pdfjs_require__(146); var _util = __w_pdfjs_require__(4); var Jbig2Stream = function Jbig2StreamClosure() { function Jbig2Stream(stream, maybeLength, dict, params) { this.stream = stream; this.maybeLength = maybeLength; this.dict = dict; this.params = params; _stream.DecodeStream.call(this, maybeLength); } Jbig2Stream.prototype = Object.create(_stream.DecodeStream.prototype); Object.defineProperty(Jbig2Stream.prototype, "bytes", { get: function get() { return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength)); }, configurable: true }); Jbig2Stream.prototype.ensureBuffer = function (requested) {}; Jbig2Stream.prototype.readBlock = function () { if (this.eof) { return; } var jbig2Image = new _jbig.Jbig2Image(); var chunks = []; if ((0, _primitives.isDict)(this.params)) { var globalsStream = this.params.get("JBIG2Globals"); if ((0, _primitives.isStream)(globalsStream)) { var globals = globalsStream.getBytes(); chunks.push({ data: globals, start: 0, end: globals.length }); } } chunks.push({ data: this.bytes, start: 0, end: this.bytes.length }); var data = jbig2Image.parseChunks(chunks); var dataLength = data.length; for (var i = 0; i < dataLength; i++) { data[i] ^= 0xff; } this.buffer = data; this.bufferLength = dataLength; this.eof = true; }; return Jbig2Stream; }(); exports.Jbig2Stream = Jbig2Stream; /***/ }), /* 146 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Jbig2Image = void 0; var _util = __w_pdfjs_require__(4); var _core_utils = __w_pdfjs_require__(138); var _arithmetic_decoder = __w_pdfjs_require__(147); var _ccitt = __w_pdfjs_require__(144); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } var Jbig2Error = /*#__PURE__*/function (_BaseException) { _inherits(Jbig2Error, _BaseException); var _super = _createSuper(Jbig2Error); function Jbig2Error(msg) { _classCallCheck(this, Jbig2Error); return _super.call(this, "JBIG2 error: ".concat(msg)); } return Jbig2Error; }(_util.BaseException); var Jbig2Image = function Jbig2ImageClosure() { function ContextCache() {} ContextCache.prototype = { getContexts: function getContexts(id) { if (id in this) { return this[id]; } return this[id] = new Int8Array(1 << 16); } }; function DecodingContext(data, start, end) { this.data = data; this.start = start; this.end = end; } DecodingContext.prototype = { get decoder() { var decoder = new _arithmetic_decoder.ArithmeticDecoder(this.data, this.start, this.end); return (0, _util.shadow)(this, "decoder", decoder); }, get contextCache() { var cache = new ContextCache(); return (0, _util.shadow)(this, "contextCache", cache); } }; function decodeInteger(contextCache, procedure, decoder) { var contexts = contextCache.getContexts(procedure); var prev = 1; function readBits(length) { var v = 0; for (var i = 0; i < length; i++) { var bit = decoder.readBit(contexts, prev); prev = prev < 256 ? prev << 1 | bit : (prev << 1 | bit) & 511 | 256; v = v << 1 | bit; } return v >>> 0; } var sign = readBits(1); var value = readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(32) + 4436 : readBits(12) + 340 : readBits(8) + 84 : readBits(6) + 20 : readBits(4) + 4 : readBits(2); if (sign === 0) { return value; } else if (value > 0) { return -value; } return null; } function decodeIAID(contextCache, decoder, codeLength) { var contexts = contextCache.getContexts("IAID"); var prev = 1; for (var i = 0; i < codeLength; i++) { var bit = decoder.readBit(contexts, prev); prev = prev << 1 | bit; } if (codeLength < 31) { return prev & (1 << codeLength) - 1; } return prev & 0x7fffffff; } var SegmentTypes = ["SymbolDictionary", null, null, null, "IntermediateTextRegion", null, "ImmediateTextRegion", "ImmediateLosslessTextRegion", null, null, null, null, null, null, null, null, "PatternDictionary", null, null, null, "IntermediateHalftoneRegion", null, "ImmediateHalftoneRegion", "ImmediateLosslessHalftoneRegion", null, null, null, null, null, null, null, null, null, null, null, null, "IntermediateGenericRegion", null, "ImmediateGenericRegion", "ImmediateLosslessGenericRegion", "IntermediateGenericRefinementRegion", null, "ImmediateGenericRefinementRegion", "ImmediateLosslessGenericRefinementRegion", null, null, null, null, "PageInformation", "EndOfPage", "EndOfStripe", "EndOfFile", "Profiles", "Tables", null, null, null, null, null, null, null, null, "Extension"]; var CodingTemplates = [[{ x: -1, y: -2 }, { x: 0, y: -2 }, { x: 1, y: -2 }, { x: -2, y: -1 }, { x: -1, y: -1 }, { x: 0, y: -1 }, { x: 1, y: -1 }, { x: 2, y: -1 }, { x: -4, y: 0 }, { x: -3, y: 0 }, { x: -2, y: 0 }, { x: -1, y: 0 }], [{ x: -1, y: -2 }, { x: 0, y: -2 }, { x: 1, y: -2 }, { x: 2, y: -2 }, { x: -2, y: -1 }, { x: -1, y: -1 }, { x: 0, y: -1 }, { x: 1, y: -1 }, { x: 2, y: -1 }, { x: -3, y: 0 }, { x: -2, y: 0 }, { x: -1, y: 0 }], [{ x: -1, y: -2 }, { x: 0, y: -2 }, { x: 1, y: -2 }, { x: -2, y: -1 }, { x: -1, y: -1 }, { x: 0, y: -1 }, { x: 1, y: -1 }, { x: -2, y: 0 }, { x: -1, y: 0 }], [{ x: -3, y: -1 }, { x: -2, y: -1 }, { x: -1, y: -1 }, { x: 0, y: -1 }, { x: 1, y: -1 }, { x: -4, y: 0 }, { x: -3, y: 0 }, { x: -2, y: 0 }, { x: -1, y: 0 }]]; var RefinementTemplates = [{ coding: [{ x: 0, y: -1 }, { x: 1, y: -1 }, { x: -1, y: 0 }], reference: [{ x: 0, y: -1 }, { x: 1, y: -1 }, { x: -1, y: 0 }, { x: 0, y: 0 }, { x: 1, y: 0 }, { x: -1, y: 1 }, { x: 0, y: 1 }, { x: 1, y: 1 }] }, { coding: [{ x: -1, y: -1 }, { x: 0, y: -1 }, { x: 1, y: -1 }, { x: -1, y: 0 }], reference: [{ x: 0, y: -1 }, { x: -1, y: 0 }, { x: 0, y: 0 }, { x: 1, y: 0 }, { x: 0, y: 1 }, { x: 1, y: 1 }] }]; var ReusedContexts = [0x9b25, 0x0795, 0x00e5, 0x0195]; var RefinementReusedContexts = [0x0020, 0x0008]; function decodeBitmapTemplate0(width, height, decodingContext) { var decoder = decodingContext.decoder; var contexts = decodingContext.contextCache.getContexts("GB"); var contextLabel, i, j, pixel, row, row1, row2, bitmap = []; var OLD_PIXEL_MASK = 0x7bf7; for (i = 0; i < height; i++) { row = bitmap[i] = new Uint8Array(width); row1 = i < 1 ? row : bitmap[i - 1]; row2 = i < 2 ? row : bitmap[i - 2]; contextLabel = row2[0] << 13 | row2[1] << 12 | row2[2] << 11 | row1[0] << 7 | row1[1] << 6 | row1[2] << 5 | row1[3] << 4; for (j = 0; j < width; j++) { row[j] = pixel = decoder.readBit(contexts, contextLabel); contextLabel = (contextLabel & OLD_PIXEL_MASK) << 1 | (j + 3 < width ? row2[j + 3] << 11 : 0) | (j + 4 < width ? row1[j + 4] << 4 : 0) | pixel; } } return bitmap; } function decodeBitmap(mmr, width, height, templateIndex, prediction, skip, at, decodingContext) { if (mmr) { var input = new Reader(decodingContext.data, decodingContext.start, decodingContext.end); return decodeMMRBitmap(input, width, height, false); } if (templateIndex === 0 && !skip && !prediction && at.length === 4 && at[0].x === 3 && at[0].y === -1 && at[1].x === -3 && at[1].y === -1 && at[2].x === 2 && at[2].y === -2 && at[3].x === -2 && at[3].y === -2) { return decodeBitmapTemplate0(width, height, decodingContext); } var useskip = !!skip; var template = CodingTemplates[templateIndex].concat(at); template.sort(function (a, b) { return a.y - b.y || a.x - b.x; }); var templateLength = template.length; var templateX = new Int8Array(templateLength); var templateY = new Int8Array(templateLength); var changingTemplateEntries = []; var reuseMask = 0, minX = 0, maxX = 0, minY = 0; var c, k; for (k = 0; k < templateLength; k++) { templateX[k] = template[k].x; templateY[k] = template[k].y; minX = Math.min(minX, template[k].x); maxX = Math.max(maxX, template[k].x); minY = Math.min(minY, template[k].y); if (k < templateLength - 1 && template[k].y === template[k + 1].y && template[k].x === template[k + 1].x - 1) { reuseMask |= 1 << templateLength - 1 - k; } else { changingTemplateEntries.push(k); } } var changingEntriesLength = changingTemplateEntries.length; var changingTemplateX = new Int8Array(changingEntriesLength); var changingTemplateY = new Int8Array(changingEntriesLength); var changingTemplateBit = new Uint16Array(changingEntriesLength); for (c = 0; c < changingEntriesLength; c++) { k = changingTemplateEntries[c]; changingTemplateX[c] = template[k].x; changingTemplateY[c] = template[k].y; changingTemplateBit[c] = 1 << templateLength - 1 - k; } var sbb_left = -minX; var sbb_top = -minY; var sbb_right = width - maxX; var pseudoPixelContext = ReusedContexts[templateIndex]; var row = new Uint8Array(width); var bitmap = []; var decoder = decodingContext.decoder; var contexts = decodingContext.contextCache.getContexts("GB"); var ltp = 0, j, i0, j0, contextLabel = 0, bit, shift; for (var i = 0; i < height; i++) { if (prediction) { var sltp = decoder.readBit(contexts, pseudoPixelContext); ltp ^= sltp; if (ltp) { bitmap.push(row); continue; } } row = new Uint8Array(row); bitmap.push(row); for (j = 0; j < width; j++) { if (useskip && skip[i][j]) { row[j] = 0; continue; } if (j >= sbb_left && j < sbb_right && i >= sbb_top) { contextLabel = contextLabel << 1 & reuseMask; for (k = 0; k < changingEntriesLength; k++) { i0 = i + changingTemplateY[k]; j0 = j + changingTemplateX[k]; bit = bitmap[i0][j0]; if (bit) { bit = changingTemplateBit[k]; contextLabel |= bit; } } } else { contextLabel = 0; shift = templateLength - 1; for (k = 0; k < templateLength; k++, shift--) { j0 = j + templateX[k]; if (j0 >= 0 && j0 < width) { i0 = i + templateY[k]; if (i0 >= 0) { bit = bitmap[i0][j0]; if (bit) { contextLabel |= bit << shift; } } } } } var pixel = decoder.readBit(contexts, contextLabel); row[j] = pixel; } } return bitmap; } function decodeRefinement(width, height, templateIndex, referenceBitmap, offsetX, offsetY, prediction, at, decodingContext) { var codingTemplate = RefinementTemplates[templateIndex].coding; if (templateIndex === 0) { codingTemplate = codingTemplate.concat([at[0]]); } var codingTemplateLength = codingTemplate.length; var codingTemplateX = new Int32Array(codingTemplateLength); var codingTemplateY = new Int32Array(codingTemplateLength); var k; for (k = 0; k < codingTemplateLength; k++) { codingTemplateX[k] = codingTemplate[k].x; codingTemplateY[k] = codingTemplate[k].y; } var referenceTemplate = RefinementTemplates[templateIndex].reference; if (templateIndex === 0) { referenceTemplate = referenceTemplate.concat([at[1]]); } var referenceTemplateLength = referenceTemplate.length; var referenceTemplateX = new Int32Array(referenceTemplateLength); var referenceTemplateY = new Int32Array(referenceTemplateLength); for (k = 0; k < referenceTemplateLength; k++) { referenceTemplateX[k] = referenceTemplate[k].x; referenceTemplateY[k] = referenceTemplate[k].y; } var referenceWidth = referenceBitmap[0].length; var referenceHeight = referenceBitmap.length; var pseudoPixelContext = RefinementReusedContexts[templateIndex]; var bitmap = []; var decoder = decodingContext.decoder; var contexts = decodingContext.contextCache.getContexts("GR"); var ltp = 0; for (var i = 0; i < height; i++) { if (prediction) { var sltp = decoder.readBit(contexts, pseudoPixelContext); ltp ^= sltp; if (ltp) { throw new Jbig2Error("prediction is not supported"); } } var row = new Uint8Array(width); bitmap.push(row); for (var j = 0; j < width; j++) { var i0, j0; var contextLabel = 0; for (k = 0; k < codingTemplateLength; k++) { i0 = i + codingTemplateY[k]; j0 = j + codingTemplateX[k]; if (i0 < 0 || j0 < 0 || j0 >= width) { contextLabel <<= 1; } else { contextLabel = contextLabel << 1 | bitmap[i0][j0]; } } for (k = 0; k < referenceTemplateLength; k++) { i0 = i + referenceTemplateY[k] - offsetY; j0 = j + referenceTemplateX[k] - offsetX; if (i0 < 0 || i0 >= referenceHeight || j0 < 0 || j0 >= referenceWidth) { contextLabel <<= 1; } else { contextLabel = contextLabel << 1 | referenceBitmap[i0][j0]; } } var pixel = decoder.readBit(contexts, contextLabel); row[j] = pixel; } } return bitmap; } function decodeSymbolDictionary(huffman, refinement, symbols, numberOfNewSymbols, numberOfExportedSymbols, huffmanTables, templateIndex, at, refinementTemplateIndex, refinementAt, decodingContext, huffmanInput) { if (huffman && refinement) { throw new Jbig2Error("symbol refinement with Huffman is not supported"); } var newSymbols = []; var currentHeight = 0; var symbolCodeLength = (0, _core_utils.log2)(symbols.length + numberOfNewSymbols); var decoder = decodingContext.decoder; var contextCache = decodingContext.contextCache; var tableB1, symbolWidths; if (huffman) { tableB1 = getStandardTable(1); symbolWidths = []; symbolCodeLength = Math.max(symbolCodeLength, 1); } while (newSymbols.length < numberOfNewSymbols) { var deltaHeight = huffman ? huffmanTables.tableDeltaHeight.decode(huffmanInput) : decodeInteger(contextCache, "IADH", decoder); currentHeight += deltaHeight; var currentWidth = 0, totalWidth = 0; var firstSymbol = huffman ? symbolWidths.length : 0; while (true) { var deltaWidth = huffman ? huffmanTables.tableDeltaWidth.decode(huffmanInput) : decodeInteger(contextCache, "IADW", decoder); if (deltaWidth === null) { break; } currentWidth += deltaWidth; totalWidth += currentWidth; var bitmap; if (refinement) { var numberOfInstances = decodeInteger(contextCache, "IAAI", decoder); if (numberOfInstances > 1) { bitmap = decodeTextRegion(huffman, refinement, currentWidth, currentHeight, 0, numberOfInstances, 1, symbols.concat(newSymbols), symbolCodeLength, 0, 0, 1, 0, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, 0, huffmanInput); } else { var symbolId = decodeIAID(contextCache, decoder, symbolCodeLength); var rdx = decodeInteger(contextCache, "IARDX", decoder); var rdy = decodeInteger(contextCache, "IARDY", decoder); var symbol = symbolId < symbols.length ? symbols[symbolId] : newSymbols[symbolId - symbols.length]; bitmap = decodeRefinement(currentWidth, currentHeight, refinementTemplateIndex, symbol, rdx, rdy, false, refinementAt, decodingContext); } newSymbols.push(bitmap); } else if (huffman) { symbolWidths.push(currentWidth); } else { bitmap = decodeBitmap(false, currentWidth, currentHeight, templateIndex, false, null, at, decodingContext); newSymbols.push(bitmap); } } if (huffman && !refinement) { var bitmapSize = huffmanTables.tableBitmapSize.decode(huffmanInput); huffmanInput.byteAlign(); var collectiveBitmap = void 0; if (bitmapSize === 0) { collectiveBitmap = readUncompressedBitmap(huffmanInput, totalWidth, currentHeight); } else { var originalEnd = huffmanInput.end; var bitmapEnd = huffmanInput.position + bitmapSize; huffmanInput.end = bitmapEnd; collectiveBitmap = decodeMMRBitmap(huffmanInput, totalWidth, currentHeight, false); huffmanInput.end = originalEnd; huffmanInput.position = bitmapEnd; } var numberOfSymbolsDecoded = symbolWidths.length; if (firstSymbol === numberOfSymbolsDecoded - 1) { newSymbols.push(collectiveBitmap); } else { var _i = void 0, y = void 0, xMin = 0, xMax = void 0, bitmapWidth = void 0, symbolBitmap = void 0; for (_i = firstSymbol; _i < numberOfSymbolsDecoded; _i++) { bitmapWidth = symbolWidths[_i]; xMax = xMin + bitmapWidth; symbolBitmap = []; for (y = 0; y < currentHeight; y++) { symbolBitmap.push(collectiveBitmap[y].subarray(xMin, xMax)); } newSymbols.push(symbolBitmap); xMin = xMax; } } } } var exportedSymbols = []; var flags = [], currentFlag = false; var totalSymbolsLength = symbols.length + numberOfNewSymbols; while (flags.length < totalSymbolsLength) { var runLength = huffman ? tableB1.decode(huffmanInput) : decodeInteger(contextCache, "IAEX", decoder); while (runLength--) { flags.push(currentFlag); } currentFlag = !currentFlag; } for (var i = 0, ii = symbols.length; i < ii; i++) { if (flags[i]) { exportedSymbols.push(symbols[i]); } } for (var j = 0; j < numberOfNewSymbols; i++, j++) { if (flags[i]) { exportedSymbols.push(newSymbols[j]); } } return exportedSymbols; } function decodeTextRegion(huffman, refinement, width, height, defaultPixelValue, numberOfSymbolInstances, stripSize, inputSymbols, symbolCodeLength, transposed, dsOffset, referenceCorner, combinationOperator, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, logStripSize, huffmanInput) { if (huffman && refinement) { throw new Jbig2Error("refinement with Huffman is not supported"); } var bitmap = []; var i, row; for (i = 0; i < height; i++) { row = new Uint8Array(width); if (defaultPixelValue) { for (var j = 0; j < width; j++) { row[j] = defaultPixelValue; } } bitmap.push(row); } var decoder = decodingContext.decoder; var contextCache = decodingContext.contextCache; var stripT = huffman ? -huffmanTables.tableDeltaT.decode(huffmanInput) : -decodeInteger(contextCache, "IADT", decoder); var firstS = 0; i = 0; while (i < numberOfSymbolInstances) { var deltaT = huffman ? huffmanTables.tableDeltaT.decode(huffmanInput) : decodeInteger(contextCache, "IADT", decoder); stripT += deltaT; var deltaFirstS = huffman ? huffmanTables.tableFirstS.decode(huffmanInput) : decodeInteger(contextCache, "IAFS", decoder); firstS += deltaFirstS; var currentS = firstS; do { var currentT = 0; if (stripSize > 1) { currentT = huffman ? huffmanInput.readBits(logStripSize) : decodeInteger(contextCache, "IAIT", decoder); } var t = stripSize * stripT + currentT; var symbolId = huffman ? huffmanTables.symbolIDTable.decode(huffmanInput) : decodeIAID(contextCache, decoder, symbolCodeLength); var applyRefinement = refinement && (huffman ? huffmanInput.readBit() : decodeInteger(contextCache, "IARI", decoder)); var symbolBitmap = inputSymbols[symbolId]; var symbolWidth = symbolBitmap[0].length; var symbolHeight = symbolBitmap.length; if (applyRefinement) { var rdw = decodeInteger(contextCache, "IARDW", decoder); var rdh = decodeInteger(contextCache, "IARDH", decoder); var rdx = decodeInteger(contextCache, "IARDX", decoder); var rdy = decodeInteger(contextCache, "IARDY", decoder); symbolWidth += rdw; symbolHeight += rdh; symbolBitmap = decodeRefinement(symbolWidth, symbolHeight, refinementTemplateIndex, symbolBitmap, (rdw >> 1) + rdx, (rdh >> 1) + rdy, false, refinementAt, decodingContext); } var offsetT = t - (referenceCorner & 1 ? 0 : symbolHeight - 1); var offsetS = currentS - (referenceCorner & 2 ? symbolWidth - 1 : 0); var s2, t2, symbolRow; if (transposed) { for (s2 = 0; s2 < symbolHeight; s2++) { row = bitmap[offsetS + s2]; if (!row) { continue; } symbolRow = symbolBitmap[s2]; var maxWidth = Math.min(width - offsetT, symbolWidth); switch (combinationOperator) { case 0: for (t2 = 0; t2 < maxWidth; t2++) { row[offsetT + t2] |= symbolRow[t2]; } break; case 2: for (t2 = 0; t2 < maxWidth; t2++) { row[offsetT + t2] ^= symbolRow[t2]; } break; default: throw new Jbig2Error("operator ".concat(combinationOperator, " is not supported")); } } currentS += symbolHeight - 1; } else { for (t2 = 0; t2 < symbolHeight; t2++) { row = bitmap[offsetT + t2]; if (!row) { continue; } symbolRow = symbolBitmap[t2]; switch (combinationOperator) { case 0: for (s2 = 0; s2 < symbolWidth; s2++) { row[offsetS + s2] |= symbolRow[s2]; } break; case 2: for (s2 = 0; s2 < symbolWidth; s2++) { row[offsetS + s2] ^= symbolRow[s2]; } break; default: throw new Jbig2Error("operator ".concat(combinationOperator, " is not supported")); } } currentS += symbolWidth - 1; } i++; var deltaS = huffman ? huffmanTables.tableDeltaS.decode(huffmanInput) : decodeInteger(contextCache, "IADS", decoder); if (deltaS === null) { break; } currentS += deltaS + dsOffset; } while (true); } return bitmap; } function decodePatternDictionary(mmr, patternWidth, patternHeight, maxPatternIndex, template, decodingContext) { var at = []; if (!mmr) { at.push({ x: -patternWidth, y: 0 }); if (template === 0) { at.push({ x: -3, y: -1 }); at.push({ x: 2, y: -2 }); at.push({ x: -2, y: -2 }); } } var collectiveWidth = (maxPatternIndex + 1) * patternWidth; var collectiveBitmap = decodeBitmap(mmr, collectiveWidth, patternHeight, template, false, null, at, decodingContext); var patterns = []; for (var i = 0; i <= maxPatternIndex; i++) { var patternBitmap = []; var xMin = patternWidth * i; var xMax = xMin + patternWidth; for (var y = 0; y < patternHeight; y++) { patternBitmap.push(collectiveBitmap[y].subarray(xMin, xMax)); } patterns.push(patternBitmap); } return patterns; } function decodeHalftoneRegion(mmr, patterns, template, regionWidth, regionHeight, defaultPixelValue, enableSkip, combinationOperator, gridWidth, gridHeight, gridOffsetX, gridOffsetY, gridVectorX, gridVectorY, decodingContext) { var skip = null; if (enableSkip) { throw new Jbig2Error("skip is not supported"); } if (combinationOperator !== 0) { throw new Jbig2Error("operator " + combinationOperator + " is not supported in halftone region"); } var regionBitmap = []; var i, j, row; for (i = 0; i < regionHeight; i++) { row = new Uint8Array(regionWidth); if (defaultPixelValue) { for (j = 0; j < regionWidth; j++) { row[j] = defaultPixelValue; } } regionBitmap.push(row); } var numberOfPatterns = patterns.length; var pattern0 = patterns[0]; var patternWidth = pattern0[0].length, patternHeight = pattern0.length; var bitsPerValue = (0, _core_utils.log2)(numberOfPatterns); var at = []; if (!mmr) { at.push({ x: template <= 1 ? 3 : 2, y: -1 }); if (template === 0) { at.push({ x: -3, y: -1 }); at.push({ x: 2, y: -2 }); at.push({ x: -2, y: -2 }); } } var grayScaleBitPlanes = []; var mmrInput, bitmap; if (mmr) { mmrInput = new Reader(decodingContext.data, decodingContext.start, decodingContext.end); } for (i = bitsPerValue - 1; i >= 0; i--) { if (mmr) { bitmap = decodeMMRBitmap(mmrInput, gridWidth, gridHeight, true); } else { bitmap = decodeBitmap(false, gridWidth, gridHeight, template, false, skip, at, decodingContext); } grayScaleBitPlanes[i] = bitmap; } var mg, ng, bit, patternIndex, patternBitmap, x, y, patternRow, regionRow; for (mg = 0; mg < gridHeight; mg++) { for (ng = 0; ng < gridWidth; ng++) { bit = 0; patternIndex = 0; for (j = bitsPerValue - 1; j >= 0; j--) { bit = grayScaleBitPlanes[j][mg][ng] ^ bit; patternIndex |= bit << j; } patternBitmap = patterns[patternIndex]; x = gridOffsetX + mg * gridVectorY + ng * gridVectorX >> 8; y = gridOffsetY + mg * gridVectorX - ng * gridVectorY >> 8; if (x >= 0 && x + patternWidth <= regionWidth && y >= 0 && y + patternHeight <= regionHeight) { for (i = 0; i < patternHeight; i++) { regionRow = regionBitmap[y + i]; patternRow = patternBitmap[i]; for (j = 0; j < patternWidth; j++) { regionRow[x + j] |= patternRow[j]; } } } else { var regionX = void 0, regionY = void 0; for (i = 0; i < patternHeight; i++) { regionY = y + i; if (regionY < 0 || regionY >= regionHeight) { continue; } regionRow = regionBitmap[regionY]; patternRow = patternBitmap[i]; for (j = 0; j < patternWidth; j++) { regionX = x + j; if (regionX >= 0 && regionX < regionWidth) { regionRow[regionX] |= patternRow[j]; } } } } } } return regionBitmap; } function readSegmentHeader(data, start) { var segmentHeader = {}; segmentHeader.number = (0, _core_utils.readUint32)(data, start); var flags = data[start + 4]; var segmentType = flags & 0x3f; if (!SegmentTypes[segmentType]) { throw new Jbig2Error("invalid segment type: " + segmentType); } segmentHeader.type = segmentType; segmentHeader.typeName = SegmentTypes[segmentType]; segmentHeader.deferredNonRetain = !!(flags & 0x80); var pageAssociationFieldSize = !!(flags & 0x40); var referredFlags = data[start + 5]; var referredToCount = referredFlags >> 5 & 7; var retainBits = [referredFlags & 31]; var position = start + 6; if (referredFlags === 7) { referredToCount = (0, _core_utils.readUint32)(data, position - 1) & 0x1fffffff; position += 3; var bytes = referredToCount + 7 >> 3; retainBits[0] = data[position++]; while (--bytes > 0) { retainBits.push(data[position++]); } } else if (referredFlags === 5 || referredFlags === 6) { throw new Jbig2Error("invalid referred-to flags"); } segmentHeader.retainBits = retainBits; var referredToSegmentNumberSize = 4; if (segmentHeader.number <= 256) { referredToSegmentNumberSize = 1; } else if (segmentHeader.number <= 65536) { referredToSegmentNumberSize = 2; } var referredTo = []; var i, ii; for (i = 0; i < referredToCount; i++) { var number = void 0; if (referredToSegmentNumberSize === 1) { number = data[position]; } else if (referredToSegmentNumberSize === 2) { number = (0, _core_utils.readUint16)(data, position); } else { number = (0, _core_utils.readUint32)(data, position); } referredTo.push(number); position += referredToSegmentNumberSize; } segmentHeader.referredTo = referredTo; if (!pageAssociationFieldSize) { segmentHeader.pageAssociation = data[position++]; } else { segmentHeader.pageAssociation = (0, _core_utils.readUint32)(data, position); position += 4; } segmentHeader.length = (0, _core_utils.readUint32)(data, position); position += 4; if (segmentHeader.length === 0xffffffff) { if (segmentType === 38) { var genericRegionInfo = readRegionSegmentInformation(data, position); var genericRegionSegmentFlags = data[position + RegionSegmentInformationFieldLength]; var genericRegionMmr = !!(genericRegionSegmentFlags & 1); var searchPatternLength = 6; var searchPattern = new Uint8Array(searchPatternLength); if (!genericRegionMmr) { searchPattern[0] = 0xff; searchPattern[1] = 0xac; } searchPattern[2] = genericRegionInfo.height >>> 24 & 0xff; searchPattern[3] = genericRegionInfo.height >> 16 & 0xff; searchPattern[4] = genericRegionInfo.height >> 8 & 0xff; searchPattern[5] = genericRegionInfo.height & 0xff; for (i = position, ii = data.length; i < ii; i++) { var j = 0; while (j < searchPatternLength && searchPattern[j] === data[i + j]) { j++; } if (j === searchPatternLength) { segmentHeader.length = i + searchPatternLength; break; } } if (segmentHeader.length === 0xffffffff) { throw new Jbig2Error("segment end was not found"); } } else { throw new Jbig2Error("invalid unknown segment length"); } } segmentHeader.headerEnd = position; return segmentHeader; } function readSegments(header, data, start, end) { var segments = []; var position = start; while (position < end) { var segmentHeader = readSegmentHeader(data, position); position = segmentHeader.headerEnd; var segment = { header: segmentHeader, data: data }; if (!header.randomAccess) { segment.start = position; position += segmentHeader.length; segment.end = position; } segments.push(segment); if (segmentHeader.type === 51) { break; } } if (header.randomAccess) { for (var i = 0, ii = segments.length; i < ii; i++) { segments[i].start = position; position += segments[i].header.length; segments[i].end = position; } } return segments; } function readRegionSegmentInformation(data, start) { return { width: (0, _core_utils.readUint32)(data, start), height: (0, _core_utils.readUint32)(data, start + 4), x: (0, _core_utils.readUint32)(data, start + 8), y: (0, _core_utils.readUint32)(data, start + 12), combinationOperator: data[start + 16] & 7 }; } var RegionSegmentInformationFieldLength = 17; function processSegment(segment, visitor) { var header = segment.header; var data = segment.data, position = segment.start, end = segment.end; var args, at, i, atLength; switch (header.type) { case 0: var dictionary = {}; var dictionaryFlags = (0, _core_utils.readUint16)(data, position); dictionary.huffman = !!(dictionaryFlags & 1); dictionary.refinement = !!(dictionaryFlags & 2); dictionary.huffmanDHSelector = dictionaryFlags >> 2 & 3; dictionary.huffmanDWSelector = dictionaryFlags >> 4 & 3; dictionary.bitmapSizeSelector = dictionaryFlags >> 6 & 1; dictionary.aggregationInstancesSelector = dictionaryFlags >> 7 & 1; dictionary.bitmapCodingContextUsed = !!(dictionaryFlags & 256); dictionary.bitmapCodingContextRetained = !!(dictionaryFlags & 512); dictionary.template = dictionaryFlags >> 10 & 3; dictionary.refinementTemplate = dictionaryFlags >> 12 & 1; position += 2; if (!dictionary.huffman) { atLength = dictionary.template === 0 ? 4 : 1; at = []; for (i = 0; i < atLength; i++) { at.push({ x: (0, _core_utils.readInt8)(data, position), y: (0, _core_utils.readInt8)(data, position + 1) }); position += 2; } dictionary.at = at; } if (dictionary.refinement && !dictionary.refinementTemplate) { at = []; for (i = 0; i < 2; i++) { at.push({ x: (0, _core_utils.readInt8)(data, position), y: (0, _core_utils.readInt8)(data, position + 1) }); position += 2; } dictionary.refinementAt = at; } dictionary.numberOfExportedSymbols = (0, _core_utils.readUint32)(data, position); position += 4; dictionary.numberOfNewSymbols = (0, _core_utils.readUint32)(data, position); position += 4; args = [dictionary, header.number, header.referredTo, data, position, end]; break; case 6: case 7: var textRegion = {}; textRegion.info = readRegionSegmentInformation(data, position); position += RegionSegmentInformationFieldLength; var textRegionSegmentFlags = (0, _core_utils.readUint16)(data, position); position += 2; textRegion.huffman = !!(textRegionSegmentFlags & 1); textRegion.refinement = !!(textRegionSegmentFlags & 2); textRegion.logStripSize = textRegionSegmentFlags >> 2 & 3; textRegion.stripSize = 1 << textRegion.logStripSize; textRegion.referenceCorner = textRegionSegmentFlags >> 4 & 3; textRegion.transposed = !!(textRegionSegmentFlags & 64); textRegion.combinationOperator = textRegionSegmentFlags >> 7 & 3; textRegion.defaultPixelValue = textRegionSegmentFlags >> 9 & 1; textRegion.dsOffset = textRegionSegmentFlags << 17 >> 27; textRegion.refinementTemplate = textRegionSegmentFlags >> 15 & 1; if (textRegion.huffman) { var textRegionHuffmanFlags = (0, _core_utils.readUint16)(data, position); position += 2; textRegion.huffmanFS = textRegionHuffmanFlags & 3; textRegion.huffmanDS = textRegionHuffmanFlags >> 2 & 3; textRegion.huffmanDT = textRegionHuffmanFlags >> 4 & 3; textRegion.huffmanRefinementDW = textRegionHuffmanFlags >> 6 & 3; textRegion.huffmanRefinementDH = textRegionHuffmanFlags >> 8 & 3; textRegion.huffmanRefinementDX = textRegionHuffmanFlags >> 10 & 3; textRegion.huffmanRefinementDY = textRegionHuffmanFlags >> 12 & 3; textRegion.huffmanRefinementSizeSelector = !!(textRegionHuffmanFlags & 0x4000); } if (textRegion.refinement && !textRegion.refinementTemplate) { at = []; for (i = 0; i < 2; i++) { at.push({ x: (0, _core_utils.readInt8)(data, position), y: (0, _core_utils.readInt8)(data, position + 1) }); position += 2; } textRegion.refinementAt = at; } textRegion.numberOfSymbolInstances = (0, _core_utils.readUint32)(data, position); position += 4; args = [textRegion, header.referredTo, data, position, end]; break; case 16: var patternDictionary = {}; var patternDictionaryFlags = data[position++]; patternDictionary.mmr = !!(patternDictionaryFlags & 1); patternDictionary.template = patternDictionaryFlags >> 1 & 3; patternDictionary.patternWidth = data[position++]; patternDictionary.patternHeight = data[position++]; patternDictionary.maxPatternIndex = (0, _core_utils.readUint32)(data, position); position += 4; args = [patternDictionary, header.number, data, position, end]; break; case 22: case 23: var halftoneRegion = {}; halftoneRegion.info = readRegionSegmentInformation(data, position); position += RegionSegmentInformationFieldLength; var halftoneRegionFlags = data[position++]; halftoneRegion.mmr = !!(halftoneRegionFlags & 1); halftoneRegion.template = halftoneRegionFlags >> 1 & 3; halftoneRegion.enableSkip = !!(halftoneRegionFlags & 8); halftoneRegion.combinationOperator = halftoneRegionFlags >> 4 & 7; halftoneRegion.defaultPixelValue = halftoneRegionFlags >> 7 & 1; halftoneRegion.gridWidth = (0, _core_utils.readUint32)(data, position); position += 4; halftoneRegion.gridHeight = (0, _core_utils.readUint32)(data, position); position += 4; halftoneRegion.gridOffsetX = (0, _core_utils.readUint32)(data, position) & 0xffffffff; position += 4; halftoneRegion.gridOffsetY = (0, _core_utils.readUint32)(data, position) & 0xffffffff; position += 4; halftoneRegion.gridVectorX = (0, _core_utils.readUint16)(data, position); position += 2; halftoneRegion.gridVectorY = (0, _core_utils.readUint16)(data, position); position += 2; args = [halftoneRegion, header.referredTo, data, position, end]; break; case 38: case 39: var genericRegion = {}; genericRegion.info = readRegionSegmentInformation(data, position); position += RegionSegmentInformationFieldLength; var genericRegionSegmentFlags = data[position++]; genericRegion.mmr = !!(genericRegionSegmentFlags & 1); genericRegion.template = genericRegionSegmentFlags >> 1 & 3; genericRegion.prediction = !!(genericRegionSegmentFlags & 8); if (!genericRegion.mmr) { atLength = genericRegion.template === 0 ? 4 : 1; at = []; for (i = 0; i < atLength; i++) { at.push({ x: (0, _core_utils.readInt8)(data, position), y: (0, _core_utils.readInt8)(data, position + 1) }); position += 2; } genericRegion.at = at; } args = [genericRegion, data, position, end]; break; case 48: var pageInfo = { width: (0, _core_utils.readUint32)(data, position), height: (0, _core_utils.readUint32)(data, position + 4), resolutionX: (0, _core_utils.readUint32)(data, position + 8), resolutionY: (0, _core_utils.readUint32)(data, position + 12) }; if (pageInfo.height === 0xffffffff) { delete pageInfo.height; } var pageSegmentFlags = data[position + 16]; (0, _core_utils.readUint16)(data, position + 17); pageInfo.lossless = !!(pageSegmentFlags & 1); pageInfo.refinement = !!(pageSegmentFlags & 2); pageInfo.defaultPixelValue = pageSegmentFlags >> 2 & 1; pageInfo.combinationOperator = pageSegmentFlags >> 3 & 3; pageInfo.requiresBuffer = !!(pageSegmentFlags & 32); pageInfo.combinationOperatorOverride = !!(pageSegmentFlags & 64); args = [pageInfo]; break; case 49: break; case 50: break; case 51: break; case 53: args = [header.number, data, position, end]; break; case 62: break; default: throw new Jbig2Error("segment type ".concat(header.typeName, "(").concat(header.type, ")") + " is not implemented"); } var callbackName = "on" + header.typeName; if (callbackName in visitor) { visitor[callbackName].apply(visitor, args); } } function processSegments(segments, visitor) { for (var i = 0, ii = segments.length; i < ii; i++) { processSegment(segments[i], visitor); } } function parseJbig2Chunks(chunks) { var visitor = new SimpleSegmentVisitor(); for (var i = 0, ii = chunks.length; i < ii; i++) { var chunk = chunks[i]; var segments = readSegments({}, chunk.data, chunk.start, chunk.end); processSegments(segments, visitor); } return visitor.buffer; } function parseJbig2(data) { var end = data.length; var position = 0; if (data[position] !== 0x97 || data[position + 1] !== 0x4a || data[position + 2] !== 0x42 || data[position + 3] !== 0x32 || data[position + 4] !== 0x0d || data[position + 5] !== 0x0a || data[position + 6] !== 0x1a || data[position + 7] !== 0x0a) { throw new Jbig2Error("parseJbig2 - invalid header."); } var header = Object.create(null); position += 8; var flags = data[position++]; header.randomAccess = !(flags & 1); if (!(flags & 2)) { header.numberOfPages = (0, _core_utils.readUint32)(data, position); position += 4; } var segments = readSegments(header, data, position, end); var visitor = new SimpleSegmentVisitor(); processSegments(segments, visitor); var _visitor$currentPageI = visitor.currentPageInfo, width = _visitor$currentPageI.width, height = _visitor$currentPageI.height; var bitPacked = visitor.buffer; var imgData = new Uint8ClampedArray(width * height); var q = 0, k = 0; for (var i = 0; i < height; i++) { var mask = 0, buffer = void 0; for (var j = 0; j < width; j++) { if (!mask) { mask = 128; buffer = bitPacked[k++]; } imgData[q++] = buffer & mask ? 0 : 255; mask >>= 1; } } return { imgData: imgData, width: width, height: height }; } function SimpleSegmentVisitor() {} SimpleSegmentVisitor.prototype = { onPageInformation: function SimpleSegmentVisitor_onPageInformation(info) { this.currentPageInfo = info; var rowSize = info.width + 7 >> 3; var buffer = new Uint8ClampedArray(rowSize * info.height); if (info.defaultPixelValue) { for (var i = 0, ii = buffer.length; i < ii; i++) { buffer[i] = 0xff; } } this.buffer = buffer; }, drawBitmap: function SimpleSegmentVisitor_drawBitmap(regionInfo, bitmap) { var pageInfo = this.currentPageInfo; var width = regionInfo.width, height = regionInfo.height; var rowSize = pageInfo.width + 7 >> 3; var combinationOperator = pageInfo.combinationOperatorOverride ? regionInfo.combinationOperator : pageInfo.combinationOperator; var buffer = this.buffer; var mask0 = 128 >> (regionInfo.x & 7); var offset0 = regionInfo.y * rowSize + (regionInfo.x >> 3); var i, j, mask, offset; switch (combinationOperator) { case 0: for (i = 0; i < height; i++) { mask = mask0; offset = offset0; for (j = 0; j < width; j++) { if (bitmap[i][j]) { buffer[offset] |= mask; } mask >>= 1; if (!mask) { mask = 128; offset++; } } offset0 += rowSize; } break; case 2: for (i = 0; i < height; i++) { mask = mask0; offset = offset0; for (j = 0; j < width; j++) { if (bitmap[i][j]) { buffer[offset] ^= mask; } mask >>= 1; if (!mask) { mask = 128; offset++; } } offset0 += rowSize; } break; default: throw new Jbig2Error("operator ".concat(combinationOperator, " is not supported")); } }, onImmediateGenericRegion: function SimpleSegmentVisitor_onImmediateGenericRegion(region, data, start, end) { var regionInfo = region.info; var decodingContext = new DecodingContext(data, start, end); var bitmap = decodeBitmap(region.mmr, regionInfo.width, regionInfo.height, region.template, region.prediction, null, region.at, decodingContext); this.drawBitmap(regionInfo, bitmap); }, onImmediateLosslessGenericRegion: function SimpleSegmentVisitor_onImmediateLosslessGenericRegion() { this.onImmediateGenericRegion.apply(this, arguments); }, onSymbolDictionary: function SimpleSegmentVisitor_onSymbolDictionary(dictionary, currentSegment, referredSegments, data, start, end) { var huffmanTables, huffmanInput; if (dictionary.huffman) { huffmanTables = getSymbolDictionaryHuffmanTables(dictionary, referredSegments, this.customTables); huffmanInput = new Reader(data, start, end); } var symbols = this.symbols; if (!symbols) { this.symbols = symbols = {}; } var inputSymbols = []; for (var i = 0, ii = referredSegments.length; i < ii; i++) { var referredSymbols = symbols[referredSegments[i]]; if (referredSymbols) { inputSymbols = inputSymbols.concat(referredSymbols); } } var decodingContext = new DecodingContext(data, start, end); symbols[currentSegment] = decodeSymbolDictionary(dictionary.huffman, dictionary.refinement, inputSymbols, dictionary.numberOfNewSymbols, dictionary.numberOfExportedSymbols, huffmanTables, dictionary.template, dictionary.at, dictionary.refinementTemplate, dictionary.refinementAt, decodingContext, huffmanInput); }, onImmediateTextRegion: function SimpleSegmentVisitor_onImmediateTextRegion(region, referredSegments, data, start, end) { var regionInfo = region.info; var huffmanTables, huffmanInput; var symbols = this.symbols; var inputSymbols = []; for (var i = 0, ii = referredSegments.length; i < ii; i++) { var referredSymbols = symbols[referredSegments[i]]; if (referredSymbols) { inputSymbols = inputSymbols.concat(referredSymbols); } } var symbolCodeLength = (0, _core_utils.log2)(inputSymbols.length); if (region.huffman) { huffmanInput = new Reader(data, start, end); huffmanTables = getTextRegionHuffmanTables(region, referredSegments, this.customTables, inputSymbols.length, huffmanInput); } var decodingContext = new DecodingContext(data, start, end); var bitmap = decodeTextRegion(region.huffman, region.refinement, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.numberOfSymbolInstances, region.stripSize, inputSymbols, symbolCodeLength, region.transposed, region.dsOffset, region.referenceCorner, region.combinationOperator, huffmanTables, region.refinementTemplate, region.refinementAt, decodingContext, region.logStripSize, huffmanInput); this.drawBitmap(regionInfo, bitmap); }, onImmediateLosslessTextRegion: function SimpleSegmentVisitor_onImmediateLosslessTextRegion() { this.onImmediateTextRegion.apply(this, arguments); }, onPatternDictionary: function onPatternDictionary(dictionary, currentSegment, data, start, end) { var patterns = this.patterns; if (!patterns) { this.patterns = patterns = {}; } var decodingContext = new DecodingContext(data, start, end); patterns[currentSegment] = decodePatternDictionary(dictionary.mmr, dictionary.patternWidth, dictionary.patternHeight, dictionary.maxPatternIndex, dictionary.template, decodingContext); }, onImmediateHalftoneRegion: function onImmediateHalftoneRegion(region, referredSegments, data, start, end) { var patterns = this.patterns[referredSegments[0]]; var regionInfo = region.info; var decodingContext = new DecodingContext(data, start, end); var bitmap = decodeHalftoneRegion(region.mmr, patterns, region.template, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.enableSkip, region.combinationOperator, region.gridWidth, region.gridHeight, region.gridOffsetX, region.gridOffsetY, region.gridVectorX, region.gridVectorY, decodingContext); this.drawBitmap(regionInfo, bitmap); }, onImmediateLosslessHalftoneRegion: function onImmediateLosslessHalftoneRegion() { this.onImmediateHalftoneRegion.apply(this, arguments); }, onTables: function onTables(currentSegment, data, start, end) { var customTables = this.customTables; if (!customTables) { this.customTables = customTables = {}; } customTables[currentSegment] = decodeTablesSegment(data, start, end); } }; function HuffmanLine(lineData) { if (lineData.length === 2) { this.isOOB = true; this.rangeLow = 0; this.prefixLength = lineData[0]; this.rangeLength = 0; this.prefixCode = lineData[1]; this.isLowerRange = false; } else { this.isOOB = false; this.rangeLow = lineData[0]; this.prefixLength = lineData[1]; this.rangeLength = lineData[2]; this.prefixCode = lineData[3]; this.isLowerRange = lineData[4] === "lower"; } } function HuffmanTreeNode(line) { this.children = []; if (line) { this.isLeaf = true; this.rangeLength = line.rangeLength; this.rangeLow = line.rangeLow; this.isLowerRange = line.isLowerRange; this.isOOB = line.isOOB; } else { this.isLeaf = false; } } HuffmanTreeNode.prototype = { buildTree: function buildTree(line, shift) { var bit = line.prefixCode >> shift & 1; if (shift <= 0) { this.children[bit] = new HuffmanTreeNode(line); } else { var node = this.children[bit]; if (!node) { this.children[bit] = node = new HuffmanTreeNode(null); } node.buildTree(line, shift - 1); } }, decodeNode: function decodeNode(reader) { if (this.isLeaf) { if (this.isOOB) { return null; } var htOffset = reader.readBits(this.rangeLength); return this.rangeLow + (this.isLowerRange ? -htOffset : htOffset); } var node = this.children[reader.readBit()]; if (!node) { throw new Jbig2Error("invalid Huffman data"); } return node.decodeNode(reader); } }; function HuffmanTable(lines, prefixCodesDone) { if (!prefixCodesDone) { this.assignPrefixCodes(lines); } this.rootNode = new HuffmanTreeNode(null); for (var i = 0, ii = lines.length; i < ii; i++) { var line = lines[i]; if (line.prefixLength > 0) { this.rootNode.buildTree(line, line.prefixLength - 1); } } } HuffmanTable.prototype = { decode: function decode(reader) { return this.rootNode.decodeNode(reader); }, assignPrefixCodes: function assignPrefixCodes(lines) { var linesLength = lines.length; var prefixLengthMax = 0; for (var i = 0; i < linesLength; i++) { prefixLengthMax = Math.max(prefixLengthMax, lines[i].prefixLength); } var histogram = new Uint32Array(prefixLengthMax + 1); for (var _i2 = 0; _i2 < linesLength; _i2++) { histogram[lines[_i2].prefixLength]++; } var currentLength = 1, firstCode = 0, currentCode, currentTemp, line; histogram[0] = 0; while (currentLength <= prefixLengthMax) { firstCode = firstCode + histogram[currentLength - 1] << 1; currentCode = firstCode; currentTemp = 0; while (currentTemp < linesLength) { line = lines[currentTemp]; if (line.prefixLength === currentLength) { line.prefixCode = currentCode; currentCode++; } currentTemp++; } currentLength++; } } }; function decodeTablesSegment(data, start, end) { var flags = data[start]; var lowestValue = (0, _core_utils.readUint32)(data, start + 1) & 0xffffffff; var highestValue = (0, _core_utils.readUint32)(data, start + 5) & 0xffffffff; var reader = new Reader(data, start + 9, end); var prefixSizeBits = (flags >> 1 & 7) + 1; var rangeSizeBits = (flags >> 4 & 7) + 1; var lines = []; var prefixLength, rangeLength, currentRangeLow = lowestValue; do { prefixLength = reader.readBits(prefixSizeBits); rangeLength = reader.readBits(rangeSizeBits); lines.push(new HuffmanLine([currentRangeLow, prefixLength, rangeLength, 0])); currentRangeLow += 1 << rangeLength; } while (currentRangeLow < highestValue); prefixLength = reader.readBits(prefixSizeBits); lines.push(new HuffmanLine([lowestValue - 1, prefixLength, 32, 0, "lower"])); prefixLength = reader.readBits(prefixSizeBits); lines.push(new HuffmanLine([highestValue, prefixLength, 32, 0])); if (flags & 1) { prefixLength = reader.readBits(prefixSizeBits); lines.push(new HuffmanLine([prefixLength, 0])); } return new HuffmanTable(lines, false); } var standardTablesCache = {}; function getStandardTable(number) { var table = standardTablesCache[number]; if (table) { return table; } var lines; switch (number) { case 1: lines = [[0, 1, 4, 0x0], [16, 2, 8, 0x2], [272, 3, 16, 0x6], [65808, 3, 32, 0x7]]; break; case 2: lines = [[0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [75, 6, 32, 0x3e], [6, 0x3f]]; break; case 3: lines = [[-256, 8, 8, 0xfe], [0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [-257, 8, 32, 0xff, "lower"], [75, 7, 32, 0x7e], [6, 0x3e]]; break; case 4: lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [76, 5, 32, 0x1f]]; break; case 5: lines = [[-255, 7, 8, 0x7e], [1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [-256, 7, 32, 0x7f, "lower"], [76, 6, 32, 0x3e]]; break; case 6: lines = [[-2048, 5, 10, 0x1c], [-1024, 4, 9, 0x8], [-512, 4, 8, 0x9], [-256, 4, 7, 0xa], [-128, 5, 6, 0x1d], [-64, 5, 5, 0x1e], [-32, 4, 5, 0xb], [0, 2, 7, 0x0], [128, 3, 7, 0x2], [256, 3, 8, 0x3], [512, 4, 9, 0xc], [1024, 4, 10, 0xd], [-2049, 6, 32, 0x3e, "lower"], [2048, 6, 32, 0x3f]]; break; case 7: lines = [[-1024, 4, 9, 0x8], [-512, 3, 8, 0x0], [-256, 4, 7, 0x9], [-128, 5, 6, 0x1a], [-64, 5, 5, 0x1b], [-32, 4, 5, 0xa], [0, 4, 5, 0xb], [32, 5, 5, 0x1c], [64, 5, 6, 0x1d], [128, 4, 7, 0xc], [256, 3, 8, 0x1], [512, 3, 9, 0x2], [1024, 3, 10, 0x3], [-1025, 5, 32, 0x1e, "lower"], [2048, 5, 32, 0x1f]]; break; case 8: lines = [[-15, 8, 3, 0xfc], [-7, 9, 1, 0x1fc], [-5, 8, 1, 0xfd], [-3, 9, 0, 0x1fd], [-2, 7, 0, 0x7c], [-1, 4, 0, 0xa], [0, 2, 1, 0x0], [2, 5, 0, 0x1a], [3, 6, 0, 0x3a], [4, 3, 4, 0x4], [20, 6, 1, 0x3b], [22, 4, 4, 0xb], [38, 4, 5, 0xc], [70, 5, 6, 0x1b], [134, 5, 7, 0x1c], [262, 6, 7, 0x3c], [390, 7, 8, 0x7d], [646, 6, 10, 0x3d], [-16, 9, 32, 0x1fe, "lower"], [1670, 9, 32, 0x1ff], [2, 0x1]]; break; case 9: lines = [[-31, 8, 4, 0xfc], [-15, 9, 2, 0x1fc], [-11, 8, 2, 0xfd], [-7, 9, 1, 0x1fd], [-5, 7, 1, 0x7c], [-3, 4, 1, 0xa], [-1, 3, 1, 0x2], [1, 3, 1, 0x3], [3, 5, 1, 0x1a], [5, 6, 1, 0x3a], [7, 3, 5, 0x4], [39, 6, 2, 0x3b], [43, 4, 5, 0xb], [75, 4, 6, 0xc], [139, 5, 7, 0x1b], [267, 5, 8, 0x1c], [523, 6, 8, 0x3c], [779, 7, 9, 0x7d], [1291, 6, 11, 0x3d], [-32, 9, 32, 0x1fe, "lower"], [3339, 9, 32, 0x1ff], [2, 0x0]]; break; case 10: lines = [[-21, 7, 4, 0x7a], [-5, 8, 0, 0xfc], [-4, 7, 0, 0x7b], [-3, 5, 0, 0x18], [-2, 2, 2, 0x0], [2, 5, 0, 0x19], [3, 6, 0, 0x36], [4, 7, 0, 0x7c], [5, 8, 0, 0xfd], [6, 2, 6, 0x1], [70, 5, 5, 0x1a], [102, 6, 5, 0x37], [134, 6, 6, 0x38], [198, 6, 7, 0x39], [326, 6, 8, 0x3a], [582, 6, 9, 0x3b], [1094, 6, 10, 0x3c], [2118, 7, 11, 0x7d], [-22, 8, 32, 0xfe, "lower"], [4166, 8, 32, 0xff], [2, 0x2]]; break; case 11: lines = [[1, 1, 0, 0x0], [2, 2, 1, 0x2], [4, 4, 0, 0xc], [5, 4, 1, 0xd], [7, 5, 1, 0x1c], [9, 5, 2, 0x1d], [13, 6, 2, 0x3c], [17, 7, 2, 0x7a], [21, 7, 3, 0x7b], [29, 7, 4, 0x7c], [45, 7, 5, 0x7d], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]]; break; case 12: lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 1, 0x6], [5, 5, 0, 0x1c], [6, 5, 1, 0x1d], [8, 6, 1, 0x3c], [10, 7, 0, 0x7a], [11, 7, 1, 0x7b], [13, 7, 2, 0x7c], [17, 7, 3, 0x7d], [25, 7, 4, 0x7e], [41, 8, 5, 0xfe], [73, 8, 32, 0xff]]; break; case 13: lines = [[1, 1, 0, 0x0], [2, 3, 0, 0x4], [3, 4, 0, 0xc], [4, 5, 0, 0x1c], [5, 4, 1, 0xd], [7, 3, 3, 0x5], [15, 6, 1, 0x3a], [17, 6, 2, 0x3b], [21, 6, 3, 0x3c], [29, 6, 4, 0x3d], [45, 6, 5, 0x3e], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]]; break; case 14: lines = [[-2, 3, 0, 0x4], [-1, 3, 0, 0x5], [0, 1, 0, 0x0], [1, 3, 0, 0x6], [2, 3, 0, 0x7]]; break; case 15: lines = [[-24, 7, 4, 0x7c], [-8, 6, 2, 0x3c], [-4, 5, 1, 0x1c], [-2, 4, 0, 0xc], [-1, 3, 0, 0x4], [0, 1, 0, 0x0], [1, 3, 0, 0x5], [2, 4, 0, 0xd], [3, 5, 1, 0x1d], [5, 6, 2, 0x3d], [9, 7, 4, 0x7d], [-25, 7, 32, 0x7e, "lower"], [25, 7, 32, 0x7f]]; break; default: throw new Jbig2Error("standard table B.".concat(number, " does not exist")); } for (var i = 0, ii = lines.length; i < ii; i++) { lines[i] = new HuffmanLine(lines[i]); } table = new HuffmanTable(lines, true); standardTablesCache[number] = table; return table; } function Reader(data, start, end) { this.data = data; this.start = start; this.end = end; this.position = start; this.shift = -1; this.currentByte = 0; } Reader.prototype = { readBit: function readBit() { if (this.shift < 0) { if (this.position >= this.end) { throw new Jbig2Error("end of data while reading bit"); } this.currentByte = this.data[this.position++]; this.shift = 7; } var bit = this.currentByte >> this.shift & 1; this.shift--; return bit; }, readBits: function readBits(numBits) { var result = 0, i; for (i = numBits - 1; i >= 0; i--) { result |= this.readBit() << i; } return result; }, byteAlign: function byteAlign() { this.shift = -1; }, next: function next() { if (this.position >= this.end) { return -1; } return this.data[this.position++]; } }; function getCustomHuffmanTable(index, referredTo, customTables) { var currentIndex = 0; for (var i = 0, ii = referredTo.length; i < ii; i++) { var table = customTables[referredTo[i]]; if (table) { if (index === currentIndex) { return table; } currentIndex++; } } throw new Jbig2Error("can't find custom Huffman table"); } function getTextRegionHuffmanTables(textRegion, referredTo, customTables, numberOfSymbols, reader) { var codes = []; for (var i = 0; i <= 34; i++) { var codeLength = reader.readBits(4); codes.push(new HuffmanLine([i, codeLength, 0, 0])); } var runCodesTable = new HuffmanTable(codes, false); codes.length = 0; for (var _i3 = 0; _i3 < numberOfSymbols;) { var _codeLength = runCodesTable.decode(reader); if (_codeLength >= 32) { var repeatedLength = void 0, numberOfRepeats = void 0, j = void 0; switch (_codeLength) { case 32: if (_i3 === 0) { throw new Jbig2Error("no previous value in symbol ID table"); } numberOfRepeats = reader.readBits(2) + 3; repeatedLength = codes[_i3 - 1].prefixLength; break; case 33: numberOfRepeats = reader.readBits(3) + 3; repeatedLength = 0; break; case 34: numberOfRepeats = reader.readBits(7) + 11; repeatedLength = 0; break; default: throw new Jbig2Error("invalid code length in symbol ID table"); } for (j = 0; j < numberOfRepeats; j++) { codes.push(new HuffmanLine([_i3, repeatedLength, 0, 0])); _i3++; } } else { codes.push(new HuffmanLine([_i3, _codeLength, 0, 0])); _i3++; } } reader.byteAlign(); var symbolIDTable = new HuffmanTable(codes, false); var customIndex = 0, tableFirstS, tableDeltaS, tableDeltaT; switch (textRegion.huffmanFS) { case 0: case 1: tableFirstS = getStandardTable(textRegion.huffmanFS + 6); break; case 3: tableFirstS = getCustomHuffmanTable(customIndex, referredTo, customTables); customIndex++; break; default: throw new Jbig2Error("invalid Huffman FS selector"); } switch (textRegion.huffmanDS) { case 0: case 1: case 2: tableDeltaS = getStandardTable(textRegion.huffmanDS + 8); break; case 3: tableDeltaS = getCustomHuffmanTable(customIndex, referredTo, customTables); customIndex++; break; default: throw new Jbig2Error("invalid Huffman DS selector"); } switch (textRegion.huffmanDT) { case 0: case 1: case 2: tableDeltaT = getStandardTable(textRegion.huffmanDT + 11); break; case 3: tableDeltaT = getCustomHuffmanTable(customIndex, referredTo, customTables); customIndex++; break; default: throw new Jbig2Error("invalid Huffman DT selector"); } if (textRegion.refinement) { throw new Jbig2Error("refinement with Huffman is not supported"); } return { symbolIDTable: symbolIDTable, tableFirstS: tableFirstS, tableDeltaS: tableDeltaS, tableDeltaT: tableDeltaT }; } function getSymbolDictionaryHuffmanTables(dictionary, referredTo, customTables) { var customIndex = 0, tableDeltaHeight, tableDeltaWidth; switch (dictionary.huffmanDHSelector) { case 0: case 1: tableDeltaHeight = getStandardTable(dictionary.huffmanDHSelector + 4); break; case 3: tableDeltaHeight = getCustomHuffmanTable(customIndex, referredTo, customTables); customIndex++; break; default: throw new Jbig2Error("invalid Huffman DH selector"); } switch (dictionary.huffmanDWSelector) { case 0: case 1: tableDeltaWidth = getStandardTable(dictionary.huffmanDWSelector + 2); break; case 3: tableDeltaWidth = getCustomHuffmanTable(customIndex, referredTo, customTables); customIndex++; break; default: throw new Jbig2Error("invalid Huffman DW selector"); } var tableBitmapSize, tableAggregateInstances; if (dictionary.bitmapSizeSelector) { tableBitmapSize = getCustomHuffmanTable(customIndex, referredTo, customTables); customIndex++; } else { tableBitmapSize = getStandardTable(1); } if (dictionary.aggregationInstancesSelector) { tableAggregateInstances = getCustomHuffmanTable(customIndex, referredTo, customTables); } else { tableAggregateInstances = getStandardTable(1); } return { tableDeltaHeight: tableDeltaHeight, tableDeltaWidth: tableDeltaWidth, tableBitmapSize: tableBitmapSize, tableAggregateInstances: tableAggregateInstances }; } function readUncompressedBitmap(reader, width, height) { var bitmap = []; for (var y = 0; y < height; y++) { var row = new Uint8Array(width); bitmap.push(row); for (var x = 0; x < width; x++) { row[x] = reader.readBit(); } reader.byteAlign(); } return bitmap; } function decodeMMRBitmap(input, width, height, endOfBlock) { var params = { K: -1, Columns: width, Rows: height, BlackIs1: true, EndOfBlock: endOfBlock }; var decoder = new _ccitt.CCITTFaxDecoder(input, params); var bitmap = []; var currentByte, eof = false; for (var y = 0; y < height; y++) { var row = new Uint8Array(width); bitmap.push(row); var shift = -1; for (var x = 0; x < width; x++) { if (shift < 0) { currentByte = decoder.readNextChar(); if (currentByte === -1) { currentByte = 0; eof = true; } shift = 7; } row[x] = currentByte >> shift & 1; shift--; } } if (endOfBlock && !eof) { var lookForEOFLimit = 5; for (var i = 0; i < lookForEOFLimit; i++) { if (decoder.readNextChar() === -1) { break; } } } return bitmap; } function Jbig2Image() {} Jbig2Image.prototype = { parseChunks: function parseChunks(chunks) { return parseJbig2Chunks(chunks); }, parse: function parse(data) { var _parseJbig = parseJbig2(data), imgData = _parseJbig.imgData, width = _parseJbig.width, height = _parseJbig.height; this.width = width; this.height = height; return imgData; } }; return Jbig2Image; }(); exports.Jbig2Image = Jbig2Image; /***/ }), /* 147 */ /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ArithmeticDecoder = void 0; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var QeTable = [{ qe: 0x5601, nmps: 1, nlps: 1, switchFlag: 1 }, { qe: 0x3401, nmps: 2, nlps: 6, switchFlag: 0 }, { qe: 0x1801, nmps: 3, nlps: 9, switchFlag: 0 }, { qe: 0x0ac1, nmps: 4, nlps: 12, switchFlag: 0 }, { qe: 0x0521, nmps: 5, nlps: 29, switchFlag: 0 }, { qe: 0x0221, nmps: 38, nlps: 33, switchFlag: 0 }, { qe: 0x5601, nmps: 7, nlps: 6, switchFlag: 1 }, { qe: 0x5401, nmps: 8, nlps: 14, switchFlag: 0 }, { qe: 0x4801, nmps: 9, nlps: 14, switchFlag: 0 }, { qe: 0x3801, nmps: 10, nlps: 14, switchFlag: 0 }, { qe: 0x3001, nmps: 11, nlps: 17, switchFlag: 0 }, { qe: 0x2401, nmps: 12, nlps: 18, switchFlag: 0 }, { qe: 0x1c01, nmps: 13, nlps: 20, switchFlag: 0 }, { qe: 0x1601, nmps: 29, nlps: 21, switchFlag: 0 }, { qe: 0x5601, nmps: 15, nlps: 14, switchFlag: 1 }, { qe: 0x5401, nmps: 16, nlps: 14, switchFlag: 0 }, { qe: 0x5101, nmps: 17, nlps: 15, switchFlag: 0 }, { qe: 0x4801, nmps: 18, nlps: 16, switchFlag: 0 }, { qe: 0x3801, nmps: 19, nlps: 17, switchFlag: 0 }, { qe: 0x3401, nmps: 20, nlps: 18, switchFlag: 0 }, { qe: 0x3001, nmps: 21, nlps: 19, switchFlag: 0 }, { qe: 0x2801, nmps: 22, nlps: 19, switchFlag: 0 }, { qe: 0x2401, nmps: 23, nlps: 20, switchFlag: 0 }, { qe: 0x2201, nmps: 24, nlps: 21, switchFlag: 0 }, { qe: 0x1c01, nmps: 25, nlps: 22, switchFlag: 0 }, { qe: 0x1801, nmps: 26, nlps: 23, switchFlag: 0 }, { qe: 0x1601, nmps: 27, nlps: 24, switchFlag: 0 }, { qe: 0x1401, nmps: 28, nlps: 25, switchFlag: 0 }, { qe: 0x1201, nmps: 29, nlps: 26, switchFlag: 0 }, { qe: 0x1101, nmps: 30, nlps: 27, switchFlag: 0 }, { qe: 0x0ac1, nmps: 31, nlps: 28, switchFlag: 0 }, { qe: 0x09c1, nmps: 32, nlps: 29, switchFlag: 0 }, { qe: 0x08a1, nmps: 33, nlps: 30, switchFlag: 0 }, { qe: 0x0521, nmps: 34, nlps: 31, switchFlag: 0 }, { qe: 0x0441, nmps: 35, nlps: 32, switchFlag: 0 }, { qe: 0x02a1, nmps: 36, nlps: 33, switchFlag: 0 }, { qe: 0x0221, nmps: 37, nlps: 34, switchFlag: 0 }, { qe: 0x0141, nmps: 38, nlps: 35, switchFlag: 0 }, { qe: 0x0111, nmps: 39, nlps: 36, switchFlag: 0 }, { qe: 0x0085, nmps: 40, nlps: 37, switchFlag: 0 }, { qe: 0x0049, nmps: 41, nlps: 38, switchFlag: 0 }, { qe: 0x0025, nmps: 42, nlps: 39, switchFlag: 0 }, { qe: 0x0015, nmps: 43, nlps: 40, switchFlag: 0 }, { qe: 0x0009, nmps: 44, nlps: 41, switchFlag: 0 }, { qe: 0x0005, nmps: 45, nlps: 42, switchFlag: 0 }, { qe: 0x0001, nmps: 45, nlps: 43, switchFlag: 0 }, { qe: 0x5601, nmps: 46, nlps: 46, switchFlag: 0 }]; var ArithmeticDecoder = /*#__PURE__*/function () { function ArithmeticDecoder(data, start, end) { _classCallCheck(this, ArithmeticDecoder); this.data = data; this.bp = start; this.dataEnd = end; this.chigh = data[start]; this.clow = 0; this.byteIn(); this.chigh = this.chigh << 7 & 0xffff | this.clow >> 9 & 0x7f; this.clow = this.clow << 7 & 0xffff; this.ct -= 7; this.a = 0x8000; } _createClass(ArithmeticDecoder, [{ key: "byteIn", value: function byteIn() { var data = this.data; var bp = this.bp; if (data[bp] === 0xff) { if (data[bp + 1] > 0x8f) { this.clow += 0xff00; this.ct = 8; } else { bp++; this.clow += data[bp] << 9; this.ct = 7; this.bp = bp; } } else { bp++; this.clow += bp < this.dataEnd ? data[bp] << 8 : 0xff00; this.ct = 8; this.bp = bp; } if (this.clow > 0xffff) { this.chigh += this.clow >> 16; this.clow &= 0xffff; } } }, { key: "readBit", value: function readBit(contexts, pos) { var cx_index = contexts[pos] >> 1, cx_mps = contexts[pos] & 1; var qeTableIcx = QeTable[cx_index]; var qeIcx = qeTableIcx.qe; var d; var a = this.a - qeIcx; if (this.chigh < qeIcx) { if (a < qeIcx) { a = qeIcx; d = cx_mps; cx_index = qeTableIcx.nmps; } else { a = qeIcx; d = 1 ^ cx_mps; if (qeTableIcx.switchFlag === 1) { cx_mps = d; } cx_index = qeTableIcx.nlps; } } else { this.chigh -= qeIcx; if ((a & 0x8000) !== 0) { this.a = a; return cx_mps; } if (a < qeIcx) { d = 1 ^ cx_mps; if (qeTableIcx.switchFlag === 1) { cx_mps = d; } cx_index = qeTableIcx.nlps; } else { d = cx_mps; cx_index = qeTableIcx.nmps; } } do { if (this.ct === 0) { this.byteIn(); } a <<= 1; this.chigh = this.chigh << 1 & 0xffff | this.clow >> 15 & 1; this.clow = this.clow << 1 & 0xffff; this.ct--; } while ((a & 0x8000) === 0); this.a = a; contexts[pos] = cx_index << 1 | cx_mps; return d; } }]); return ArithmeticDecoder; }(); exports.ArithmeticDecoder = ArithmeticDecoder; /***/ }), /* 148 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.JpegStream = void 0; var _stream = __w_pdfjs_require__(142); var _primitives = __w_pdfjs_require__(135); var _jpg = __w_pdfjs_require__(149); var _util = __w_pdfjs_require__(4); var JpegStream = function JpegStreamClosure() { function JpegStream(stream, maybeLength, dict, params) { var ch; while ((ch = stream.getByte()) !== -1) { if (ch === 0xff) { stream.skip(-1); break; } } this.stream = stream; this.maybeLength = maybeLength; this.dict = dict; this.params = params; _stream.DecodeStream.call(this, maybeLength); } JpegStream.prototype = Object.create(_stream.DecodeStream.prototype); Object.defineProperty(JpegStream.prototype, "bytes", { get: function JpegStream_bytes() { return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength)); }, configurable: true }); JpegStream.prototype.ensureBuffer = function (requested) {}; JpegStream.prototype.readBlock = function () { if (this.eof) { return; } var jpegOptions = { decodeTransform: undefined, colorTransform: undefined }; var decodeArr = this.dict.getArray("Decode", "D"); if (this.forceRGB && Array.isArray(decodeArr)) { var bitsPerComponent = this.dict.get("BitsPerComponent") || 8; var decodeArrLength = decodeArr.length; var transform = new Int32Array(decodeArrLength); var transformNeeded = false; var maxValue = (1 << bitsPerComponent) - 1; for (var i = 0; i < decodeArrLength; i += 2) { transform[i] = (decodeArr[i + 1] - decodeArr[i]) * 256 | 0; transform[i + 1] = decodeArr[i] * maxValue | 0; if (transform[i] !== 256 || transform[i + 1] !== 0) { transformNeeded = true; } } if (transformNeeded) { jpegOptions.decodeTransform = transform; } } if ((0, _primitives.isDict)(this.params)) { var colorTransform = this.params.get("ColorTransform"); if (Number.isInteger(colorTransform)) { jpegOptions.colorTransform = colorTransform; } } var jpegImage = new _jpg.JpegImage(jpegOptions); jpegImage.parse(this.bytes); var data = jpegImage.getData({ width: this.drawWidth, height: this.drawHeight, forceRGB: this.forceRGB, isSourcePDF: true }); this.buffer = data; this.bufferLength = data.length; this.eof = true; }; return JpegStream; }(); exports.JpegStream = JpegStream; /***/ }), /* 149 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.JpegImage = void 0; var _util = __w_pdfjs_require__(4); var _core_utils = __w_pdfjs_require__(138); function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } var JpegError = /*#__PURE__*/function (_BaseException) { _inherits(JpegError, _BaseException); var _super = _createSuper(JpegError); function JpegError(msg) { _classCallCheck(this, JpegError); return _super.call(this, "JPEG error: ".concat(msg)); } return JpegError; }(_util.BaseException); var DNLMarkerError = /*#__PURE__*/function (_BaseException2) { _inherits(DNLMarkerError, _BaseException2); var _super2 = _createSuper(DNLMarkerError); function DNLMarkerError(message, scanLines) { var _this; _classCallCheck(this, DNLMarkerError); _this = _super2.call(this, message); _this.scanLines = scanLines; return _this; } return DNLMarkerError; }(_util.BaseException); var EOIMarkerError = /*#__PURE__*/function (_BaseException3) { _inherits(EOIMarkerError, _BaseException3); var _super3 = _createSuper(EOIMarkerError); function EOIMarkerError() { _classCallCheck(this, EOIMarkerError); return _super3.apply(this, arguments); } return EOIMarkerError; }(_util.BaseException); var JpegImage = function JpegImageClosure() { var dctZigZag = new Uint8Array([0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63]); var dctCos1 = 4017; var dctSin1 = 799; var dctCos3 = 3406; var dctSin3 = 2276; var dctCos6 = 1567; var dctSin6 = 3784; var dctSqrt2 = 5793; var dctSqrt1d2 = 2896; function JpegImage() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref$decodeTransform = _ref.decodeTransform, decodeTransform = _ref$decodeTransform === void 0 ? null : _ref$decodeTransform, _ref$colorTransform = _ref.colorTransform, colorTransform = _ref$colorTransform === void 0 ? -1 : _ref$colorTransform; this._decodeTransform = decodeTransform; this._colorTransform = colorTransform; } function buildHuffmanTable(codeLengths, values) { var k = 0, code = [], i, j, length = 16; while (length > 0 && !codeLengths[length - 1]) { length--; } code.push({ children: [], index: 0 }); var p = code[0], q; for (i = 0; i < length; i++) { for (j = 0; j < codeLengths[i]; j++) { p = code.pop(); p.children[p.index] = values[k]; while (p.index > 0) { p = code.pop(); } p.index++; code.push(p); while (code.length <= i) { code.push(q = { children: [], index: 0 }); p.children[p.index] = q.children; p = q; } k++; } if (i + 1 < length) { code.push(q = { children: [], index: 0 }); p.children[p.index] = q.children; p = q; } } return code[0].children; } function getBlockBufferOffset(component, row, col) { return 64 * ((component.blocksPerLine + 1) * row + col); } function decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive) { var parseDNLMarker = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : false; var mcusPerLine = frame.mcusPerLine; var progressive = frame.progressive; var startOffset = offset; var bitsData = 0, bitsCount = 0; function readBit() { if (bitsCount > 0) { bitsCount--; return bitsData >> bitsCount & 1; } bitsData = data[offset++]; if (bitsData === 0xff) { var nextByte = data[offset++]; if (nextByte) { if (nextByte === 0xdc && parseDNLMarker) { offset += 2; var scanLines = (0, _core_utils.readUint16)(data, offset); offset += 2; if (scanLines > 0 && scanLines !== frame.scanLines) { throw new DNLMarkerError("Found DNL marker (0xFFDC) while parsing scan data", scanLines); } } else if (nextByte === 0xd9) { if (parseDNLMarker) { var maybeScanLines = blockRow * (frame.precision === 8 ? 8 : 0); if (maybeScanLines > 0 && Math.round(frame.scanLines / maybeScanLines) >= 10) { throw new DNLMarkerError("Found EOI marker (0xFFD9) while parsing scan data, " + "possibly caused by incorrect `scanLines` parameter", maybeScanLines); } } throw new EOIMarkerError("Found EOI marker (0xFFD9) while parsing scan data"); } throw new JpegError("unexpected marker ".concat((bitsData << 8 | nextByte).toString(16))); } } bitsCount = 7; return bitsData >>> 7; } function decodeHuffman(tree) { var node = tree; while (true) { node = node[readBit()]; switch (_typeof(node)) { case "number": return node; case "object": continue; } throw new JpegError("invalid huffman sequence"); } } function receive(length) { var n = 0; while (length > 0) { n = n << 1 | readBit(); length--; } return n; } function receiveAndExtend(length) { if (length === 1) { return readBit() === 1 ? 1 : -1; } var n = receive(length); if (n >= 1 << length - 1) { return n; } return n + (-1 << length) + 1; } function decodeBaseline(component, blockOffset) { var t = decodeHuffman(component.huffmanTableDC); var diff = t === 0 ? 0 : receiveAndExtend(t); component.blockData[blockOffset] = component.pred += diff; var k = 1; while (k < 64) { var rs = decodeHuffman(component.huffmanTableAC); var s = rs & 15, r = rs >> 4; if (s === 0) { if (r < 15) { break; } k += 16; continue; } k += r; var z = dctZigZag[k]; component.blockData[blockOffset + z] = receiveAndExtend(s); k++; } } function decodeDCFirst(component, blockOffset) { var t = decodeHuffman(component.huffmanTableDC); var diff = t === 0 ? 0 : receiveAndExtend(t) << successive; component.blockData[blockOffset] = component.pred += diff; } function decodeDCSuccessive(component, blockOffset) { component.blockData[blockOffset] |= readBit() << successive; } var eobrun = 0; function decodeACFirst(component, blockOffset) { if (eobrun > 0) { eobrun--; return; } var k = spectralStart, e = spectralEnd; while (k <= e) { var rs = decodeHuffman(component.huffmanTableAC); var s = rs & 15, r = rs >> 4; if (s === 0) { if (r < 15) { eobrun = receive(r) + (1 << r) - 1; break; } k += 16; continue; } k += r; var z = dctZigZag[k]; component.blockData[blockOffset + z] = receiveAndExtend(s) * (1 << successive); k++; } } var successiveACState = 0, successiveACNextValue; function decodeACSuccessive(component, blockOffset) { var k = spectralStart; var e = spectralEnd; var r = 0; var s; var rs; while (k <= e) { var offsetZ = blockOffset + dctZigZag[k]; var sign = component.blockData[offsetZ] < 0 ? -1 : 1; switch (successiveACState) { case 0: rs = decodeHuffman(component.huffmanTableAC); s = rs & 15; r = rs >> 4; if (s === 0) { if (r < 15) { eobrun = receive(r) + (1 << r); successiveACState = 4; } else { r = 16; successiveACState = 1; } } else { if (s !== 1) { throw new JpegError("invalid ACn encoding"); } successiveACNextValue = receiveAndExtend(s); successiveACState = r ? 2 : 3; } continue; case 1: case 2: if (component.blockData[offsetZ]) { component.blockData[offsetZ] += sign * (readBit() << successive); } else { r--; if (r === 0) { successiveACState = successiveACState === 2 ? 3 : 0; } } break; case 3: if (component.blockData[offsetZ]) { component.blockData[offsetZ] += sign * (readBit() << successive); } else { component.blockData[offsetZ] = successiveACNextValue << successive; successiveACState = 0; } break; case 4: if (component.blockData[offsetZ]) { component.blockData[offsetZ] += sign * (readBit() << successive); } break; } k++; } if (successiveACState === 4) { eobrun--; if (eobrun === 0) { successiveACState = 0; } } } var blockRow = 0; function decodeMcu(component, decode, mcu, row, col) { var mcuRow = mcu / mcusPerLine | 0; var mcuCol = mcu % mcusPerLine; blockRow = mcuRow * component.v + row; var blockCol = mcuCol * component.h + col; var blockOffset = getBlockBufferOffset(component, blockRow, blockCol); decode(component, blockOffset); } function decodeBlock(component, decode, mcu) { blockRow = mcu / component.blocksPerLine | 0; var blockCol = mcu % component.blocksPerLine; var blockOffset = getBlockBufferOffset(component, blockRow, blockCol); decode(component, blockOffset); } var componentsLength = components.length; var component, i, j, k, n; var decodeFn; if (progressive) { if (spectralStart === 0) { decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive; } else { decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive; } } else { decodeFn = decodeBaseline; } var mcu = 0, fileMarker; var mcuExpected; if (componentsLength === 1) { mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn; } else { mcuExpected = mcusPerLine * frame.mcusPerColumn; } var h, v; while (mcu <= mcuExpected) { var mcuToRead = resetInterval ? Math.min(mcuExpected - mcu, resetInterval) : mcuExpected; if (mcuToRead > 0) { for (i = 0; i < componentsLength; i++) { components[i].pred = 0; } eobrun = 0; if (componentsLength === 1) { component = components[0]; for (n = 0; n < mcuToRead; n++) { decodeBlock(component, decodeFn, mcu); mcu++; } } else { for (n = 0; n < mcuToRead; n++) { for (i = 0; i < componentsLength; i++) { component = components[i]; h = component.h; v = component.v; for (j = 0; j < v; j++) { for (k = 0; k < h; k++) { decodeMcu(component, decodeFn, mcu, j, k); } } } mcu++; } } } bitsCount = 0; fileMarker = findNextFileMarker(data, offset); if (!fileMarker) { break; } if (fileMarker.invalid) { var partialMsg = mcuToRead > 0 ? "unexpected" : "excessive"; (0, _util.warn)("decodeScan - ".concat(partialMsg, " MCU data, current marker is: ").concat(fileMarker.invalid)); offset = fileMarker.offset; } if (fileMarker.marker >= 0xffd0 && fileMarker.marker <= 0xffd7) { offset += 2; } else { break; } } return offset - startOffset; } function quantizeAndInverse(component, blockBufferOffset, p) { var qt = component.quantizationTable, blockData = component.blockData; var v0, v1, v2, v3, v4, v5, v6, v7; var p0, p1, p2, p3, p4, p5, p6, p7; var t; if (!qt) { throw new JpegError("missing required Quantization Table."); } for (var row = 0; row < 64; row += 8) { p0 = blockData[blockBufferOffset + row]; p1 = blockData[blockBufferOffset + row + 1]; p2 = blockData[blockBufferOffset + row + 2]; p3 = blockData[blockBufferOffset + row + 3]; p4 = blockData[blockBufferOffset + row + 4]; p5 = blockData[blockBufferOffset + row + 5]; p6 = blockData[blockBufferOffset + row + 6]; p7 = blockData[blockBufferOffset + row + 7]; p0 *= qt[row]; if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) { t = dctSqrt2 * p0 + 512 >> 10; p[row] = t; p[row + 1] = t; p[row + 2] = t; p[row + 3] = t; p[row + 4] = t; p[row + 5] = t; p[row + 6] = t; p[row + 7] = t; continue; } p1 *= qt[row + 1]; p2 *= qt[row + 2]; p3 *= qt[row + 3]; p4 *= qt[row + 4]; p5 *= qt[row + 5]; p6 *= qt[row + 6]; p7 *= qt[row + 7]; v0 = dctSqrt2 * p0 + 128 >> 8; v1 = dctSqrt2 * p4 + 128 >> 8; v2 = p2; v3 = p6; v4 = dctSqrt1d2 * (p1 - p7) + 128 >> 8; v7 = dctSqrt1d2 * (p1 + p7) + 128 >> 8; v5 = p3 << 4; v6 = p5 << 4; v0 = v0 + v1 + 1 >> 1; v1 = v0 - v1; t = v2 * dctSin6 + v3 * dctCos6 + 128 >> 8; v2 = v2 * dctCos6 - v3 * dctSin6 + 128 >> 8; v3 = t; v4 = v4 + v6 + 1 >> 1; v6 = v4 - v6; v7 = v7 + v5 + 1 >> 1; v5 = v7 - v5; v0 = v0 + v3 + 1 >> 1; v3 = v0 - v3; v1 = v1 + v2 + 1 >> 1; v2 = v1 - v2; t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12; v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12; v7 = t; t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12; v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12; v6 = t; p[row] = v0 + v7; p[row + 7] = v0 - v7; p[row + 1] = v1 + v6; p[row + 6] = v1 - v6; p[row + 2] = v2 + v5; p[row + 5] = v2 - v5; p[row + 3] = v3 + v4; p[row + 4] = v3 - v4; } for (var col = 0; col < 8; ++col) { p0 = p[col]; p1 = p[col + 8]; p2 = p[col + 16]; p3 = p[col + 24]; p4 = p[col + 32]; p5 = p[col + 40]; p6 = p[col + 48]; p7 = p[col + 56]; if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) { t = dctSqrt2 * p0 + 8192 >> 14; if (t < -2040) { t = 0; } else if (t >= 2024) { t = 255; } else { t = t + 2056 >> 4; } blockData[blockBufferOffset + col] = t; blockData[blockBufferOffset + col + 8] = t; blockData[blockBufferOffset + col + 16] = t; blockData[blockBufferOffset + col + 24] = t; blockData[blockBufferOffset + col + 32] = t; blockData[blockBufferOffset + col + 40] = t; blockData[blockBufferOffset + col + 48] = t; blockData[blockBufferOffset + col + 56] = t; continue; } v0 = dctSqrt2 * p0 + 2048 >> 12; v1 = dctSqrt2 * p4 + 2048 >> 12; v2 = p2; v3 = p6; v4 = dctSqrt1d2 * (p1 - p7) + 2048 >> 12; v7 = dctSqrt1d2 * (p1 + p7) + 2048 >> 12; v5 = p3; v6 = p5; v0 = (v0 + v1 + 1 >> 1) + 4112; v1 = v0 - v1; t = v2 * dctSin6 + v3 * dctCos6 + 2048 >> 12; v2 = v2 * dctCos6 - v3 * dctSin6 + 2048 >> 12; v3 = t; v4 = v4 + v6 + 1 >> 1; v6 = v4 - v6; v7 = v7 + v5 + 1 >> 1; v5 = v7 - v5; v0 = v0 + v3 + 1 >> 1; v3 = v0 - v3; v1 = v1 + v2 + 1 >> 1; v2 = v1 - v2; t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12; v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12; v7 = t; t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12; v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12; v6 = t; p0 = v0 + v7; p7 = v0 - v7; p1 = v1 + v6; p6 = v1 - v6; p2 = v2 + v5; p5 = v2 - v5; p3 = v3 + v4; p4 = v3 - v4; if (p0 < 16) { p0 = 0; } else if (p0 >= 4080) { p0 = 255; } else { p0 >>= 4; } if (p1 < 16) { p1 = 0; } else if (p1 >= 4080) { p1 = 255; } else { p1 >>= 4; } if (p2 < 16) { p2 = 0; } else if (p2 >= 4080) { p2 = 255; } else { p2 >>= 4; } if (p3 < 16) { p3 = 0; } else if (p3 >= 4080) { p3 = 255; } else { p3 >>= 4; } if (p4 < 16) { p4 = 0; } else if (p4 >= 4080) { p4 = 255; } else { p4 >>= 4; } if (p5 < 16) { p5 = 0; } else if (p5 >= 4080) { p5 = 255; } else { p5 >>= 4; } if (p6 < 16) { p6 = 0; } else if (p6 >= 4080) { p6 = 255; } else { p6 >>= 4; } if (p7 < 16) { p7 = 0; } else if (p7 >= 4080) { p7 = 255; } else { p7 >>= 4; } blockData[blockBufferOffset + col] = p0; blockData[blockBufferOffset + col + 8] = p1; blockData[blockBufferOffset + col + 16] = p2; blockData[blockBufferOffset + col + 24] = p3; blockData[blockBufferOffset + col + 32] = p4; blockData[blockBufferOffset + col + 40] = p5; blockData[blockBufferOffset + col + 48] = p6; blockData[blockBufferOffset + col + 56] = p7; } } function buildComponentData(frame, component) { var blocksPerLine = component.blocksPerLine; var blocksPerColumn = component.blocksPerColumn; var computationBuffer = new Int16Array(64); for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) { for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) { var offset = getBlockBufferOffset(component, blockRow, blockCol); quantizeAndInverse(component, offset, computationBuffer); } } return component.blockData; } function findNextFileMarker(data, currentPos) { var startPos = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : currentPos; var maxPos = data.length - 1; var newPos = startPos < currentPos ? startPos : currentPos; if (currentPos >= maxPos) { return null; } var currentMarker = (0, _core_utils.readUint16)(data, currentPos); if (currentMarker >= 0xffc0 && currentMarker <= 0xfffe) { return { invalid: null, marker: currentMarker, offset: currentPos }; } var newMarker = (0, _core_utils.readUint16)(data, newPos); while (!(newMarker >= 0xffc0 && newMarker <= 0xfffe)) { if (++newPos >= maxPos) { return null; } newMarker = (0, _core_utils.readUint16)(data, newPos); } return { invalid: currentMarker.toString(16), marker: newMarker, offset: newPos }; } JpegImage.prototype = { parse: function parse(data) { var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, _ref2$dnlScanLines = _ref2.dnlScanLines, dnlScanLines = _ref2$dnlScanLines === void 0 ? null : _ref2$dnlScanLines; function readDataBlock() { var length = (0, _core_utils.readUint16)(data, offset); offset += 2; var endOffset = offset + length - 2; var fileMarker = findNextFileMarker(data, endOffset, offset); if (fileMarker && fileMarker.invalid) { (0, _util.warn)("readDataBlock - incorrect length, current marker is: " + fileMarker.invalid); endOffset = fileMarker.offset; } var array = data.subarray(offset, endOffset); offset += array.length; return array; } function prepareComponents(frame) { var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH); var mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV); for (var i = 0; i < frame.components.length; i++) { component = frame.components[i]; var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / frame.maxH); var blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * component.v / frame.maxV); var blocksPerLineForMcu = mcusPerLine * component.h; var blocksPerColumnForMcu = mcusPerColumn * component.v; var blocksBufferSize = 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1); component.blockData = new Int16Array(blocksBufferSize); component.blocksPerLine = blocksPerLine; component.blocksPerColumn = blocksPerColumn; } frame.mcusPerLine = mcusPerLine; frame.mcusPerColumn = mcusPerColumn; } var offset = 0; var jfif = null; var adobe = null; var frame, resetInterval; var numSOSMarkers = 0; var quantizationTables = []; var huffmanTablesAC = [], huffmanTablesDC = []; var fileMarker = (0, _core_utils.readUint16)(data, offset); offset += 2; if (fileMarker !== 0xffd8) { throw new JpegError("SOI not found"); } fileMarker = (0, _core_utils.readUint16)(data, offset); offset += 2; markerLoop: while (fileMarker !== 0xffd9) { var i, j, l; switch (fileMarker) { case 0xffe0: case 0xffe1: case 0xffe2: case 0xffe3: case 0xffe4: case 0xffe5: case 0xffe6: case 0xffe7: case 0xffe8: case 0xffe9: case 0xffea: case 0xffeb: case 0xffec: case 0xffed: case 0xffee: case 0xffef: case 0xfffe: var appData = readDataBlock(); if (fileMarker === 0xffe0) { if (appData[0] === 0x4a && appData[1] === 0x46 && appData[2] === 0x49 && appData[3] === 0x46 && appData[4] === 0) { jfif = { version: { major: appData[5], minor: appData[6] }, densityUnits: appData[7], xDensity: appData[8] << 8 | appData[9], yDensity: appData[10] << 8 | appData[11], thumbWidth: appData[12], thumbHeight: appData[13], thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13]) }; } } if (fileMarker === 0xffee) { if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6f && appData[3] === 0x62 && appData[4] === 0x65) { adobe = { version: appData[5] << 8 | appData[6], flags0: appData[7] << 8 | appData[8], flags1: appData[9] << 8 | appData[10], transformCode: appData[11] }; } } break; case 0xffdb: var quantizationTablesLength = (0, _core_utils.readUint16)(data, offset); offset += 2; var quantizationTablesEnd = quantizationTablesLength + offset - 2; var z; while (offset < quantizationTablesEnd) { var quantizationTableSpec = data[offset++]; var tableData = new Uint16Array(64); if (quantizationTableSpec >> 4 === 0) { for (j = 0; j < 64; j++) { z = dctZigZag[j]; tableData[z] = data[offset++]; } } else if (quantizationTableSpec >> 4 === 1) { for (j = 0; j < 64; j++) { z = dctZigZag[j]; tableData[z] = (0, _core_utils.readUint16)(data, offset); offset += 2; } } else { throw new JpegError("DQT - invalid table spec"); } quantizationTables[quantizationTableSpec & 15] = tableData; } break; case 0xffc0: case 0xffc1: case 0xffc2: if (frame) { throw new JpegError("Only single frame JPEGs supported"); } offset += 2; frame = {}; frame.extended = fileMarker === 0xffc1; frame.progressive = fileMarker === 0xffc2; frame.precision = data[offset++]; var sofScanLines = (0, _core_utils.readUint16)(data, offset); offset += 2; frame.scanLines = dnlScanLines || sofScanLines; frame.samplesPerLine = (0, _core_utils.readUint16)(data, offset); offset += 2; frame.components = []; frame.componentIds = {}; var componentsCount = data[offset++], componentId; var maxH = 0, maxV = 0; for (i = 0; i < componentsCount; i++) { componentId = data[offset]; var h = data[offset + 1] >> 4; var v = data[offset + 1] & 15; if (maxH < h) { maxH = h; } if (maxV < v) { maxV = v; } var qId = data[offset + 2]; l = frame.components.push({ h: h, v: v, quantizationId: qId, quantizationTable: null }); frame.componentIds[componentId] = l - 1; offset += 3; } frame.maxH = maxH; frame.maxV = maxV; prepareComponents(frame); break; case 0xffc4: var huffmanLength = (0, _core_utils.readUint16)(data, offset); offset += 2; for (i = 2; i < huffmanLength;) { var huffmanTableSpec = data[offset++]; var codeLengths = new Uint8Array(16); var codeLengthSum = 0; for (j = 0; j < 16; j++, offset++) { codeLengthSum += codeLengths[j] = data[offset]; } var huffmanValues = new Uint8Array(codeLengthSum); for (j = 0; j < codeLengthSum; j++, offset++) { huffmanValues[j] = data[offset]; } i += 17 + codeLengthSum; (huffmanTableSpec >> 4 === 0 ? huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] = buildHuffmanTable(codeLengths, huffmanValues); } break; case 0xffdd: offset += 2; resetInterval = (0, _core_utils.readUint16)(data, offset); offset += 2; break; case 0xffda: var parseDNLMarker = ++numSOSMarkers === 1 && !dnlScanLines; offset += 2; var selectorsCount = data[offset++]; var components = [], component; for (i = 0; i < selectorsCount; i++) { var index = data[offset++]; var componentIndex = frame.componentIds[index]; component = frame.components[componentIndex]; component.index = index; var tableSpec = data[offset++]; component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4]; component.huffmanTableAC = huffmanTablesAC[tableSpec & 15]; components.push(component); } var spectralStart = data[offset++]; var spectralEnd = data[offset++]; var successiveApproximation = data[offset++]; try { var processed = decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successiveApproximation >> 4, successiveApproximation & 15, parseDNLMarker); offset += processed; } catch (ex) { if (ex instanceof DNLMarkerError) { (0, _util.warn)("".concat(ex.message, " -- attempting to re-parse the JPEG image.")); return this.parse(data, { dnlScanLines: ex.scanLines }); } else if (ex instanceof EOIMarkerError) { (0, _util.warn)("".concat(ex.message, " -- ignoring the rest of the image data.")); break markerLoop; } throw ex; } break; case 0xffdc: offset += 4; break; case 0xffff: if (data[offset] !== 0xff) { offset--; } break; default: var nextFileMarker = findNextFileMarker(data, offset - 2, offset - 3); if (nextFileMarker && nextFileMarker.invalid) { (0, _util.warn)("JpegImage.parse - unexpected data, current marker is: " + nextFileMarker.invalid); offset = nextFileMarker.offset; break; } if (!nextFileMarker || offset >= data.length - 1) { (0, _util.warn)("JpegImage.parse - reached the end of the image data " + "without finding an EOI marker (0xFFD9)."); break markerLoop; } throw new JpegError("JpegImage.parse - unknown marker: " + fileMarker.toString(16)); } fileMarker = (0, _core_utils.readUint16)(data, offset); offset += 2; } this.width = frame.samplesPerLine; this.height = frame.scanLines; this.jfif = jfif; this.adobe = adobe; this.components = []; for (i = 0; i < frame.components.length; i++) { component = frame.components[i]; var quantizationTable = quantizationTables[component.quantizationId]; if (quantizationTable) { component.quantizationTable = quantizationTable; } this.components.push({ index: component.index, output: buildComponentData(frame, component), scaleX: component.h / frame.maxH, scaleY: component.v / frame.maxV, blocksPerLine: component.blocksPerLine, blocksPerColumn: component.blocksPerColumn }); } this.numComponents = this.components.length; return undefined; }, _getLinearizedBlockData: function _getLinearizedBlockData(width, height) { var isSourcePDF = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var scaleX = this.width / width, scaleY = this.height / height; var component, componentScaleX, componentScaleY, blocksPerScanline; var x, y, i, j, k; var index; var offset = 0; var output; var numComponents = this.components.length; var dataLength = width * height * numComponents; var data = new Uint8ClampedArray(dataLength); var xScaleBlockOffset = new Uint32Array(width); var mask3LSB = 0xfffffff8; var lastComponentScaleX; for (i = 0; i < numComponents; i++) { component = this.components[i]; componentScaleX = component.scaleX * scaleX; componentScaleY = component.scaleY * scaleY; offset = i; output = component.output; blocksPerScanline = component.blocksPerLine + 1 << 3; if (componentScaleX !== lastComponentScaleX) { for (x = 0; x < width; x++) { j = 0 | x * componentScaleX; xScaleBlockOffset[x] = (j & mask3LSB) << 3 | j & 7; } lastComponentScaleX = componentScaleX; } for (y = 0; y < height; y++) { j = 0 | y * componentScaleY; index = blocksPerScanline * (j & mask3LSB) | (j & 7) << 3; for (x = 0; x < width; x++) { data[offset] = output[index + xScaleBlockOffset[x]]; offset += numComponents; } } } var transform = this._decodeTransform; if (!isSourcePDF && numComponents === 4 && !transform) { transform = new Int32Array([-256, 255, -256, 255, -256, 255, -256, 255]); } if (transform) { for (i = 0; i < dataLength;) { for (j = 0, k = 0; j < numComponents; j++, i++, k += 2) { data[i] = (data[i] * transform[k] >> 8) + transform[k + 1]; } } } return data; }, get _isColorConversionNeeded() { if (this.adobe) { return !!this.adobe.transformCode; } if (this.numComponents === 3) { if (this._colorTransform === 0) { return false; } else if (this.components[0].index === 0x52 && this.components[1].index === 0x47 && this.components[2].index === 0x42) { return false; } return true; } if (this._colorTransform === 1) { return true; } return false; }, _convertYccToRgb: function convertYccToRgb(data) { var Y, Cb, Cr; for (var i = 0, length = data.length; i < length; i += 3) { Y = data[i]; Cb = data[i + 1]; Cr = data[i + 2]; data[i] = Y - 179.456 + 1.402 * Cr; data[i + 1] = Y + 135.459 - 0.344 * Cb - 0.714 * Cr; data[i + 2] = Y - 226.816 + 1.772 * Cb; } return data; }, _convertYcckToRgb: function convertYcckToRgb(data) { var Y, Cb, Cr, k; var offset = 0; for (var i = 0, length = data.length; i < length; i += 4) { Y = data[i]; Cb = data[i + 1]; Cr = data[i + 2]; k = data[i + 3]; data[offset++] = -122.67195406894 + Cb * (-6.60635669420364e-5 * Cb + 0.000437130475926232 * Cr - 5.4080610064599e-5 * Y + 0.00048449797120281 * k - 0.154362151871126) + Cr * (-0.000957964378445773 * Cr + 0.000817076911346625 * Y - 0.00477271405408747 * k + 1.53380253221734) + Y * (0.000961250184130688 * Y - 0.00266257332283933 * k + 0.48357088451265) + k * (-0.000336197177618394 * k + 0.484791561490776); data[offset++] = 107.268039397724 + Cb * (2.19927104525741e-5 * Cb - 0.000640992018297945 * Cr + 0.000659397001245577 * Y + 0.000426105652938837 * k - 0.176491792462875) + Cr * (-0.000778269941513683 * Cr + 0.00130872261408275 * Y + 0.000770482631801132 * k - 0.151051492775562) + Y * (0.00126935368114843 * Y - 0.00265090189010898 * k + 0.25802910206845) + k * (-0.000318913117588328 * k - 0.213742400323665); data[offset++] = -20.810012546947 + Cb * (-0.000570115196973677 * Cb - 2.63409051004589e-5 * Cr + 0.0020741088115012 * Y - 0.00288260236853442 * k + 0.814272968359295) + Cr * (-1.53496057440975e-5 * Cr - 0.000132689043961446 * Y + 0.000560833691242812 * k - 0.195152027534049) + Y * (0.00174418132927582 * Y - 0.00255243321439347 * k + 0.116935020465145) + k * (-0.000343531996510555 * k + 0.24165260232407); } return data.subarray(0, offset); }, _convertYcckToCmyk: function convertYcckToCmyk(data) { var Y, Cb, Cr; for (var i = 0, length = data.length; i < length; i += 4) { Y = data[i]; Cb = data[i + 1]; Cr = data[i + 2]; data[i] = 434.456 - Y - 1.402 * Cr; data[i + 1] = 119.541 - Y + 0.344 * Cb + 0.714 * Cr; data[i + 2] = 481.816 - Y - 1.772 * Cb; } return data; }, _convertCmykToRgb: function convertCmykToRgb(data) { var c, m, y, k; var offset = 0; for (var i = 0, length = data.length; i < length; i += 4) { c = data[i]; m = data[i + 1]; y = data[i + 2]; k = data[i + 3]; data[offset++] = 255 + c * (-0.00006747147073602441 * c + 0.0008379262121013727 * m + 0.0002894718188643294 * y + 0.003264231057537806 * k - 1.1185611867203937) + m * (0.000026374107616089405 * m - 0.00008626949158638572 * y - 0.0002748769067499491 * k - 0.02155688794978967) + y * (-0.00003878099212869363 * y - 0.0003267808279485286 * k + 0.0686742238595345) - k * (0.0003361971776183937 * k + 0.7430659151342254); data[offset++] = 255 + c * (0.00013596372813588848 * c + 0.000924537132573585 * m + 0.00010567359618683593 * y + 0.0004791864687436512 * k - 0.3109689587515875) + m * (-0.00023545346108370344 * m + 0.0002702845253534714 * y + 0.0020200308977307156 * k - 0.7488052167015494) + y * (0.00006834815998235662 * y + 0.00015168452363460973 * k - 0.09751927774728933) - k * (0.00031891311758832814 * k + 0.7364883807733168); data[offset++] = 255 + c * (0.000013598650411385307 * c + 0.00012423956175490851 * m + 0.0004751985097583589 * y - 0.0000036729317476630422 * k - 0.05562186980264034) + m * (0.00016141380598724676 * m + 0.0009692239130725186 * y + 0.0007782692450036253 * k - 0.44015232367526463) + y * (5.068882914068769e-7 * y + 0.0017778369011375071 * k - 0.7591454649749609) - k * (0.0003435319965105553 * k + 0.7063770186160144); } return data.subarray(0, offset); }, getData: function getData(_ref3) { var width = _ref3.width, height = _ref3.height, _ref3$forceRGB = _ref3.forceRGB, forceRGB = _ref3$forceRGB === void 0 ? false : _ref3$forceRGB, _ref3$isSourcePDF = _ref3.isSourcePDF, isSourcePDF = _ref3$isSourcePDF === void 0 ? false : _ref3$isSourcePDF; if (this.numComponents > 4) { throw new JpegError("Unsupported color mode"); } var data = this._getLinearizedBlockData(width, height, isSourcePDF); if (this.numComponents === 1 && forceRGB) { var dataLength = data.length; var rgbData = new Uint8ClampedArray(dataLength * 3); var offset = 0; for (var i = 0; i < dataLength; i++) { var grayColor = data[i]; rgbData[offset++] = grayColor; rgbData[offset++] = grayColor; rgbData[offset++] = grayColor; } return rgbData; } else if (this.numComponents === 3 && this._isColorConversionNeeded) { return this._convertYccToRgb(data); } else if (this.numComponents === 4) { if (this._isColorConversionNeeded) { if (forceRGB) { return this._convertYcckToRgb(data); } return this._convertYcckToCmyk(data); } else if (forceRGB) { return this._convertCmykToRgb(data); } } return data; } }; return JpegImage; }(); exports.JpegImage = JpegImage; /***/ }), /* 150 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.JpxStream = void 0; var _stream = __w_pdfjs_require__(142); var _jpx = __w_pdfjs_require__(151); var _util = __w_pdfjs_require__(4); var JpxStream = function JpxStreamClosure() { function JpxStream(stream, maybeLength, dict, params) { this.stream = stream; this.maybeLength = maybeLength; this.dict = dict; this.params = params; _stream.DecodeStream.call(this, maybeLength); } JpxStream.prototype = Object.create(_stream.DecodeStream.prototype); Object.defineProperty(JpxStream.prototype, "bytes", { get: function JpxStream_bytes() { return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength)); }, configurable: true }); JpxStream.prototype.ensureBuffer = function (requested) {}; JpxStream.prototype.readBlock = function () { if (this.eof) { return; } var jpxImage = new _jpx.JpxImage(); jpxImage.parse(this.bytes); var width = jpxImage.width; var height = jpxImage.height; var componentsCount = jpxImage.componentsCount; var tileCount = jpxImage.tiles.length; if (tileCount === 1) { this.buffer = jpxImage.tiles[0].items; } else { var data = new Uint8ClampedArray(width * height * componentsCount); for (var k = 0; k < tileCount; k++) { var tileComponents = jpxImage.tiles[k]; var tileWidth = tileComponents.width; var tileHeight = tileComponents.height; var tileLeft = tileComponents.left; var tileTop = tileComponents.top; var src = tileComponents.items; var srcPosition = 0; var dataPosition = (width * tileTop + tileLeft) * componentsCount; var imgRowSize = width * componentsCount; var tileRowSize = tileWidth * componentsCount; for (var j = 0; j < tileHeight; j++) { var rowBytes = src.subarray(srcPosition, srcPosition + tileRowSize); data.set(rowBytes, dataPosition); srcPosition += tileRowSize; dataPosition += imgRowSize; } } this.buffer = data; } this.bufferLength = this.buffer.length; this.eof = true; }; return JpxStream; }(); exports.JpxStream = JpxStream; /***/ }), /* 151 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", ({ value: true })); exports.JpxImage = void 0; var _util = __w_pdfjs_require__(4); var _core_utils = __w_pdfjs_require__(138); var _arithmetic_decoder = __w_pdfjs_require__(147); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } var JpxError = /*#__PURE__*/function (_BaseException) { _inherits(JpxError, _BaseException); var _super = _createSuper(JpxError); function JpxError(msg) { _classCallCheck(this, JpxError); return _super.call(this, "JPX error: ".concat(msg)); } return JpxError; }(_util.BaseException); var JpxImage = function JpxImageClosure() { var SubbandsGainLog2 = { LL: 0, LH: 1, HL: 1, HH: 2 }; function JpxImage() { this.failOnCorruptedImage = false; } JpxImage.prototype = { parse: function JpxImage_parse(data) { var head = (0, _core_utils.readUint16)(data, 0); if (head === 0xff4f) { this.parseCodestream(data, 0, data.length); return; } var position = 0, length = data.length; while (position < length) { var headerSize = 8; var lbox = (0, _core_utils.readUint32)(data, position); var tbox = (0, _core_utils.readUint32)(data, position + 4); position += headerSize; if (lbox === 1) { lbox = (0, _core_utils.readUint32)(data, position) * 4294967296 + (0, _core_utils.readUint32)(data, position + 4); position += 8; headerSize += 8; } if (lbox === 0) { lbox = length - position + headerSize; } if (lbox < headerSize) { throw new JpxError("Invalid box field size"); } var dataLength = lbox - headerSize; var jumpDataLength = true; switch (tbox) { case 0x6a703268: jumpDataLength = false; break; case 0x636f6c72: var method = data[position]; if (method === 1) { var colorspace = (0, _core_utils.readUint32)(data, position + 3); switch (colorspace) { case 16: case 17: case 18: break; default: (0, _util.warn)("Unknown colorspace " + colorspace); break; } } else if (method === 2) { (0, _util.info)("ICC profile not supported"); } break; case 0x6a703263: this.parseCodestream(data, position, position + dataLength); break; case 0x6a502020: if ((0, _core_utils.readUint32)(data, position) !== 0x0d0a870a) { (0, _util.warn)("Invalid JP2 signature"); } break; case 0x6a501a1a: case 0x66747970: case 0x72726571: case 0x72657320: case 0x69686472: break; default: var headerType = String.fromCharCode(tbox >> 24 & 0xff, tbox >> 16 & 0xff, tbox >> 8 & 0xff, tbox & 0xff); (0, _util.warn)("Unsupported header type " + tbox + " (" + headerType + ")"); break; } if (jumpDataLength) { position += dataLength; } } }, parseImageProperties: function JpxImage_parseImageProperties(stream) { var newByte = stream.getByte(); while (newByte >= 0) { var oldByte = newByte; newByte = stream.getByte(); var code = oldByte << 8 | newByte; if (code === 0xff51) { stream.skip(4); var Xsiz = stream.getInt32() >>> 0; var Ysiz = stream.getInt32() >>> 0; var XOsiz = stream.getInt32() >>> 0; var YOsiz = stream.getInt32() >>> 0; stream.skip(16); var Csiz = stream.getUint16(); this.width = Xsiz - XOsiz; this.height = Ysiz - YOsiz; this.componentsCount = Csiz; this.bitsPerComponent = 8; return; } } throw new JpxError("No size marker found in JPX stream"); }, parseCodestream: function JpxImage_parseCodestream(data, start, end) { var context = {}; var doNotRecover = false; try { var position = start; while (position + 1 < end) { var code = (0, _core_utils.readUint16)(data, position); position += 2; var length = 0, j, sqcd, spqcds, spqcdSize, scalarExpounded, tile; switch (code) { case 0xff4f: context.mainHeader = true; break; case 0xffd9: break; case 0xff51: length = (0, _core_utils.readUint16)(data, position); var siz = {}; siz.Xsiz = (0, _core_utils.readUint32)(data, position + 4); siz.Ysiz = (0, _core_utils.readUint32)(data, position + 8); siz.XOsiz = (0, _core_utils.readUint32)(data, position + 12); siz.YOsiz = (0, _core_utils.readUint32)(data, position + 16); siz.XTsiz = (0, _core_utils.readUint32)(data, position + 20); siz.YTsiz = (0, _core_utils.readUint32)(data, position + 24); siz.XTOsiz = (0, _core_utils.readUint32)(data, position + 28); siz.YTOsiz = (0, _core_utils.readUint32)(data, position + 32); var componentsCount = (0, _core_utils.readUint16)(data, position + 36); siz.Csiz = componentsCount; var components = []; j = position + 38; for (var i = 0; i < componentsCount; i++) { var component = { precision: (data[j] & 0x7f) + 1, isSigned: !!(data[j] & 0x80), XRsiz: data[j + 1], YRsiz: data[j + 2] }; j += 3; calculateComponentDimensions(component, siz); components.push(component); } context.SIZ = siz; context.components = components; calculateTileGrids(context, components); context.QCC = []; context.COC = []; break; case 0xff5c: length = (0, _core_utils.readUint16)(data, position); var qcd = {}; j = position + 2; sqcd = data[j++]; switch (sqcd & 0x1f) { case 0: spqcdSize = 8; scalarExpounded = true; break; case 1: spqcdSize = 16; scalarExpounded = false; break; case 2: spqcdSize = 16; scalarExpounded = true; break; default: throw new Error("Invalid SQcd value " + sqcd); } qcd.noQuantization = spqcdSize === 8; qcd.scalarExpounded = scalarExpounded; qcd.guardBits = sqcd >> 5; spqcds = []; while (j < length + position) { var spqcd = {}; if (spqcdSize === 8) { spqcd.epsilon = data[j++] >> 3; spqcd.mu = 0; } else { spqcd.epsilon = data[j] >> 3; spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1]; j += 2; } spqcds.push(spqcd); } qcd.SPqcds = spqcds; if (context.mainHeader) { context.QCD = qcd; } else { context.currentTile.QCD = qcd; context.currentTile.QCC = []; } break; case 0xff5d: length = (0, _core_utils.readUint16)(data, position); var qcc = {}; j = position + 2; var cqcc; if (context.SIZ.Csiz < 257) { cqcc = data[j++]; } else { cqcc = (0, _core_utils.readUint16)(data, j); j += 2; } sqcd = data[j++]; switch (sqcd & 0x1f) { case 0: spqcdSize = 8; scalarExpounded = true; break; case 1: spqcdSize = 16; scalarExpounded = false; break; case 2: spqcdSize = 16; scalarExpounded = true; break; default: throw new Error("Invalid SQcd value " + sqcd); } qcc.noQuantization = spqcdSize === 8; qcc.scalarExpounded = scalarExpounded; qcc.guardBits = sqcd >> 5; spqcds = []; while (j < length + position) { spqcd = {}; if (spqcdSize === 8) { spqcd.epsilon = data[j++] >> 3; spqcd.mu = 0; } else { spqcd.epsilon = data[j] >> 3; spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1]; j += 2; } spqcds.push(spqcd); } qcc.SPqcds = spqcds; if (context.mainHeader) { context.QCC[cqcc] = qcc; } else { context.currentTile.QCC[cqcc] = qcc; } break; case 0xff52: length = (0, _core_utils.readUint16)(data, position); var cod = {}; j = position + 2; var scod = data[j++]; cod.entropyCoderWithCustomPrecincts = !!(scod & 1); cod.sopMarkerUsed = !!(scod & 2); cod.ephMarkerUsed = !!(scod & 4); cod.progressionOrder = data[j++]; cod.layersCount = (0, _core_utils.readUint16)(data, j); j += 2; cod.multipleComponentTransform = data[j++]; cod.decompositionLevelsCount = data[j++]; cod.xcb = (data[j++] & 0xf) + 2; cod.ycb = (data[j++] & 0xf) + 2; var blockStyle = data[j++]; cod.selectiveArithmeticCodingBypass = !!(blockStyle & 1); cod.resetContextProbabilities = !!(blockStyle & 2); cod.terminationOnEachCodingPass = !!(blockStyle & 4); cod.verticallyStripe = !!(blockStyle & 8); cod.predictableTermination = !!(blockStyle & 16); cod.segmentationSymbolUsed = !!(blockStyle & 32); cod.reversibleTransformation = data[j++]; if (cod.entropyCoderWithCustomPrecincts) { var precinctsSizes = []; while (j < length + position) { var precinctsSize = data[j++]; precinctsSizes.push({ PPx: precinctsSize & 0xf, PPy: precinctsSize >> 4 }); } cod.precinctsSizes = precinctsSizes; } var unsupported = []; if (cod.selectiveArithmeticCodingBypass) { unsupported.push("selectiveArithmeticCodingBypass"); } if (cod.resetContextProbabilities) { unsupported.push("resetContextProbabilities"); } if (cod.terminationOnEachCodingPass) { unsupported.push("terminationOnEachCodingPass"); } if (cod.verticallyStripe) { unsupported.push("verticallyStripe"); } if (cod.predictableTermination) { unsupported.push("predictableTermination"); } if (unsupported.length > 0) { doNotRecover = true; (0, _util.warn)("JPX: Unsupported COD options (".concat(unsupported.join(", "), ").")); } if (context.mainHeader) { context.COD = cod; } else { context.currentTile.COD = cod; context.currentTile.COC = []; } break; case 0xff90: length = (0, _core_utils.readUint16)(data, position); tile = {}; tile.index = (0, _core_utils.readUint16)(data, position + 2); tile.length = (0, _core_utils.readUint32)(data, position + 4); tile.dataEnd = tile.length + position - 2; tile.partIndex = data[position + 8]; tile.partsCount = data[position + 9]; context.mainHeader = false; if (tile.partIndex === 0) { tile.COD = context.COD; tile.COC = context.COC.slice(0); tile.QCD = context.QCD; tile.QCC = context.QCC.slice(0); } context.currentTile = tile; break; case 0xff93: tile = context.currentTile; if (tile.partIndex === 0) { initializeTile(context, tile.index); buildPackets(context); } length = tile.dataEnd - position; parseTilePackets(context, data, position, length); break; case 0xff53: (0, _util.warn)("JPX: Codestream code 0xFF53 (COC) is not implemented."); case 0xff55: case 0xff57: case 0xff58: case 0xff64: length = (0, _core_utils.readUint16)(data, position); break; default: throw new Error("Unknown codestream code: " + code.toString(16)); } position += length; } } catch (e) { if (doNotRecover || this.failOnCorruptedImage) { throw new JpxError(e.message); } else { (0, _util.warn)("JPX: Trying to recover from: \"".concat(e.message, "\".")); } } this.tiles = transformComponents(context); this.width = context.SIZ.Xsiz - context.SIZ.XOsiz; this.height = context.SIZ.Ysiz - context.SIZ.YOsiz; this.componentsCount = context.SIZ.Csiz; } }; function calculateComponentDimensions(component, siz) { component.x0 = Math.ceil(siz.XOsiz / component.XRsiz); component.x1 = Math.ceil(siz.Xsiz / component.XRsiz); component.y0 = Math.ceil(siz.YOsiz / component.YRsiz); component.y1 = Math.ceil(siz.Ysiz / component.YRsiz); component.width = component.x1 - component.x0; component.height = component.y1 - component.y0; } function calculateTileGrids(context, components) { var siz = context.SIZ; var tile, tiles = []; var numXtiles = Math.ceil((siz.Xsiz - siz.XTOsiz) / siz.XTsiz); var numYtiles = Math.ceil((siz.Ysiz - siz.YTOsiz) / siz.YTsiz); for (var q = 0; q < numYtiles; q++) { for (var p = 0; p < numXtiles; p++) { tile = {}; tile.tx0 = Math.max(siz.XTOsiz + p * siz.XTsiz, siz.XOsiz); tile.ty0 = Math.max(siz.YTOsiz + q * siz.YTsiz, siz.YOsiz); tile.tx1 = Math.min(siz.XTOsiz + (p + 1) * siz.XTsiz, siz.Xsiz); tile.ty1 = Math.min(siz.YTOsiz + (q + 1) * siz.YTsiz, siz.Ysiz); tile.width = tile.tx1 - tile.tx0; tile.height = tile.ty1 - tile.ty0; tile.components = []; tiles.push(tile); } } context.tiles = tiles; var componentsCount = siz.Csiz; for (var i = 0, ii = componentsCount; i < ii; i++) { var component = components[i]; for (var j = 0, jj = tiles.length; j < jj; j++) { var tileComponent = {}; tile = tiles[j]; tileComponent.tcx0 = Math.ceil(tile.tx0 / component.XRsiz); tileComponent.tcy0 = Math.ceil(tile.ty0 / component.YRsiz); tileComponent.tcx1 = Math.ceil(tile.tx1 / component.XRsiz); tileComponent.tcy1 = Math.ceil(tile.ty1 / component.YRsiz); tileComponent.width = tileComponent.tcx1 - tileComponent.tcx0; tileComponent.height = tileComponent.tcy1 - tileComponent.tcy0; tile.components[i] = tileComponent; } } } function getBlocksDimensions(context, component, r) { var codOrCoc = component.codingStyleParameters; var result = {}; if (!codOrCoc.entropyCoderWithCustomPrecincts) { result.PPx = 15; result.PPy = 15; } else { result.PPx = codOrCoc.precinctsSizes[r].PPx; result.PPy = codOrCoc.precinctsSizes[r].PPy; } result.xcb_ = r > 0 ? Math.min(codOrCoc.xcb, result.PPx - 1) : Math.min(codOrCoc.xcb, result.PPx); result.ycb_ = r > 0 ? Math.min(codOrCoc.ycb, result.PPy - 1) : Math.min(codOrCoc.ycb, result.PPy); return result; } function buildPrecincts(context, resolution, dimensions) { var precinctWidth = 1 << dimensions.PPx; var precinctHeight = 1 << dimensions.PPy; var isZeroRes = resolution.resLevel === 0; var precinctWidthInSubband = 1 << dimensions.PPx + (isZeroRes ? 0 : -1); var precinctHeightInSubband = 1 << dimensions.PPy + (isZeroRes ? 0 : -1); var numprecinctswide = resolution.trx1 > resolution.trx0 ? Math.ceil(resolution.trx1 / precinctWidth) - Math.floor(resolution.trx0 / precinctWidth) : 0; var numprecinctshigh = resolution.try1 > resolution.try0 ? Math.ceil(resolution.try1 / precinctHeight) - Math.floor(resolution.try0 / precinctHeight) : 0; var numprecincts = numprecinctswide * numprecinctshigh; resolution.precinctParameters = { precinctWidth: precinctWidth, precinctHeight: precinctHeight, numprecinctswide: numprecinctswide, numprecinctshigh: numprecinctshigh, numprecincts: numprecincts, precinctWidthInSubband: precinctWidthInSubband, precinctHeightInSubband: precinctHeightInSubband }; } function buildCodeblocks(context, subband, dimensions) { var xcb_ = dimensions.xcb_; var ycb_ = dimensions.ycb_; var codeblockWidth = 1 << xcb_; var codeblockHeight = 1 << ycb_; var cbx0 = subband.tbx0 >> xcb_; var cby0 = subband.tby0 >> ycb_; var cbx1 = subband.tbx1 + codeblockWidth - 1 >> xcb_; var cby1 = subband.tby1 + codeblockHeight - 1 >> ycb_; var precinctParameters = subband.resolution.precinctParameters; var codeblocks = []; var precincts = []; var i, j, codeblock, precinctNumber; for (j = cby0; j < cby1; j++) { for (i = cbx0; i < cbx1; i++) { codeblock = { cbx: i, cby: j, tbx0: codeblockWidth * i, tby0: codeblockHeight * j, tbx1: codeblockWidth * (i + 1), tby1: codeblockHeight * (j + 1) }; codeblock.tbx0_ = Math.max(subband.tbx0, codeblock.tbx0); codeblock.tby0_ = Math.max(subband.tby0, codeblock.tby0); codeblock.tbx1_ = Math.min(subband.tbx1, codeblock.tbx1); codeblock.tby1_ = Math.min(subband.tby1, codeblock.tby1); var pi = Math.floor((codeblock.tbx0_ - subband.tbx0) / precinctParameters.precinctWidthInSubband); var pj = Math.floor((codeblock.tby0_ - subband.tby0) / precinctParameters.precinctHeightInSubband); precinctNumber = pi + pj * precinctParameters.numprecinctswide; codeblock.precinctNumber = precinctNumber; codeblock.subbandType = subband.type; codeblock.Lblock = 3; if (codeblock.tbx1_ <= codeblock.tbx0_ || codeblock.tby1_ <= codeblock.tby0_) { continue; } codeblocks.push(codeblock); var precinct = precincts[precinctNumber]; if (precinct !== undefined) { if (i < precinct.cbxMin) { precinct.cbxMin = i; } else if (i > precinct.cbxMax) { precinct.cbxMax = i; } if (j < precinct.cbyMin) { precinct.cbxMin = j; } else if (j > precinct.cbyMax) { precinct.cbyMax = j; } } else { precincts[precinctNumber] = precinct = { cbxMin: i, cbyMin: j, cbxMax: i, cbyMax: j }; } codeblock.precinct = precinct; } } subband.codeblockParameters = { codeblockWidth: xcb_, codeblockHeight: ycb_, numcodeblockwide: cbx1 - cbx0 + 1, numcodeblockhigh: cby1 - cby0 + 1 }; subband.codeblocks = codeblocks; subband.precincts = precincts; } function createPacket(resolution, precinctNumber, layerNumber) { var precinctCodeblocks = []; var subbands = resolution.subbands; for (var i = 0, ii = subbands.length; i < ii; i++) { var subband = subbands[i]; var codeblocks = subband.codeblocks; for (var j = 0, jj = codeblocks.length; j < jj; j++) { var codeblock = codeblocks[j]; if (codeblock.precinctNumber !== precinctNumber) { continue; } precinctCodeblocks.push(codeblock); } } return { layerNumber: layerNumber, codeblocks: precinctCodeblocks }; } function LayerResolutionComponentPositionIterator(context) { var siz = context.SIZ; var tileIndex = context.currentTile.index; var tile = context.tiles[tileIndex]; var layersCount = tile.codingStyleDefaultParameters.layersCount; var componentsCount = siz.Csiz; var maxDecompositionLevelsCount = 0; for (var q = 0; q < componentsCount; q++) { maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount); } var l = 0, r = 0, i = 0, k = 0; this.nextPacket = function JpxImage_nextPacket() { for (; l < layersCount; l++) { for (; r <= maxDecompositionLevelsCount; r++) { for (; i < componentsCount; i++) { var component = tile.components[i]; if (r > component.codingStyleParameters.decompositionLevelsCount) { continue; } var resolution = component.resolutions[r]; var numprecincts = resolution.precinctParameters.numprecincts; for (; k < numprecincts;) { var packet = createPacket(resolution, k, l); k++; return packet; } k = 0; } i = 0; } r = 0; } throw new JpxError("Out of packets"); }; } function ResolutionLayerComponentPositionIterator(context) { var siz = context.SIZ; var tileIndex = context.currentTile.index; var tile = context.tiles[tileIndex]; var layersCount = tile.codingStyleDefaultParameters.layersCount; var componentsCount = siz.Csiz; var maxDecompositionLevelsCount = 0; for (var q = 0; q < componentsCount; q++) { maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount); } var r = 0, l = 0, i = 0, k = 0; this.nextPacket = function JpxImage_nextPacket() { for (; r <= maxDecompositionLevelsCount; r++) { for (; l < layersCount; l++) { for (; i < componentsCount; i++) { var component = tile.components[i]; if (r > component.codingStyleParameters.decompositionLevelsCount) { continue; } var resolution = component.resolutions[r]; var numprecincts = resolution.precinctParameters.numprecincts; for (; k < numprecincts;) { var packet = createPacket(resolution, k, l); k++; return packet; } k = 0; } i = 0; } l = 0; } throw new JpxError("Out of packets"); }; } function ResolutionPositionComponentLayerIterator(context) { var siz = context.SIZ; var tileIndex = context.currentTile.index; var tile = context.tiles[tileIndex]; var layersCount = tile.codingStyleDefaultParameters.layersCount; var componentsCount = siz.Csiz; var l, r, c, p; var maxDecompositionLevelsCount = 0; for (c = 0; c < componentsCount; c++) { var component = tile.components[c]; maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, component.codingStyleParameters.decompositionLevelsCount); } var maxNumPrecinctsInLevel = new Int32Array(maxDecompositionLevelsCount + 1); for (r = 0; r <= maxDecompositionLevelsCount; ++r) { var maxNumPrecincts = 0; for (c = 0; c < componentsCount; ++c) { var resolutions = tile.components[c].resolutions; if (r < resolutions.length) { maxNumPrecincts = Math.max(maxNumPrecincts, resolutions[r].precinctParameters.numprecincts); } } maxNumPrecinctsInLevel[r] = maxNumPrecincts; } l = 0; r = 0; c = 0; p = 0; this.nextPacket = function JpxImage_nextPacket() { for (; r <= maxDecompositionLevelsCount; r++) { for (; p < maxNumPrecinctsInLevel[r]; p++) { for (; c < componentsCount; c++) { var _component = tile.components[c]; if (r > _component.codingStyleParameters.decompositionLevelsCount) { continue; } var resolution = _component.resolutions[r]; var numprecincts = resolution.precinctParameters.numprecincts; if (p >= numprecincts) { continue; } for (; l < layersCount;) { var packet = createPacket(resolution, p, l); l++; return packet; } l = 0; } c = 0; } p = 0; } throw new JpxError("Out of packets"); }; } function PositionComponentResolutionLayerIterator(context) { var siz = context.SIZ; var tileIndex = context.currentTile.index; var tile = context.tiles[tileIndex]; var layersCount = tile.codingStyleDefaultParameters.layersCount; var componentsCount = siz.Csiz; var precinctsSizes = getPrecinctSizesInImageScale(tile); var precinctsIterationSizes = precinctsSizes; var l = 0, r = 0, c = 0, px = 0, py = 0; this.nextPacket = function JpxImage_nextPacket() { for (; py < precinctsIterationSizes.maxNumHigh; py++) { for (; px < precinctsIterationSizes.maxNumWide; px++) { for (; c < componentsCount; c++) { var component = tile.components[c]; var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; for (; r <= decompositionLevelsCount; r++) { var resolution = component.resolutions[r]; var sizeInImageScale = precinctsSizes.components[c].resolutions[r]; var k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution); if (k === null) { continue; } for (; l < layersCount;) { var packet = createPacket(resolution, k, l); l++; return packet; } l = 0; } r = 0; } c = 0; } px = 0; } throw new JpxError("Out of packets"); }; } function ComponentPositionResolutionLayerIterator(context) { var siz = context.SIZ; var tileIndex = context.currentTile.index; var tile = context.tiles[tileIndex]; var layersCount = tile.codingStyleDefaultParameters.layersCount; var componentsCount = siz.Csiz; var precinctsSizes = getPrecinctSizesInImageScale(tile); var l = 0, r = 0, c = 0, px = 0, py = 0; this.nextPacket = function JpxImage_nextPacket() { for (; c < componentsCount; ++c) { var component = tile.components[c]; var precinctsIterationSizes = precinctsSizes.components[c]; var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; for (; py < precinctsIterationSizes.maxNumHigh; py++) { for (; px < precinctsIterationSizes.maxNumWide; px++) { for (; r <= decompositionLevelsCount; r++) { var resolution = component.resolutions[r]; var sizeInImageScale = precinctsIterationSizes.resolutions[r]; var k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution); if (k === null) { continue; } for (; l < layersCount;) { var packet = createPacket(resolution, k, l); l++; return packet; } l = 0; } r = 0; } px = 0; } py = 0; } throw new JpxError("Out of packets"); }; } function getPrecinctIndexIfExist(pxIndex, pyIndex, sizeInImageScale, precinctIterationSizes, resolution) { var posX = pxIndex * precinctIterationSizes.minWidth; var posY = pyIndex * precinctIterationSizes.minHeight; if (posX % sizeInImageScale.width !== 0 || posY % sizeInImageScale.height !== 0) { return null; } var startPrecinctRowIndex = posY / sizeInImageScale.width * resolution.precinctParameters.numprecinctswide; return posX / sizeInImageScale.height + startPrecinctRowIndex; } function getPrecinctSizesInImageScale(tile) { var componentsCount = tile.components.length; var minWidth = Number.MAX_VALUE; var minHeight = Number.MAX_VALUE; var maxNumWide = 0; var maxNumHigh = 0; var sizePerComponent = new Array(componentsCount); for (var c = 0; c < componentsCount; c++) { var component = tile.components[c]; var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; var sizePerResolution = new Array(decompositionLevelsCount + 1); var minWidthCurrentComponent = Number.MAX_VALUE; var minHeightCurrentComponent = Number.MAX_VALUE; var maxNumWideCurrentComponent = 0; var maxNumHighCurrentComponent = 0; var scale = 1; for (var r = decompositionLevelsCount; r >= 0; --r) { var resolution = component.resolutions[r]; var widthCurrentResolution = scale * resolution.precinctParameters.precinctWidth; var heightCurrentResolution = scale * resolution.precinctParameters.precinctHeight; minWidthCurrentComponent = Math.min(minWidthCurrentComponent, widthCurrentResolution); minHeightCurrentComponent = Math.min(minHeightCurrentComponent, heightCurrentResolution); maxNumWideCurrentComponent = Math.max(maxNumWideCurrentComponent, resolution.precinctParameters.numprecinctswide); maxNumHighCurrentComponent = Math.max(maxNumHighCurrentComponent, resolution.precinctParameters.numprecinctshigh); sizePerResolution[r] = { width: widthCurrentResolution, height: heightCurrentResolution }; scale <<= 1; } minWidth = Math.min(minWidth, minWidthCurrentComponent); minHeight = Math.min(minHeight, minHeightCurrentComponent); maxNumWide = Math.max(maxNumWide, maxNumWideCurrentComponent); maxNumHigh = Math.max(maxNumHigh, maxNumHighCurrentComponent); sizePerComponent[c] = { resolutions: sizePerResolution, minWidth: minWidthCurrentComponent, minHeight: minHeightCurrentComponent, maxNumWide: maxNumWideCurrentComponent, maxNumHigh: maxNumHighCurrentComponent }; } return { components: sizePerComponent, minWidth: minWidth, minHeight: minHeight, maxNumWide: maxNumWide, maxNumHigh: maxNumHigh }; } function buildPackets(context) { var siz = context.SIZ; var tileIndex = context.currentTile.index; var tile = context.tiles[tileIndex]; var componentsCount = siz.Csiz; for (var c = 0; c < componentsCount; c++) { var component = tile.components[c]; var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; var resolutions = []; var subbands = []; for (var r = 0; r <= decompositionLevelsCount; r++) { var blocksDimensions = getBlocksDimensions(context, component, r); var resolution = {}; var scale = 1 << decompositionLevelsCount - r; resolution.trx0 = Math.ceil(component.tcx0 / scale); resolution.try0 = Math.ceil(component.tcy0 / scale); resolution.trx1 = Math.ceil(component.tcx1 / scale); resolution.try1 = Math.ceil(component.tcy1 / scale); resolution.resLevel = r; buildPrecincts(context, resolution, blocksDimensions); resolutions.push(resolution); var subband; if (r === 0) { subband = {}; subband.type = "LL"; subband.tbx0 = Math.ceil(component.tcx0 / scale); subband.tby0 = Math.ceil(component.tcy0 / scale); subband.tbx1 = Math.ceil(component.tcx1 / scale); subband.tby1 = Math.ceil(component.tcy1 / scale); subband.resolution = resolution; buildCodeblocks(context, subband, blocksDimensions); subbands.push(subband); resolution.subbands = [subband]; } else { var bscale = 1 << decompositionLevelsCount - r + 1; var resolutionSubbands = []; subband = {}; subband.type = "HL"; subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5); subband.tby0 = Math.ceil(component.tcy0 / bscale); subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5); subband.tby1 = Math.ceil(component.tcy1 / bscale); subband.resolution = resolution; buildCodeblocks(context, subband, blocksDimensions); subbands.push(subband); resolutionSubbands.push(subband); subband = {}; subband.type = "LH"; subband.tbx0 = Math.ceil(component.tcx0 / bscale); subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5); subband.tbx1 = Math.ceil(component.tcx1 / bscale); subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5); subband.resolution = resolution; buildCodeblocks(context, subband, blocksDimensions); subbands.push(subband); resolutionSubbands.push(subband); subband = {}; subband.type = "HH"; subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5); subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5); subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5); subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5); subband.resolution = resolution; buildCodeblocks(context, subband, blocksDimensions); subbands.push(subband); resolutionSubbands.push(subband); resolution.subbands = resolutionSubbands; } } component.resolutions = resolutions; component.subbands = subbands; } var progressionOrder = tile.codingStyleDefaultParameters.progressionOrder; switch (progressionOrder) { case 0: tile.packetsIterator = new LayerResolutionComponentPositionIterator(context); break; case 1: tile.packetsIterator = new ResolutionLayerComponentPositionIterator(context); break; case 2: tile.packetsIterator = new ResolutionPositionComponentLayerIterator(context); break; case 3: tile.packetsIterator = new PositionComponentResolutionLayerIterator(context); break; case 4: tile.packetsIterator = new ComponentPositionResolutionLayerIterator(context); break; default: throw new JpxError("Unsupported progression order ".concat(progressionOrder)); } } function parseTilePackets(context, data, offset, dataLength) { var position = 0; var buffer, bufferSize = 0, skipNextBit = false; function readBits(count) { while (bufferSize < count) { var b = data[offset + position]; position++; if (skipNextBit) { buffer = buffer << 7 | b; bufferSize += 7; skipNextBit = false; } else { buffer = buffer << 8 | b; bufferSize += 8; } if (b === 0xff) { skipNextBit = true; } } bufferSize -= count; return buffer >>> bufferSize & (1 << count) - 1; } function skipMarkerIfEqual(value) { if (data[offset + position - 1] === 0xff && data[offset + position] === value) { skipBytes(1); return true; } else if (data[offset + position] === 0xff && data[offset + position + 1] === value) { skipBytes(2); return true; } return false; } function skipBytes(count) { position += count; } function alignToByte() { bufferSize = 0; if (skipNextBit) { position++; skipNextBit = false; } } function readCodingpasses() { if (readBits(1) === 0) { return 1; } if (readBits(1) === 0) { return 2; } var value = readBits(2); if (value < 3) { return value + 3; } value = readBits(5); if (value < 31) { return value + 6; } value = readBits(7); return value + 37; } var tileIndex = context.currentTile.index; var tile = context.tiles[tileIndex]; var sopMarkerUsed = context.COD.sopMarkerUsed; var ephMarkerUsed = context.COD.ephMarkerUsed; var packetsIterator = tile.packetsIterator; while (position < dataLength) { alignToByte(); if (sopMarkerUsed && skipMarkerIfEqual(0x91)) { skipBytes(4); } var packet = packetsIterator.nextPacket(); if (!readBits(1)) { continue; } var layerNumber = packet.layerNumber; var queue = [], codeblock; for (var i = 0, ii = packet.codeblocks.length; i < ii; i++) { codeblock = packet.codeblocks[i]; var precinct = codeblock.precinct; var codeblockColumn = codeblock.cbx - precinct.cbxMin; var codeblockRow = codeblock.cby - precinct.cbyMin; var codeblockIncluded = false; var firstTimeInclusion = false; var valueReady; if (codeblock.included !== undefined) { codeblockIncluded = !!readBits(1); } else { precinct = codeblock.precinct; var inclusionTree, zeroBitPlanesTree; if (precinct.inclusionTree !== undefined) { inclusionTree = precinct.inclusionTree; } else { var width = precinct.cbxMax - precinct.cbxMin + 1; var height = precinct.cbyMax - precinct.cbyMin + 1; inclusionTree = new InclusionTree(width, height, layerNumber); zeroBitPlanesTree = new TagTree(width, height); precinct.inclusionTree = inclusionTree; precinct.zeroBitPlanesTree = zeroBitPlanesTree; } if (inclusionTree.reset(codeblockColumn, codeblockRow, layerNumber)) { while (true) { if (readBits(1)) { valueReady = !inclusionTree.nextLevel(); if (valueReady) { codeblock.included = true; codeblockIncluded = firstTimeInclusion = true; break; } } else { inclusionTree.incrementValue(layerNumber); break; } } } } if (!codeblockIncluded) { continue; } if (firstTimeInclusion) { zeroBitPlanesTree = precinct.zeroBitPlanesTree; zeroBitPlanesTree.reset(codeblockColumn, codeblockRow); while (true) { if (readBits(1)) { valueReady = !zeroBitPlanesTree.nextLevel(); if (valueReady) { break; } } else { zeroBitPlanesTree.incrementValue(); } } codeblock.zeroBitPlanes = zeroBitPlanesTree.value; } var codingpasses = readCodingpasses(); while (readBits(1)) { codeblock.Lblock++; } var codingpassesLog2 = (0, _core_utils.log2)(codingpasses); var bits = (codingpasses < 1 << codingpassesLog2 ? codingpassesLog2 - 1 : codingpassesLog2) + codeblock.Lblock; var codedDataLength = readBits(bits); queue.push({ codeblock: codeblock, codingpasses: codingpasses, dataLength: codedDataLength }); } alignToByte(); if (ephMarkerUsed) { skipMarkerIfEqual(0x92); } while (queue.length > 0) { var packetItem = queue.shift(); codeblock = packetItem.codeblock; if (codeblock.data === undefined) { codeblock.data = []; } codeblock.data.push({ data: data, start: offset + position, end: offset + position + packetItem.dataLength, codingpasses: packetItem.codingpasses }); position += packetItem.dataLength; } } return position; } function copyCoefficients(coefficients, levelWidth, levelHeight, subband, delta, mb, reversible, segmentationSymbolUsed) { var x0 = subband.tbx0; var y0 = subband.tby0; var width = subband.tbx1 - subband.tbx0; var codeblocks = subband.codeblocks; var right = subband.type.charAt(0) === "H" ? 1 : 0; var bottom = subband.type.charAt(1) === "H" ? levelWidth : 0; for (var i = 0, ii = codeblocks.length; i < ii; ++i) { var codeblock = codeblocks[i]; var blockWidth = codeblock.tbx1_ - codeblock.tbx0_; var blockHeight = codeblock.tby1_ - codeblock.tby0_; if (blockWidth === 0 || blockHeight === 0) { continue; } if (codeblock.data === undefined) { continue; } var bitModel, currentCodingpassType; bitModel = new BitModel(blockWidth, blockHeight, codeblock.subbandType, codeblock.zeroBitPlanes, mb); currentCodingpassType = 2; var data = codeblock.data, totalLength = 0, codingpasses = 0; var j, jj, dataItem; for (j = 0, jj = data.length; j < jj; j++) { dataItem = data[j]; totalLength += dataItem.end - dataItem.start; codingpasses += dataItem.codingpasses; } var encodedData = new Uint8Array(totalLength); var position = 0; for (j = 0, jj = data.length; j < jj; j++) { dataItem = data[j]; var chunk = dataItem.data.subarray(dataItem.start, dataItem.end); encodedData.set(chunk, position); position += chunk.length; } var decoder = new _arithmetic_decoder.ArithmeticDecoder(encodedData, 0, totalLength); bitModel.setDecoder(decoder); for (j = 0; j < codingpasses; j++) { switch (currentCodingpassType) { case 0: bitModel.runSignificancePropagationPass(); break; case 1: bitModel.runMagnitudeRefinementPass(); break; case 2: bitModel.runCleanupPass(); if (segmentationSymbolUsed) { bitModel.checkSegmentationSymbol(); } break; } currentCodingpassType = (currentCodingpassType + 1) % 3; } var offset = codeblock.tbx0_ - x0 + (codeblock.tby0_ - y0) * width; var sign = bitModel.coefficentsSign; var magnitude = bitModel.coefficentsMagnitude; var bitsDecoded = bitModel.bitsDecoded; var magnitudeCorrection = reversible ? 0 : 0.5; var k, n, nb; position = 0; var interleave = subband.type !== "LL"; for (j = 0; j < blockHeight; j++) { var row = offset / width | 0; var levelOffset = 2 * row * (levelWidth - width) + right + bottom; for (k = 0; k < blockWidth; k++) { n = magnitude[position]; if (n !== 0) { n = (n + magnitudeCorrection) * delta; if (sign[position] !== 0) { n = -n; } nb = bitsDecoded[position]; var pos = interleave ? levelOffset + (offset << 1) : offset; if (reversible && nb >= mb) { coefficients[pos] = n; } else { coefficients[pos] = n * (1 << mb - nb); } } offset++; position++; } offset += width - blockWidth; } } } function transformTile(context, tile, c) { var component = tile.components[c]; var codingStyleParameters = component.codingStyleParameters; var quantizationParameters = component.quantizationParameters; var decompositionLevelsCount = codingStyleParameters.decompositionLevelsCount; var spqcds = quantizationParameters.SPqcds; var scalarExpounded = quantizationParameters.scalarExpounded; var guardBits = quantizationParameters.guardBits; var segmentationSymbolUsed = codingStyleParameters.segmentationSymbolUsed; var precision = context.components[c].precision; var reversible = codingStyleParameters.reversibleTransformation; var transform = reversible ? new ReversibleTransform() : new IrreversibleTransform(); var subbandCoefficients = []; var b = 0; for (var i = 0; i <= decompositionLevelsCount; i++) { var resolution = component.resolutions[i]; var width = resolution.trx1 - resolution.trx0; var height = resolution.try1 - resolution.try0; var coefficients = new Float32Array(width * height); for (var j = 0, jj = resolution.subbands.length; j < jj; j++) { var mu, epsilon; if (!scalarExpounded) { mu = spqcds[0].mu; epsilon = spqcds[0].epsilon + (i > 0 ? 1 - i : 0); } else { mu = spqcds[b].mu; epsilon = spqcds[b].epsilon; b++; } var subband = resolution.subbands[j]; var gainLog2 = SubbandsGainLog2[subband.type]; var delta = reversible ? 1 : Math.pow(2, precision + gainLog2 - epsilon) * (1 + mu / 2048); var mb = guardBits + epsilon - 1; copyCoefficients(coefficients, width, height, subband, delta, mb, reversible, segmentationSymbolUsed); } subbandCoefficients.push({ width: width, height: height, items: coefficients }); } var result = transform.calculate(subbandCoefficients, component.tcx0, component.tcy0); return { left: component.tcx0, top: component.tcy0, width: result.width, height: result.height, items: result.items }; } function transformComponents(context) { var siz = context.SIZ; var components = context.components; var componentsCount = siz.Csiz; var resultImages = []; for (var i = 0, ii = context.tiles.length; i < ii; i++) { var tile = context.tiles[i]; var transformedTiles = []; var c; for (c = 0; c < componentsCount; c++) { transformedTiles[c] = transformTile(context, tile, c); } var tile0 = transformedTiles[0]; var out = new Uint8ClampedArray(tile0.items.length * componentsCount); var result = { left: tile0.left, top: tile0.top, width: tile0.width, height: tile0.height, items: out }; var shift, offset; var pos = 0, j, jj, y0, y1, y2; if (tile.codingStyleDefaultParameters.multipleComponentTransform) { var fourComponents = componentsCount === 4; var y0items = transformedTiles[0].items; var y1items = transformedTiles[1].items; var y2items = transformedTiles[2].items; var y3items = fourComponents ? transformedTiles[3].items : null; shift = components[0].precision - 8; offset = (128 << shift) + 0.5; var component0 = tile.components[0]; var alpha01 = componentsCount - 3; jj = y0items.length; if (!component0.codingStyleParameters.reversibleTransformation) { for (j = 0; j < jj; j++, pos += alpha01) { y0 = y0items[j] + offset; y1 = y1items[j]; y2 = y2items[j]; out[pos++] = y0 + 1.402 * y2 >> shift; out[pos++] = y0 - 0.34413 * y1 - 0.71414 * y2 >> shift; out[pos++] = y0 + 1.772 * y1 >> shift; } } else { for (j = 0; j < jj; j++, pos += alpha01) { y0 = y0items[j] + offset; y1 = y1items[j]; y2 = y2items[j]; var g = y0 - (y2 + y1 >> 2); out[pos++] = g + y2 >> shift; out[pos++] = g >> shift; out[pos++] = g + y1 >> shift; } } if (fourComponents) { for (j = 0, pos = 3; j < jj; j++, pos += 4) { out[pos] = y3items[j] + offset >> shift; } } } else { for (c = 0; c < componentsCount; c++) { var items = transformedTiles[c].items; shift = components[c].precision - 8; offset = (128 << shift) + 0.5; for (pos = c, j = 0, jj = items.length; j < jj; j++) { out[pos] = items[j] + offset >> shift; pos += componentsCount; } } } resultImages.push(result); } return resultImages; } function initializeTile(context, tileIndex) { var siz = context.SIZ; var componentsCount = siz.Csiz; var tile = context.tiles[tileIndex]; for (var c = 0; c < componentsCount; c++) { var component = tile.components[c]; var qcdOrQcc = context.currentTile.QCC[c] !== undefined ? context.currentTile.QCC[c] : context.currentTile.QCD; component.quantizationParameters = qcdOrQcc; var codOrCoc = context.currentTile.COC[c] !== undefined ? context.currentTile.COC[c] : context.currentTile.COD; component.codingStyleParameters = codOrCoc; } tile.codingStyleDefaultParameters = context.currentTile.COD; } var TagTree = function TagTreeClosure() { function TagTree(width, height) { var levelsLength = (0, _core_utils.log2)(Math.max(width, height)) + 1; this.levels = []; for (var i = 0; i < levelsLength; i++) { var level = { width: width, height: height, items: [] }; this.levels.push(level); width = Math.ceil(width / 2); height = Math.ceil(height / 2); } } TagTree.prototype = { reset: function TagTree_reset(i, j) { var currentLevel = 0, value = 0, level; while (currentLevel < this.levels.length) { level = this.levels[currentLevel]; var index = i + j * level.width; if (level.items[index] !== undefined) { value = level.items[index]; break; } level.index = index; i >>= 1; j >>= 1; currentLevel++; } currentLevel--; level = this.levels[currentLevel]; level.items[level.index] = value; this.currentLevel = currentLevel; delete this.value; }, incrementValue: function TagTree_incrementValue() { var level = this.levels[this.currentLevel]; level.items[level.index]++; }, nextLevel: function TagTree_nextLevel() { var currentLevel = this.currentLevel; var level = this.levels[currentLevel]; var value = level.items[level.index]; currentLevel--; if (currentLevel < 0) { this.value = value; return false; } this.currentLevel = currentLevel; level = this.levels[currentLevel]; level.items[level.index] = value; return true; } }; return TagTree; }(); var InclusionTree = function InclusionTreeClosure() { function InclusionTree(width, height, defaultValue) { var levelsLength = (0, _core_utils.log2)(Math.max(width, height)) + 1; this.levels = []; for (var i = 0; i < levelsLength; i++) { var items = new Uint8Array(width * height); for (var j = 0, jj = items.length; j < jj; j++) { items[j] = defaultValue; } var level = { width: width, height: height, items: items }; this.levels.push(level); width = Math.ceil(width / 2); height = Math.ceil(height / 2); } } InclusionTree.prototype = { reset: function InclusionTree_reset(i, j, stopValue) { var currentLevel = 0; while (currentLevel < this.levels.length) { var level = this.levels[currentLevel]; var index = i + j * level.width; level.index = index; var value = level.items[index]; if (value === 0xff) { break; } if (value > stopValue) { this.currentLevel = currentLevel; this.propagateValues(); return false; } i >>= 1; j >>= 1; currentLevel++; } this.currentLevel = currentLevel - 1; return true; }, incrementValue: function InclusionTree_incrementValue(stopValue) { var level = this.levels[this.currentLevel]; level.items[level.index] = stopValue + 1; this.propagateValues(); }, propagateValues: function InclusionTree_propagateValues() { var levelIndex = this.currentLevel; var level = this.levels[levelIndex]; var currentValue = level.items[level.index]; while (--levelIndex >= 0) { level = this.levels[levelIndex]; level.items[level.index] = currentValue; } }, nextLevel: function InclusionTree_nextLevel() { var currentLevel = this.currentLevel; var level = this.levels[currentLevel]; var value = level.items[level.index]; level.items[level.index] = 0xff; currentLevel--; if (currentLevel < 0) { return false; } this.currentLevel = currentLevel; level = this.levels[currentLevel]; level.items[level.index] = value; return true; } }; return InclusionTree; }(); var BitModel = function BitModelClosure() { var UNIFORM_CONTEXT = 17; var RUNLENGTH_CONTEXT = 18; var LLAndLHContextsLabel = new Uint8Array([0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8]); var HLContextLabel = new Uint8Array([0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8]); var HHContextLabel = new Uint8Array([0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5, 5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8]); function BitModel(width, height, subband, zeroBitPlanes, mb) { this.width = width; this.height = height; var contextLabelTable; if (subband === "HH") { contextLabelTable = HHContextLabel; } else if (subband === "HL") { contextLabelTable = HLContextLabel; } else { contextLabelTable = LLAndLHContextsLabel; } this.contextLabelTable = contextLabelTable; var coefficientCount = width * height; this.neighborsSignificance = new Uint8Array(coefficientCount); this.coefficentsSign = new Uint8Array(coefficientCount); var coefficentsMagnitude; if (mb > 14) { coefficentsMagnitude = new Uint32Array(coefficientCount); } else if (mb > 6) { coefficentsMagnitude = new Uint16Array(coefficientCount); } else { coefficentsMagnitude = new Uint8Array(coefficientCount); } this.coefficentsMagnitude = coefficentsMagnitude; this.processingFlags = new Uint8Array(coefficientCount); var bitsDecoded = new Uint8Array(coefficientCount); if (zeroBitPlanes !== 0) { for (var i = 0; i < coefficientCount; i++) { bitsDecoded[i] = zeroBitPlanes; } } this.bitsDecoded = bitsDecoded; this.reset(); } BitModel.prototype = { setDecoder: function BitModel_setDecoder(decoder) { this.decoder = decoder; }, reset: function BitModel_reset() { this.contexts = new Int8Array(19); this.contexts[0] = 4 << 1 | 0; this.contexts[UNIFORM_CONTEXT] = 46 << 1 | 0; this.contexts[RUNLENGTH_CONTEXT] = 3 << 1 | 0; }, setNeighborsSignificance: function BitModel_setNeighborsSignificance(row, column, index) { var neighborsSignificance = this.neighborsSignificance; var width = this.width, height = this.height; var left = column > 0; var right = column + 1 < width; var i; if (row > 0) { i = index - width; if (left) { neighborsSignificance[i - 1] += 0x10; } if (right) { neighborsSignificance[i + 1] += 0x10; } neighborsSignificance[i] += 0x04; } if (row + 1 < height) { i = index + width; if (left) { neighborsSignificance[i - 1] += 0x10; } if (right) { neighborsSignificance[i + 1] += 0x10; } neighborsSignificance[i] += 0x04; } if (left) { neighborsSignificance[index - 1] += 0x01; } if (right) { neighborsSignificance[index + 1] += 0x01; } neighborsSignificance[index] |= 0x80; }, runSignificancePropagationPass: function BitModel_runSignificancePropagationPass() { var decoder = this.decoder; var width = this.width, height = this.height; var coefficentsMagnitude = this.coefficentsMagnitude; var coefficentsSign = this.coefficentsSign; var neighborsSignificance = this.neighborsSignificance; var processingFlags = this.processingFlags; var contexts = this.contexts; var labels = this.contextLabelTable; var bitsDecoded = this.bitsDecoded; var processedInverseMask = ~1; var processedMask = 1; var firstMagnitudeBitMask = 2; for (var i0 = 0; i0 < height; i0 += 4) { for (var j = 0; j < width; j++) { var index = i0 * width + j; for (var i1 = 0; i1 < 4; i1++, index += width) { var i = i0 + i1; if (i >= height) { break; } processingFlags[index] &= processedInverseMask; if (coefficentsMagnitude[index] || !neighborsSignificance[index]) { continue; } var contextLabel = labels[neighborsSignificance[index]]; var decision = decoder.readBit(contexts, contextLabel); if (decision) { var sign = this.decodeSignBit(i, j, index); coefficentsSign[index] = sign; coefficentsMagnitude[index] = 1; this.setNeighborsSignificance(i, j, index); processingFlags[index] |= firstMagnitudeBitMask; } bitsDecoded[index]++; processingFlags[index] |= processedMask; } } } }, decodeSignBit: function BitModel_decodeSignBit(row, column, index) { var width = this.width, height = this.height; var coefficentsMagnitude = this.coefficentsMagnitude; var coefficentsSign = this.coefficentsSign; var contribution, sign0, sign1, significance1; var contextLabel, decoded; significance1 = column > 0 && coefficentsMagnitude[index - 1] !== 0; if (column + 1 < width && coefficentsMagnitude[index + 1] !== 0) { sign1 = coefficentsSign[index + 1]; if (significance1) { sign0 = coefficentsSign[index - 1]; contribution = 1 - sign1 - sign0; } else { contribution = 1 - sign1 - sign1; } } else if (significance1) { sign0 = coefficentsSign[index - 1]; contribution = 1 - sign0 - sign0; } else { contribution = 0; } var horizontalContribution = 3 * contribution; significance1 = row > 0 && coefficentsMagnitude[index - width] !== 0; if (row + 1 < height && coefficentsMagnitude[index + width] !== 0) { sign1 = coefficentsSign[index + width]; if (significance1) { sign0 = coefficentsSign[index - width]; contribution = 1 - sign1 - sign0 + horizontalContribution; } else { contribution = 1 - sign1 - sign1 + horizontalContribution; } } else if (significance1) { sign0 = coefficentsSign[index - width]; contribution = 1 - sign0 - sign0 + horizontalContribution; } else { contribution = horizontalContribution; } if (contribution >= 0) { contextLabel = 9 + contribution; decoded = this.decoder.readBit(this.contexts, contextLabel); } else { contextLabel = 9 - contribution; decoded = this.decoder.readBit(this.contexts, contextLabel) ^ 1; } return decoded; }, runMagnitudeRefinementPass: function BitModel_runMagnitudeRefinementPass() { var decoder = this.decoder; var width = this.width, height = this.height; var coefficentsMagnitude = this.coefficentsMagnitude; var neighborsSignificance = this.neighborsSignificance; var contexts = this.contexts; var bitsDecoded = this.bitsDecoded; var processingFlags = this.processingFlags; var processedMask = 1; var firstMagnitudeBitMask = 2; var length = width * height; var width4 = width * 4; for (var index0 = 0, indexNext; index0 < length; index0 = indexNext) { indexNext = Math.min(length, index0 + width4); for (var j = 0; j < width; j++) { for (var index = index0 + j; index < indexNext; index += width) { if (!coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) { continue; } var contextLabel = 16; if ((processingFlags[index] & firstMagnitudeBitMask) !== 0) { processingFlags[index] ^= firstMagnitudeBitMask; var significance = neighborsSignificance[index] & 127; contextLabel = significance === 0 ? 15 : 14; } var bit = decoder.readBit(contexts, contextLabel); coefficentsMagnitude[index] = coefficentsMagnitude[index] << 1 | bit; bitsDecoded[index]++; processingFlags[index] |= processedMask; } } } }, runCleanupPass: function BitModel_runCleanupPass() { var decoder = this.decoder; var width = this.width, height = this.height; var neighborsSignificance = this.neighborsSignificance; var coefficentsMagnitude = this.coefficentsMagnitude; var coefficentsSign = this.coefficentsSign; var contexts = this.contexts; var labels = this.contextLabelTable; var bitsDecoded = this.bitsDecoded; var processingFlags = this.processingFlags; var processedMask = 1; var firstMagnitudeBitMask = 2; var oneRowDown = width; var twoRowsDown = width * 2; var threeRowsDown = width * 3; var iNext; for (var i0 = 0; i0 < height; i0 = iNext) { iNext = Math.min(i0 + 4, height); var indexBase = i0 * width; var checkAllEmpty = i0 + 3 < height; for (var j = 0; j < width; j++) { var index0 = indexBase + j; var allEmpty = checkAllEmpty && processingFlags[index0] === 0 && processingFlags[index0 + oneRowDown] === 0 && processingFlags[index0 + twoRowsDown] === 0 && processingFlags[index0 + threeRowsDown] === 0 && neighborsSignificance[index0] === 0 && neighborsSignificance[index0 + oneRowDown] === 0 && neighborsSignificance[index0 + twoRowsDown] === 0 && neighborsSignificance[index0 + threeRowsDown] === 0; var i1 = 0, index = index0; var i = i0, sign; if (allEmpty) { var hasSignificantCoefficent = decoder.readBit(contexts, RUNLENGTH_CONTEXT); if (!hasSignificantCoefficent) { bitsDecoded[index0]++; bitsDecoded[index0 + oneRowDown]++; bitsDecoded[index0 + twoRowsDown]++; bitsDecoded[index0 + threeRowsDown]++; continue; } i1 = decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT); if (i1 !== 0) { i = i0 + i1; index += i1 * width; } sign = this.decodeSignBit(i, j, index); coefficentsSign[index] = sign; coefficentsMagnitude[index] = 1; this.setNeighborsSignificance(i, j, index); processingFlags[index] |= firstMagnitudeBitMask; index = index0; for (var i2 = i0; i2 <= i; i2++, index += width) { bitsDecoded[index]++; } i1++; } for (i = i0 + i1; i < iNext; i++, index += width) { if (coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) { continue; } var contextLabel = labels[neighborsSignificance[index]]; var decision = decoder.readBit(contexts, contextLabel); if (decision === 1) { sign = this.decodeSignBit(i, j, index); coefficentsSign[index] = sign; coefficentsMagnitude[index] = 1; this.setNeighborsSignificance(i, j, index); processingFlags[index] |= firstMagnitudeBitMask; } bitsDecoded[index]++; } } } }, checkSegmentationSymbol: function BitModel_checkSegmentationSymbol() { var decoder = this.decoder; var contexts = this.contexts; var symbol = decoder.readBit(contexts, UNIFORM_CONTEXT) << 3 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 2 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT); if (symbol !== 0xa) { throw new JpxError("Invalid segmentation symbol"); } } }; return BitModel; }(); var Transform = function TransformClosure() { function Transform() {} Transform.prototype.calculate = function transformCalculate(subbands, u0, v0) { var ll = subbands[0]; for (var i = 1, ii = subbands.length; i < ii; i++) { ll = this.iterate(ll, subbands[i], u0, v0); } return ll; }; Transform.prototype.extend = function extend(buffer, offset, size) { var i1 = offset - 1, j1 = offset + 1; var i2 = offset + size - 2, j2 = offset + size; buffer[i1--] = buffer[j1++]; buffer[j2++] = buffer[i2--]; buffer[i1--] = buffer[j1++]; buffer[j2++] = buffer[i2--]; buffer[i1--] = buffer[j1++]; buffer[j2++] = buffer[i2--]; buffer[i1] = buffer[j1]; buffer[j2] = buffer[i2]; }; Transform.prototype.iterate = function Transform_iterate(ll, hl_lh_hh, u0, v0) { var llWidth = ll.width, llHeight = ll.height, llItems = ll.items; var width = hl_lh_hh.width; var height = hl_lh_hh.height; var items = hl_lh_hh.items; var i, j, k, l, u, v; for (k = 0, i = 0; i < llHeight; i++) { l = i * 2 * width; for (j = 0; j < llWidth; j++, k++, l += 2) { items[l] = llItems[k]; } } llItems = ll.items = null; var bufferPadding = 4; var rowBuffer = new Float32Array(width + 2 * bufferPadding); if (width === 1) { if ((u0 & 1) !== 0) { for (v = 0, k = 0; v < height; v++, k += width) { items[k] *= 0.5; } } } else { for (v = 0, k = 0; v < height; v++, k += width) { rowBuffer.set(items.subarray(k, k + width), bufferPadding); this.extend(rowBuffer, bufferPadding, width); this.filter(rowBuffer, bufferPadding, width); items.set(rowBuffer.subarray(bufferPadding, bufferPadding + width), k); } } var numBuffers = 16; var colBuffers = []; for (i = 0; i < numBuffers; i++) { colBuffers.push(new Float32Array(height + 2 * bufferPadding)); } var b, currentBuffer = 0; ll = bufferPadding + height; if (height === 1) { if ((v0 & 1) !== 0) { for (u = 0; u < width; u++) { items[u] *= 0.5; } } } else { for (u = 0; u < width; u++) { if (currentBuffer === 0) { numBuffers = Math.min(width - u, numBuffers); for (k = u, l = bufferPadding; l < ll; k += width, l++) { for (b = 0; b < numBuffers; b++) { colBuffers[b][l] = items[k + b]; } } currentBuffer = numBuffers; } currentBuffer--; var buffer = colBuffers[currentBuffer]; this.extend(buffer, bufferPadding, height); this.filter(buffer, bufferPadding, height); if (currentBuffer === 0) { k = u - numBuffers + 1; for (l = bufferPadding; l < ll; k += width, l++) { for (b = 0; b < numBuffers; b++) { items[k + b] = colBuffers[b][l]; } } } } } return { width: width, height: height, items: items }; }; return Transform; }(); var IrreversibleTransform = function IrreversibleTransformClosure() { function IrreversibleTransform() { Transform.call(this); } IrreversibleTransform.prototype = Object.create(Transform.prototype); IrreversibleTransform.prototype.filter = function irreversibleTransformFilter(x, offset, length) { var len = length >> 1; offset = offset | 0; var j, n, current, next; var alpha = -1.586134342059924; var beta = -0.052980118572961; var gamma = 0.882911075530934; var delta = 0.443506852043971; var K = 1.230174104914001; var K_ = 1 / K; j = offset - 3; for (n = len + 4; n--; j += 2) { x[j] *= K_; } j = offset - 2; current = delta * x[j - 1]; for (n = len + 3; n--; j += 2) { next = delta * x[j + 1]; x[j] = K * x[j] - current - next; if (n--) { j += 2; current = delta * x[j + 1]; x[j] = K * x[j] - current - next; } else { break; } } j = offset - 1; current = gamma * x[j - 1]; for (n = len + 2; n--; j += 2) { next = gamma * x[j + 1]; x[j] -= current + next; if (n--) { j += 2; current = gamma * x[j + 1]; x[j] -= current + next; } else { break; } } j = offset; current = beta * x[j - 1]; for (n = len + 1; n--; j += 2) { next = beta * x[j + 1]; x[j] -= current + next; if (n--) { j += 2; current = beta * x[j + 1]; x[j] -= current + next; } else { break; } } if (len !== 0) { j = offset + 1; current = alpha * x[j - 1]; for (n = len; n--; j += 2) { next = alpha * x[j + 1]; x[j] -= current + next; if (n--) { j += 2; current = alpha * x[j + 1]; x[j] -= current + next; } else { break; } } } }; return IrreversibleTransform; }(); var ReversibleTransform = function ReversibleTransformClosure() { function ReversibleTransform() { Transform.call(this); } ReversibleTransform.prototype = Object.create(Transform.prototype); ReversibleTransform.prototype.filter = function reversibleTransformFilter(x, offset, length) { var len = length >> 1; offset = offset | 0; var j, n; for (j = offset, n = len + 1; n--; j += 2) { x[j] -= x[j - 1] + x[j + 1] + 2 >> 2; } for (j = offset + 1, n = len; n--; j += 2) { x[j] += x[j - 1] + x[j + 1] >> 1; } }; return ReversibleTransform; }(); return JpxImage; }(); exports.JpxImage = JpxImage; /***/ }), /* 152 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDF20 = exports.PDF17 = exports.CipherTransformFactory = exports.calculateSHA512 = exports.calculateSHA384 = exports.calculateSHA256 = exports.calculateMD5 = exports.ARCFourCipher = exports.AES256Cipher = exports.AES128Cipher = void 0; var _util = __w_pdfjs_require__(4); var _primitives = __w_pdfjs_require__(135); var _stream = __w_pdfjs_require__(142); function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var ARCFourCipher = function ARCFourCipherClosure() { function ARCFourCipher(key) { this.a = 0; this.b = 0; var s = new Uint8Array(256); var i, j = 0, tmp, keyLength = key.length; for (i = 0; i < 256; ++i) { s[i] = i; } for (i = 0; i < 256; ++i) { tmp = s[i]; j = j + tmp + key[i % keyLength] & 0xff; s[i] = s[j]; s[j] = tmp; } this.s = s; } ARCFourCipher.prototype = { encryptBlock: function ARCFourCipher_encryptBlock(data) { var i, n = data.length, tmp, tmp2; var a = this.a, b = this.b, s = this.s; var output = new Uint8Array(n); for (i = 0; i < n; ++i) { a = a + 1 & 0xff; tmp = s[a]; b = b + tmp & 0xff; tmp2 = s[b]; s[a] = tmp2; s[b] = tmp; output[i] = data[i] ^ s[tmp + tmp2 & 0xff]; } this.a = a; this.b = b; return output; } }; ARCFourCipher.prototype.decryptBlock = ARCFourCipher.prototype.encryptBlock; ARCFourCipher.prototype.encrypt = ARCFourCipher.prototype.encryptBlock; return ARCFourCipher; }(); exports.ARCFourCipher = ARCFourCipher; var calculateMD5 = function calculateMD5Closure() { var r = new Uint8Array([7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]); var k = new Int32Array([-680876936, -389564586, 606105819, -1044525330, -176418897, 1200080426, -1473231341, -45705983, 1770035416, -1958414417, -42063, -1990404162, 1804603682, -40341101, -1502002290, 1236535329, -165796510, -1069501632, 643717713, -373897302, -701558691, 38016083, -660478335, -405537848, 568446438, -1019803690, -187363961, 1163531501, -1444681467, -51403784, 1735328473, -1926607734, -378558, -2022574463, 1839030562, -35309556, -1530992060, 1272893353, -155497632, -1094730640, 681279174, -358537222, -722521979, 76029189, -640364487, -421815835, 530742520, -995338651, -198630844, 1126891415, -1416354905, -57434055, 1700485571, -1894986606, -1051523, -2054922799, 1873313359, -30611744, -1560198380, 1309151649, -145523070, -1120210379, 718787259, -343485551]); function hash(data, offset, length) { var h0 = 1732584193, h1 = -271733879, h2 = -1732584194, h3 = 271733878; var paddedLength = length + 72 & ~63; var padded = new Uint8Array(paddedLength); var i, j, n; for (i = 0; i < length; ++i) { padded[i] = data[offset++]; } padded[i++] = 0x80; n = paddedLength - 8; while (i < n) { padded[i++] = 0; } padded[i++] = length << 3 & 0xff; padded[i++] = length >> 5 & 0xff; padded[i++] = length >> 13 & 0xff; padded[i++] = length >> 21 & 0xff; padded[i++] = length >>> 29 & 0xff; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; var w = new Int32Array(16); for (i = 0; i < paddedLength;) { for (j = 0; j < 16; ++j, i += 4) { w[j] = padded[i] | padded[i + 1] << 8 | padded[i + 2] << 16 | padded[i + 3] << 24; } var a = h0, b = h1, c = h2, d = h3, f, g; for (j = 0; j < 64; ++j) { if (j < 16) { f = b & c | ~b & d; g = j; } else if (j < 32) { f = d & b | ~d & c; g = 5 * j + 1 & 15; } else if (j < 48) { f = b ^ c ^ d; g = 3 * j + 5 & 15; } else { f = c ^ (b | ~d); g = 7 * j & 15; } var tmp = d, rotateArg = a + f + k[j] + w[g] | 0, rotate = r[j]; d = c; c = b; b = b + (rotateArg << rotate | rotateArg >>> 32 - rotate) | 0; a = tmp; } h0 = h0 + a | 0; h1 = h1 + b | 0; h2 = h2 + c | 0; h3 = h3 + d | 0; } return new Uint8Array([h0 & 0xFF, h0 >> 8 & 0xFF, h0 >> 16 & 0xFF, h0 >>> 24 & 0xFF, h1 & 0xFF, h1 >> 8 & 0xFF, h1 >> 16 & 0xFF, h1 >>> 24 & 0xFF, h2 & 0xFF, h2 >> 8 & 0xFF, h2 >> 16 & 0xFF, h2 >>> 24 & 0xFF, h3 & 0xFF, h3 >> 8 & 0xFF, h3 >> 16 & 0xFF, h3 >>> 24 & 0xFF]); } return hash; }(); exports.calculateMD5 = calculateMD5; var Word64 = function Word64Closure() { function Word64(highInteger, lowInteger) { this.high = highInteger | 0; this.low = lowInteger | 0; } Word64.prototype = { and: function Word64_and(word) { this.high &= word.high; this.low &= word.low; }, xor: function Word64_xor(word) { this.high ^= word.high; this.low ^= word.low; }, or: function Word64_or(word) { this.high |= word.high; this.low |= word.low; }, shiftRight: function Word64_shiftRight(places) { if (places >= 32) { this.low = this.high >>> places - 32 | 0; this.high = 0; } else { this.low = this.low >>> places | this.high << 32 - places; this.high = this.high >>> places | 0; } }, shiftLeft: function Word64_shiftLeft(places) { if (places >= 32) { this.high = this.low << places - 32; this.low = 0; } else { this.high = this.high << places | this.low >>> 32 - places; this.low = this.low << places; } }, rotateRight: function Word64_rotateRight(places) { var low, high; if (places & 32) { high = this.low; low = this.high; } else { low = this.low; high = this.high; } places &= 31; this.low = low >>> places | high << 32 - places; this.high = high >>> places | low << 32 - places; }, not: function Word64_not() { this.high = ~this.high; this.low = ~this.low; }, add: function Word64_add(word) { var lowAdd = (this.low >>> 0) + (word.low >>> 0); var highAdd = (this.high >>> 0) + (word.high >>> 0); if (lowAdd > 0xffffffff) { highAdd += 1; } this.low = lowAdd | 0; this.high = highAdd | 0; }, copyTo: function Word64_copyTo(bytes, offset) { bytes[offset] = this.high >>> 24 & 0xff; bytes[offset + 1] = this.high >> 16 & 0xff; bytes[offset + 2] = this.high >> 8 & 0xff; bytes[offset + 3] = this.high & 0xff; bytes[offset + 4] = this.low >>> 24 & 0xff; bytes[offset + 5] = this.low >> 16 & 0xff; bytes[offset + 6] = this.low >> 8 & 0xff; bytes[offset + 7] = this.low & 0xff; }, assign: function Word64_assign(word) { this.high = word.high; this.low = word.low; } }; return Word64; }(); var calculateSHA256 = function calculateSHA256Closure() { function rotr(x, n) { return x >>> n | x << 32 - n; } function ch(x, y, z) { return x & y ^ ~x & z; } function maj(x, y, z) { return x & y ^ x & z ^ y & z; } function sigma(x) { return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22); } function sigmaPrime(x) { return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25); } function littleSigma(x) { return rotr(x, 7) ^ rotr(x, 18) ^ x >>> 3; } function littleSigmaPrime(x) { return rotr(x, 17) ^ rotr(x, 19) ^ x >>> 10; } var k = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2]; function hash(data, offset, length) { var h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372, h3 = 0xa54ff53a, h4 = 0x510e527f, h5 = 0x9b05688c, h6 = 0x1f83d9ab, h7 = 0x5be0cd19; var paddedLength = Math.ceil((length + 9) / 64) * 64; var padded = new Uint8Array(paddedLength); var i, j, n; for (i = 0; i < length; ++i) { padded[i] = data[offset++]; } padded[i++] = 0x80; n = paddedLength - 8; while (i < n) { padded[i++] = 0; } padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = length >>> 29 & 0xff; padded[i++] = length >> 21 & 0xff; padded[i++] = length >> 13 & 0xff; padded[i++] = length >> 5 & 0xff; padded[i++] = length << 3 & 0xff; var w = new Uint32Array(64); for (i = 0; i < paddedLength;) { for (j = 0; j < 16; ++j) { w[j] = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3]; i += 4; } for (j = 16; j < 64; ++j) { w[j] = littleSigmaPrime(w[j - 2]) + w[j - 7] + littleSigma(w[j - 15]) + w[j - 16] | 0; } var a = h0, b = h1, c = h2, d = h3, e = h4, f = h5, g = h6, h = h7, t1, t2; for (j = 0; j < 64; ++j) { t1 = h + sigmaPrime(e) + ch(e, f, g) + k[j] + w[j]; t2 = sigma(a) + maj(a, b, c); h = g; g = f; f = e; e = d + t1 | 0; d = c; c = b; b = a; a = t1 + t2 | 0; } h0 = h0 + a | 0; h1 = h1 + b | 0; h2 = h2 + c | 0; h3 = h3 + d | 0; h4 = h4 + e | 0; h5 = h5 + f | 0; h6 = h6 + g | 0; h7 = h7 + h | 0; } return new Uint8Array([h0 >> 24 & 0xFF, h0 >> 16 & 0xFF, h0 >> 8 & 0xFF, h0 & 0xFF, h1 >> 24 & 0xFF, h1 >> 16 & 0xFF, h1 >> 8 & 0xFF, h1 & 0xFF, h2 >> 24 & 0xFF, h2 >> 16 & 0xFF, h2 >> 8 & 0xFF, h2 & 0xFF, h3 >> 24 & 0xFF, h3 >> 16 & 0xFF, h3 >> 8 & 0xFF, h3 & 0xFF, h4 >> 24 & 0xFF, h4 >> 16 & 0xFF, h4 >> 8 & 0xFF, h4 & 0xFF, h5 >> 24 & 0xFF, h5 >> 16 & 0xFF, h5 >> 8 & 0xFF, h5 & 0xFF, h6 >> 24 & 0xFF, h6 >> 16 & 0xFF, h6 >> 8 & 0xFF, h6 & 0xFF, h7 >> 24 & 0xFF, h7 >> 16 & 0xFF, h7 >> 8 & 0xFF, h7 & 0xFF]); } return hash; }(); exports.calculateSHA256 = calculateSHA256; var calculateSHA512 = function calculateSHA512Closure() { function ch(result, x, y, z, tmp) { result.assign(x); result.and(y); tmp.assign(x); tmp.not(); tmp.and(z); result.xor(tmp); } function maj(result, x, y, z, tmp) { result.assign(x); result.and(y); tmp.assign(x); tmp.and(z); result.xor(tmp); tmp.assign(y); tmp.and(z); result.xor(tmp); } function sigma(result, x, tmp) { result.assign(x); result.rotateRight(28); tmp.assign(x); tmp.rotateRight(34); result.xor(tmp); tmp.assign(x); tmp.rotateRight(39); result.xor(tmp); } function sigmaPrime(result, x, tmp) { result.assign(x); result.rotateRight(14); tmp.assign(x); tmp.rotateRight(18); result.xor(tmp); tmp.assign(x); tmp.rotateRight(41); result.xor(tmp); } function littleSigma(result, x, tmp) { result.assign(x); result.rotateRight(1); tmp.assign(x); tmp.rotateRight(8); result.xor(tmp); tmp.assign(x); tmp.shiftRight(7); result.xor(tmp); } function littleSigmaPrime(result, x, tmp) { result.assign(x); result.rotateRight(19); tmp.assign(x); tmp.rotateRight(61); result.xor(tmp); tmp.assign(x); tmp.shiftRight(6); result.xor(tmp); } var k = [new Word64(0x428a2f98, 0xd728ae22), new Word64(0x71374491, 0x23ef65cd), new Word64(0xb5c0fbcf, 0xec4d3b2f), new Word64(0xe9b5dba5, 0x8189dbbc), new Word64(0x3956c25b, 0xf348b538), new Word64(0x59f111f1, 0xb605d019), new Word64(0x923f82a4, 0xaf194f9b), new Word64(0xab1c5ed5, 0xda6d8118), new Word64(0xd807aa98, 0xa3030242), new Word64(0x12835b01, 0x45706fbe), new Word64(0x243185be, 0x4ee4b28c), new Word64(0x550c7dc3, 0xd5ffb4e2), new Word64(0x72be5d74, 0xf27b896f), new Word64(0x80deb1fe, 0x3b1696b1), new Word64(0x9bdc06a7, 0x25c71235), new Word64(0xc19bf174, 0xcf692694), new Word64(0xe49b69c1, 0x9ef14ad2), new Word64(0xefbe4786, 0x384f25e3), new Word64(0x0fc19dc6, 0x8b8cd5b5), new Word64(0x240ca1cc, 0x77ac9c65), new Word64(0x2de92c6f, 0x592b0275), new Word64(0x4a7484aa, 0x6ea6e483), new Word64(0x5cb0a9dc, 0xbd41fbd4), new Word64(0x76f988da, 0x831153b5), new Word64(0x983e5152, 0xee66dfab), new Word64(0xa831c66d, 0x2db43210), new Word64(0xb00327c8, 0x98fb213f), new Word64(0xbf597fc7, 0xbeef0ee4), new Word64(0xc6e00bf3, 0x3da88fc2), new Word64(0xd5a79147, 0x930aa725), new Word64(0x06ca6351, 0xe003826f), new Word64(0x14292967, 0x0a0e6e70), new Word64(0x27b70a85, 0x46d22ffc), new Word64(0x2e1b2138, 0x5c26c926), new Word64(0x4d2c6dfc, 0x5ac42aed), new Word64(0x53380d13, 0x9d95b3df), new Word64(0x650a7354, 0x8baf63de), new Word64(0x766a0abb, 0x3c77b2a8), new Word64(0x81c2c92e, 0x47edaee6), new Word64(0x92722c85, 0x1482353b), new Word64(0xa2bfe8a1, 0x4cf10364), new Word64(0xa81a664b, 0xbc423001), new Word64(0xc24b8b70, 0xd0f89791), new Word64(0xc76c51a3, 0x0654be30), new Word64(0xd192e819, 0xd6ef5218), new Word64(0xd6990624, 0x5565a910), new Word64(0xf40e3585, 0x5771202a), new Word64(0x106aa070, 0x32bbd1b8), new Word64(0x19a4c116, 0xb8d2d0c8), new Word64(0x1e376c08, 0x5141ab53), new Word64(0x2748774c, 0xdf8eeb99), new Word64(0x34b0bcb5, 0xe19b48a8), new Word64(0x391c0cb3, 0xc5c95a63), new Word64(0x4ed8aa4a, 0xe3418acb), new Word64(0x5b9cca4f, 0x7763e373), new Word64(0x682e6ff3, 0xd6b2b8a3), new Word64(0x748f82ee, 0x5defb2fc), new Word64(0x78a5636f, 0x43172f60), new Word64(0x84c87814, 0xa1f0ab72), new Word64(0x8cc70208, 0x1a6439ec), new Word64(0x90befffa, 0x23631e28), new Word64(0xa4506ceb, 0xde82bde9), new Word64(0xbef9a3f7, 0xb2c67915), new Word64(0xc67178f2, 0xe372532b), new Word64(0xca273ece, 0xea26619c), new Word64(0xd186b8c7, 0x21c0c207), new Word64(0xeada7dd6, 0xcde0eb1e), new Word64(0xf57d4f7f, 0xee6ed178), new Word64(0x06f067aa, 0x72176fba), new Word64(0x0a637dc5, 0xa2c898a6), new Word64(0x113f9804, 0xbef90dae), new Word64(0x1b710b35, 0x131c471b), new Word64(0x28db77f5, 0x23047d84), new Word64(0x32caab7b, 0x40c72493), new Word64(0x3c9ebe0a, 0x15c9bebc), new Word64(0x431d67c4, 0x9c100d4c), new Word64(0x4cc5d4be, 0xcb3e42b6), new Word64(0x597f299c, 0xfc657e2a), new Word64(0x5fcb6fab, 0x3ad6faec), new Word64(0x6c44198c, 0x4a475817)]; function hash(data, offset, length, mode384) { mode384 = !!mode384; var h0, h1, h2, h3, h4, h5, h6, h7; if (!mode384) { h0 = new Word64(0x6a09e667, 0xf3bcc908); h1 = new Word64(0xbb67ae85, 0x84caa73b); h2 = new Word64(0x3c6ef372, 0xfe94f82b); h3 = new Word64(0xa54ff53a, 0x5f1d36f1); h4 = new Word64(0x510e527f, 0xade682d1); h5 = new Word64(0x9b05688c, 0x2b3e6c1f); h6 = new Word64(0x1f83d9ab, 0xfb41bd6b); h7 = new Word64(0x5be0cd19, 0x137e2179); } else { h0 = new Word64(0xcbbb9d5d, 0xc1059ed8); h1 = new Word64(0x629a292a, 0x367cd507); h2 = new Word64(0x9159015a, 0x3070dd17); h3 = new Word64(0x152fecd8, 0xf70e5939); h4 = new Word64(0x67332667, 0xffc00b31); h5 = new Word64(0x8eb44a87, 0x68581511); h6 = new Word64(0xdb0c2e0d, 0x64f98fa7); h7 = new Word64(0x47b5481d, 0xbefa4fa4); } var paddedLength = Math.ceil((length + 17) / 128) * 128; var padded = new Uint8Array(paddedLength); var i, j, n; for (i = 0; i < length; ++i) { padded[i] = data[offset++]; } padded[i++] = 0x80; n = paddedLength - 16; while (i < n) { padded[i++] = 0; } padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = length >>> 29 & 0xff; padded[i++] = length >> 21 & 0xff; padded[i++] = length >> 13 & 0xff; padded[i++] = length >> 5 & 0xff; padded[i++] = length << 3 & 0xff; var w = new Array(80); for (i = 0; i < 80; i++) { w[i] = new Word64(0, 0); } var a = new Word64(0, 0), b = new Word64(0, 0), c = new Word64(0, 0); var d = new Word64(0, 0), e = new Word64(0, 0), f = new Word64(0, 0); var g = new Word64(0, 0), h = new Word64(0, 0); var t1 = new Word64(0, 0), t2 = new Word64(0, 0); var tmp1 = new Word64(0, 0), tmp2 = new Word64(0, 0), tmp3; for (i = 0; i < paddedLength;) { for (j = 0; j < 16; ++j) { w[j].high = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3]; w[j].low = padded[i + 4] << 24 | padded[i + 5] << 16 | padded[i + 6] << 8 | padded[i + 7]; i += 8; } for (j = 16; j < 80; ++j) { tmp3 = w[j]; littleSigmaPrime(tmp3, w[j - 2], tmp2); tmp3.add(w[j - 7]); littleSigma(tmp1, w[j - 15], tmp2); tmp3.add(tmp1); tmp3.add(w[j - 16]); } a.assign(h0); b.assign(h1); c.assign(h2); d.assign(h3); e.assign(h4); f.assign(h5); g.assign(h6); h.assign(h7); for (j = 0; j < 80; ++j) { t1.assign(h); sigmaPrime(tmp1, e, tmp2); t1.add(tmp1); ch(tmp1, e, f, g, tmp2); t1.add(tmp1); t1.add(k[j]); t1.add(w[j]); sigma(t2, a, tmp2); maj(tmp1, a, b, c, tmp2); t2.add(tmp1); tmp3 = h; h = g; g = f; f = e; d.add(t1); e = d; d = c; c = b; b = a; tmp3.assign(t1); tmp3.add(t2); a = tmp3; } h0.add(a); h1.add(b); h2.add(c); h3.add(d); h4.add(e); h5.add(f); h6.add(g); h7.add(h); } var result; if (!mode384) { result = new Uint8Array(64); h0.copyTo(result, 0); h1.copyTo(result, 8); h2.copyTo(result, 16); h3.copyTo(result, 24); h4.copyTo(result, 32); h5.copyTo(result, 40); h6.copyTo(result, 48); h7.copyTo(result, 56); } else { result = new Uint8Array(48); h0.copyTo(result, 0); h1.copyTo(result, 8); h2.copyTo(result, 16); h3.copyTo(result, 24); h4.copyTo(result, 32); h5.copyTo(result, 40); } return result; } return hash; }(); exports.calculateSHA512 = calculateSHA512; var calculateSHA384 = function calculateSHA384Closure() { function hash(data, offset, length) { return calculateSHA512(data, offset, length, true); } return hash; }(); exports.calculateSHA384 = calculateSHA384; var NullCipher = function NullCipherClosure() { function NullCipher() {} NullCipher.prototype = { decryptBlock: function NullCipher_decryptBlock(data) { return data; }, encrypt: function NullCipher_encrypt(data) { return data; } }; return NullCipher; }(); var AESBaseCipher = /*#__PURE__*/function () { function AESBaseCipher() { _classCallCheck(this, AESBaseCipher); if (this.constructor === AESBaseCipher) { (0, _util.unreachable)("Cannot initialize AESBaseCipher."); } this._s = new Uint8Array([0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16]); this._inv_s = new Uint8Array([0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d]); this._mix = new Uint32Array([0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]); this._mixCol = new Uint8Array(256); for (var i = 0; i < 256; i++) { if (i < 128) { this._mixCol[i] = i << 1; } else { this._mixCol[i] = i << 1 ^ 0x1b; } } this.buffer = new Uint8Array(16); this.bufferPosition = 0; } _createClass(AESBaseCipher, [{ key: "_expandKey", value: function _expandKey(cipherKey) { (0, _util.unreachable)("Cannot call `_expandKey` on the base class"); } }, { key: "_decrypt", value: function _decrypt(input, key) { var t, u, v; var state = new Uint8Array(16); state.set(input); for (var j = 0, k = this._keySize; j < 16; ++j, ++k) { state[j] ^= key[k]; } for (var i = this._cyclesOfRepetition - 1; i >= 1; --i) { t = state[13]; state[13] = state[9]; state[9] = state[5]; state[5] = state[1]; state[1] = t; t = state[14]; u = state[10]; state[14] = state[6]; state[10] = state[2]; state[6] = t; state[2] = u; t = state[15]; u = state[11]; v = state[7]; state[15] = state[3]; state[11] = t; state[7] = u; state[3] = v; for (var _j = 0; _j < 16; ++_j) { state[_j] = this._inv_s[state[_j]]; } for (var _j2 = 0, _k = i * 16; _j2 < 16; ++_j2, ++_k) { state[_j2] ^= key[_k]; } for (var _j3 = 0; _j3 < 16; _j3 += 4) { var s0 = this._mix[state[_j3]]; var s1 = this._mix[state[_j3 + 1]]; var s2 = this._mix[state[_j3 + 2]]; var s3 = this._mix[state[_j3 + 3]]; t = s0 ^ s1 >>> 8 ^ s1 << 24 ^ s2 >>> 16 ^ s2 << 16 ^ s3 >>> 24 ^ s3 << 8; state[_j3] = t >>> 24 & 0xff; state[_j3 + 1] = t >> 16 & 0xff; state[_j3 + 2] = t >> 8 & 0xff; state[_j3 + 3] = t & 0xff; } } t = state[13]; state[13] = state[9]; state[9] = state[5]; state[5] = state[1]; state[1] = t; t = state[14]; u = state[10]; state[14] = state[6]; state[10] = state[2]; state[6] = t; state[2] = u; t = state[15]; u = state[11]; v = state[7]; state[15] = state[3]; state[11] = t; state[7] = u; state[3] = v; for (var _j4 = 0; _j4 < 16; ++_j4) { state[_j4] = this._inv_s[state[_j4]]; state[_j4] ^= key[_j4]; } return state; } }, { key: "_encrypt", value: function _encrypt(input, key) { var s = this._s; var t, u, v; var state = new Uint8Array(16); state.set(input); for (var j = 0; j < 16; ++j) { state[j] ^= key[j]; } for (var i = 1; i < this._cyclesOfRepetition; i++) { for (var _j5 = 0; _j5 < 16; ++_j5) { state[_j5] = s[state[_j5]]; } v = state[1]; state[1] = state[5]; state[5] = state[9]; state[9] = state[13]; state[13] = v; v = state[2]; u = state[6]; state[2] = state[10]; state[6] = state[14]; state[10] = v; state[14] = u; v = state[3]; u = state[7]; t = state[11]; state[3] = state[15]; state[7] = v; state[11] = u; state[15] = t; for (var _j6 = 0; _j6 < 16; _j6 += 4) { var s0 = state[_j6 + 0]; var s1 = state[_j6 + 1]; var s2 = state[_j6 + 2]; var s3 = state[_j6 + 3]; t = s0 ^ s1 ^ s2 ^ s3; state[_j6 + 0] ^= t ^ this._mixCol[s0 ^ s1]; state[_j6 + 1] ^= t ^ this._mixCol[s1 ^ s2]; state[_j6 + 2] ^= t ^ this._mixCol[s2 ^ s3]; state[_j6 + 3] ^= t ^ this._mixCol[s3 ^ s0]; } for (var _j7 = 0, k = i * 16; _j7 < 16; ++_j7, ++k) { state[_j7] ^= key[k]; } } for (var _j8 = 0; _j8 < 16; ++_j8) { state[_j8] = s[state[_j8]]; } v = state[1]; state[1] = state[5]; state[5] = state[9]; state[9] = state[13]; state[13] = v; v = state[2]; u = state[6]; state[2] = state[10]; state[6] = state[14]; state[10] = v; state[14] = u; v = state[3]; u = state[7]; t = state[11]; state[3] = state[15]; state[7] = v; state[11] = u; state[15] = t; for (var _j9 = 0, _k2 = this._keySize; _j9 < 16; ++_j9, ++_k2) { state[_j9] ^= key[_k2]; } return state; } }, { key: "_decryptBlock2", value: function _decryptBlock2(data, finalize) { var sourceLength = data.length; var buffer = this.buffer, bufferLength = this.bufferPosition; var result = []; var iv = this.iv; for (var i = 0; i < sourceLength; ++i) { buffer[bufferLength] = data[i]; ++bufferLength; if (bufferLength < 16) { continue; } var plain = this._decrypt(buffer, this._key); for (var j = 0; j < 16; ++j) { plain[j] ^= iv[j]; } iv = buffer; result.push(plain); buffer = new Uint8Array(16); bufferLength = 0; } this.buffer = buffer; this.bufferLength = bufferLength; this.iv = iv; if (result.length === 0) { return new Uint8Array(0); } var outputLength = 16 * result.length; if (finalize) { var lastBlock = result[result.length - 1]; var psLen = lastBlock[15]; if (psLen <= 16) { for (var _i = 15, ii = 16 - psLen; _i >= ii; --_i) { if (lastBlock[_i] !== psLen) { psLen = 0; break; } } outputLength -= psLen; result[result.length - 1] = lastBlock.subarray(0, 16 - psLen); } } var output = new Uint8Array(outputLength); for (var _i2 = 0, _j10 = 0, _ii = result.length; _i2 < _ii; ++_i2, _j10 += 16) { output.set(result[_i2], _j10); } return output; } }, { key: "decryptBlock", value: function decryptBlock(data, finalize) { var iv = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var sourceLength = data.length; var buffer = this.buffer; var bufferLength = this.bufferPosition; if (iv) { this.iv = iv; } else { for (var i = 0; bufferLength < 16 && i < sourceLength; ++i, ++bufferLength) { buffer[bufferLength] = data[i]; } if (bufferLength < 16) { this.bufferLength = bufferLength; return new Uint8Array(0); } this.iv = buffer; data = data.subarray(16); } this.buffer = new Uint8Array(16); this.bufferLength = 0; this.decryptBlock = this._decryptBlock2; return this.decryptBlock(data, finalize); } }, { key: "encrypt", value: function encrypt(data, iv) { var sourceLength = data.length; var buffer = this.buffer, bufferLength = this.bufferPosition; var result = []; if (!iv) { iv = new Uint8Array(16); } for (var i = 0; i < sourceLength; ++i) { buffer[bufferLength] = data[i]; ++bufferLength; if (bufferLength < 16) { continue; } for (var j = 0; j < 16; ++j) { buffer[j] ^= iv[j]; } var cipher = this._encrypt(buffer, this._key); iv = cipher; result.push(cipher); buffer = new Uint8Array(16); bufferLength = 0; } this.buffer = buffer; this.bufferLength = bufferLength; this.iv = iv; if (result.length === 0) { return new Uint8Array(0); } var outputLength = 16 * result.length; var output = new Uint8Array(outputLength); for (var _i3 = 0, _j11 = 0, ii = result.length; _i3 < ii; ++_i3, _j11 += 16) { output.set(result[_i3], _j11); } return output; } }]); return AESBaseCipher; }(); var AES128Cipher = /*#__PURE__*/function (_AESBaseCipher) { _inherits(AES128Cipher, _AESBaseCipher); var _super = _createSuper(AES128Cipher); function AES128Cipher(key) { var _this; _classCallCheck(this, AES128Cipher); _this = _super.call(this); _this._cyclesOfRepetition = 10; _this._keySize = 160; _this._rcon = new Uint8Array([0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d]); _this._key = _this._expandKey(key); return _this; } _createClass(AES128Cipher, [{ key: "_expandKey", value: function _expandKey(cipherKey) { var b = 176; var s = this._s; var rcon = this._rcon; var result = new Uint8Array(b); result.set(cipherKey); for (var j = 16, i = 1; j < b; ++i) { var t1 = result[j - 3]; var t2 = result[j - 2]; var t3 = result[j - 1]; var t4 = result[j - 4]; t1 = s[t1]; t2 = s[t2]; t3 = s[t3]; t4 = s[t4]; t1 = t1 ^ rcon[i]; for (var n = 0; n < 4; ++n) { result[j] = t1 ^= result[j - 16]; j++; result[j] = t2 ^= result[j - 16]; j++; result[j] = t3 ^= result[j - 16]; j++; result[j] = t4 ^= result[j - 16]; j++; } } return result; } }]); return AES128Cipher; }(AESBaseCipher); exports.AES128Cipher = AES128Cipher; var AES256Cipher = /*#__PURE__*/function (_AESBaseCipher2) { _inherits(AES256Cipher, _AESBaseCipher2); var _super2 = _createSuper(AES256Cipher); function AES256Cipher(key) { var _this2; _classCallCheck(this, AES256Cipher); _this2 = _super2.call(this); _this2._cyclesOfRepetition = 14; _this2._keySize = 224; _this2._key = _this2._expandKey(key); return _this2; } _createClass(AES256Cipher, [{ key: "_expandKey", value: function _expandKey(cipherKey) { var b = 240; var s = this._s; var result = new Uint8Array(b); result.set(cipherKey); var r = 1; var t1, t2, t3, t4; for (var j = 32, i = 1; j < b; ++i) { if (j % 32 === 16) { t1 = s[t1]; t2 = s[t2]; t3 = s[t3]; t4 = s[t4]; } else if (j % 32 === 0) { t1 = result[j - 3]; t2 = result[j - 2]; t3 = result[j - 1]; t4 = result[j - 4]; t1 = s[t1]; t2 = s[t2]; t3 = s[t3]; t4 = s[t4]; t1 = t1 ^ r; if ((r <<= 1) >= 256) { r = (r ^ 0x1b) & 0xff; } } for (var n = 0; n < 4; ++n) { result[j] = t1 ^= result[j - 32]; j++; result[j] = t2 ^= result[j - 32]; j++; result[j] = t3 ^= result[j - 32]; j++; result[j] = t4 ^= result[j - 32]; j++; } } return result; } }]); return AES256Cipher; }(AESBaseCipher); exports.AES256Cipher = AES256Cipher; var PDF17 = function PDF17Closure() { function compareByteArrays(array1, array2) { if (array1.length !== array2.length) { return false; } for (var i = 0; i < array1.length; i++) { if (array1[i] !== array2[i]) { return false; } } return true; } function PDF17() {} PDF17.prototype = { checkOwnerPassword: function PDF17_checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) { var hashData = new Uint8Array(password.length + 56); hashData.set(password, 0); hashData.set(ownerValidationSalt, password.length); hashData.set(userBytes, password.length + ownerValidationSalt.length); var result = calculateSHA256(hashData, 0, hashData.length); return compareByteArrays(result, ownerPassword); }, checkUserPassword: function PDF17_checkUserPassword(password, userValidationSalt, userPassword) { var hashData = new Uint8Array(password.length + 8); hashData.set(password, 0); hashData.set(userValidationSalt, password.length); var result = calculateSHA256(hashData, 0, hashData.length); return compareByteArrays(result, userPassword); }, getOwnerKey: function PDF17_getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) { var hashData = new Uint8Array(password.length + 56); hashData.set(password, 0); hashData.set(ownerKeySalt, password.length); hashData.set(userBytes, password.length + ownerKeySalt.length); var key = calculateSHA256(hashData, 0, hashData.length); var cipher = new AES256Cipher(key); return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16)); }, getUserKey: function PDF17_getUserKey(password, userKeySalt, userEncryption) { var hashData = new Uint8Array(password.length + 8); hashData.set(password, 0); hashData.set(userKeySalt, password.length); var key = calculateSHA256(hashData, 0, hashData.length); var cipher = new AES256Cipher(key); return cipher.decryptBlock(userEncryption, false, new Uint8Array(16)); } }; return PDF17; }(); exports.PDF17 = PDF17; var PDF20 = function PDF20Closure() { function concatArrays(array1, array2) { var t = new Uint8Array(array1.length + array2.length); t.set(array1, 0); t.set(array2, array1.length); return t; } function calculatePDF20Hash(password, input, userBytes) { var k = calculateSHA256(input, 0, input.length).subarray(0, 32); var e = [0]; var i = 0; while (i < 64 || e[e.length - 1] > i - 32) { var arrayLength = password.length + k.length + userBytes.length; var k1 = new Uint8Array(arrayLength * 64); var array = concatArrays(password, k); array = concatArrays(array, userBytes); for (var j = 0, pos = 0; j < 64; j++, pos += arrayLength) { k1.set(array, pos); } var cipher = new AES128Cipher(k.subarray(0, 16)); e = cipher.encrypt(k1, k.subarray(16, 32)); var remainder = 0; for (var z = 0; z < 16; z++) { remainder *= 256 % 3; remainder %= 3; remainder += (e[z] >>> 0) % 3; remainder %= 3; } if (remainder === 0) { k = calculateSHA256(e, 0, e.length); } else if (remainder === 1) { k = calculateSHA384(e, 0, e.length); } else if (remainder === 2) { k = calculateSHA512(e, 0, e.length); } i++; } return k.subarray(0, 32); } function PDF20() {} function compareByteArrays(array1, array2) { if (array1.length !== array2.length) { return false; } for (var i = 0; i < array1.length; i++) { if (array1[i] !== array2[i]) { return false; } } return true; } PDF20.prototype = { hash: function PDF20_hash(password, concatBytes, userBytes) { return calculatePDF20Hash(password, concatBytes, userBytes); }, checkOwnerPassword: function PDF20_checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) { var hashData = new Uint8Array(password.length + 56); hashData.set(password, 0); hashData.set(ownerValidationSalt, password.length); hashData.set(userBytes, password.length + ownerValidationSalt.length); var result = calculatePDF20Hash(password, hashData, userBytes); return compareByteArrays(result, ownerPassword); }, checkUserPassword: function PDF20_checkUserPassword(password, userValidationSalt, userPassword) { var hashData = new Uint8Array(password.length + 8); hashData.set(password, 0); hashData.set(userValidationSalt, password.length); var result = calculatePDF20Hash(password, hashData, []); return compareByteArrays(result, userPassword); }, getOwnerKey: function PDF20_getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) { var hashData = new Uint8Array(password.length + 56); hashData.set(password, 0); hashData.set(ownerKeySalt, password.length); hashData.set(userBytes, password.length + ownerKeySalt.length); var key = calculatePDF20Hash(password, hashData, userBytes); var cipher = new AES256Cipher(key); return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16)); }, getUserKey: function PDF20_getUserKey(password, userKeySalt, userEncryption) { var hashData = new Uint8Array(password.length + 8); hashData.set(password, 0); hashData.set(userKeySalt, password.length); var key = calculatePDF20Hash(password, hashData, []); var cipher = new AES256Cipher(key); return cipher.decryptBlock(userEncryption, false, new Uint8Array(16)); } }; return PDF20; }(); exports.PDF20 = PDF20; var CipherTransform = function CipherTransformClosure() { function CipherTransform(stringCipherConstructor, streamCipherConstructor) { this.StringCipherConstructor = stringCipherConstructor; this.StreamCipherConstructor = streamCipherConstructor; } CipherTransform.prototype = { createStream: function CipherTransform_createStream(stream, length) { var cipher = new this.StreamCipherConstructor(); return new _stream.DecryptStream(stream, length, function cipherTransformDecryptStream(data, finalize) { return cipher.decryptBlock(data, finalize); }); }, decryptString: function CipherTransform_decryptString(s) { var cipher = new this.StringCipherConstructor(); var data = (0, _util.stringToBytes)(s); data = cipher.decryptBlock(data, true); return (0, _util.bytesToString)(data); }, encryptString: function CipherTransform_encryptString(s) { var cipher = new this.StringCipherConstructor(); if (cipher instanceof AESBaseCipher) { var strLen = s.length; var pad = 16 - strLen % 16; if (pad !== 16) { s = s.padEnd(16 * Math.ceil(strLen / 16), String.fromCharCode(pad)); } var iv = new Uint8Array(16); if (typeof crypto !== "undefined") { crypto.getRandomValues(iv); } else { for (var i = 0; i < 16; i++) { iv[i] = Math.floor(256 * Math.random()); } } var _data = (0, _util.stringToBytes)(s); _data = cipher.encrypt(_data, iv); var buf = new Uint8Array(16 + _data.length); buf.set(iv); buf.set(_data, 16); return (0, _util.bytesToString)(buf); } var data = (0, _util.stringToBytes)(s); data = cipher.encrypt(data); return (0, _util.bytesToString)(data); } }; return CipherTransform; }(); var CipherTransformFactory = function CipherTransformFactoryClosure() { var defaultPasswordBytes = new Uint8Array([0x28, 0xBF, 0x4E, 0x5E, 0x4E, 0x75, 0x8A, 0x41, 0x64, 0x00, 0x4E, 0x56, 0xFF, 0xFA, 0x01, 0x08, 0x2E, 0x2E, 0x00, 0xB6, 0xD0, 0x68, 0x3E, 0x80, 0x2F, 0x0C, 0xA9, 0xFE, 0x64, 0x53, 0x69, 0x7A]); function createEncryptionKey20(revision, password, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms) { if (password) { var passwordLength = Math.min(127, password.length); password = password.subarray(0, passwordLength); } else { password = []; } var pdfAlgorithm; if (revision === 6) { pdfAlgorithm = new PDF20(); } else { pdfAlgorithm = new PDF17(); } if (pdfAlgorithm.checkUserPassword(password, userValidationSalt, userPassword)) { return pdfAlgorithm.getUserKey(password, userKeySalt, userEncryption); } else if (password.length && pdfAlgorithm.checkOwnerPassword(password, ownerValidationSalt, uBytes, ownerPassword)) { return pdfAlgorithm.getOwnerKey(password, ownerKeySalt, uBytes, ownerEncryption); } return null; } function prepareKeyData(fileId, password, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata) { var hashDataSize = 40 + ownerPassword.length + fileId.length; var hashData = new Uint8Array(hashDataSize), i = 0, j, n; if (password) { n = Math.min(32, password.length); for (; i < n; ++i) { hashData[i] = password[i]; } } j = 0; while (i < 32) { hashData[i++] = defaultPasswordBytes[j++]; } for (j = 0, n = ownerPassword.length; j < n; ++j) { hashData[i++] = ownerPassword[j]; } hashData[i++] = flags & 0xff; hashData[i++] = flags >> 8 & 0xff; hashData[i++] = flags >> 16 & 0xff; hashData[i++] = flags >>> 24 & 0xff; for (j = 0, n = fileId.length; j < n; ++j) { hashData[i++] = fileId[j]; } if (revision >= 4 && !encryptMetadata) { hashData[i++] = 0xff; hashData[i++] = 0xff; hashData[i++] = 0xff; hashData[i++] = 0xff; } var hash = calculateMD5(hashData, 0, i); var keyLengthInBytes = keyLength >> 3; if (revision >= 3) { for (j = 0; j < 50; ++j) { hash = calculateMD5(hash, 0, keyLengthInBytes); } } var encryptionKey = hash.subarray(0, keyLengthInBytes); var cipher, checkData; if (revision >= 3) { for (i = 0; i < 32; ++i) { hashData[i] = defaultPasswordBytes[i]; } for (j = 0, n = fileId.length; j < n; ++j) { hashData[i++] = fileId[j]; } cipher = new ARCFourCipher(encryptionKey); checkData = cipher.encryptBlock(calculateMD5(hashData, 0, i)); n = encryptionKey.length; var derivedKey = new Uint8Array(n), k; for (j = 1; j <= 19; ++j) { for (k = 0; k < n; ++k) { derivedKey[k] = encryptionKey[k] ^ j; } cipher = new ARCFourCipher(derivedKey); checkData = cipher.encryptBlock(checkData); } for (j = 0, n = checkData.length; j < n; ++j) { if (userPassword[j] !== checkData[j]) { return null; } } } else { cipher = new ARCFourCipher(encryptionKey); checkData = cipher.encryptBlock(defaultPasswordBytes); for (j = 0, n = checkData.length; j < n; ++j) { if (userPassword[j] !== checkData[j]) { return null; } } } return encryptionKey; } function decodeUserPassword(password, ownerPassword, revision, keyLength) { var hashData = new Uint8Array(32), i = 0, j, n; n = Math.min(32, password.length); for (; i < n; ++i) { hashData[i] = password[i]; } j = 0; while (i < 32) { hashData[i++] = defaultPasswordBytes[j++]; } var hash = calculateMD5(hashData, 0, i); var keyLengthInBytes = keyLength >> 3; if (revision >= 3) { for (j = 0; j < 50; ++j) { hash = calculateMD5(hash, 0, hash.length); } } var cipher, userPassword; if (revision >= 3) { userPassword = ownerPassword; var derivedKey = new Uint8Array(keyLengthInBytes), k; for (j = 19; j >= 0; j--) { for (k = 0; k < keyLengthInBytes; ++k) { derivedKey[k] = hash[k] ^ j; } cipher = new ARCFourCipher(derivedKey); userPassword = cipher.encryptBlock(userPassword); } } else { cipher = new ARCFourCipher(hash.subarray(0, keyLengthInBytes)); userPassword = cipher.encryptBlock(ownerPassword); } return userPassword; } var identityName = _primitives.Name.get("Identity"); function CipherTransformFactory(dict, fileId, password) { var filter = dict.get("Filter"); if (!(0, _primitives.isName)(filter, "Standard")) { throw new _util.FormatError("unknown encryption method"); } this.dict = dict; var algorithm = dict.get("V"); if (!Number.isInteger(algorithm) || algorithm !== 1 && algorithm !== 2 && algorithm !== 4 && algorithm !== 5) { throw new _util.FormatError("unsupported encryption algorithm"); } this.algorithm = algorithm; var keyLength = dict.get("Length"); if (!keyLength) { if (algorithm <= 3) { keyLength = 40; } else { var cfDict = dict.get("CF"); var streamCryptoName = dict.get("StmF"); if ((0, _primitives.isDict)(cfDict) && (0, _primitives.isName)(streamCryptoName)) { cfDict.suppressEncryption = true; var handlerDict = cfDict.get(streamCryptoName.name); keyLength = handlerDict && handlerDict.get("Length") || 128; if (keyLength < 40) { keyLength <<= 3; } } } } if (!Number.isInteger(keyLength) || keyLength < 40 || keyLength % 8 !== 0) { throw new _util.FormatError("invalid key length"); } var ownerPassword = (0, _util.stringToBytes)(dict.get("O")).subarray(0, 32); var userPassword = (0, _util.stringToBytes)(dict.get("U")).subarray(0, 32); var flags = dict.get("P"); var revision = dict.get("R"); var encryptMetadata = (algorithm === 4 || algorithm === 5) && dict.get("EncryptMetadata") !== false; this.encryptMetadata = encryptMetadata; var fileIdBytes = (0, _util.stringToBytes)(fileId); var passwordBytes; if (password) { if (revision === 6) { try { password = (0, _util.utf8StringToString)(password); } catch (ex) { (0, _util.warn)("CipherTransformFactory: " + "Unable to convert UTF8 encoded password."); } } passwordBytes = (0, _util.stringToBytes)(password); } var encryptionKey; if (algorithm !== 5) { encryptionKey = prepareKeyData(fileIdBytes, passwordBytes, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata); } else { var ownerValidationSalt = (0, _util.stringToBytes)(dict.get("O")).subarray(32, 40); var ownerKeySalt = (0, _util.stringToBytes)(dict.get("O")).subarray(40, 48); var uBytes = (0, _util.stringToBytes)(dict.get("U")).subarray(0, 48); var userValidationSalt = (0, _util.stringToBytes)(dict.get("U")).subarray(32, 40); var userKeySalt = (0, _util.stringToBytes)(dict.get("U")).subarray(40, 48); var ownerEncryption = (0, _util.stringToBytes)(dict.get("OE")); var userEncryption = (0, _util.stringToBytes)(dict.get("UE")); var perms = (0, _util.stringToBytes)(dict.get("Perms")); encryptionKey = createEncryptionKey20(revision, passwordBytes, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms); } if (!encryptionKey && !password) { throw new _util.PasswordException("No password given", _util.PasswordResponses.NEED_PASSWORD); } else if (!encryptionKey && password) { var decodedPassword = decodeUserPassword(passwordBytes, ownerPassword, revision, keyLength); encryptionKey = prepareKeyData(fileIdBytes, decodedPassword, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata); } if (!encryptionKey) { throw new _util.PasswordException("Incorrect Password", _util.PasswordResponses.INCORRECT_PASSWORD); } this.encryptionKey = encryptionKey; if (algorithm >= 4) { var cf = dict.get("CF"); if ((0, _primitives.isDict)(cf)) { cf.suppressEncryption = true; } this.cf = cf; this.stmf = dict.get("StmF") || identityName; this.strf = dict.get("StrF") || identityName; this.eff = dict.get("EFF") || this.stmf; } } function buildObjectKey(num, gen, encryptionKey, isAes) { var key = new Uint8Array(encryptionKey.length + 9), i, n; for (i = 0, n = encryptionKey.length; i < n; ++i) { key[i] = encryptionKey[i]; } key[i++] = num & 0xff; key[i++] = num >> 8 & 0xff; key[i++] = num >> 16 & 0xff; key[i++] = gen & 0xff; key[i++] = gen >> 8 & 0xff; if (isAes) { key[i++] = 0x73; key[i++] = 0x41; key[i++] = 0x6c; key[i++] = 0x54; } var hash = calculateMD5(key, 0, i); return hash.subarray(0, Math.min(encryptionKey.length + 5, 16)); } function buildCipherConstructor(cf, name, num, gen, key) { if (!(0, _primitives.isName)(name)) { throw new _util.FormatError("Invalid crypt filter name."); } var cryptFilter = cf.get(name.name); var cfm; if (cryptFilter !== null && cryptFilter !== undefined) { cfm = cryptFilter.get("CFM"); } if (!cfm || cfm.name === "None") { return function cipherTransformFactoryBuildCipherConstructorNone() { return new NullCipher(); }; } if (cfm.name === "V2") { return function cipherTransformFactoryBuildCipherConstructorV2() { return new ARCFourCipher(buildObjectKey(num, gen, key, false)); }; } if (cfm.name === "AESV2") { return function cipherTransformFactoryBuildCipherConstructorAESV2() { return new AES128Cipher(buildObjectKey(num, gen, key, true)); }; } if (cfm.name === "AESV3") { return function cipherTransformFactoryBuildCipherConstructorAESV3() { return new AES256Cipher(key); }; } throw new _util.FormatError("Unknown crypto method"); } CipherTransformFactory.prototype = { createCipherTransform: function CipherTransformFactory_createCipherTransform(num, gen) { if (this.algorithm === 4 || this.algorithm === 5) { return new CipherTransform(buildCipherConstructor(this.cf, this.stmf, num, gen, this.encryptionKey), buildCipherConstructor(this.cf, this.strf, num, gen, this.encryptionKey)); } var key = buildObjectKey(num, gen, this.encryptionKey, false); var cipherConstructor = function buildCipherCipherConstructor() { return new ARCFourCipher(key); }; return new CipherTransform(cipherConstructor, cipherConstructor); } }; return CipherTransformFactory; }(); exports.CipherTransformFactory = CipherTransformFactory; /***/ }), /* 153 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ColorSpace = void 0; var _regenerator = _interopRequireDefault(__w_pdfjs_require__(2)); var _util = __w_pdfjs_require__(4); var _primitives = __w_pdfjs_require__(135); var _core_utils = __w_pdfjs_require__(138); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function resizeRgbImage(src, dest, w1, h1, w2, h2, alpha01) { var COMPONENTS = 3; alpha01 = alpha01 !== 1 ? 0 : alpha01; var xRatio = w1 / w2; var yRatio = h1 / h2; var newIndex = 0, oldIndex; var xScaled = new Uint16Array(w2); var w1Scanline = w1 * COMPONENTS; for (var i = 0; i < w2; i++) { xScaled[i] = Math.floor(i * xRatio) * COMPONENTS; } for (var _i = 0; _i < h2; _i++) { var py = Math.floor(_i * yRatio) * w1Scanline; for (var j = 0; j < w2; j++) { oldIndex = py + xScaled[j]; dest[newIndex++] = src[oldIndex++]; dest[newIndex++] = src[oldIndex++]; dest[newIndex++] = src[oldIndex++]; newIndex += alpha01; } } } var ColorSpace = /*#__PURE__*/function () { function ColorSpace(name, numComps) { _classCallCheck(this, ColorSpace); if (this.constructor === ColorSpace) { (0, _util.unreachable)("Cannot initialize ColorSpace."); } this.name = name; this.numComps = numComps; } _createClass(ColorSpace, [{ key: "getRgb", value: function getRgb(src, srcOffset) { var rgb = new Uint8ClampedArray(3); this.getRgbItem(src, srcOffset, rgb, 0); return rgb; } }, { key: "getRgbItem", value: function getRgbItem(src, srcOffset, dest, destOffset) { (0, _util.unreachable)("Should not call ColorSpace.getRgbItem"); } }, { key: "getRgbBuffer", value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { (0, _util.unreachable)("Should not call ColorSpace.getRgbBuffer"); } }, { key: "getOutputLength", value: function getOutputLength(inputLength, alpha01) { (0, _util.unreachable)("Should not call ColorSpace.getOutputLength"); } }, { key: "isPassthrough", value: function isPassthrough(bits) { return false; } }, { key: "isDefaultDecode", value: function isDefaultDecode(decodeMap, bpc) { return ColorSpace.isDefaultDecode(decodeMap, this.numComps); } }, { key: "fillRgb", value: function fillRgb(dest, originalWidth, originalHeight, width, height, actualHeight, bpc, comps, alpha01) { var count = originalWidth * originalHeight; var rgbBuf = null; var numComponentColors = 1 << bpc; var needsResizing = originalHeight !== height || originalWidth !== width; if (this.isPassthrough(bpc)) { rgbBuf = comps; } else if (this.numComps === 1 && count > numComponentColors && this.name !== "DeviceGray" && this.name !== "DeviceRGB") { var allColors = bpc <= 8 ? new Uint8Array(numComponentColors) : new Uint16Array(numComponentColors); for (var i = 0; i < numComponentColors; i++) { allColors[i] = i; } var colorMap = new Uint8ClampedArray(numComponentColors * 3); this.getRgbBuffer(allColors, 0, numComponentColors, colorMap, 0, bpc, 0); if (!needsResizing) { var destPos = 0; for (var _i2 = 0; _i2 < count; ++_i2) { var key = comps[_i2] * 3; dest[destPos++] = colorMap[key]; dest[destPos++] = colorMap[key + 1]; dest[destPos++] = colorMap[key + 2]; destPos += alpha01; } } else { rgbBuf = new Uint8Array(count * 3); var rgbPos = 0; for (var _i3 = 0; _i3 < count; ++_i3) { var _key = comps[_i3] * 3; rgbBuf[rgbPos++] = colorMap[_key]; rgbBuf[rgbPos++] = colorMap[_key + 1]; rgbBuf[rgbPos++] = colorMap[_key + 2]; } } } else { if (!needsResizing) { this.getRgbBuffer(comps, 0, width * actualHeight, dest, 0, bpc, alpha01); } else { rgbBuf = new Uint8ClampedArray(count * 3); this.getRgbBuffer(comps, 0, count, rgbBuf, 0, bpc, 0); } } if (rgbBuf) { if (needsResizing) { resizeRgbImage(rgbBuf, dest, originalWidth, originalHeight, width, height, alpha01); } else { var _destPos = 0, _rgbPos = 0; for (var _i4 = 0, ii = width * actualHeight; _i4 < ii; _i4++) { dest[_destPos++] = rgbBuf[_rgbPos++]; dest[_destPos++] = rgbBuf[_rgbPos++]; dest[_destPos++] = rgbBuf[_rgbPos++]; _destPos += alpha01; } } } } }, { key: "usesZeroToOneRange", get: function get() { return (0, _util.shadow)(this, "usesZeroToOneRange", true); } }], [{ key: "_cache", value: function _cache(cacheKey, xref, localColorSpaceCache, parsedColorSpace) { if (!localColorSpaceCache) { throw new Error('ColorSpace._cache - expected "localColorSpaceCache" argument.'); } if (!parsedColorSpace) { throw new Error('ColorSpace._cache - expected "parsedColorSpace" argument.'); } var csName, csRef; if (cacheKey instanceof _primitives.Ref) { csRef = cacheKey; cacheKey = xref.fetch(cacheKey); } if (cacheKey instanceof _primitives.Name) { csName = cacheKey.name; } if (csName || csRef) { localColorSpaceCache.set(csName, csRef, parsedColorSpace); } } }, { key: "getCached", value: function getCached(cacheKey, xref, localColorSpaceCache) { if (!localColorSpaceCache) { throw new Error('ColorSpace.getCached - expected "localColorSpaceCache" argument.'); } if (cacheKey instanceof _primitives.Ref) { var localColorSpace = localColorSpaceCache.getByRef(cacheKey); if (localColorSpace) { return localColorSpace; } try { cacheKey = xref.fetch(cacheKey); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } } } if (cacheKey instanceof _primitives.Name) { var _localColorSpace = localColorSpaceCache.getByName(cacheKey.name); if (_localColorSpace) { return _localColorSpace; } } return null; } }, { key: "parseAsync", value: function () { var _parseAsync = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(_ref) { var cs, xref, _ref$resources, resources, pdfFunctionFactory, localColorSpaceCache, parsedColorSpace; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: cs = _ref.cs, xref = _ref.xref, _ref$resources = _ref.resources, resources = _ref$resources === void 0 ? null : _ref$resources, pdfFunctionFactory = _ref.pdfFunctionFactory, localColorSpaceCache = _ref.localColorSpaceCache; parsedColorSpace = this._parse(cs, xref, resources, pdfFunctionFactory); this._cache(cs, xref, localColorSpaceCache, parsedColorSpace); return _context.abrupt("return", parsedColorSpace); case 4: case "end": return _context.stop(); } } }, _callee, this); })); function parseAsync(_x) { return _parseAsync.apply(this, arguments); } return parseAsync; }() }, { key: "parse", value: function parse(_ref2) { var cs = _ref2.cs, xref = _ref2.xref, _ref2$resources = _ref2.resources, resources = _ref2$resources === void 0 ? null : _ref2$resources, pdfFunctionFactory = _ref2.pdfFunctionFactory, localColorSpaceCache = _ref2.localColorSpaceCache; var cachedColorSpace = this.getCached(cs, xref, localColorSpaceCache); if (cachedColorSpace) { return cachedColorSpace; } var parsedColorSpace = this._parse(cs, xref, resources, pdfFunctionFactory); this._cache(cs, xref, localColorSpaceCache, parsedColorSpace); return parsedColorSpace; } }, { key: "_parse", value: function _parse(cs, xref) { var resources = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var pdfFunctionFactory = arguments.length > 3 ? arguments[3] : undefined; cs = xref.fetchIfRef(cs); if ((0, _primitives.isName)(cs)) { switch (cs.name) { case "DeviceGray": case "G": return this.singletons.gray; case "DeviceRGB": case "RGB": return this.singletons.rgb; case "DeviceCMYK": case "CMYK": return this.singletons.cmyk; case "Pattern": return new PatternCS(null); default: if ((0, _primitives.isDict)(resources)) { var colorSpaces = resources.get("ColorSpace"); if ((0, _primitives.isDict)(colorSpaces)) { var resourcesCS = colorSpaces.get(cs.name); if (resourcesCS) { if ((0, _primitives.isName)(resourcesCS)) { return this._parse(resourcesCS, xref, resources, pdfFunctionFactory); } cs = resourcesCS; break; } } } throw new _util.FormatError("Unrecognized ColorSpace: ".concat(cs.name)); } } if (Array.isArray(cs)) { var mode = xref.fetchIfRef(cs[0]).name; var params, numComps, baseCS, whitePoint, blackPoint, gamma; switch (mode) { case "DeviceGray": case "G": return this.singletons.gray; case "DeviceRGB": case "RGB": return this.singletons.rgb; case "DeviceCMYK": case "CMYK": return this.singletons.cmyk; case "CalGray": params = xref.fetchIfRef(cs[1]); whitePoint = params.getArray("WhitePoint"); blackPoint = params.getArray("BlackPoint"); gamma = params.get("Gamma"); return new CalGrayCS(whitePoint, blackPoint, gamma); case "CalRGB": params = xref.fetchIfRef(cs[1]); whitePoint = params.getArray("WhitePoint"); blackPoint = params.getArray("BlackPoint"); gamma = params.getArray("Gamma"); var matrix = params.getArray("Matrix"); return new CalRGBCS(whitePoint, blackPoint, gamma, matrix); case "ICCBased": var stream = xref.fetchIfRef(cs[1]); var dict = stream.dict; numComps = dict.get("N"); var alt = dict.get("Alternate"); if (alt) { var altCS = this._parse(alt, xref, resources, pdfFunctionFactory); if (altCS.numComps === numComps) { return altCS; } (0, _util.warn)("ICCBased color space: Ignoring incorrect /Alternate entry."); } if (numComps === 1) { return this.singletons.gray; } else if (numComps === 3) { return this.singletons.rgb; } else if (numComps === 4) { return this.singletons.cmyk; } break; case "Pattern": baseCS = cs[1] || null; if (baseCS) { baseCS = this._parse(baseCS, xref, resources, pdfFunctionFactory); } return new PatternCS(baseCS); case "Indexed": case "I": baseCS = this._parse(cs[1], xref, resources, pdfFunctionFactory); var hiVal = xref.fetchIfRef(cs[2]) + 1; var lookup = xref.fetchIfRef(cs[3]); return new IndexedCS(baseCS, hiVal, lookup); case "Separation": case "DeviceN": var name = xref.fetchIfRef(cs[1]); numComps = Array.isArray(name) ? name.length : 1; baseCS = this._parse(cs[2], xref, resources, pdfFunctionFactory); var tintFn = pdfFunctionFactory.create(cs[3]); return new AlternateCS(numComps, baseCS, tintFn); case "Lab": params = xref.fetchIfRef(cs[1]); whitePoint = params.getArray("WhitePoint"); blackPoint = params.getArray("BlackPoint"); var range = params.getArray("Range"); return new LabCS(whitePoint, blackPoint, range); default: throw new _util.FormatError("Unimplemented ColorSpace object: ".concat(mode)); } } throw new _util.FormatError("Unrecognized ColorSpace object: ".concat(cs)); } }, { key: "isDefaultDecode", value: function isDefaultDecode(decode, numComps) { if (!Array.isArray(decode)) { return true; } if (numComps * 2 !== decode.length) { (0, _util.warn)("The decode map is not the correct length"); return true; } for (var i = 0, ii = decode.length; i < ii; i += 2) { if (decode[i] !== 0 || decode[i + 1] !== 1) { return false; } } return true; } }, { key: "singletons", get: function get() { return (0, _util.shadow)(this, "singletons", { get gray() { return (0, _util.shadow)(this, "gray", new DeviceGrayCS()); }, get rgb() { return (0, _util.shadow)(this, "rgb", new DeviceRgbCS()); }, get cmyk() { return (0, _util.shadow)(this, "cmyk", new DeviceCmykCS()); } }); } }]); return ColorSpace; }(); exports.ColorSpace = ColorSpace; var AlternateCS = /*#__PURE__*/function (_ColorSpace) { _inherits(AlternateCS, _ColorSpace); var _super = _createSuper(AlternateCS); function AlternateCS(numComps, base, tintFn) { var _this; _classCallCheck(this, AlternateCS); _this = _super.call(this, "Alternate", numComps); _this.base = base; _this.tintFn = tintFn; _this.tmpBuf = new Float32Array(base.numComps); return _this; } _createClass(AlternateCS, [{ key: "getRgbItem", value: function getRgbItem(src, srcOffset, dest, destOffset) { var tmpBuf = this.tmpBuf; this.tintFn(src, srcOffset, tmpBuf, 0); this.base.getRgbItem(tmpBuf, 0, dest, destOffset); } }, { key: "getRgbBuffer", value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { var tintFn = this.tintFn; var base = this.base; var scale = 1 / ((1 << bits) - 1); var baseNumComps = base.numComps; var usesZeroToOneRange = base.usesZeroToOneRange; var isPassthrough = (base.isPassthrough(8) || !usesZeroToOneRange) && alpha01 === 0; var pos = isPassthrough ? destOffset : 0; var baseBuf = isPassthrough ? dest : new Uint8ClampedArray(baseNumComps * count); var numComps = this.numComps; var scaled = new Float32Array(numComps); var tinted = new Float32Array(baseNumComps); var i, j; for (i = 0; i < count; i++) { for (j = 0; j < numComps; j++) { scaled[j] = src[srcOffset++] * scale; } tintFn(scaled, 0, tinted, 0); if (usesZeroToOneRange) { for (j = 0; j < baseNumComps; j++) { baseBuf[pos++] = tinted[j] * 255; } } else { base.getRgbItem(tinted, 0, baseBuf, pos); pos += baseNumComps; } } if (!isPassthrough) { base.getRgbBuffer(baseBuf, 0, count, dest, destOffset, 8, alpha01); } } }, { key: "getOutputLength", value: function getOutputLength(inputLength, alpha01) { return this.base.getOutputLength(inputLength * this.base.numComps / this.numComps, alpha01); } }]); return AlternateCS; }(ColorSpace); var PatternCS = /*#__PURE__*/function (_ColorSpace2) { _inherits(PatternCS, _ColorSpace2); var _super2 = _createSuper(PatternCS); function PatternCS(baseCS) { var _this2; _classCallCheck(this, PatternCS); _this2 = _super2.call(this, "Pattern", null); _this2.base = baseCS; return _this2; } _createClass(PatternCS, [{ key: "isDefaultDecode", value: function isDefaultDecode(decodeMap, bpc) { (0, _util.unreachable)("Should not call PatternCS.isDefaultDecode"); } }]); return PatternCS; }(ColorSpace); var IndexedCS = /*#__PURE__*/function (_ColorSpace3) { _inherits(IndexedCS, _ColorSpace3); var _super3 = _createSuper(IndexedCS); function IndexedCS(base, highVal, lookup) { var _this3; _classCallCheck(this, IndexedCS); _this3 = _super3.call(this, "Indexed", 1); _this3.base = base; _this3.highVal = highVal; var length = base.numComps * highVal; _this3.lookup = new Uint8Array(length); if ((0, _primitives.isStream)(lookup)) { var bytes = lookup.getBytes(length); _this3.lookup.set(bytes); } else if (typeof lookup === "string") { for (var i = 0; i < length; ++i) { _this3.lookup[i] = lookup.charCodeAt(i) & 0xff; } } else { throw new _util.FormatError("IndexedCS - unrecognized lookup table: ".concat(lookup)); } return _this3; } _createClass(IndexedCS, [{ key: "getRgbItem", value: function getRgbItem(src, srcOffset, dest, destOffset) { var numComps = this.base.numComps; var start = src[srcOffset] * numComps; this.base.getRgbBuffer(this.lookup, start, 1, dest, destOffset, 8, 0); } }, { key: "getRgbBuffer", value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { var base = this.base; var numComps = base.numComps; var outputDelta = base.getOutputLength(numComps, alpha01); var lookup = this.lookup; for (var i = 0; i < count; ++i) { var lookupPos = src[srcOffset++] * numComps; base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8, alpha01); destOffset += outputDelta; } } }, { key: "getOutputLength", value: function getOutputLength(inputLength, alpha01) { return this.base.getOutputLength(inputLength * this.base.numComps, alpha01); } }, { key: "isDefaultDecode", value: function isDefaultDecode(decodeMap, bpc) { if (!Array.isArray(decodeMap)) { return true; } if (decodeMap.length !== 2) { (0, _util.warn)("Decode map length is not correct"); return true; } if (!Number.isInteger(bpc) || bpc < 1) { (0, _util.warn)("Bits per component is not correct"); return true; } return decodeMap[0] === 0 && decodeMap[1] === (1 << bpc) - 1; } }]); return IndexedCS; }(ColorSpace); var DeviceGrayCS = /*#__PURE__*/function (_ColorSpace4) { _inherits(DeviceGrayCS, _ColorSpace4); var _super4 = _createSuper(DeviceGrayCS); function DeviceGrayCS() { _classCallCheck(this, DeviceGrayCS); return _super4.call(this, "DeviceGray", 1); } _createClass(DeviceGrayCS, [{ key: "getRgbItem", value: function getRgbItem(src, srcOffset, dest, destOffset) { var c = src[srcOffset] * 255; dest[destOffset] = dest[destOffset + 1] = dest[destOffset + 2] = c; } }, { key: "getRgbBuffer", value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { var scale = 255 / ((1 << bits) - 1); var j = srcOffset, q = destOffset; for (var i = 0; i < count; ++i) { var c = scale * src[j++]; dest[q++] = c; dest[q++] = c; dest[q++] = c; q += alpha01; } } }, { key: "getOutputLength", value: function getOutputLength(inputLength, alpha01) { return inputLength * (3 + alpha01); } }]); return DeviceGrayCS; }(ColorSpace); var DeviceRgbCS = /*#__PURE__*/function (_ColorSpace5) { _inherits(DeviceRgbCS, _ColorSpace5); var _super5 = _createSuper(DeviceRgbCS); function DeviceRgbCS() { _classCallCheck(this, DeviceRgbCS); return _super5.call(this, "DeviceRGB", 3); } _createClass(DeviceRgbCS, [{ key: "getRgbItem", value: function getRgbItem(src, srcOffset, dest, destOffset) { dest[destOffset] = src[srcOffset] * 255; dest[destOffset + 1] = src[srcOffset + 1] * 255; dest[destOffset + 2] = src[srcOffset + 2] * 255; } }, { key: "getRgbBuffer", value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { if (bits === 8 && alpha01 === 0) { dest.set(src.subarray(srcOffset, srcOffset + count * 3), destOffset); return; } var scale = 255 / ((1 << bits) - 1); var j = srcOffset, q = destOffset; for (var i = 0; i < count; ++i) { dest[q++] = scale * src[j++]; dest[q++] = scale * src[j++]; dest[q++] = scale * src[j++]; q += alpha01; } } }, { key: "getOutputLength", value: function getOutputLength(inputLength, alpha01) { return inputLength * (3 + alpha01) / 3 | 0; } }, { key: "isPassthrough", value: function isPassthrough(bits) { return bits === 8; } }]); return DeviceRgbCS; }(ColorSpace); var DeviceCmykCS = function DeviceCmykCSClosure() { function convertToRgb(src, srcOffset, srcScale, dest, destOffset) { var c = src[srcOffset] * srcScale; var m = src[srcOffset + 1] * srcScale; var y = src[srcOffset + 2] * srcScale; var k = src[srcOffset + 3] * srcScale; dest[destOffset] = 255 + c * (-4.387332384609988 * c + 54.48615194189176 * m + 18.82290502165302 * y + 212.25662451639585 * k + -285.2331026137004) + m * (1.7149763477362134 * m - 5.6096736904047315 * y + -17.873870861415444 * k - 5.497006427196366) + y * (-2.5217340131683033 * y - 21.248923337353073 * k + 17.5119270841813) + k * (-21.86122147463605 * k - 189.48180835922747); dest[destOffset + 1] = 255 + c * (8.841041422036149 * c + 60.118027045597366 * m + 6.871425592049007 * y + 31.159100130055922 * k + -79.2970844816548) + m * (-15.310361306967817 * m + 17.575251261109482 * y + 131.35250912493976 * k - 190.9453302588951) + y * (4.444339102852739 * y + 9.8632861493405 * k - 24.86741582555878) + k * (-20.737325471181034 * k - 187.80453709719578); dest[destOffset + 2] = 255 + c * (0.8842522430003296 * c + 8.078677503112928 * m + 30.89978309703729 * y - 0.23883238689178934 * k + -14.183576799673286) + m * (10.49593273432072 * m + 63.02378494754052 * y + 50.606957656360734 * k - 112.23884253719248) + y * (0.03296041114873217 * y + 115.60384449646641 * k + -193.58209356861505) + k * (-22.33816807309886 * k - 180.12613974708367); } var DeviceCmykCS = /*#__PURE__*/function (_ColorSpace6) { _inherits(DeviceCmykCS, _ColorSpace6); var _super6 = _createSuper(DeviceCmykCS); function DeviceCmykCS() { _classCallCheck(this, DeviceCmykCS); return _super6.call(this, "DeviceCMYK", 4); } _createClass(DeviceCmykCS, [{ key: "getRgbItem", value: function getRgbItem(src, srcOffset, dest, destOffset) { convertToRgb(src, srcOffset, 1, dest, destOffset); } }, { key: "getRgbBuffer", value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { var scale = 1 / ((1 << bits) - 1); for (var i = 0; i < count; i++) { convertToRgb(src, srcOffset, scale, dest, destOffset); srcOffset += 4; destOffset += 3 + alpha01; } } }, { key: "getOutputLength", value: function getOutputLength(inputLength, alpha01) { return inputLength / 4 * (3 + alpha01) | 0; } }]); return DeviceCmykCS; }(ColorSpace); return DeviceCmykCS; }(); var CalGrayCS = function CalGrayCSClosure() { function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) { var A = src[srcOffset] * scale; var AG = Math.pow(A, cs.G); var L = cs.YW * AG; var val = Math.max(295.8 * Math.pow(L, 0.333333333333333333) - 40.8, 0); dest[destOffset] = val; dest[destOffset + 1] = val; dest[destOffset + 2] = val; } var CalGrayCS = /*#__PURE__*/function (_ColorSpace7) { _inherits(CalGrayCS, _ColorSpace7); var _super7 = _createSuper(CalGrayCS); function CalGrayCS(whitePoint, blackPoint, gamma) { var _this4; _classCallCheck(this, CalGrayCS); _this4 = _super7.call(this, "CalGray", 1); if (!whitePoint) { throw new _util.FormatError("WhitePoint missing - required for color space CalGray"); } blackPoint = blackPoint || [0, 0, 0]; gamma = gamma || 1; _this4.XW = whitePoint[0]; _this4.YW = whitePoint[1]; _this4.ZW = whitePoint[2]; _this4.XB = blackPoint[0]; _this4.YB = blackPoint[1]; _this4.ZB = blackPoint[2]; _this4.G = gamma; if (_this4.XW < 0 || _this4.ZW < 0 || _this4.YW !== 1) { throw new _util.FormatError("Invalid WhitePoint components for ".concat(_this4.name) + ", no fallback available"); } if (_this4.XB < 0 || _this4.YB < 0 || _this4.ZB < 0) { (0, _util.info)("Invalid BlackPoint for ".concat(_this4.name, ", falling back to default.")); _this4.XB = _this4.YB = _this4.ZB = 0; } if (_this4.XB !== 0 || _this4.YB !== 0 || _this4.ZB !== 0) { (0, _util.warn)("".concat(_this4.name, ", BlackPoint: XB: ").concat(_this4.XB, ", YB: ").concat(_this4.YB, ", ") + "ZB: ".concat(_this4.ZB, ", only default values are supported.")); } if (_this4.G < 1) { (0, _util.info)("Invalid Gamma: ".concat(_this4.G, " for ").concat(_this4.name, ", ") + "falling back to default."); _this4.G = 1; } return _this4; } _createClass(CalGrayCS, [{ key: "getRgbItem", value: function getRgbItem(src, srcOffset, dest, destOffset) { convertToRgb(this, src, srcOffset, dest, destOffset, 1); } }, { key: "getRgbBuffer", value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { var scale = 1 / ((1 << bits) - 1); for (var i = 0; i < count; ++i) { convertToRgb(this, src, srcOffset, dest, destOffset, scale); srcOffset += 1; destOffset += 3 + alpha01; } } }, { key: "getOutputLength", value: function getOutputLength(inputLength, alpha01) { return inputLength * (3 + alpha01); } }]); return CalGrayCS; }(ColorSpace); return CalGrayCS; }(); var CalRGBCS = function CalRGBCSClosure() { var BRADFORD_SCALE_MATRIX = new Float32Array([0.8951, 0.2664, -0.1614, -0.7502, 1.7135, 0.0367, 0.0389, -0.0685, 1.0296]); var BRADFORD_SCALE_INVERSE_MATRIX = new Float32Array([0.9869929, -0.1470543, 0.1599627, 0.4323053, 0.5183603, 0.0492912, -0.0085287, 0.0400428, 0.9684867]); var SRGB_D65_XYZ_TO_RGB_MATRIX = new Float32Array([3.2404542, -1.5371385, -0.4985314, -0.9692660, 1.8760108, 0.0415560, 0.0556434, -0.2040259, 1.0572252]); var FLAT_WHITEPOINT_MATRIX = new Float32Array([1, 1, 1]); var tempNormalizeMatrix = new Float32Array(3); var tempConvertMatrix1 = new Float32Array(3); var tempConvertMatrix2 = new Float32Array(3); var DECODE_L_CONSTANT = Math.pow((8 + 16) / 116, 3) / 8.0; function matrixProduct(a, b, result) { result[0] = a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; result[1] = a[3] * b[0] + a[4] * b[1] + a[5] * b[2]; result[2] = a[6] * b[0] + a[7] * b[1] + a[8] * b[2]; } function convertToFlat(sourceWhitePoint, LMS, result) { result[0] = LMS[0] * 1 / sourceWhitePoint[0]; result[1] = LMS[1] * 1 / sourceWhitePoint[1]; result[2] = LMS[2] * 1 / sourceWhitePoint[2]; } function convertToD65(sourceWhitePoint, LMS, result) { var D65X = 0.95047; var D65Y = 1; var D65Z = 1.08883; result[0] = LMS[0] * D65X / sourceWhitePoint[0]; result[1] = LMS[1] * D65Y / sourceWhitePoint[1]; result[2] = LMS[2] * D65Z / sourceWhitePoint[2]; } function sRGBTransferFunction(color) { if (color <= 0.0031308) { return adjustToRange(0, 1, 12.92 * color); } if (color >= 0.99554525) { return 1; } return adjustToRange(0, 1, (1 + 0.055) * Math.pow(color, 1 / 2.4) - 0.055); } function adjustToRange(min, max, value) { return Math.max(min, Math.min(max, value)); } function decodeL(L) { if (L < 0) { return -decodeL(-L); } if (L > 8.0) { return Math.pow((L + 16) / 116, 3); } return L * DECODE_L_CONSTANT; } function compensateBlackPoint(sourceBlackPoint, XYZ_Flat, result) { if (sourceBlackPoint[0] === 0 && sourceBlackPoint[1] === 0 && sourceBlackPoint[2] === 0) { result[0] = XYZ_Flat[0]; result[1] = XYZ_Flat[1]; result[2] = XYZ_Flat[2]; return; } var zeroDecodeL = decodeL(0); var X_DST = zeroDecodeL; var X_SRC = decodeL(sourceBlackPoint[0]); var Y_DST = zeroDecodeL; var Y_SRC = decodeL(sourceBlackPoint[1]); var Z_DST = zeroDecodeL; var Z_SRC = decodeL(sourceBlackPoint[2]); var X_Scale = (1 - X_DST) / (1 - X_SRC); var X_Offset = 1 - X_Scale; var Y_Scale = (1 - Y_DST) / (1 - Y_SRC); var Y_Offset = 1 - Y_Scale; var Z_Scale = (1 - Z_DST) / (1 - Z_SRC); var Z_Offset = 1 - Z_Scale; result[0] = XYZ_Flat[0] * X_Scale + X_Offset; result[1] = XYZ_Flat[1] * Y_Scale + Y_Offset; result[2] = XYZ_Flat[2] * Z_Scale + Z_Offset; } function normalizeWhitePointToFlat(sourceWhitePoint, XYZ_In, result) { if (sourceWhitePoint[0] === 1 && sourceWhitePoint[2] === 1) { result[0] = XYZ_In[0]; result[1] = XYZ_In[1]; result[2] = XYZ_In[2]; return; } var LMS = result; matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS); var LMS_Flat = tempNormalizeMatrix; convertToFlat(sourceWhitePoint, LMS, LMS_Flat); matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_Flat, result); } function normalizeWhitePointToD65(sourceWhitePoint, XYZ_In, result) { var LMS = result; matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS); var LMS_D65 = tempNormalizeMatrix; convertToD65(sourceWhitePoint, LMS, LMS_D65); matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_D65, result); } function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) { var A = adjustToRange(0, 1, src[srcOffset] * scale); var B = adjustToRange(0, 1, src[srcOffset + 1] * scale); var C = adjustToRange(0, 1, src[srcOffset + 2] * scale); var AGR = A === 1 ? 1 : Math.pow(A, cs.GR); var BGG = B === 1 ? 1 : Math.pow(B, cs.GG); var CGB = C === 1 ? 1 : Math.pow(C, cs.GB); var X = cs.MXA * AGR + cs.MXB * BGG + cs.MXC * CGB; var Y = cs.MYA * AGR + cs.MYB * BGG + cs.MYC * CGB; var Z = cs.MZA * AGR + cs.MZB * BGG + cs.MZC * CGB; var XYZ = tempConvertMatrix1; XYZ[0] = X; XYZ[1] = Y; XYZ[2] = Z; var XYZ_Flat = tempConvertMatrix2; normalizeWhitePointToFlat(cs.whitePoint, XYZ, XYZ_Flat); var XYZ_Black = tempConvertMatrix1; compensateBlackPoint(cs.blackPoint, XYZ_Flat, XYZ_Black); var XYZ_D65 = tempConvertMatrix2; normalizeWhitePointToD65(FLAT_WHITEPOINT_MATRIX, XYZ_Black, XYZ_D65); var SRGB = tempConvertMatrix1; matrixProduct(SRGB_D65_XYZ_TO_RGB_MATRIX, XYZ_D65, SRGB); dest[destOffset] = sRGBTransferFunction(SRGB[0]) * 255; dest[destOffset + 1] = sRGBTransferFunction(SRGB[1]) * 255; dest[destOffset + 2] = sRGBTransferFunction(SRGB[2]) * 255; } var CalRGBCS = /*#__PURE__*/function (_ColorSpace8) { _inherits(CalRGBCS, _ColorSpace8); var _super8 = _createSuper(CalRGBCS); function CalRGBCS(whitePoint, blackPoint, gamma, matrix) { var _this5; _classCallCheck(this, CalRGBCS); _this5 = _super8.call(this, "CalRGB", 3); if (!whitePoint) { throw new _util.FormatError("WhitePoint missing - required for color space CalRGB"); } blackPoint = blackPoint || new Float32Array(3); gamma = gamma || new Float32Array([1, 1, 1]); matrix = matrix || new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]); var XW = whitePoint[0]; var YW = whitePoint[1]; var ZW = whitePoint[2]; _this5.whitePoint = whitePoint; var XB = blackPoint[0]; var YB = blackPoint[1]; var ZB = blackPoint[2]; _this5.blackPoint = blackPoint; _this5.GR = gamma[0]; _this5.GG = gamma[1]; _this5.GB = gamma[2]; _this5.MXA = matrix[0]; _this5.MYA = matrix[1]; _this5.MZA = matrix[2]; _this5.MXB = matrix[3]; _this5.MYB = matrix[4]; _this5.MZB = matrix[5]; _this5.MXC = matrix[6]; _this5.MYC = matrix[7]; _this5.MZC = matrix[8]; if (XW < 0 || ZW < 0 || YW !== 1) { throw new _util.FormatError("Invalid WhitePoint components for ".concat(_this5.name) + ", no fallback available"); } if (XB < 0 || YB < 0 || ZB < 0) { (0, _util.info)("Invalid BlackPoint for ".concat(_this5.name, " [").concat(XB, ", ").concat(YB, ", ").concat(ZB, "], ") + "falling back to default."); _this5.blackPoint = new Float32Array(3); } if (_this5.GR < 0 || _this5.GG < 0 || _this5.GB < 0) { (0, _util.info)("Invalid Gamma [".concat(_this5.GR, ", ").concat(_this5.GG, ", ").concat(_this5.GB, "] for ") + "".concat(_this5.name, ", falling back to default.")); _this5.GR = _this5.GG = _this5.GB = 1; } return _this5; } _createClass(CalRGBCS, [{ key: "getRgbItem", value: function getRgbItem(src, srcOffset, dest, destOffset) { convertToRgb(this, src, srcOffset, dest, destOffset, 1); } }, { key: "getRgbBuffer", value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { var scale = 1 / ((1 << bits) - 1); for (var i = 0; i < count; ++i) { convertToRgb(this, src, srcOffset, dest, destOffset, scale); srcOffset += 3; destOffset += 3 + alpha01; } } }, { key: "getOutputLength", value: function getOutputLength(inputLength, alpha01) { return inputLength * (3 + alpha01) / 3 | 0; } }]); return CalRGBCS; }(ColorSpace); return CalRGBCS; }(); var LabCS = function LabCSClosure() { function fn_g(x) { var result; if (x >= 6 / 29) { result = x * x * x; } else { result = 108 / 841 * (x - 4 / 29); } return result; } function decode(value, high1, low2, high2) { return low2 + value * (high2 - low2) / high1; } function convertToRgb(cs, src, srcOffset, maxVal, dest, destOffset) { var Ls = src[srcOffset]; var as = src[srcOffset + 1]; var bs = src[srcOffset + 2]; if (maxVal !== false) { Ls = decode(Ls, maxVal, 0, 100); as = decode(as, maxVal, cs.amin, cs.amax); bs = decode(bs, maxVal, cs.bmin, cs.bmax); } if (as > cs.amax) { as = cs.amax; } else if (as < cs.amin) { as = cs.amin; } if (bs > cs.bmax) { bs = cs.bmax; } else if (bs < cs.bmin) { bs = cs.bmin; } var M = (Ls + 16) / 116; var L = M + as / 500; var N = M - bs / 200; var X = cs.XW * fn_g(L); var Y = cs.YW * fn_g(M); var Z = cs.ZW * fn_g(N); var r, g, b; if (cs.ZW < 1) { r = X * 3.1339 + Y * -1.617 + Z * -0.4906; g = X * -0.9785 + Y * 1.916 + Z * 0.0333; b = X * 0.072 + Y * -0.229 + Z * 1.4057; } else { r = X * 3.2406 + Y * -1.5372 + Z * -0.4986; g = X * -0.9689 + Y * 1.8758 + Z * 0.0415; b = X * 0.0557 + Y * -0.204 + Z * 1.057; } dest[destOffset] = Math.sqrt(r) * 255; dest[destOffset + 1] = Math.sqrt(g) * 255; dest[destOffset + 2] = Math.sqrt(b) * 255; } var LabCS = /*#__PURE__*/function (_ColorSpace9) { _inherits(LabCS, _ColorSpace9); var _super9 = _createSuper(LabCS); function LabCS(whitePoint, blackPoint, range) { var _this6; _classCallCheck(this, LabCS); _this6 = _super9.call(this, "Lab", 3); if (!whitePoint) { throw new _util.FormatError("WhitePoint missing - required for color space Lab"); } blackPoint = blackPoint || [0, 0, 0]; range = range || [-100, 100, -100, 100]; _this6.XW = whitePoint[0]; _this6.YW = whitePoint[1]; _this6.ZW = whitePoint[2]; _this6.amin = range[0]; _this6.amax = range[1]; _this6.bmin = range[2]; _this6.bmax = range[3]; _this6.XB = blackPoint[0]; _this6.YB = blackPoint[1]; _this6.ZB = blackPoint[2]; if (_this6.XW < 0 || _this6.ZW < 0 || _this6.YW !== 1) { throw new _util.FormatError("Invalid WhitePoint components, no fallback available"); } if (_this6.XB < 0 || _this6.YB < 0 || _this6.ZB < 0) { (0, _util.info)("Invalid BlackPoint, falling back to default"); _this6.XB = _this6.YB = _this6.ZB = 0; } if (_this6.amin > _this6.amax || _this6.bmin > _this6.bmax) { (0, _util.info)("Invalid Range, falling back to defaults"); _this6.amin = -100; _this6.amax = 100; _this6.bmin = -100; _this6.bmax = 100; } return _this6; } _createClass(LabCS, [{ key: "getRgbItem", value: function getRgbItem(src, srcOffset, dest, destOffset) { convertToRgb(this, src, srcOffset, false, dest, destOffset); } }, { key: "getRgbBuffer", value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { var maxVal = (1 << bits) - 1; for (var i = 0; i < count; i++) { convertToRgb(this, src, srcOffset, maxVal, dest, destOffset); srcOffset += 3; destOffset += 3 + alpha01; } } }, { key: "getOutputLength", value: function getOutputLength(inputLength, alpha01) { return inputLength * (3 + alpha01) / 3 | 0; } }, { key: "isDefaultDecode", value: function isDefaultDecode(decodeMap, bpc) { return true; } }, { key: "usesZeroToOneRange", get: function get() { return (0, _util.shadow)(this, "usesZeroToOneRange", false); } }]); return LabCS; }(ColorSpace); return LabCS; }(); /***/ }), /* 154 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", ({ value: true })); exports.LocalTilingPatternCache = exports.LocalImageCache = exports.LocalGStateCache = exports.LocalFunctionCache = exports.LocalColorSpaceCache = exports.GlobalImageCache = void 0; var _util = __w_pdfjs_require__(4); var _primitives = __w_pdfjs_require__(135); function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var BaseLocalCache = /*#__PURE__*/function () { function BaseLocalCache(options) { _classCallCheck(this, BaseLocalCache); if (this.constructor === BaseLocalCache) { (0, _util.unreachable)("Cannot initialize BaseLocalCache."); } if (!options || !options.onlyRefs) { this._nameRefMap = new Map(); this._imageMap = new Map(); } this._imageCache = new _primitives.RefSetCache(); } _createClass(BaseLocalCache, [{ key: "getByName", value: function getByName(name) { var ref = this._nameRefMap.get(name); if (ref) { return this.getByRef(ref); } return this._imageMap.get(name) || null; } }, { key: "getByRef", value: function getByRef(ref) { return this._imageCache.get(ref) || null; } }, { key: "set", value: function set(name, ref, data) { (0, _util.unreachable)("Abstract method `set` called."); } }]); return BaseLocalCache; }(); var LocalImageCache = /*#__PURE__*/function (_BaseLocalCache) { _inherits(LocalImageCache, _BaseLocalCache); var _super = _createSuper(LocalImageCache); function LocalImageCache() { _classCallCheck(this, LocalImageCache); return _super.apply(this, arguments); } _createClass(LocalImageCache, [{ key: "set", value: function set(name) { var ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; var data = arguments.length > 2 ? arguments[2] : undefined; if (!name) { throw new Error('LocalImageCache.set - expected "name" argument.'); } if (ref) { if (this._imageCache.has(ref)) { return; } this._nameRefMap.set(name, ref); this._imageCache.put(ref, data); return; } if (this._imageMap.has(name)) { return; } this._imageMap.set(name, data); } }]); return LocalImageCache; }(BaseLocalCache); exports.LocalImageCache = LocalImageCache; var LocalColorSpaceCache = /*#__PURE__*/function (_BaseLocalCache2) { _inherits(LocalColorSpaceCache, _BaseLocalCache2); var _super2 = _createSuper(LocalColorSpaceCache); function LocalColorSpaceCache() { _classCallCheck(this, LocalColorSpaceCache); return _super2.apply(this, arguments); } _createClass(LocalColorSpaceCache, [{ key: "set", value: function set() { var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; var data = arguments.length > 2 ? arguments[2] : undefined; if (!name && !ref) { throw new Error('LocalColorSpaceCache.set - expected "name" and/or "ref" argument.'); } if (ref) { if (this._imageCache.has(ref)) { return; } if (name) { this._nameRefMap.set(name, ref); } this._imageCache.put(ref, data); return; } if (this._imageMap.has(name)) { return; } this._imageMap.set(name, data); } }]); return LocalColorSpaceCache; }(BaseLocalCache); exports.LocalColorSpaceCache = LocalColorSpaceCache; var LocalFunctionCache = /*#__PURE__*/function (_BaseLocalCache3) { _inherits(LocalFunctionCache, _BaseLocalCache3); var _super3 = _createSuper(LocalFunctionCache); function LocalFunctionCache(options) { _classCallCheck(this, LocalFunctionCache); return _super3.call(this, { onlyRefs: true }); } _createClass(LocalFunctionCache, [{ key: "getByName", value: function getByName(name) { (0, _util.unreachable)("Should not call `getByName` method."); } }, { key: "set", value: function set() { var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var ref = arguments.length > 1 ? arguments[1] : undefined; var data = arguments.length > 2 ? arguments[2] : undefined; if (!ref) { throw new Error('LocalFunctionCache.set - expected "ref" argument.'); } if (this._imageCache.has(ref)) { return; } this._imageCache.put(ref, data); } }]); return LocalFunctionCache; }(BaseLocalCache); exports.LocalFunctionCache = LocalFunctionCache; var LocalGStateCache = /*#__PURE__*/function (_BaseLocalCache4) { _inherits(LocalGStateCache, _BaseLocalCache4); var _super4 = _createSuper(LocalGStateCache); function LocalGStateCache() { _classCallCheck(this, LocalGStateCache); return _super4.apply(this, arguments); } _createClass(LocalGStateCache, [{ key: "set", value: function set(name) { var ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; var data = arguments.length > 2 ? arguments[2] : undefined; if (!name) { throw new Error('LocalGStateCache.set - expected "name" argument.'); } if (ref) { if (this._imageCache.has(ref)) { return; } this._nameRefMap.set(name, ref); this._imageCache.put(ref, data); return; } if (this._imageMap.has(name)) { return; } this._imageMap.set(name, data); } }]); return LocalGStateCache; }(BaseLocalCache); exports.LocalGStateCache = LocalGStateCache; var LocalTilingPatternCache = /*#__PURE__*/function (_BaseLocalCache5) { _inherits(LocalTilingPatternCache, _BaseLocalCache5); var _super5 = _createSuper(LocalTilingPatternCache); function LocalTilingPatternCache() { _classCallCheck(this, LocalTilingPatternCache); return _super5.apply(this, arguments); } _createClass(LocalTilingPatternCache, [{ key: "set", value: function set(name) { var ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; var data = arguments.length > 2 ? arguments[2] : undefined; if (!name) { throw new Error('LocalTilingPatternCache.set - expected "name" argument.'); } if (ref) { if (this._imageCache.has(ref)) { return; } this._nameRefMap.set(name, ref); this._imageCache.put(ref, data); return; } if (this._imageMap.has(name)) { return; } this._imageMap.set(name, data); } }]); return LocalTilingPatternCache; }(BaseLocalCache); exports.LocalTilingPatternCache = LocalTilingPatternCache; var GlobalImageCache = /*#__PURE__*/function () { function GlobalImageCache() { _classCallCheck(this, GlobalImageCache); this._refCache = new _primitives.RefSetCache(); this._imageCache = new _primitives.RefSetCache(); } _createClass(GlobalImageCache, [{ key: "_byteSize", get: function get() { var byteSize = 0; this._imageCache.forEach(function (imageData) { byteSize += imageData.byteSize; }); return byteSize; } }, { key: "_cacheLimitReached", get: function get() { if (this._imageCache.size < GlobalImageCache.MIN_IMAGES_TO_CACHE) { return false; } if (this._byteSize < GlobalImageCache.MAX_BYTE_SIZE) { return false; } return true; } }, { key: "shouldCache", value: function shouldCache(ref, pageIndex) { var pageIndexSet = this._refCache.get(ref); var numPages = pageIndexSet ? pageIndexSet.size + (pageIndexSet.has(pageIndex) ? 0 : 1) : 1; if (numPages < GlobalImageCache.NUM_PAGES_THRESHOLD) { return false; } if (!this._imageCache.has(ref) && this._cacheLimitReached) { return false; } return true; } }, { key: "addPageIndex", value: function addPageIndex(ref, pageIndex) { var pageIndexSet = this._refCache.get(ref); if (!pageIndexSet) { pageIndexSet = new Set(); this._refCache.put(ref, pageIndexSet); } pageIndexSet.add(pageIndex); } }, { key: "addByteSize", value: function addByteSize(ref, byteSize) { var imageData = this._imageCache.get(ref); if (!imageData) { return; } if (imageData.byteSize) { return; } imageData.byteSize = byteSize; } }, { key: "getData", value: function getData(ref, pageIndex) { var pageIndexSet = this._refCache.get(ref); if (!pageIndexSet) { return null; } if (pageIndexSet.size < GlobalImageCache.NUM_PAGES_THRESHOLD) { return null; } var imageData = this._imageCache.get(ref); if (!imageData) { return null; } pageIndexSet.add(pageIndex); return imageData; } }, { key: "setData", value: function setData(ref, data) { if (!this._refCache.has(ref)) { throw new Error('GlobalImageCache.setData - expected "addPageIndex" to have been called.'); } if (this._imageCache.has(ref)) { return; } if (this._cacheLimitReached) { (0, _util.warn)("GlobalImageCache.setData - cache limit reached."); return; } this._imageCache.put(ref, data); } }, { key: "clear", value: function clear() { var onlyData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; if (!onlyData) { this._refCache.clear(); } this._imageCache.clear(); } }], [{ key: "NUM_PAGES_THRESHOLD", get: function get() { return (0, _util.shadow)(this, "NUM_PAGES_THRESHOLD", 2); } }, { key: "MIN_IMAGES_TO_CACHE", get: function get() { return (0, _util.shadow)(this, "MIN_IMAGES_TO_CACHE", 10); } }, { key: "MAX_BYTE_SIZE", get: function get() { return (0, _util.shadow)(this, "MAX_BYTE_SIZE", 40e6); } }]); return GlobalImageCache; }(); exports.GlobalImageCache = GlobalImageCache; /***/ }), /* 155 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getQuadPoints = getQuadPoints; exports.MarkupAnnotation = exports.AnnotationFactory = exports.AnnotationBorderStyle = exports.Annotation = void 0; var _regenerator = _interopRequireDefault(__w_pdfjs_require__(2)); var _util = __w_pdfjs_require__(4); var _obj = __w_pdfjs_require__(140); var _core_utils = __w_pdfjs_require__(138); var _default_appearance = __w_pdfjs_require__(156); var _primitives = __w_pdfjs_require__(135); var _colorspace = __w_pdfjs_require__(153); var _operator_list = __w_pdfjs_require__(174); var _stream = __w_pdfjs_require__(142); var _writer = __w_pdfjs_require__(176); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var AnnotationFactory = /*#__PURE__*/function () { function AnnotationFactory() { _classCallCheck(this, AnnotationFactory); } _createClass(AnnotationFactory, null, [{ key: "create", value: function create(xref, ref, pdfManager, idFactory) { var _this = this; return pdfManager.ensureCatalog("acroForm").then(function (acroForm) { return pdfManager.ensure(_this, "_create", [xref, ref, pdfManager, idFactory, acroForm]); }); } }, { key: "_create", value: function _create(xref, ref, pdfManager, idFactory, acroForm) { var dict = xref.fetchIfRef(ref); if (!(0, _primitives.isDict)(dict)) { return undefined; } var id = (0, _primitives.isRef)(ref) ? ref.toString() : "annot_".concat(idFactory.createObjId()); var subtype = dict.get("Subtype"); subtype = (0, _primitives.isName)(subtype) ? subtype.name : null; var parameters = { xref: xref, ref: ref, dict: dict, subtype: subtype, id: id, pdfManager: pdfManager, acroForm: acroForm instanceof _primitives.Dict ? acroForm : _primitives.Dict.empty }; switch (subtype) { case "Link": return new LinkAnnotation(parameters); case "Text": return new TextAnnotation(parameters); case "Widget": var fieldType = (0, _core_utils.getInheritableProperty)({ dict: dict, key: "FT" }); fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null; switch (fieldType) { case "Tx": return new TextWidgetAnnotation(parameters); case "Btn": return new ButtonWidgetAnnotation(parameters); case "Ch": return new ChoiceWidgetAnnotation(parameters); } (0, _util.warn)('Unimplemented widget field type "' + fieldType + '", ' + "falling back to base field type."); return new WidgetAnnotation(parameters); case "Popup": return new PopupAnnotation(parameters); case "FreeText": return new FreeTextAnnotation(parameters); case "Line": return new LineAnnotation(parameters); case "Square": return new SquareAnnotation(parameters); case "Circle": return new CircleAnnotation(parameters); case "PolyLine": return new PolylineAnnotation(parameters); case "Polygon": return new PolygonAnnotation(parameters); case "Caret": return new CaretAnnotation(parameters); case "Ink": return new InkAnnotation(parameters); case "Highlight": return new HighlightAnnotation(parameters); case "Underline": return new UnderlineAnnotation(parameters); case "Squiggly": return new SquigglyAnnotation(parameters); case "StrikeOut": return new StrikeOutAnnotation(parameters); case "Stamp": return new StampAnnotation(parameters); case "FileAttachment": return new FileAttachmentAnnotation(parameters); default: if (!subtype) { (0, _util.warn)("Annotation is missing the required /Subtype."); } else { (0, _util.warn)('Unimplemented annotation type "' + subtype + '", ' + "falling back to base annotation."); } return new Annotation(parameters); } } }]); return AnnotationFactory; }(); exports.AnnotationFactory = AnnotationFactory; function getQuadPoints(dict, rect) { if (!dict.has("QuadPoints")) { return null; } var quadPoints = dict.getArray("QuadPoints"); if (!Array.isArray(quadPoints) || quadPoints.length === 0 || quadPoints.length % 8 > 0) { return null; } var quadPointsLists = []; for (var i = 0, ii = quadPoints.length / 8; i < ii; i++) { quadPointsLists.push([]); for (var j = i * 8, jj = i * 8 + 8; j < jj; j += 2) { var x = quadPoints[j]; var y = quadPoints[j + 1]; if (rect !== null && (x < rect[0] || x > rect[2] || y < rect[1] || y > rect[3])) { return null; } quadPointsLists[i].push({ x: x, y: y }); } } return quadPointsLists.map(function (quadPointsList) { var _quadPointsList$reduc = quadPointsList.reduce(function (_ref, quadPoint) { var _ref2 = _slicedToArray(_ref, 4), mX = _ref2[0], MX = _ref2[1], mY = _ref2[2], MY = _ref2[3]; return [Math.min(mX, quadPoint.x), Math.max(MX, quadPoint.x), Math.min(mY, quadPoint.y), Math.max(MY, quadPoint.y)]; }, [Number.MAX_VALUE, Number.MIN_VALUE, Number.MAX_VALUE, Number.MIN_VALUE]), _quadPointsList$reduc2 = _slicedToArray(_quadPointsList$reduc, 4), minX = _quadPointsList$reduc2[0], maxX = _quadPointsList$reduc2[1], minY = _quadPointsList$reduc2[2], maxY = _quadPointsList$reduc2[3]; return [{ x: minX, y: maxY }, { x: maxX, y: maxY }, { x: minX, y: minY }, { x: maxX, y: minY }]; }); } function getTransformMatrix(rect, bbox, matrix) { var _Util$getAxialAligned = _util.Util.getAxialAlignedBoundingBox(bbox, matrix), _Util$getAxialAligned2 = _slicedToArray(_Util$getAxialAligned, 4), minX = _Util$getAxialAligned2[0], minY = _Util$getAxialAligned2[1], maxX = _Util$getAxialAligned2[2], maxY = _Util$getAxialAligned2[3]; if (minX === maxX || minY === maxY) { return [1, 0, 0, 1, rect[0], rect[1]]; } var xRatio = (rect[2] - rect[0]) / (maxX - minX); var yRatio = (rect[3] - rect[1]) / (maxY - minY); return [xRatio, 0, 0, yRatio, rect[0] - minX * xRatio, rect[1] - minY * yRatio]; } var Annotation = /*#__PURE__*/function () { function Annotation(params) { _classCallCheck(this, Annotation); var dict = params.dict; this.setContents(dict.get("Contents")); this.setModificationDate(dict.get("M")); this.setFlags(dict.get("F")); this.setRectangle(dict.getArray("Rect")); this.setColor(dict.getArray("C")); this.setBorderStyle(dict); this.setAppearance(dict); this._streams = []; if (this.appearance) { this._streams.push(this.appearance); } this.data = { annotationFlags: this.flags, borderStyle: this.borderStyle, color: this.color, contents: this.contents, hasAppearance: !!this.appearance, id: params.id, modificationDate: this.modificationDate, rect: this.rectangle, subtype: params.subtype }; this._fallbackFontDict = null; } _createClass(Annotation, [{ key: "_hasFlag", value: function _hasFlag(flags, flag) { return !!(flags & flag); } }, { key: "_isViewable", value: function _isViewable(flags) { return !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, _util.AnnotationFlag.NOVIEW); } }, { key: "_isPrintable", value: function _isPrintable(flags) { return this._hasFlag(flags, _util.AnnotationFlag.PRINT) && !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE); } }, { key: "isHidden", value: function isHidden(annotationStorage) { var data = annotationStorage && annotationStorage[this.data.id]; if (data && "hidden" in data) { return data.hidden; } return this._hasFlag(this.flags, _util.AnnotationFlag.HIDDEN); } }, { key: "viewable", get: function get() { if (this.data.quadPoints === null) { return false; } if (this.flags === 0) { return true; } return this._isViewable(this.flags); } }, { key: "printable", get: function get() { if (this.data.quadPoints === null) { return false; } if (this.flags === 0) { return false; } return this._isPrintable(this.flags); } }, { key: "setContents", value: function setContents(contents) { this.contents = (0, _util.stringToPDFString)(contents || ""); } }, { key: "setModificationDate", value: function setModificationDate(modificationDate) { this.modificationDate = (0, _util.isString)(modificationDate) ? modificationDate : null; } }, { key: "setFlags", value: function setFlags(flags) { this.flags = Number.isInteger(flags) && flags > 0 ? flags : 0; } }, { key: "hasFlag", value: function hasFlag(flag) { return this._hasFlag(this.flags, flag); } }, { key: "setRectangle", value: function setRectangle(rectangle) { if (Array.isArray(rectangle) && rectangle.length === 4) { this.rectangle = _util.Util.normalizeRect(rectangle); } else { this.rectangle = [0, 0, 0, 0]; } } }, { key: "setColor", value: function setColor(color) { var rgbColor = new Uint8ClampedArray(3); if (!Array.isArray(color)) { this.color = rgbColor; return; } switch (color.length) { case 0: this.color = null; break; case 1: _colorspace.ColorSpace.singletons.gray.getRgbItem(color, 0, rgbColor, 0); this.color = rgbColor; break; case 3: _colorspace.ColorSpace.singletons.rgb.getRgbItem(color, 0, rgbColor, 0); this.color = rgbColor; break; case 4: _colorspace.ColorSpace.singletons.cmyk.getRgbItem(color, 0, rgbColor, 0); this.color = rgbColor; break; default: this.color = rgbColor; break; } } }, { key: "setBorderStyle", value: function setBorderStyle(borderStyle) { this.borderStyle = new AnnotationBorderStyle(); if (!(0, _primitives.isDict)(borderStyle)) { return; } if (borderStyle.has("BS")) { var dict = borderStyle.get("BS"); var dictType = dict.get("Type"); if (!dictType || (0, _primitives.isName)(dictType, "Border")) { this.borderStyle.setWidth(dict.get("W"), this.rectangle); this.borderStyle.setStyle(dict.get("S")); this.borderStyle.setDashArray(dict.getArray("D")); } } else if (borderStyle.has("Border")) { var array = borderStyle.getArray("Border"); if (Array.isArray(array) && array.length >= 3) { this.borderStyle.setHorizontalCornerRadius(array[0]); this.borderStyle.setVerticalCornerRadius(array[1]); this.borderStyle.setWidth(array[2], this.rectangle); if (array.length === 4) { this.borderStyle.setDashArray(array[3]); } } } else { this.borderStyle.setWidth(0); } } }, { key: "setAppearance", value: function setAppearance(dict) { this.appearance = null; var appearanceStates = dict.get("AP"); if (!(0, _primitives.isDict)(appearanceStates)) { return; } var normalAppearanceState = appearanceStates.get("N"); if ((0, _primitives.isStream)(normalAppearanceState)) { this.appearance = normalAppearanceState; return; } if (!(0, _primitives.isDict)(normalAppearanceState)) { return; } var as = dict.get("AS"); if (!(0, _primitives.isName)(as) || !normalAppearanceState.has(as.name)) { return; } this.appearance = normalAppearanceState.get(as.name); } }, { key: "loadResources", value: function loadResources(keys) { return this.appearance.dict.getAsync("Resources").then(function (resources) { if (!resources) { return undefined; } var objectLoader = new _obj.ObjectLoader(resources, keys, resources.xref); return objectLoader.load().then(function () { return resources; }); }); } }, { key: "getOperatorList", value: function getOperatorList(evaluator, task, renderForms, annotationStorage) { var _this2 = this; if (!this.appearance) { return Promise.resolve(new _operator_list.OperatorList()); } var appearance = this.appearance; var data = this.data; var appearanceDict = appearance.dict; var resourcesPromise = this.loadResources(["ExtGState", "ColorSpace", "Pattern", "Shading", "XObject", "Font"]); var bbox = appearanceDict.getArray("BBox") || [0, 0, 1, 1]; var matrix = appearanceDict.getArray("Matrix") || [1, 0, 0, 1, 0, 0]; var transform = getTransformMatrix(data.rect, bbox, matrix); return resourcesPromise.then(function (resources) { var opList = new _operator_list.OperatorList(); opList.addOp(_util.OPS.beginAnnotation, [data.rect, transform, matrix]); return evaluator.getOperatorList({ stream: appearance, task: task, resources: resources, operatorList: opList, fallbackFontDict: _this2._fallbackFontDict }).then(function () { opList.addOp(_util.OPS.endAnnotation, []); _this2.reset(); return opList; }); }); } }, { key: "save", value: function () { var _save = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(evaluator, task, annotationStorage) { return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: return _context.abrupt("return", null); case 1: case "end": return _context.stop(); } } }, _callee); })); function save(_x, _x2, _x3) { return _save.apply(this, arguments); } return save; }() }, { key: "getFieldObject", value: function getFieldObject() { return null; } }, { key: "reset", value: function reset() { var _iterator = _createForOfIteratorHelper(this._streams), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var stream = _step.value; stream.reset(); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } } }]); return Annotation; }(); exports.Annotation = Annotation; var AnnotationBorderStyle = /*#__PURE__*/function () { function AnnotationBorderStyle() { _classCallCheck(this, AnnotationBorderStyle); this.width = 1; this.style = _util.AnnotationBorderStyleType.SOLID; this.dashArray = [3]; this.horizontalCornerRadius = 0; this.verticalCornerRadius = 0; } _createClass(AnnotationBorderStyle, [{ key: "setWidth", value: function setWidth(width) { var rect = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0, 0, 0]; if ((0, _primitives.isName)(width)) { this.width = 0; return; } if (Number.isInteger(width)) { if (width > 0) { var maxWidth = (rect[2] - rect[0]) / 2; var maxHeight = (rect[3] - rect[1]) / 2; if (maxWidth > 0 && maxHeight > 0 && (width > maxWidth || width > maxHeight)) { (0, _util.warn)("AnnotationBorderStyle.setWidth - ignoring width: ".concat(width)); width = 1; } } this.width = width; } } }, { key: "setStyle", value: function setStyle(style) { if (!(0, _primitives.isName)(style)) { return; } switch (style.name) { case "S": this.style = _util.AnnotationBorderStyleType.SOLID; break; case "D": this.style = _util.AnnotationBorderStyleType.DASHED; break; case "B": this.style = _util.AnnotationBorderStyleType.BEVELED; break; case "I": this.style = _util.AnnotationBorderStyleType.INSET; break; case "U": this.style = _util.AnnotationBorderStyleType.UNDERLINE; break; default: break; } } }, { key: "setDashArray", value: function setDashArray(dashArray) { if (Array.isArray(dashArray) && dashArray.length > 0) { var isValid = true; var allZeros = true; var _iterator2 = _createForOfIteratorHelper(dashArray), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var element = _step2.value; var validNumber = +element >= 0; if (!validNumber) { isValid = false; break; } else if (element > 0) { allZeros = false; } } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } if (isValid && !allZeros) { this.dashArray = dashArray; } else { this.width = 0; } } else if (dashArray) { this.width = 0; } } }, { key: "setHorizontalCornerRadius", value: function setHorizontalCornerRadius(radius) { if (Number.isInteger(radius)) { this.horizontalCornerRadius = radius; } } }, { key: "setVerticalCornerRadius", value: function setVerticalCornerRadius(radius) { if (Number.isInteger(radius)) { this.verticalCornerRadius = radius; } } }]); return AnnotationBorderStyle; }(); exports.AnnotationBorderStyle = AnnotationBorderStyle; var MarkupAnnotation = /*#__PURE__*/function (_Annotation) { _inherits(MarkupAnnotation, _Annotation); var _super = _createSuper(MarkupAnnotation); function MarkupAnnotation(parameters) { var _this3; _classCallCheck(this, MarkupAnnotation); _this3 = _super.call(this, parameters); var dict = parameters.dict; if (dict.has("IRT")) { var rawIRT = dict.getRaw("IRT"); _this3.data.inReplyTo = (0, _primitives.isRef)(rawIRT) ? rawIRT.toString() : null; var rt = dict.get("RT"); _this3.data.replyType = (0, _primitives.isName)(rt) ? rt.name : _util.AnnotationReplyType.REPLY; } if (_this3.data.replyType === _util.AnnotationReplyType.GROUP) { var parent = dict.get("IRT"); _this3.data.title = (0, _util.stringToPDFString)(parent.get("T") || ""); _this3.setContents(parent.get("Contents")); _this3.data.contents = _this3.contents; if (!parent.has("CreationDate")) { _this3.data.creationDate = null; } else { _this3.setCreationDate(parent.get("CreationDate")); _this3.data.creationDate = _this3.creationDate; } if (!parent.has("M")) { _this3.data.modificationDate = null; } else { _this3.setModificationDate(parent.get("M")); _this3.data.modificationDate = _this3.modificationDate; } _this3.data.hasPopup = parent.has("Popup"); if (!parent.has("C")) { _this3.data.color = null; } else { _this3.setColor(parent.getArray("C")); _this3.data.color = _this3.color; } } else { _this3.data.title = (0, _util.stringToPDFString)(dict.get("T") || ""); _this3.setCreationDate(dict.get("CreationDate")); _this3.data.creationDate = _this3.creationDate; _this3.data.hasPopup = dict.has("Popup"); if (!dict.has("C")) { _this3.data.color = null; } } return _this3; } _createClass(MarkupAnnotation, [{ key: "setCreationDate", value: function setCreationDate(creationDate) { this.creationDate = (0, _util.isString)(creationDate) ? creationDate : null; } }, { key: "_setDefaultAppearance", value: function _setDefaultAppearance(_ref3) { var xref = _ref3.xref, extra = _ref3.extra, strokeColor = _ref3.strokeColor, fillColor = _ref3.fillColor, blendMode = _ref3.blendMode, pointsCallback = _ref3.pointsCallback; var minX = Number.MAX_VALUE; var minY = Number.MAX_VALUE; var maxX = Number.MIN_VALUE; var maxY = Number.MIN_VALUE; var buffer = ["q"]; if (extra) { buffer.push(extra); } if (strokeColor) { buffer.push("".concat(strokeColor[0], " ").concat(strokeColor[1], " ").concat(strokeColor[2], " RG")); } if (fillColor) { buffer.push("".concat(fillColor[0], " ").concat(fillColor[1], " ").concat(fillColor[2], " rg")); } var _iterator3 = _createForOfIteratorHelper(this.data.quadPoints), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var points = _step3.value; var _pointsCallback = pointsCallback(buffer, points), _pointsCallback2 = _slicedToArray(_pointsCallback, 4), mX = _pointsCallback2[0], MX = _pointsCallback2[1], mY = _pointsCallback2[2], MY = _pointsCallback2[3]; minX = Math.min(minX, mX); maxX = Math.max(maxX, MX); minY = Math.min(minY, mY); maxY = Math.max(maxY, MY); } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } buffer.push("Q"); var formDict = new _primitives.Dict(xref); var appearanceStreamDict = new _primitives.Dict(xref); appearanceStreamDict.set("Subtype", _primitives.Name.get("Form")); var appearanceStream = new _stream.StringStream(buffer.join(" ")); appearanceStream.dict = appearanceStreamDict; formDict.set("Fm0", appearanceStream); var gsDict = new _primitives.Dict(xref); if (blendMode) { gsDict.set("BM", _primitives.Name.get(blendMode)); } var stateDict = new _primitives.Dict(xref); stateDict.set("GS0", gsDict); var resources = new _primitives.Dict(xref); resources.set("ExtGState", stateDict); resources.set("XObject", formDict); var appearanceDict = new _primitives.Dict(xref); appearanceDict.set("Resources", resources); var bbox = this.data.rect = [minX, minY, maxX, maxY]; appearanceDict.set("BBox", bbox); this.appearance = new _stream.StringStream("/GS0 gs /Fm0 Do"); this.appearance.dict = appearanceDict; this._streams.push(this.appearance, appearanceStream); } }]); return MarkupAnnotation; }(Annotation); exports.MarkupAnnotation = MarkupAnnotation; var WidgetAnnotation = /*#__PURE__*/function (_Annotation2) { _inherits(WidgetAnnotation, _Annotation2); var _super2 = _createSuper(WidgetAnnotation); function WidgetAnnotation(params) { var _this4; _classCallCheck(this, WidgetAnnotation); _this4 = _super2.call(this, params); var dict = params.dict; var data = _this4.data; _this4.ref = params.ref; data.annotationType = _util.AnnotationType.WIDGET; data.fieldName = _this4._constructFieldName(dict); data.actions = (0, _core_utils.collectActions)(params.xref, dict, _util.AnnotationActionEventType); var fieldValue = (0, _core_utils.getInheritableProperty)({ dict: dict, key: "V", getArray: true }); data.fieldValue = _this4._decodeFormValue(fieldValue); var defaultFieldValue = (0, _core_utils.getInheritableProperty)({ dict: dict, key: "DV", getArray: true }); data.defaultFieldValue = _this4._decodeFormValue(defaultFieldValue); data.alternativeText = (0, _util.stringToPDFString)(dict.get("TU") || ""); var defaultAppearance = (0, _core_utils.getInheritableProperty)({ dict: dict, key: "DA" }) || params.acroForm.get("DA") || ""; data.defaultAppearance = (0, _util.isString)(defaultAppearance) ? defaultAppearance : ""; data.defaultAppearanceData = (0, _default_appearance.parseDefaultAppearance)(data.defaultAppearance); var fieldType = (0, _core_utils.getInheritableProperty)({ dict: dict, key: "FT" }); data.fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null; var localResources = (0, _core_utils.getInheritableProperty)({ dict: dict, key: "DR" }); var acroFormResources = params.acroForm.get("DR"); var appearanceResources = _this4.appearance && _this4.appearance.dict.get("Resources"); _this4._fieldResources = { localResources: localResources, acroFormResources: acroFormResources, appearanceResources: appearanceResources, mergedResources: _primitives.Dict.merge({ xref: params.xref, dictArray: [localResources, appearanceResources, acroFormResources], mergeSubDicts: true }) }; data.fieldFlags = (0, _core_utils.getInheritableProperty)({ dict: dict, key: "Ff" }); if (!Number.isInteger(data.fieldFlags) || data.fieldFlags < 0) { data.fieldFlags = 0; } data.readOnly = _this4.hasFieldFlag(_util.AnnotationFieldFlag.READONLY); data.hidden = _this4._hasFlag(data.annotationFlags, _util.AnnotationFlag.HIDDEN); if (data.fieldType === "Sig") { data.fieldValue = null; _this4.setFlags(_util.AnnotationFlag.HIDDEN); data.hidden = true; } return _this4; } _createClass(WidgetAnnotation, [{ key: "_constructFieldName", value: function _constructFieldName(dict) { if (!dict.has("T") && !dict.has("Parent")) { (0, _util.warn)("Unknown field name, falling back to empty field name."); return ""; } if (!dict.has("Parent")) { return (0, _util.stringToPDFString)(dict.get("T")); } var fieldName = []; if (dict.has("T")) { fieldName.unshift((0, _util.stringToPDFString)(dict.get("T"))); } var loopDict = dict; while (loopDict.has("Parent")) { loopDict = loopDict.get("Parent"); if (!(0, _primitives.isDict)(loopDict)) { break; } if (loopDict.has("T")) { fieldName.unshift((0, _util.stringToPDFString)(loopDict.get("T"))); } } return fieldName.join("."); } }, { key: "_decodeFormValue", value: function _decodeFormValue(formValue) { if (Array.isArray(formValue)) { return formValue.filter(function (item) { return (0, _util.isString)(item); }).map(function (item) { return (0, _util.stringToPDFString)(item); }); } else if ((0, _primitives.isName)(formValue)) { return (0, _util.stringToPDFString)(formValue.name); } else if ((0, _util.isString)(formValue)) { return (0, _util.stringToPDFString)(formValue); } return null; } }, { key: "hasFieldFlag", value: function hasFieldFlag(flag) { return !!(this.data.fieldFlags & flag); } }, { key: "getOperatorList", value: function getOperatorList(evaluator, task, renderForms, annotationStorage) { var _this5 = this; if (renderForms) { return Promise.resolve(new _operator_list.OperatorList()); } if (!this._hasText) { return _get(_getPrototypeOf(WidgetAnnotation.prototype), "getOperatorList", this).call(this, evaluator, task, renderForms, annotationStorage); } return this._getAppearance(evaluator, task, annotationStorage).then(function (content) { if (_this5.appearance && content === null) { return _get(_getPrototypeOf(WidgetAnnotation.prototype), "getOperatorList", _this5).call(_this5, evaluator, task, renderForms, annotationStorage); } var operatorList = new _operator_list.OperatorList(); if (!_this5.data.defaultAppearance || content === null) { return operatorList; } var matrix = [1, 0, 0, 1, 0, 0]; var bbox = [0, 0, _this5.data.rect[2] - _this5.data.rect[0], _this5.data.rect[3] - _this5.data.rect[1]]; var transform = getTransformMatrix(_this5.data.rect, bbox, matrix); operatorList.addOp(_util.OPS.beginAnnotation, [_this5.data.rect, transform, matrix]); var stream = new _stream.StringStream(content); return evaluator.getOperatorList({ stream: stream, task: task, resources: _this5._fieldResources.mergedResources, operatorList: operatorList }).then(function () { operatorList.addOp(_util.OPS.endAnnotation, []); return operatorList; }); }); } }, { key: "save", value: function () { var _save2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2(evaluator, task, annotationStorage) { var value, appearance, xref, dict, bbox, xfa, newRef, AP, encrypt, originalTransform, newTransform, appearanceDict, bufferOriginal, bufferNew; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: value = annotationStorage[this.data.id] && annotationStorage[this.data.id].value; if (!(value === this.data.fieldValue || value === undefined)) { _context2.next = 3; break; } return _context2.abrupt("return", null); case 3: _context2.next = 5; return this._getAppearance(evaluator, task, annotationStorage); case 5: appearance = _context2.sent; if (!(appearance === null)) { _context2.next = 8; break; } return _context2.abrupt("return", null); case 8: xref = evaluator.xref; dict = xref.fetchIfRef(this.ref); if ((0, _primitives.isDict)(dict)) { _context2.next = 12; break; } return _context2.abrupt("return", null); case 12: bbox = [0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1]]; xfa = { path: (0, _util.stringToPDFString)(dict.get("T") || ""), value: value }; newRef = xref.getNewRef(); AP = new _primitives.Dict(xref); AP.set("N", newRef); encrypt = xref.encrypt; originalTransform = null; newTransform = null; if (encrypt) { originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen); newTransform = encrypt.createCipherTransform(newRef.num, newRef.gen); appearance = newTransform.encryptString(appearance); } dict.set("V", (0, _util.isAscii)(value) ? value : (0, _util.stringToUTF16BEString)(value)); dict.set("AP", AP); dict.set("M", "D:".concat((0, _util.getModificationDate)())); appearanceDict = new _primitives.Dict(xref); appearanceDict.set("Length", appearance.length); appearanceDict.set("Subtype", _primitives.Name.get("Form")); appearanceDict.set("Resources", this._getSaveFieldResources(xref)); appearanceDict.set("BBox", bbox); bufferOriginal = ["".concat(this.ref.num, " ").concat(this.ref.gen, " obj\n")]; (0, _writer.writeDict)(dict, bufferOriginal, originalTransform); bufferOriginal.push("\nendobj\n"); bufferNew = ["".concat(newRef.num, " ").concat(newRef.gen, " obj\n")]; (0, _writer.writeDict)(appearanceDict, bufferNew, newTransform); bufferNew.push(" stream\n"); bufferNew.push(appearance); bufferNew.push("\nendstream\nendobj\n"); return _context2.abrupt("return", [{ ref: this.ref, data: bufferOriginal.join(""), xfa: xfa }, { ref: newRef, data: bufferNew.join(""), xfa: null }]); case 38: case "end": return _context2.stop(); } } }, _callee2, this); })); function save(_x4, _x5, _x6) { return _save2.apply(this, arguments); } return save; }() }, { key: "_getAppearance", value: function () { var _getAppearance2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee3(evaluator, task, annotationStorage) { var isPassword, value, defaultPadding, hPadding, totalHeight, totalWidth, font, fontSize, descent, vPadding, defaultAppearance, alignment, encodedString, renderedText; return _regenerator["default"].wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: isPassword = this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD); if (!(!annotationStorage || isPassword)) { _context3.next = 3; break; } return _context3.abrupt("return", null); case 3: value = annotationStorage[this.data.id] && annotationStorage[this.data.id].value; if (!(value === undefined)) { _context3.next = 6; break; } return _context3.abrupt("return", null); case 6: if (!(value === "")) { _context3.next = 8; break; } return _context3.abrupt("return", ""); case 8: defaultPadding = 2; hPadding = defaultPadding; totalHeight = this.data.rect[3] - this.data.rect[1]; totalWidth = this.data.rect[2] - this.data.rect[0]; if (!this.data.defaultAppearance) { this.data.defaultAppearance = "/Helvetica 0 Tf 0 g"; this.data.defaultAppearanceData = (0, _default_appearance.parseDefaultAppearance)(this.data.defaultAppearance); } _context3.next = 15; return this._getFontData(evaluator, task); case 15: font = _context3.sent; fontSize = this._computeFontSize(font, totalHeight); descent = font.descent; if (isNaN(descent)) { descent = 0; } vPadding = defaultPadding + Math.abs(descent) * fontSize; defaultAppearance = this.data.defaultAppearance; alignment = this.data.textAlignment; if (!this.data.multiLine) { _context3.next = 24; break; } return _context3.abrupt("return", this._getMultilineAppearance(defaultAppearance, value, font, fontSize, totalWidth, totalHeight, alignment, hPadding, vPadding)); case 24: encodedString = font.encodeString(value).join(""); if (!this.data.comb) { _context3.next = 27; break; } return _context3.abrupt("return", this._getCombAppearance(defaultAppearance, font, encodedString, totalWidth, hPadding, vPadding)); case 27: if (!(alignment === 0 || alignment > 2)) { _context3.next = 29; break; } return _context3.abrupt("return", "/Tx BMC q BT " + defaultAppearance + " 1 0 0 1 ".concat(hPadding, " ").concat(vPadding, " Tm (").concat((0, _util.escapeString)(encodedString), ") Tj") + " ET Q EMC"); case 29: renderedText = this._renderText(encodedString, font, fontSize, totalWidth, alignment, hPadding, vPadding); return _context3.abrupt("return", "/Tx BMC q BT " + defaultAppearance + " 1 0 0 1 0 0 Tm ".concat(renderedText) + " ET Q EMC"); case 31: case "end": return _context3.stop(); } } }, _callee3, this); })); function _getAppearance(_x7, _x8, _x9) { return _getAppearance2.apply(this, arguments); } return _getAppearance; }() }, { key: "_getFontData", value: function () { var _getFontData2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee4(evaluator, task) { var operatorList, initialState, _this$data$defaultApp, fontName, fontSize; return _regenerator["default"].wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: operatorList = new _operator_list.OperatorList(); initialState = { font: null, clone: function clone() { return this; } }; _this$data$defaultApp = this.data.defaultAppearanceData, fontName = _this$data$defaultApp.fontName, fontSize = _this$data$defaultApp.fontSize; _context4.next = 5; return evaluator.handleSetFont(this._fieldResources.mergedResources, [fontName, fontSize], null, operatorList, task, initialState, null); case 5: return _context4.abrupt("return", initialState.font); case 6: case "end": return _context4.stop(); } } }, _callee4, this); })); function _getFontData(_x10, _x11) { return _getFontData2.apply(this, arguments); } return _getFontData; }() }, { key: "_computeFontSize", value: function _computeFontSize(font, height) { var fontSize = this.data.defaultAppearanceData.fontSize; if (!fontSize) { var _this$data$defaultApp2 = this.data.defaultAppearanceData, fontColor = _this$data$defaultApp2.fontColor, fontName = _this$data$defaultApp2.fontName; var capHeight; if (font.capHeight) { capHeight = font.capHeight; } else { var glyphs = font.charsToGlyphs(font.encodeString("M").join("")); if (glyphs.length === 1 && glyphs[0].width) { var em = glyphs[0].width / 1000; capHeight = 0.7 * em; } else { capHeight = 0.7; } } fontSize = Math.max(1, Math.floor(height / (1.5 * capHeight))); this.data.defaultAppearance = (0, _default_appearance.createDefaultAppearance)({ fontSize: fontSize, fontName: fontName, fontColor: fontColor }); } return fontSize; } }, { key: "_renderText", value: function _renderText(text, font, fontSize, totalWidth, alignment, hPadding, vPadding) { var glyphs = font.charsToGlyphs(text); var scale = fontSize / 1000; var width = 0; var _iterator4 = _createForOfIteratorHelper(glyphs), _step4; try { for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { var glyph = _step4.value; width += glyph.width * scale; } } catch (err) { _iterator4.e(err); } finally { _iterator4.f(); } var shift; if (alignment === 1) { shift = (totalWidth - width) / 2; } else if (alignment === 2) { shift = totalWidth - width - hPadding; } else { shift = hPadding; } shift = shift.toFixed(2); vPadding = vPadding.toFixed(2); return "".concat(shift, " ").concat(vPadding, " Td (").concat((0, _util.escapeString)(text), ") Tj"); } }, { key: "_getSaveFieldResources", value: function _getSaveFieldResources(xref) { var _this$_fieldResources = this._fieldResources, localResources = _this$_fieldResources.localResources, appearanceResources = _this$_fieldResources.appearanceResources, acroFormResources = _this$_fieldResources.acroFormResources; var fontNameStr = this.data.defaultAppearanceData && this.data.defaultAppearanceData.fontName.name; if (!fontNameStr) { return localResources || _primitives.Dict.empty; } for (var _i2 = 0, _arr2 = [localResources, appearanceResources]; _i2 < _arr2.length; _i2++) { var resources = _arr2[_i2]; if (resources instanceof _primitives.Dict) { var localFont = resources.get("Font"); if (localFont instanceof _primitives.Dict && localFont.has(fontNameStr)) { return resources; } } } if (acroFormResources instanceof _primitives.Dict) { var acroFormFont = acroFormResources.get("Font"); if (acroFormFont instanceof _primitives.Dict && acroFormFont.has(fontNameStr)) { var subFontDict = new _primitives.Dict(xref); subFontDict.set(fontNameStr, acroFormFont.getRaw(fontNameStr)); var subResourcesDict = new _primitives.Dict(xref); subResourcesDict.set("Font", subFontDict); return _primitives.Dict.merge({ xref: xref, dictArray: [subResourcesDict, localResources], mergeSubDicts: true }); } } return localResources || _primitives.Dict.empty; } }, { key: "getFieldObject", value: function getFieldObject() { if (this.data.fieldType === "Sig") { return { id: this.data.id, value: null, type: "signature" }; } return null; } }]); return WidgetAnnotation; }(Annotation); var TextWidgetAnnotation = /*#__PURE__*/function (_WidgetAnnotation) { _inherits(TextWidgetAnnotation, _WidgetAnnotation); var _super3 = _createSuper(TextWidgetAnnotation); function TextWidgetAnnotation(params) { var _this6; _classCallCheck(this, TextWidgetAnnotation); _this6 = _super3.call(this, params); _this6._hasText = true; var dict = params.dict; if (!(0, _util.isString)(_this6.data.fieldValue)) { _this6.data.fieldValue = ""; } var alignment = (0, _core_utils.getInheritableProperty)({ dict: dict, key: "Q" }); if (!Number.isInteger(alignment) || alignment < 0 || alignment > 2) { alignment = null; } _this6.data.textAlignment = alignment; var maximumLength = (0, _core_utils.getInheritableProperty)({ dict: dict, key: "MaxLen" }); if (!Number.isInteger(maximumLength) || maximumLength < 0) { maximumLength = null; } _this6.data.maxLen = maximumLength; _this6.data.multiLine = _this6.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE); _this6.data.comb = _this6.hasFieldFlag(_util.AnnotationFieldFlag.COMB) && !_this6.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE) && !_this6.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD) && !_this6.hasFieldFlag(_util.AnnotationFieldFlag.FILESELECT) && _this6.data.maxLen !== null; return _this6; } _createClass(TextWidgetAnnotation, [{ key: "_getCombAppearance", value: function _getCombAppearance(defaultAppearance, font, text, width, hPadding, vPadding) { var combWidth = (width / this.data.maxLen).toFixed(2); var buf = []; var positions = font.getCharPositions(text); var _iterator5 = _createForOfIteratorHelper(positions), _step5; try { for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { var _step5$value = _slicedToArray(_step5.value, 2), start = _step5$value[0], end = _step5$value[1]; buf.push("(".concat((0, _util.escapeString)(text.substring(start, end)), ") Tj")); } } catch (err) { _iterator5.e(err); } finally { _iterator5.f(); } var renderedComb = buf.join(" ".concat(combWidth, " 0 Td ")); return "/Tx BMC q BT " + defaultAppearance + " 1 0 0 1 ".concat(hPadding, " ").concat(vPadding, " Tm ").concat(renderedComb) + " ET Q EMC"; } }, { key: "_getMultilineAppearance", value: function _getMultilineAppearance(defaultAppearance, text, font, fontSize, width, height, alignment, hPadding, vPadding) { var lines = text.split(/\r\n|\r|\n/); var buf = []; var totalWidth = width - 2 * hPadding; var _iterator6 = _createForOfIteratorHelper(lines), _step6; try { for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) { var line = _step6.value; var chunks = this._splitLine(line, font, fontSize, totalWidth); var _iterator7 = _createForOfIteratorHelper(chunks), _step7; try { for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) { var chunk = _step7.value; var padding = buf.length === 0 ? hPadding : 0; buf.push(this._renderText(chunk, font, fontSize, width, alignment, padding, -fontSize)); } } catch (err) { _iterator7.e(err); } finally { _iterator7.f(); } } } catch (err) { _iterator6.e(err); } finally { _iterator6.f(); } var renderedText = buf.join("\n"); return "/Tx BMC q BT " + defaultAppearance + " 1 0 0 1 0 ".concat(height, " Tm ").concat(renderedText) + " ET Q EMC"; } }, { key: "_splitLine", value: function _splitLine(line, font, fontSize, width) { line = font.encodeString(line).join(""); var glyphs = font.charsToGlyphs(line); if (glyphs.length <= 1) { return [line]; } var positions = font.getCharPositions(line); var scale = fontSize / 1000; var chunks = []; var lastSpacePosInStringStart = -1, lastSpacePosInStringEnd = -1, lastSpacePos = -1, startChunk = 0, currentWidth = 0; for (var i = 0, ii = glyphs.length; i < ii; i++) { var _positions$i = _slicedToArray(positions[i], 2), start = _positions$i[0], end = _positions$i[1]; var glyph = glyphs[i]; var glyphWidth = glyph.width * scale; if (glyph.unicode === " ") { if (currentWidth + glyphWidth > width) { chunks.push(line.substring(startChunk, start)); startChunk = start; currentWidth = glyphWidth; lastSpacePosInStringStart = -1; lastSpacePos = -1; } else { currentWidth += glyphWidth; lastSpacePosInStringStart = start; lastSpacePosInStringEnd = end; lastSpacePos = i; } } else { if (currentWidth + glyphWidth > width) { if (lastSpacePosInStringStart !== -1) { chunks.push(line.substring(startChunk, lastSpacePosInStringEnd)); startChunk = lastSpacePosInStringEnd; i = lastSpacePos + 1; lastSpacePosInStringStart = -1; currentWidth = 0; } else { chunks.push(line.substring(startChunk, start)); startChunk = start; currentWidth = glyphWidth; } } else { currentWidth += glyphWidth; } } } if (startChunk < line.length) { chunks.push(line.substring(startChunk, line.length)); } return chunks; } }, { key: "getFieldObject", value: function getFieldObject() { return { id: this.data.id, value: this.data.fieldValue, defaultValue: this.data.defaultFieldValue, multiline: this.data.multiLine, password: this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD), charLimit: this.data.maxLen, comb: this.data.comb, editable: !this.data.readOnly, hidden: this.data.hidden, name: this.data.fieldName, rect: this.data.rect, actions: this.data.actions, type: "text" }; } }]); return TextWidgetAnnotation; }(WidgetAnnotation); var ButtonWidgetAnnotation = /*#__PURE__*/function (_WidgetAnnotation2) { _inherits(ButtonWidgetAnnotation, _WidgetAnnotation2); var _super4 = _createSuper(ButtonWidgetAnnotation); function ButtonWidgetAnnotation(params) { var _this7; _classCallCheck(this, ButtonWidgetAnnotation); _this7 = _super4.call(this, params); _this7.checkedAppearance = null; _this7.uncheckedAppearance = null; _this7.data.checkBox = !_this7.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !_this7.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON); _this7.data.radioButton = _this7.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !_this7.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON); _this7.data.pushButton = _this7.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON); _this7.data.isTooltipOnly = false; if (_this7.data.checkBox) { _this7._processCheckBox(params); } else if (_this7.data.radioButton) { _this7._processRadioButton(params); } else if (_this7.data.pushButton) { _this7._processPushButton(params); } else { (0, _util.warn)("Invalid field flags for button widget annotation"); } return _this7; } _createClass(ButtonWidgetAnnotation, [{ key: "getOperatorList", value: function getOperatorList(evaluator, task, renderForms, annotationStorage) { if (this.data.pushButton) { return _get(_getPrototypeOf(ButtonWidgetAnnotation.prototype), "getOperatorList", this).call(this, evaluator, task, false, annotationStorage); } if (annotationStorage) { var value = annotationStorage[this.data.id] && annotationStorage[this.data.id].value; if (value === undefined) { return _get(_getPrototypeOf(ButtonWidgetAnnotation.prototype), "getOperatorList", this).call(this, evaluator, task, renderForms, annotationStorage); } var appearance; if (value) { appearance = this.checkedAppearance; } else { appearance = this.uncheckedAppearance; } if (appearance) { var savedAppearance = this.appearance; this.appearance = appearance; var operatorList = _get(_getPrototypeOf(ButtonWidgetAnnotation.prototype), "getOperatorList", this).call(this, evaluator, task, renderForms, annotationStorage); this.appearance = savedAppearance; return operatorList; } return Promise.resolve(new _operator_list.OperatorList()); } return _get(_getPrototypeOf(ButtonWidgetAnnotation.prototype), "getOperatorList", this).call(this, evaluator, task, renderForms, annotationStorage); } }, { key: "save", value: function () { var _save3 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee5(evaluator, task, annotationStorage) { return _regenerator["default"].wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: if (!this.data.checkBox) { _context5.next = 2; break; } return _context5.abrupt("return", this._saveCheckbox(evaluator, task, annotationStorage)); case 2: if (!this.data.radioButton) { _context5.next = 4; break; } return _context5.abrupt("return", this._saveRadioButton(evaluator, task, annotationStorage)); case 4: return _context5.abrupt("return", null); case 5: case "end": return _context5.stop(); } } }, _callee5, this); })); function save(_x12, _x13, _x14) { return _save3.apply(this, arguments); } return save; }() }, { key: "_saveCheckbox", value: function () { var _saveCheckbox2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee6(evaluator, task, annotationStorage) { var value, defaultValue, dict, xfa, name, encrypt, originalTransform, buffer; return _regenerator["default"].wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: value = annotationStorage[this.data.id] && annotationStorage[this.data.id].value; if (!(value === undefined)) { _context6.next = 3; break; } return _context6.abrupt("return", null); case 3: defaultValue = this.data.fieldValue && this.data.fieldValue !== "Off"; if (!(defaultValue === value)) { _context6.next = 6; break; } return _context6.abrupt("return", null); case 6: dict = evaluator.xref.fetchIfRef(this.ref); if ((0, _primitives.isDict)(dict)) { _context6.next = 9; break; } return _context6.abrupt("return", null); case 9: xfa = { path: (0, _util.stringToPDFString)(dict.get("T") || ""), value: value ? this.data.exportValue : "" }; name = _primitives.Name.get(value ? this.data.exportValue : "Off"); dict.set("V", name); dict.set("AS", name); dict.set("M", "D:".concat((0, _util.getModificationDate)())); encrypt = evaluator.xref.encrypt; originalTransform = null; if (encrypt) { originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen); } buffer = ["".concat(this.ref.num, " ").concat(this.ref.gen, " obj\n")]; (0, _writer.writeDict)(dict, buffer, originalTransform); buffer.push("\nendobj\n"); return _context6.abrupt("return", [{ ref: this.ref, data: buffer.join(""), xfa: xfa }]); case 21: case "end": return _context6.stop(); } } }, _callee6, this); })); function _saveCheckbox(_x15, _x16, _x17) { return _saveCheckbox2.apply(this, arguments); } return _saveCheckbox; }() }, { key: "_saveRadioButton", value: function () { var _saveRadioButton2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee7(evaluator, task, annotationStorage) { var value, defaultValue, dict, xfa, name, parentBuffer, encrypt, parent, parentTransform, originalTransform, buffer, newRefs; return _regenerator["default"].wrap(function _callee7$(_context7) { while (1) { switch (_context7.prev = _context7.next) { case 0: value = annotationStorage[this.data.id] && annotationStorage[this.data.id].value; if (!(value === undefined)) { _context7.next = 3; break; } return _context7.abrupt("return", null); case 3: defaultValue = this.data.fieldValue === this.data.buttonValue; if (!(defaultValue === value)) { _context7.next = 6; break; } return _context7.abrupt("return", null); case 6: dict = evaluator.xref.fetchIfRef(this.ref); if ((0, _primitives.isDict)(dict)) { _context7.next = 9; break; } return _context7.abrupt("return", null); case 9: xfa = { path: (0, _util.stringToPDFString)(dict.get("T") || ""), value: value ? this.data.buttonValue : "" }; name = _primitives.Name.get(value ? this.data.buttonValue : "Off"); parentBuffer = null; encrypt = evaluator.xref.encrypt; if (value) { if ((0, _primitives.isRef)(this.parent)) { parent = evaluator.xref.fetch(this.parent); parentTransform = null; if (encrypt) { parentTransform = encrypt.createCipherTransform(this.parent.num, this.parent.gen); } parent.set("V", name); parentBuffer = ["".concat(this.parent.num, " ").concat(this.parent.gen, " obj\n")]; (0, _writer.writeDict)(parent, parentBuffer, parentTransform); parentBuffer.push("\nendobj\n"); } else if ((0, _primitives.isDict)(this.parent)) { this.parent.set("V", name); } } dict.set("AS", name); dict.set("M", "D:".concat((0, _util.getModificationDate)())); originalTransform = null; if (encrypt) { originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen); } buffer = ["".concat(this.ref.num, " ").concat(this.ref.gen, " obj\n")]; (0, _writer.writeDict)(dict, buffer, originalTransform); buffer.push("\nendobj\n"); newRefs = [{ ref: this.ref, data: buffer.join(""), xfa: xfa }]; if (parentBuffer !== null) { newRefs.push({ ref: this.parent, data: parentBuffer.join(""), xfa: null }); } return _context7.abrupt("return", newRefs); case 24: case "end": return _context7.stop(); } } }, _callee7, this); })); function _saveRadioButton(_x18, _x19, _x20) { return _saveRadioButton2.apply(this, arguments); } return _saveRadioButton; }() }, { key: "_processCheckBox", value: function _processCheckBox(params) { var customAppearance = params.dict.get("AP"); if (!(0, _primitives.isDict)(customAppearance)) { return; } var normalAppearance = customAppearance.get("N"); if (!(0, _primitives.isDict)(normalAppearance)) { return; } var exportValues = normalAppearance.getKeys(); if (!exportValues.includes("Off")) { exportValues.push("Off"); } if (exportValues.length !== 2) { return; } this.data.exportValue = exportValues[0] === "Off" ? exportValues[1] : exportValues[0]; this.checkedAppearance = normalAppearance.get(this.data.exportValue); this.uncheckedAppearance = normalAppearance.get("Off") || null; this._streams.push(this.checkedAppearance); if (this.uncheckedAppearance) { this._streams.push(this.uncheckedAppearance); } this._fallbackFontDict = this.fallbackFontDict; } }, { key: "_processRadioButton", value: function _processRadioButton(params) { this.data.fieldValue = this.data.buttonValue = null; var fieldParent = params.dict.get("Parent"); if ((0, _primitives.isDict)(fieldParent)) { this.parent = params.dict.getRaw("Parent"); var fieldParentValue = fieldParent.get("V"); if ((0, _primitives.isName)(fieldParentValue)) { this.data.fieldValue = this._decodeFormValue(fieldParentValue); } } var appearanceStates = params.dict.get("AP"); if (!(0, _primitives.isDict)(appearanceStates)) { return; } var normalAppearance = appearanceStates.get("N"); if (!(0, _primitives.isDict)(normalAppearance)) { return; } var _iterator8 = _createForOfIteratorHelper(normalAppearance.getKeys()), _step8; try { for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) { var key = _step8.value; if (key !== "Off") { this.data.buttonValue = this._decodeFormValue(key); break; } } } catch (err) { _iterator8.e(err); } finally { _iterator8.f(); } this.checkedAppearance = normalAppearance.get(this.data.buttonValue); this.uncheckedAppearance = normalAppearance.get("Off") || null; this._streams.push(this.checkedAppearance); if (this.uncheckedAppearance) { this._streams.push(this.uncheckedAppearance); } this._fallbackFontDict = this.fallbackFontDict; } }, { key: "_processPushButton", value: function _processPushButton(params) { if (!params.dict.has("A") && !params.dict.has("AA") && !this.data.alternativeText) { (0, _util.warn)("Push buttons without action dictionaries are not supported"); return; } this.data.isTooltipOnly = !params.dict.has("A") && !params.dict.has("AA"); _obj.Catalog.parseDestDictionary({ destDict: params.dict, resultObj: this.data, docBaseUrl: params.pdfManager.docBaseUrl }); } }, { key: "getFieldObject", value: function getFieldObject() { var type = "button"; var exportValues; if (this.data.checkBox) { type = "checkbox"; exportValues = this.data.exportValue; } else if (this.data.radioButton) { type = "radiobutton"; exportValues = this.data.buttonValue; } return { id: this.data.id, value: this.data.fieldValue || "Off", defaultValue: this.data.defaultFieldValue, exportValues: exportValues, editable: !this.data.readOnly, name: this.data.fieldName, rect: this.data.rect, hidden: this.data.hidden, actions: this.data.actions, type: type }; } }, { key: "fallbackFontDict", get: function get() { var dict = new _primitives.Dict(); dict.set("BaseFont", _primitives.Name.get("ZapfDingbats")); dict.set("Type", _primitives.Name.get("FallbackType")); dict.set("Subtype", _primitives.Name.get("FallbackType")); dict.set("Encoding", _primitives.Name.get("ZapfDingbatsEncoding")); return (0, _util.shadow)(this, "fallbackFontDict", dict); } }]); return ButtonWidgetAnnotation; }(WidgetAnnotation); var ChoiceWidgetAnnotation = /*#__PURE__*/function (_WidgetAnnotation3) { _inherits(ChoiceWidgetAnnotation, _WidgetAnnotation3); var _super5 = _createSuper(ChoiceWidgetAnnotation); function ChoiceWidgetAnnotation(params) { var _this8; _classCallCheck(this, ChoiceWidgetAnnotation); _this8 = _super5.call(this, params); _this8.data.options = []; var options = (0, _core_utils.getInheritableProperty)({ dict: params.dict, key: "Opt" }); if (Array.isArray(options)) { var xref = params.xref; for (var i = 0, ii = options.length; i < ii; i++) { var option = xref.fetchIfRef(options[i]); var isOptionArray = Array.isArray(option); _this8.data.options[i] = { exportValue: _this8._decodeFormValue(isOptionArray ? xref.fetchIfRef(option[0]) : option), displayValue: _this8._decodeFormValue(isOptionArray ? xref.fetchIfRef(option[1]) : option) }; } } if ((0, _util.isString)(_this8.data.fieldValue)) { _this8.data.fieldValue = [_this8.data.fieldValue]; } else if (!_this8.data.fieldValue) { _this8.data.fieldValue = []; } _this8.data.combo = _this8.hasFieldFlag(_util.AnnotationFieldFlag.COMBO); _this8.data.multiSelect = _this8.hasFieldFlag(_util.AnnotationFieldFlag.MULTISELECT); _this8._hasText = true; return _this8; } _createClass(ChoiceWidgetAnnotation, [{ key: "getFieldObject", value: function getFieldObject() { var type = this.data.combo ? "combobox" : "listbox"; var value = this.data.fieldValue.length > 0 ? this.data.fieldValue[0] : null; return { id: this.data.id, value: value, defaultValue: this.data.defaultFieldValue, editable: !this.data.readOnly, name: this.data.fieldName, rect: this.data.rect, numItems: this.data.fieldValue.length, multipleSelection: this.data.multiSelect, hidden: this.data.hidden, actions: this.data.actions, items: this.data.options, type: type }; } }]); return ChoiceWidgetAnnotation; }(WidgetAnnotation); var TextAnnotation = /*#__PURE__*/function (_MarkupAnnotation) { _inherits(TextAnnotation, _MarkupAnnotation); var _super6 = _createSuper(TextAnnotation); function TextAnnotation(parameters) { var _this9; _classCallCheck(this, TextAnnotation); var DEFAULT_ICON_SIZE = 22; _this9 = _super6.call(this, parameters); var dict = parameters.dict; _this9.data.annotationType = _util.AnnotationType.TEXT; if (_this9.data.hasAppearance) { _this9.data.name = "NoIcon"; } else { _this9.data.rect[1] = _this9.data.rect[3] - DEFAULT_ICON_SIZE; _this9.data.rect[2] = _this9.data.rect[0] + DEFAULT_ICON_SIZE; _this9.data.name = dict.has("Name") ? dict.get("Name").name : "Note"; } if (dict.has("State")) { _this9.data.state = dict.get("State") || null; _this9.data.stateModel = dict.get("StateModel") || null; } else { _this9.data.state = null; _this9.data.stateModel = null; } return _this9; } return TextAnnotation; }(MarkupAnnotation); var LinkAnnotation = /*#__PURE__*/function (_Annotation3) { _inherits(LinkAnnotation, _Annotation3); var _super7 = _createSuper(LinkAnnotation); function LinkAnnotation(params) { var _this10; _classCallCheck(this, LinkAnnotation); _this10 = _super7.call(this, params); _this10.data.annotationType = _util.AnnotationType.LINK; var quadPoints = getQuadPoints(params.dict, _this10.rectangle); if (quadPoints) { _this10.data.quadPoints = quadPoints; } _obj.Catalog.parseDestDictionary({ destDict: params.dict, resultObj: _this10.data, docBaseUrl: params.pdfManager.docBaseUrl }); return _this10; } return LinkAnnotation; }(Annotation); var PopupAnnotation = /*#__PURE__*/function (_Annotation4) { _inherits(PopupAnnotation, _Annotation4); var _super8 = _createSuper(PopupAnnotation); function PopupAnnotation(parameters) { var _this11; _classCallCheck(this, PopupAnnotation); _this11 = _super8.call(this, parameters); _this11.data.annotationType = _util.AnnotationType.POPUP; var parentItem = parameters.dict.get("Parent"); if (!parentItem) { (0, _util.warn)("Popup annotation has a missing or invalid parent annotation."); return _possibleConstructorReturn(_this11); } var parentSubtype = parentItem.get("Subtype"); _this11.data.parentType = (0, _primitives.isName)(parentSubtype) ? parentSubtype.name : null; var rawParent = parameters.dict.getRaw("Parent"); _this11.data.parentId = (0, _primitives.isRef)(rawParent) ? rawParent.toString() : null; var parentRect = parentItem.getArray("Rect"); if (Array.isArray(parentRect) && parentRect.length === 4) { _this11.data.parentRect = _util.Util.normalizeRect(parentRect); } else { _this11.data.parentRect = [0, 0, 0, 0]; } var rt = parentItem.get("RT"); if ((0, _primitives.isName)(rt, _util.AnnotationReplyType.GROUP)) { parentItem = parentItem.get("IRT"); } if (!parentItem.has("M")) { _this11.data.modificationDate = null; } else { _this11.setModificationDate(parentItem.get("M")); _this11.data.modificationDate = _this11.modificationDate; } if (!parentItem.has("C")) { _this11.data.color = null; } else { _this11.setColor(parentItem.getArray("C")); _this11.data.color = _this11.color; } if (!_this11.viewable) { var parentFlags = parentItem.get("F"); if (_this11._isViewable(parentFlags)) { _this11.setFlags(parentFlags); } } _this11.data.title = (0, _util.stringToPDFString)(parentItem.get("T") || ""); _this11.data.contents = (0, _util.stringToPDFString)(parentItem.get("Contents") || ""); return _this11; } return PopupAnnotation; }(Annotation); var FreeTextAnnotation = /*#__PURE__*/function (_MarkupAnnotation2) { _inherits(FreeTextAnnotation, _MarkupAnnotation2); var _super9 = _createSuper(FreeTextAnnotation); function FreeTextAnnotation(parameters) { var _this12; _classCallCheck(this, FreeTextAnnotation); _this12 = _super9.call(this, parameters); _this12.data.annotationType = _util.AnnotationType.FREETEXT; return _this12; } return FreeTextAnnotation; }(MarkupAnnotation); var LineAnnotation = /*#__PURE__*/function (_MarkupAnnotation3) { _inherits(LineAnnotation, _MarkupAnnotation3); var _super10 = _createSuper(LineAnnotation); function LineAnnotation(parameters) { var _this13; _classCallCheck(this, LineAnnotation); _this13 = _super10.call(this, parameters); _this13.data.annotationType = _util.AnnotationType.LINE; _this13.data.lineCoordinates = _util.Util.normalizeRect(parameters.dict.getArray("L")); return _this13; } return LineAnnotation; }(MarkupAnnotation); var SquareAnnotation = /*#__PURE__*/function (_MarkupAnnotation4) { _inherits(SquareAnnotation, _MarkupAnnotation4); var _super11 = _createSuper(SquareAnnotation); function SquareAnnotation(parameters) { var _this14; _classCallCheck(this, SquareAnnotation); _this14 = _super11.call(this, parameters); _this14.data.annotationType = _util.AnnotationType.SQUARE; return _this14; } return SquareAnnotation; }(MarkupAnnotation); var CircleAnnotation = /*#__PURE__*/function (_MarkupAnnotation5) { _inherits(CircleAnnotation, _MarkupAnnotation5); var _super12 = _createSuper(CircleAnnotation); function CircleAnnotation(parameters) { var _this15; _classCallCheck(this, CircleAnnotation); _this15 = _super12.call(this, parameters); _this15.data.annotationType = _util.AnnotationType.CIRCLE; return _this15; } return CircleAnnotation; }(MarkupAnnotation); var PolylineAnnotation = /*#__PURE__*/function (_MarkupAnnotation6) { _inherits(PolylineAnnotation, _MarkupAnnotation6); var _super13 = _createSuper(PolylineAnnotation); function PolylineAnnotation(parameters) { var _this16; _classCallCheck(this, PolylineAnnotation); _this16 = _super13.call(this, parameters); _this16.data.annotationType = _util.AnnotationType.POLYLINE; _this16.data.vertices = []; var rawVertices = parameters.dict.getArray("Vertices"); if (!Array.isArray(rawVertices)) { return _possibleConstructorReturn(_this16); } for (var i = 0, ii = rawVertices.length; i < ii; i += 2) { _this16.data.vertices.push({ x: rawVertices[i], y: rawVertices[i + 1] }); } return _this16; } return PolylineAnnotation; }(MarkupAnnotation); var PolygonAnnotation = /*#__PURE__*/function (_PolylineAnnotation) { _inherits(PolygonAnnotation, _PolylineAnnotation); var _super14 = _createSuper(PolygonAnnotation); function PolygonAnnotation(parameters) { var _this17; _classCallCheck(this, PolygonAnnotation); _this17 = _super14.call(this, parameters); _this17.data.annotationType = _util.AnnotationType.POLYGON; return _this17; } return PolygonAnnotation; }(PolylineAnnotation); var CaretAnnotation = /*#__PURE__*/function (_MarkupAnnotation7) { _inherits(CaretAnnotation, _MarkupAnnotation7); var _super15 = _createSuper(CaretAnnotation); function CaretAnnotation(parameters) { var _this18; _classCallCheck(this, CaretAnnotation); _this18 = _super15.call(this, parameters); _this18.data.annotationType = _util.AnnotationType.CARET; return _this18; } return CaretAnnotation; }(MarkupAnnotation); var InkAnnotation = /*#__PURE__*/function (_MarkupAnnotation8) { _inherits(InkAnnotation, _MarkupAnnotation8); var _super16 = _createSuper(InkAnnotation); function InkAnnotation(parameters) { var _this19; _classCallCheck(this, InkAnnotation); _this19 = _super16.call(this, parameters); _this19.data.annotationType = _util.AnnotationType.INK; _this19.data.inkLists = []; var rawInkLists = parameters.dict.getArray("InkList"); if (!Array.isArray(rawInkLists)) { return _possibleConstructorReturn(_this19); } var xref = parameters.xref; for (var i = 0, ii = rawInkLists.length; i < ii; ++i) { _this19.data.inkLists.push([]); for (var j = 0, jj = rawInkLists[i].length; j < jj; j += 2) { _this19.data.inkLists[i].push({ x: xref.fetchIfRef(rawInkLists[i][j]), y: xref.fetchIfRef(rawInkLists[i][j + 1]) }); } } return _this19; } return InkAnnotation; }(MarkupAnnotation); var HighlightAnnotation = /*#__PURE__*/function (_MarkupAnnotation9) { _inherits(HighlightAnnotation, _MarkupAnnotation9); var _super17 = _createSuper(HighlightAnnotation); function HighlightAnnotation(parameters) { var _this20; _classCallCheck(this, HighlightAnnotation); _this20 = _super17.call(this, parameters); _this20.data.annotationType = _util.AnnotationType.HIGHLIGHT; var quadPoints = _this20.data.quadPoints = getQuadPoints(parameters.dict, null); if (quadPoints) { if (!_this20.appearance) { var fillColor = _this20.color ? Array.from(_this20.color).map(function (c) { return c / 255; }) : [1, 1, 0]; _this20._setDefaultAppearance({ xref: parameters.xref, fillColor: fillColor, blendMode: "Multiply", pointsCallback: function pointsCallback(buffer, points) { buffer.push("".concat(points[0].x, " ").concat(points[0].y, " m")); buffer.push("".concat(points[1].x, " ").concat(points[1].y, " l")); buffer.push("".concat(points[3].x, " ").concat(points[3].y, " l")); buffer.push("".concat(points[2].x, " ").concat(points[2].y, " l")); buffer.push("f"); return [points[0].x, points[1].x, points[3].y, points[1].y]; } }); } } else { _this20.data.hasPopup = false; } return _this20; } return HighlightAnnotation; }(MarkupAnnotation); var UnderlineAnnotation = /*#__PURE__*/function (_MarkupAnnotation10) { _inherits(UnderlineAnnotation, _MarkupAnnotation10); var _super18 = _createSuper(UnderlineAnnotation); function UnderlineAnnotation(parameters) { var _this21; _classCallCheck(this, UnderlineAnnotation); _this21 = _super18.call(this, parameters); _this21.data.annotationType = _util.AnnotationType.UNDERLINE; var quadPoints = _this21.data.quadPoints = getQuadPoints(parameters.dict, null); if (quadPoints) { if (!_this21.appearance) { var strokeColor = _this21.color ? Array.from(_this21.color).map(function (c) { return c / 255; }) : [0, 0, 0]; _this21._setDefaultAppearance({ xref: parameters.xref, extra: "[] 0 d 1 w", strokeColor: strokeColor, pointsCallback: function pointsCallback(buffer, points) { buffer.push("".concat(points[2].x, " ").concat(points[2].y, " m")); buffer.push("".concat(points[3].x, " ").concat(points[3].y, " l")); buffer.push("S"); return [points[0].x, points[1].x, points[3].y, points[1].y]; } }); } } else { _this21.data.hasPopup = false; } return _this21; } return UnderlineAnnotation; }(MarkupAnnotation); var SquigglyAnnotation = /*#__PURE__*/function (_MarkupAnnotation11) { _inherits(SquigglyAnnotation, _MarkupAnnotation11); var _super19 = _createSuper(SquigglyAnnotation); function SquigglyAnnotation(parameters) { var _this22; _classCallCheck(this, SquigglyAnnotation); _this22 = _super19.call(this, parameters); _this22.data.annotationType = _util.AnnotationType.SQUIGGLY; var quadPoints = _this22.data.quadPoints = getQuadPoints(parameters.dict, null); if (quadPoints) { if (!_this22.appearance) { var strokeColor = _this22.color ? Array.from(_this22.color).map(function (c) { return c / 255; }) : [0, 0, 0]; _this22._setDefaultAppearance({ xref: parameters.xref, extra: "[] 0 d 1 w", strokeColor: strokeColor, pointsCallback: function pointsCallback(buffer, points) { var dy = (points[0].y - points[2].y) / 6; var shift = dy; var x = points[2].x; var y = points[2].y; var xEnd = points[3].x; buffer.push("".concat(x, " ").concat(y + shift, " m")); do { x += 2; shift = shift === 0 ? dy : 0; buffer.push("".concat(x, " ").concat(y + shift, " l")); } while (x < xEnd); buffer.push("S"); return [points[2].x, xEnd, y - 2 * dy, y + 2 * dy]; } }); } } else { _this22.data.hasPopup = false; } return _this22; } return SquigglyAnnotation; }(MarkupAnnotation); var StrikeOutAnnotation = /*#__PURE__*/function (_MarkupAnnotation12) { _inherits(StrikeOutAnnotation, _MarkupAnnotation12); var _super20 = _createSuper(StrikeOutAnnotation); function StrikeOutAnnotation(parameters) { var _this23; _classCallCheck(this, StrikeOutAnnotation); _this23 = _super20.call(this, parameters); _this23.data.annotationType = _util.AnnotationType.STRIKEOUT; var quadPoints = _this23.data.quadPoints = getQuadPoints(parameters.dict, null); if (quadPoints) { if (!_this23.appearance) { var strokeColor = _this23.color ? Array.from(_this23.color).map(function (c) { return c / 255; }) : [0, 0, 0]; _this23._setDefaultAppearance({ xref: parameters.xref, extra: "[] 0 d 1 w", strokeColor: strokeColor, pointsCallback: function pointsCallback(buffer, points) { buffer.push("".concat((points[0].x + points[2].x) / 2) + " ".concat((points[0].y + points[2].y) / 2, " m")); buffer.push("".concat((points[1].x + points[3].x) / 2) + " ".concat((points[1].y + points[3].y) / 2, " l")); buffer.push("S"); return [points[0].x, points[1].x, points[3].y, points[1].y]; } }); } } else { _this23.data.hasPopup = false; } return _this23; } return StrikeOutAnnotation; }(MarkupAnnotation); var StampAnnotation = /*#__PURE__*/function (_MarkupAnnotation13) { _inherits(StampAnnotation, _MarkupAnnotation13); var _super21 = _createSuper(StampAnnotation); function StampAnnotation(parameters) { var _this24; _classCallCheck(this, StampAnnotation); _this24 = _super21.call(this, parameters); _this24.data.annotationType = _util.AnnotationType.STAMP; return _this24; } return StampAnnotation; }(MarkupAnnotation); var FileAttachmentAnnotation = /*#__PURE__*/function (_MarkupAnnotation14) { _inherits(FileAttachmentAnnotation, _MarkupAnnotation14); var _super22 = _createSuper(FileAttachmentAnnotation); function FileAttachmentAnnotation(parameters) { var _this25; _classCallCheck(this, FileAttachmentAnnotation); _this25 = _super22.call(this, parameters); var file = new _obj.FileSpec(parameters.dict.get("FS"), parameters.xref); _this25.data.annotationType = _util.AnnotationType.FILEATTACHMENT; _this25.data.file = file.serializable; return _this25; } return FileAttachmentAnnotation; }(MarkupAnnotation); /***/ }), /* 156 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", ({ value: true })); exports.createDefaultAppearance = createDefaultAppearance; exports.parseDefaultAppearance = parseDefaultAppearance; var _primitives = __w_pdfjs_require__(135); var _util = __w_pdfjs_require__(4); var _colorspace = __w_pdfjs_require__(153); var _core_utils = __w_pdfjs_require__(138); var _evaluator = __w_pdfjs_require__(157); var _stream = __w_pdfjs_require__(142); function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } var DefaultAppearanceEvaluator = /*#__PURE__*/function (_EvaluatorPreprocesso) { _inherits(DefaultAppearanceEvaluator, _EvaluatorPreprocesso); var _super = _createSuper(DefaultAppearanceEvaluator); function DefaultAppearanceEvaluator(str) { _classCallCheck(this, DefaultAppearanceEvaluator); return _super.call(this, new _stream.StringStream(str)); } _createClass(DefaultAppearanceEvaluator, [{ key: "parse", value: function parse() { var operation = { fn: 0, args: [] }; var result = { fontSize: 0, fontName: _primitives.Name.get(""), fontColor: new Uint8ClampedArray([0, 0, 0]) }; try { while (true) { operation.args.length = 0; if (!this.read(operation)) { break; } if (this.savedStatesDepth !== 0) { continue; } var fn = operation.fn, args = operation.args; switch (fn | 0) { case _util.OPS.setFont: var _args = _slicedToArray(args, 2), fontName = _args[0], fontSize = _args[1]; if ((0, _primitives.isName)(fontName)) { result.fontName = fontName; } if (typeof fontSize === "number" && fontSize > 0) { result.fontSize = fontSize; } break; case _util.OPS.setFillRGBColor: _colorspace.ColorSpace.singletons.rgb.getRgbItem(args, 0, result.fontColor, 0); break; case _util.OPS.setFillGray: _colorspace.ColorSpace.singletons.gray.getRgbItem(args, 0, result.fontColor, 0); break; case _util.OPS.setFillColorSpace: _colorspace.ColorSpace.singletons.cmyk.getRgbItem(args, 0, result.fontColor, 0); break; } } } catch (reason) { (0, _util.warn)("parseDefaultAppearance - ignoring errors: \"".concat(reason, "\".")); } return result; } }]); return DefaultAppearanceEvaluator; }(_evaluator.EvaluatorPreprocessor); function parseDefaultAppearance(str) { return new DefaultAppearanceEvaluator(str).parse(); } function createDefaultAppearance(_ref) { var fontSize = _ref.fontSize, fontName = _ref.fontName, fontColor = _ref.fontColor; var colorCmd; if (fontColor.every(function (c) { return c === 0; })) { colorCmd = "0 g"; } else { colorCmd = Array.from(fontColor).map(function (c) { return (c / 255).toFixed(2); }).join(" ") + " rg"; } return "/".concat((0, _core_utils.escapePDFName)(fontName.name), " ").concat(fontSize, " Tf ").concat(colorCmd); } /***/ }), /* 157 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PartialEvaluator = exports.EvaluatorPreprocessor = void 0; var _regenerator = _interopRequireDefault(__w_pdfjs_require__(2)); var _util = __w_pdfjs_require__(4); var _cmap = __w_pdfjs_require__(158); var _primitives = __w_pdfjs_require__(135); var _stream = __w_pdfjs_require__(142); var _fonts = __w_pdfjs_require__(159); var _encodings = __w_pdfjs_require__(162); var _core_utils = __w_pdfjs_require__(138); var _unicode = __w_pdfjs_require__(165); var _standard_fonts = __w_pdfjs_require__(164); var _pattern = __w_pdfjs_require__(168); var _function = __w_pdfjs_require__(169); var _parser = __w_pdfjs_require__(141); var _image_utils = __w_pdfjs_require__(154); var _bidi = __w_pdfjs_require__(171); var _colorspace = __w_pdfjs_require__(153); var _glyphlist = __w_pdfjs_require__(163); var _metrics = __w_pdfjs_require__(172); var _murmurhash = __w_pdfjs_require__(173); var _operator_list = __w_pdfjs_require__(174); var _image = __w_pdfjs_require__(175); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var DefaultPartialEvaluatorOptions = Object.freeze({ maxImageSize: -1, disableFontFace: false, ignoreErrors: false, isEvalSupported: true, fontExtraProperties: false }); var PatternType = { TILING: 1, SHADING: 2 }; var deferred = Promise.resolve(); function normalizeBlendMode(value) { var parsingArray = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; if (Array.isArray(value)) { for (var i = 0, ii = value.length; i < ii; i++) { var maybeBM = normalizeBlendMode(value[i], true); if (maybeBM) { return maybeBM; } } (0, _util.warn)("Unsupported blend mode Array: ".concat(value)); return "source-over"; } if (!(0, _primitives.isName)(value)) { if (parsingArray) { return null; } return "source-over"; } switch (value.name) { case "Normal": case "Compatible": return "source-over"; case "Multiply": return "multiply"; case "Screen": return "screen"; case "Overlay": return "overlay"; case "Darken": return "darken"; case "Lighten": return "lighten"; case "ColorDodge": return "color-dodge"; case "ColorBurn": return "color-burn"; case "HardLight": return "hard-light"; case "SoftLight": return "soft-light"; case "Difference": return "difference"; case "Exclusion": return "exclusion"; case "Hue": return "hue"; case "Saturation": return "saturation"; case "Color": return "color"; case "Luminosity": return "luminosity"; } if (parsingArray) { return null; } (0, _util.warn)("Unsupported blend mode: ".concat(value.name)); return "source-over"; } var TimeSlotManager = /*#__PURE__*/function () { function TimeSlotManager() { _classCallCheck(this, TimeSlotManager); this.reset(); } _createClass(TimeSlotManager, [{ key: "check", value: function check() { if (++this.checked < TimeSlotManager.CHECK_TIME_EVERY) { return false; } this.checked = 0; return this.endTime <= Date.now(); } }, { key: "reset", value: function reset() { this.endTime = Date.now() + TimeSlotManager.TIME_SLOT_DURATION_MS; this.checked = 0; } }], [{ key: "TIME_SLOT_DURATION_MS", get: function get() { return (0, _util.shadow)(this, "TIME_SLOT_DURATION_MS", 20); } }, { key: "CHECK_TIME_EVERY", get: function get() { return (0, _util.shadow)(this, "CHECK_TIME_EVERY", 100); } }]); return TimeSlotManager; }(); var PartialEvaluator = /*#__PURE__*/function () { function PartialEvaluator(_ref) { var xref = _ref.xref, handler = _ref.handler, pageIndex = _ref.pageIndex, idFactory = _ref.idFactory, fontCache = _ref.fontCache, builtInCMapCache = _ref.builtInCMapCache, globalImageCache = _ref.globalImageCache, _ref$options = _ref.options, options = _ref$options === void 0 ? null : _ref$options; _classCallCheck(this, PartialEvaluator); this.xref = xref; this.handler = handler; this.pageIndex = pageIndex; this.idFactory = idFactory; this.fontCache = fontCache; this.builtInCMapCache = builtInCMapCache; this.globalImageCache = globalImageCache; this.options = options || DefaultPartialEvaluatorOptions; this.parsingType3Font = false; this._fetchBuiltInCMapBound = this.fetchBuiltInCMap.bind(this); } _createClass(PartialEvaluator, [{ key: "_pdfFunctionFactory", get: function get() { var pdfFunctionFactory = new _function.PDFFunctionFactory({ xref: this.xref, isEvalSupported: this.options.isEvalSupported }); return (0, _util.shadow)(this, "_pdfFunctionFactory", pdfFunctionFactory); } }, { key: "clone", value: function clone() { var newOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DefaultPartialEvaluatorOptions; var newEvaluator = Object.create(this); newEvaluator.options = newOptions; return newEvaluator; } }, { key: "hasBlendModes", value: function hasBlendModes(resources, nonBlendModesSet) { if (!(resources instanceof _primitives.Dict)) { return false; } if (resources.objId && nonBlendModesSet.has(resources.objId)) { return false; } var processed = new _primitives.RefSet(nonBlendModesSet); if (resources.objId) { processed.put(resources.objId); } var nodes = [resources], xref = this.xref; while (nodes.length) { var node = nodes.shift(); var graphicStates = node.get("ExtGState"); if (graphicStates instanceof _primitives.Dict) { var _iterator = _createForOfIteratorHelper(graphicStates.getRawValues()), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var graphicState = _step.value; if (graphicState instanceof _primitives.Ref) { if (processed.has(graphicState)) { continue; } try { graphicState = xref.fetch(graphicState); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } processed.put(graphicState); (0, _util.info)("hasBlendModes - ignoring ExtGState: \"".concat(ex, "\".")); continue; } } if (!(graphicState instanceof _primitives.Dict)) { continue; } if (graphicState.objId) { processed.put(graphicState.objId); } var bm = graphicState.get("BM"); if (bm instanceof _primitives.Name) { if (bm.name !== "Normal") { return true; } continue; } if (bm !== undefined && Array.isArray(bm)) { var _iterator2 = _createForOfIteratorHelper(bm), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var element = _step2.value; if (element instanceof _primitives.Name && element.name !== "Normal") { return true; } } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } } var xObjects = node.get("XObject"); if (!(xObjects instanceof _primitives.Dict)) { continue; } var _iterator3 = _createForOfIteratorHelper(xObjects.getRawValues()), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var xObject = _step3.value; if (xObject instanceof _primitives.Ref) { if (processed.has(xObject)) { continue; } try { xObject = xref.fetch(xObject); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } processed.put(xObject); (0, _util.info)("hasBlendModes - ignoring XObject: \"".concat(ex, "\".")); continue; } } if (!(0, _primitives.isStream)(xObject)) { continue; } if (xObject.dict.objId) { processed.put(xObject.dict.objId); } var xResources = xObject.dict.get("Resources"); if (!(xResources instanceof _primitives.Dict)) { continue; } if (xResources.objId && processed.has(xResources.objId)) { continue; } nodes.push(xResources); if (xResources.objId) { processed.put(xResources.objId); } } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } } processed.forEach(function (ref) { nonBlendModesSet.put(ref); }); return false; } }, { key: "fetchBuiltInCMap", value: function () { var _fetchBuiltInCMap = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(name) { var cachedData, readableStream, reader, data; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: cachedData = this.builtInCMapCache.get(name); if (!cachedData) { _context.next = 3; break; } return _context.abrupt("return", cachedData); case 3: readableStream = this.handler.sendWithStream("FetchBuiltInCMap", { name: name }); reader = readableStream.getReader(); _context.next = 7; return new Promise(function (resolve, reject) { function pump() { reader.read().then(function (_ref2) { var value = _ref2.value, done = _ref2.done; if (done) { return; } resolve(value); pump(); }, reject); } pump(); }); case 7: data = _context.sent; if (data.compressionType !== _util.CMapCompressionType.NONE) { this.builtInCMapCache.set(name, data); } return _context.abrupt("return", data); case 10: case "end": return _context.stop(); } } }, _callee, this); })); function fetchBuiltInCMap(_x) { return _fetchBuiltInCMap.apply(this, arguments); } return fetchBuiltInCMap; }() }, { key: "buildFormXObject", value: function () { var _buildFormXObject = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2(resources, xobj, smask, operatorList, task, initialState, localColorSpaceCache) { var dict, matrix, bbox, optionalContent, group, groupOptions, groupSubtype, colorSpace, cs, cachedColorSpace; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: dict = xobj.dict; matrix = dict.getArray("Matrix"); bbox = dict.getArray("BBox"); if (Array.isArray(bbox) && bbox.length === 4) { bbox = _util.Util.normalizeRect(bbox); } else { bbox = null; } optionalContent = null; if (!dict.has("OC")) { _context2.next = 10; break; } _context2.next = 8; return this.parseMarkedContentProps(dict.get("OC"), resources); case 8: optionalContent = _context2.sent; operatorList.addOp(_util.OPS.beginMarkedContentProps, ["OC", optionalContent]); case 10: group = dict.get("Group"); if (!group) { _context2.next = 30; break; } groupOptions = { matrix: matrix, bbox: bbox, smask: smask, isolated: false, knockout: false }; groupSubtype = group.get("S"); colorSpace = null; if (!(0, _primitives.isName)(groupSubtype, "Transparency")) { _context2.next = 28; break; } groupOptions.isolated = group.get("I") || false; groupOptions.knockout = group.get("K") || false; if (!group.has("CS")) { _context2.next = 28; break; } cs = group.getRaw("CS"); cachedColorSpace = _colorspace.ColorSpace.getCached(cs, this.xref, localColorSpaceCache); if (!cachedColorSpace) { _context2.next = 25; break; } colorSpace = cachedColorSpace; _context2.next = 28; break; case 25: _context2.next = 27; return this.parseColorSpace({ cs: cs, resources: resources, localColorSpaceCache: localColorSpaceCache }); case 27: colorSpace = _context2.sent; case 28: if (smask && smask.backdrop) { colorSpace = colorSpace || _colorspace.ColorSpace.singletons.rgb; smask.backdrop = colorSpace.getRgb(smask.backdrop, 0); } operatorList.addOp(_util.OPS.beginGroup, [groupOptions]); case 30: operatorList.addOp(_util.OPS.paintFormXObjectBegin, [matrix, bbox]); return _context2.abrupt("return", this.getOperatorList({ stream: xobj, task: task, resources: dict.get("Resources") || resources, operatorList: operatorList, initialState: initialState }).then(function () { operatorList.addOp(_util.OPS.paintFormXObjectEnd, []); if (group) { operatorList.addOp(_util.OPS.endGroup, [groupOptions]); } if (optionalContent) { operatorList.addOp(_util.OPS.endMarkedContent, []); } })); case 32: case "end": return _context2.stop(); } } }, _callee2, this); })); function buildFormXObject(_x2, _x3, _x4, _x5, _x6, _x7, _x8) { return _buildFormXObject.apply(this, arguments); } return buildFormXObject; }() }, { key: "_sendImgData", value: function _sendImgData(objId, imgData) { var cacheGlobally = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var transfers = imgData ? [imgData.data.buffer] : null; if (this.parsingType3Font || cacheGlobally) { return this.handler.send("commonobj", [objId, "Image", imgData], transfers); } return this.handler.send("obj", [objId, this.pageIndex, "Image", imgData], transfers); } }, { key: "buildPaintImageXObject", value: function () { var _buildPaintImageXObject = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee3(_ref3) { var _this = this; var resources, image, _ref3$isInline, isInline, operatorList, cacheKey, localImageCache, localColorSpaceCache, dict, imageRef, w, h, maxImageSize, imageMask, imgData, args, width, height, bitStrideLength, imgArray, decode, softMask, mask, SMALL_IMAGE_DIMENSIONS, imageObj, objId, cacheGlobally; return _regenerator["default"].wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: resources = _ref3.resources, image = _ref3.image, _ref3$isInline = _ref3.isInline, isInline = _ref3$isInline === void 0 ? false : _ref3$isInline, operatorList = _ref3.operatorList, cacheKey = _ref3.cacheKey, localImageCache = _ref3.localImageCache, localColorSpaceCache = _ref3.localColorSpaceCache; dict = image.dict; imageRef = dict.objId; w = dict.get("Width", "W"); h = dict.get("Height", "H"); if (!(!(w && (0, _util.isNum)(w)) || !(h && (0, _util.isNum)(h)))) { _context3.next = 8; break; } (0, _util.warn)("Image dimensions are missing, or not numbers."); return _context3.abrupt("return", undefined); case 8: maxImageSize = this.options.maxImageSize; if (!(maxImageSize !== -1 && w * h > maxImageSize)) { _context3.next = 12; break; } (0, _util.warn)("Image exceeded maximum allowed size and was removed."); return _context3.abrupt("return", undefined); case 12: imageMask = dict.get("ImageMask", "IM") || false; if (!imageMask) { _context3.next = 25; break; } width = dict.get("Width", "W"); height = dict.get("Height", "H"); bitStrideLength = width + 7 >> 3; imgArray = image.getBytes(bitStrideLength * height, true); decode = dict.getArray("Decode", "D"); imgData = _image.PDFImage.createMask({ imgArray: imgArray, width: width, height: height, imageIsFromDecodeStream: image instanceof _stream.DecodeStream, inverseDecode: !!decode && decode[0] > 0 }); imgData.cached = !!cacheKey; args = [imgData]; operatorList.addOp(_util.OPS.paintImageMaskXObject, args); if (cacheKey) { localImageCache.set(cacheKey, imageRef, { fn: _util.OPS.paintImageMaskXObject, args: args }); } return _context3.abrupt("return", undefined); case 25: softMask = dict.get("SMask", "SM") || false; mask = dict.get("Mask") || false; SMALL_IMAGE_DIMENSIONS = 200; if (!(isInline && !softMask && !mask && w + h < SMALL_IMAGE_DIMENSIONS)) { _context3.next = 33; break; } imageObj = new _image.PDFImage({ xref: this.xref, res: resources, image: image, isInline: isInline, pdfFunctionFactory: this._pdfFunctionFactory, localColorSpaceCache: localColorSpaceCache }); imgData = imageObj.createImageData(true); operatorList.addOp(_util.OPS.paintInlineImageXObject, [imgData]); return _context3.abrupt("return", undefined); case 33: objId = "img_".concat(this.idFactory.createObjId()), cacheGlobally = false; if (this.parsingType3Font) { objId = "".concat(this.idFactory.getDocId(), "_type3_").concat(objId); } else if (imageRef) { cacheGlobally = this.globalImageCache.shouldCache(imageRef, this.pageIndex); if (cacheGlobally) { objId = "".concat(this.idFactory.getDocId(), "_").concat(objId); } } operatorList.addDependency(objId); args = [objId, w, h]; _image.PDFImage.buildImage({ xref: this.xref, res: resources, image: image, isInline: isInline, pdfFunctionFactory: this._pdfFunctionFactory, localColorSpaceCache: localColorSpaceCache }).then(function (imageObj) { imgData = imageObj.createImageData(false); if (cacheKey && imageRef && cacheGlobally) { _this.globalImageCache.addByteSize(imageRef, imgData.data.length); } return _this._sendImgData(objId, imgData, cacheGlobally); })["catch"](function (reason) { (0, _util.warn)("Unable to decode image \"".concat(objId, "\": \"").concat(reason, "\".")); return _this._sendImgData(objId, null, cacheGlobally); }); operatorList.addOp(_util.OPS.paintImageXObject, args); if (cacheKey) { localImageCache.set(cacheKey, imageRef, { fn: _util.OPS.paintImageXObject, args: args }); if (imageRef) { (0, _util.assert)(!isInline, "Cannot cache an inline image globally."); this.globalImageCache.addPageIndex(imageRef, this.pageIndex); if (cacheGlobally) { this.globalImageCache.setData(imageRef, { objId: objId, fn: _util.OPS.paintImageXObject, args: args, byteSize: 0 }); } } } return _context3.abrupt("return", undefined); case 41: case "end": return _context3.stop(); } } }, _callee3, this); })); function buildPaintImageXObject(_x9) { return _buildPaintImageXObject.apply(this, arguments); } return buildPaintImageXObject; }() }, { key: "handleSMask", value: function handleSMask(smask, resources, operatorList, task, stateManager, localColorSpaceCache) { var smaskContent = smask.get("G"); var smaskOptions = { subtype: smask.get("S").name, backdrop: smask.get("BC") }; var transferObj = smask.get("TR"); if ((0, _function.isPDFFunction)(transferObj)) { var transferFn = this._pdfFunctionFactory.create(transferObj); var transferMap = new Uint8Array(256); var tmp = new Float32Array(1); for (var i = 0; i < 256; i++) { tmp[0] = i / 255; transferFn(tmp, 0, tmp, 0); transferMap[i] = tmp[0] * 255 | 0; } smaskOptions.transferMap = transferMap; } return this.buildFormXObject(resources, smaskContent, smaskOptions, operatorList, task, stateManager.state.clone(), localColorSpaceCache); } }, { key: "handleTransferFunction", value: function handleTransferFunction(tr) { var transferArray; if (Array.isArray(tr)) { transferArray = tr; } else if ((0, _function.isPDFFunction)(tr)) { transferArray = [tr]; } else { return null; } var transferMaps = []; var numFns = 0, numEffectfulFns = 0; var _iterator4 = _createForOfIteratorHelper(transferArray), _step4; try { for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { var entry = _step4.value; var transferObj = this.xref.fetchIfRef(entry); numFns++; if ((0, _primitives.isName)(transferObj, "Identity")) { transferMaps.push(null); continue; } else if (!(0, _function.isPDFFunction)(transferObj)) { return null; } var transferFn = this._pdfFunctionFactory.create(transferObj); var transferMap = new Uint8Array(256), tmp = new Float32Array(1); for (var j = 0; j < 256; j++) { tmp[0] = j / 255; transferFn(tmp, 0, tmp, 0); transferMap[j] = tmp[0] * 255 | 0; } transferMaps.push(transferMap); numEffectfulFns++; } } catch (err) { _iterator4.e(err); } finally { _iterator4.f(); } if (!(numFns === 1 || numFns === 4)) { return null; } if (numEffectfulFns === 0) { return null; } return transferMaps; } }, { key: "handleTilingType", value: function handleTilingType(fn, color, resources, pattern, patternDict, operatorList, task, cacheKey, localTilingPatternCache) { var _this2 = this; var tilingOpList = new _operator_list.OperatorList(); var patternResources = _primitives.Dict.merge({ xref: this.xref, dictArray: [patternDict.get("Resources"), resources] }); return this.getOperatorList({ stream: pattern, task: task, resources: patternResources, operatorList: tilingOpList }).then(function () { var operatorListIR = tilingOpList.getIR(); var tilingPatternIR = (0, _pattern.getTilingPatternIR)(operatorListIR, patternDict, color); operatorList.addDependencies(tilingOpList.dependencies); operatorList.addOp(fn, tilingPatternIR); if (cacheKey) { localTilingPatternCache.set(cacheKey, patternDict.objId, { operatorListIR: operatorListIR, dict: patternDict }); } })["catch"](function (reason) { if (reason instanceof _util.AbortException) { return; } if (_this2.options.ignoreErrors) { _this2.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorTilingPattern }); (0, _util.warn)("handleTilingType - ignoring pattern: \"".concat(reason, "\".")); return; } throw reason; }); } }, { key: "handleSetFont", value: function handleSetFont(resources, fontArgs, fontRef, operatorList, task, state) { var _this3 = this; var fallbackFontDict = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null; var fontName; if (fontArgs) { fontArgs = fontArgs.slice(); fontName = fontArgs[0].name; } return this.loadFont(fontName, fontRef, resources, fallbackFontDict).then(function (translated) { if (!translated.font.isType3Font) { return translated; } return translated.loadType3Data(_this3, resources, task).then(function () { operatorList.addDependencies(translated.type3Dependencies); return translated; })["catch"](function (reason) { _this3.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadType3 }); return new TranslatedFont({ loadedName: "g_font_error", font: new _fonts.ErrorFont("Type3 font load error: ".concat(reason)), dict: translated.font, extraProperties: _this3.options.fontExtraProperties }); }); }).then(function (translated) { state.font = translated.font; translated.send(_this3.handler); return translated.loadedName; }); } }, { key: "handleText", value: function handleText(chars, state) { var font = state.font; var glyphs = font.charsToGlyphs(chars); if (font.data) { var isAddToPathSet = !!(state.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG); if (isAddToPathSet || state.fillColorSpace.name === "Pattern" || font.disableFontFace || this.options.disableFontFace) { PartialEvaluator.buildFontPaths(font, glyphs, this.handler); } } return glyphs; } }, { key: "ensureStateFont", value: function ensureStateFont(state) { if (state.font) { return; } var reason = new _util.FormatError("Missing setFont (Tf) operator before text rendering operator."); if (this.options.ignoreErrors) { this.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorFontState }); (0, _util.warn)("ensureStateFont: \"".concat(reason, "\".")); return; } throw reason; } }, { key: "setGState", value: function () { var _setGState = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee4(_ref4) { var _this4 = this; var resources, gState, operatorList, cacheKey, task, stateManager, localGStateCache, localColorSpaceCache, gStateRef, isSimpleGState, gStateObj, gStateKeys, promise, _loop, i, ii; return _regenerator["default"].wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: resources = _ref4.resources, gState = _ref4.gState, operatorList = _ref4.operatorList, cacheKey = _ref4.cacheKey, task = _ref4.task, stateManager = _ref4.stateManager, localGStateCache = _ref4.localGStateCache, localColorSpaceCache = _ref4.localColorSpaceCache; gStateRef = gState.objId; isSimpleGState = true; gStateObj = []; gStateKeys = gState.getKeys(); promise = Promise.resolve(); _loop = function _loop() { var key = gStateKeys[i]; var value = gState.get(key); switch (key) { case "Type": break; case "LW": case "LC": case "LJ": case "ML": case "D": case "RI": case "FL": case "CA": case "ca": gStateObj.push([key, value]); break; case "Font": isSimpleGState = false; promise = promise.then(function () { return _this4.handleSetFont(resources, null, value[0], operatorList, task, stateManager.state).then(function (loadedName) { operatorList.addDependency(loadedName); gStateObj.push([key, [loadedName, value[1]]]); }); }); break; case "BM": gStateObj.push([key, normalizeBlendMode(value)]); break; case "SMask": if ((0, _primitives.isName)(value, "None")) { gStateObj.push([key, false]); break; } if ((0, _primitives.isDict)(value)) { isSimpleGState = false; promise = promise.then(function () { return _this4.handleSMask(value, resources, operatorList, task, stateManager, localColorSpaceCache); }); gStateObj.push([key, true]); } else { (0, _util.warn)("Unsupported SMask type"); } break; case "TR": var transferMaps = _this4.handleTransferFunction(value); gStateObj.push([key, transferMaps]); break; case "OP": case "op": case "OPM": case "BG": case "BG2": case "UCR": case "UCR2": case "TR2": case "HT": case "SM": case "SA": case "AIS": case "TK": (0, _util.info)("graphic state operator " + key); break; default: (0, _util.info)("Unknown graphic state operator " + key); break; } }; for (i = 0, ii = gStateKeys.length; i < ii; i++) { _loop(); } return _context4.abrupt("return", promise.then(function () { if (gStateObj.length > 0) { operatorList.addOp(_util.OPS.setGState, [gStateObj]); } if (isSimpleGState) { localGStateCache.set(cacheKey, gStateRef, gStateObj); } })); case 9: case "end": return _context4.stop(); } } }, _callee4); })); function setGState(_x10) { return _setGState.apply(this, arguments); } return setGState; }() }, { key: "loadFont", value: function loadFont(fontName, font, resources) { var _this5 = this; var fallbackFontDict = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; var errorFont = /*#__PURE__*/function () { var _ref5 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee5() { return _regenerator["default"].wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: return _context5.abrupt("return", new TranslatedFont({ loadedName: "g_font_error", font: new _fonts.ErrorFont("Font \"".concat(fontName, "\" is not available.")), dict: font, extraProperties: _this5.options.fontExtraProperties })); case 1: case "end": return _context5.stop(); } } }, _callee5); })); return function errorFont() { return _ref5.apply(this, arguments); }; }(); var fontRef, xref = this.xref; if (font) { if (!(0, _primitives.isRef)(font)) { throw new _util.FormatError('The "font" object should be a reference.'); } fontRef = font; } else { var fontRes = resources.get("Font"); if (fontRes) { fontRef = fontRes.getRaw(fontName); } } if (!fontRef) { var partialMsg = "Font \"".concat(fontName || font && font.toString(), "\" is not available"); if (!this.options.ignoreErrors && !this.parsingType3Font) { (0, _util.warn)("".concat(partialMsg, ".")); return errorFont(); } this.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorFontMissing }); (0, _util.warn)("".concat(partialMsg, " -- attempting to fallback to a default font.")); if (fallbackFontDict) { fontRef = fallbackFontDict; } else { fontRef = PartialEvaluator.fallbackFontDict; } } if (this.fontCache.has(fontRef)) { return this.fontCache.get(fontRef); } font = xref.fetchIfRef(fontRef); if (!(0, _primitives.isDict)(font)) { return errorFont(); } if (font.cacheKey && this.fontCache.has(font.cacheKey)) { return this.fontCache.get(font.cacheKey); } var fontCapability = (0, _util.createPromiseCapability)(); var preEvaluatedFont; try { preEvaluatedFont = this.preEvaluateFont(font); } catch (reason) { (0, _util.warn)("loadFont - preEvaluateFont failed: \"".concat(reason, "\".")); return errorFont(); } var _preEvaluatedFont = preEvaluatedFont, descriptor = _preEvaluatedFont.descriptor, hash = _preEvaluatedFont.hash; var fontRefIsRef = (0, _primitives.isRef)(fontRef), fontID; if (fontRefIsRef) { fontID = "f".concat(fontRef.toString()); } if (hash && (0, _primitives.isDict)(descriptor)) { if (!descriptor.fontAliases) { descriptor.fontAliases = Object.create(null); } var fontAliases = descriptor.fontAliases; if (fontAliases[hash]) { var aliasFontRef = fontAliases[hash].aliasRef; if (fontRefIsRef && aliasFontRef && this.fontCache.has(aliasFontRef)) { this.fontCache.putAlias(fontRef, aliasFontRef); return this.fontCache.get(fontRef); } } else { fontAliases[hash] = { fontID: this.idFactory.createFontId() }; } if (fontRefIsRef) { fontAliases[hash].aliasRef = fontRef; } fontID = fontAliases[hash].fontID; } if (fontRefIsRef) { this.fontCache.put(fontRef, fontCapability.promise); } else { if (!fontID) { fontID = this.idFactory.createFontId(); } font.cacheKey = "cacheKey_".concat(fontID); this.fontCache.put(font.cacheKey, fontCapability.promise); } (0, _util.assert)(fontID && fontID.startsWith("f"), 'The "fontID" must be (correctly) defined.'); font.loadedName = "".concat(this.idFactory.getDocId(), "_").concat(fontID); this.translateFont(preEvaluatedFont).then(function (translatedFont) { if (translatedFont.fontType !== undefined) { var xrefFontStats = xref.stats.fontTypes; xrefFontStats[translatedFont.fontType] = true; } fontCapability.resolve(new TranslatedFont({ loadedName: font.loadedName, font: translatedFont, dict: font, extraProperties: _this5.options.fontExtraProperties })); })["catch"](function (reason) { _this5.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorFontTranslate }); (0, _util.warn)("loadFont - translateFont failed: \"".concat(reason, "\".")); try { var fontFile3 = descriptor && descriptor.get("FontFile3"); var subtype = fontFile3 && fontFile3.get("Subtype"); var fontType = (0, _fonts.getFontType)(preEvaluatedFont.type, subtype && subtype.name); var xrefFontStats = xref.stats.fontTypes; xrefFontStats[fontType] = true; } catch (ex) {} fontCapability.resolve(new TranslatedFont({ loadedName: font.loadedName, font: new _fonts.ErrorFont(reason instanceof Error ? reason.message : reason), dict: font, extraProperties: _this5.options.fontExtraProperties })); }); return fontCapability.promise; } }, { key: "buildPath", value: function buildPath(operatorList, fn, args) { var parsingText = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; var lastIndex = operatorList.length - 1; if (!args) { args = []; } if (lastIndex < 0 || operatorList.fnArray[lastIndex] !== _util.OPS.constructPath) { if (parsingText) { (0, _util.warn)("Encountered path operator \"".concat(fn, "\" inside of a text object.")); operatorList.addOp(_util.OPS.save, null); } operatorList.addOp(_util.OPS.constructPath, [[fn], args]); if (parsingText) { operatorList.addOp(_util.OPS.restore, null); } } else { var opArgs = operatorList.argsArray[lastIndex]; opArgs[0].push(fn); Array.prototype.push.apply(opArgs[1], args); } } }, { key: "parseColorSpace", value: function parseColorSpace(_ref6) { var _this6 = this; var cs = _ref6.cs, resources = _ref6.resources, localColorSpaceCache = _ref6.localColorSpaceCache; return _colorspace.ColorSpace.parseAsync({ cs: cs, xref: this.xref, resources: resources, pdfFunctionFactory: this._pdfFunctionFactory, localColorSpaceCache: localColorSpaceCache })["catch"](function (reason) { if (reason instanceof _util.AbortException) { return null; } if (_this6.options.ignoreErrors) { _this6.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorColorSpace }); (0, _util.warn)("parseColorSpace - ignoring ColorSpace: \"".concat(reason, "\".")); return null; } throw reason; }); } }, { key: "handleColorN", value: function handleColorN(operatorList, fn, args, cs, patterns, resources, task, localColorSpaceCache, localTilingPatternCache) { var patternName = args.pop(); if (patternName instanceof _primitives.Name) { var name = patternName.name; var localTilingPattern = localTilingPatternCache.getByName(name); if (localTilingPattern) { try { var color = cs.base ? cs.base.getRgb(args, 0) : null; var tilingPatternIR = (0, _pattern.getTilingPatternIR)(localTilingPattern.operatorListIR, localTilingPattern.dict, color); operatorList.addOp(fn, tilingPatternIR); return undefined; } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } } } var pattern = patterns.get(name); if (pattern) { var dict = (0, _primitives.isStream)(pattern) ? pattern.dict : pattern; var typeNum = dict.get("PatternType"); if (typeNum === PatternType.TILING) { var _color = cs.base ? cs.base.getRgb(args, 0) : null; return this.handleTilingType(fn, _color, resources, pattern, dict, operatorList, task, name, localTilingPatternCache); } else if (typeNum === PatternType.SHADING) { var shading = dict.get("Shading"); var matrix = dict.getArray("Matrix"); pattern = _pattern.Pattern.parseShading(shading, matrix, this.xref, resources, this.handler, this._pdfFunctionFactory, localColorSpaceCache); operatorList.addOp(fn, pattern.getIR()); return undefined; } throw new _util.FormatError("Unknown PatternType: ".concat(typeNum)); } } throw new _util.FormatError("Unknown PatternName: ".concat(patternName)); } }, { key: "parseMarkedContentProps", value: function () { var _parseMarkedContentProps = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee6(contentProperties, resources) { var optionalContent, properties, optionalContentType, optionalContentGroups, groupIds, expression; return _regenerator["default"].wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: if (!(0, _primitives.isName)(contentProperties)) { _context6.next = 5; break; } properties = resources.get("Properties"); optionalContent = properties.get(contentProperties.name); _context6.next = 10; break; case 5: if (!(0, _primitives.isDict)(contentProperties)) { _context6.next = 9; break; } optionalContent = contentProperties; _context6.next = 10; break; case 9: throw new _util.FormatError("Optional content properties malformed."); case 10: optionalContentType = optionalContent.get("Type").name; if (!(optionalContentType === "OCG")) { _context6.next = 15; break; } return _context6.abrupt("return", { type: optionalContentType, id: optionalContent.objId }); case 15: if (!(optionalContentType === "OCMD")) { _context6.next = 27; break; } optionalContentGroups = optionalContent.get("OCGs"); if (!(Array.isArray(optionalContentGroups) || (0, _primitives.isDict)(optionalContentGroups))) { _context6.next = 25; break; } groupIds = []; if (Array.isArray(optionalContentGroups)) { optionalContent.get("OCGs").forEach(function (ocg) { groupIds.push(ocg.toString()); }); } else { groupIds.push(optionalContentGroups.objId); } expression = null; if (optionalContent.get("VE")) { expression = true; } return _context6.abrupt("return", { type: optionalContentType, ids: groupIds, policy: (0, _primitives.isName)(optionalContent.get("P")) ? optionalContent.get("P").name : null, expression: expression }); case 25: if (!(0, _primitives.isRef)(optionalContentGroups)) { _context6.next = 27; break; } return _context6.abrupt("return", { type: optionalContentType, id: optionalContentGroups.toString() }); case 27: return _context6.abrupt("return", null); case 28: case "end": return _context6.stop(); } } }, _callee6); })); function parseMarkedContentProps(_x11, _x12) { return _parseMarkedContentProps.apply(this, arguments); } return parseMarkedContentProps; }() }, { key: "getOperatorList", value: function getOperatorList(_ref7) { var _this7 = this; var stream = _ref7.stream, task = _ref7.task, resources = _ref7.resources, operatorList = _ref7.operatorList, _ref7$initialState = _ref7.initialState, initialState = _ref7$initialState === void 0 ? null : _ref7$initialState, _ref7$fallbackFontDic = _ref7.fallbackFontDict, fallbackFontDict = _ref7$fallbackFontDic === void 0 ? null : _ref7$fallbackFontDic; resources = resources || _primitives.Dict.empty; initialState = initialState || new EvalState(); if (!operatorList) { throw new Error('getOperatorList: missing "operatorList" parameter'); } var self = this; var xref = this.xref; var parsingText = false; var localImageCache = new _image_utils.LocalImageCache(); var localColorSpaceCache = new _image_utils.LocalColorSpaceCache(); var localGStateCache = new _image_utils.LocalGStateCache(); var localTilingPatternCache = new _image_utils.LocalTilingPatternCache(); var xobjs = resources.get("XObject") || _primitives.Dict.empty; var patterns = resources.get("Pattern") || _primitives.Dict.empty; var stateManager = new StateManager(initialState); var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager); var timeSlotManager = new TimeSlotManager(); function closePendingRestoreOPS(argument) { for (var i = 0, ii = preprocessor.savedStatesDepth; i < ii; i++) { operatorList.addOp(_util.OPS.restore, []); } } return new Promise(function promiseBody(resolve, reject) { var next = function next(promise) { Promise.all([promise, operatorList.ready]).then(function () { try { promiseBody(resolve, reject); } catch (ex) { reject(ex); } }, reject); }; task.ensureNotTerminated(); timeSlotManager.reset(); var stop, operation = {}, i, ii, cs, name; while (!(stop = timeSlotManager.check())) { operation.args = null; if (!preprocessor.read(operation)) { break; } var args = operation.args; var fn = operation.fn; switch (fn | 0) { case _util.OPS.paintXObject: name = args[0].name; if (name) { var localImage = localImageCache.getByName(name); if (localImage) { operatorList.addOp(localImage.fn, localImage.args); args = null; continue; } } next(new Promise(function (resolveXObject, rejectXObject) { if (!name) { throw new _util.FormatError("XObject must be referred to by name."); } var xobj = xobjs.getRaw(name); if (xobj instanceof _primitives.Ref) { var _localImage = localImageCache.getByRef(xobj); if (_localImage) { operatorList.addOp(_localImage.fn, _localImage.args); resolveXObject(); return; } var globalImage = self.globalImageCache.getData(xobj, self.pageIndex); if (globalImage) { operatorList.addDependency(globalImage.objId); operatorList.addOp(globalImage.fn, globalImage.args); resolveXObject(); return; } xobj = xref.fetch(xobj); } if (!(0, _primitives.isStream)(xobj)) { throw new _util.FormatError("XObject should be a stream"); } var type = xobj.dict.get("Subtype"); if (!(0, _primitives.isName)(type)) { throw new _util.FormatError("XObject should have a Name subtype"); } if (type.name === "Form") { stateManager.save(); self.buildFormXObject(resources, xobj, null, operatorList, task, stateManager.state.clone(), localColorSpaceCache).then(function () { stateManager.restore(); resolveXObject(); }, rejectXObject); return; } else if (type.name === "Image") { self.buildPaintImageXObject({ resources: resources, image: xobj, operatorList: operatorList, cacheKey: name, localImageCache: localImageCache, localColorSpaceCache: localColorSpaceCache }).then(resolveXObject, rejectXObject); return; } else if (type.name === "PS") { (0, _util.info)("Ignored XObject subtype PS"); } else { throw new _util.FormatError("Unhandled XObject subtype ".concat(type.name)); } resolveXObject(); })["catch"](function (reason) { if (reason instanceof _util.AbortException) { return; } if (self.options.ignoreErrors) { self.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorXObject }); (0, _util.warn)("getOperatorList - ignoring XObject: \"".concat(reason, "\".")); return; } throw reason; })); return; case _util.OPS.setFont: var fontSize = args[1]; next(self.handleSetFont(resources, args, null, operatorList, task, stateManager.state, fallbackFontDict).then(function (loadedName) { operatorList.addDependency(loadedName); operatorList.addOp(_util.OPS.setFont, [loadedName, fontSize]); })); return; case _util.OPS.beginText: parsingText = true; break; case _util.OPS.endText: parsingText = false; break; case _util.OPS.endInlineImage: var cacheKey = args[0].cacheKey; if (cacheKey) { var _localImage2 = localImageCache.getByName(cacheKey); if (_localImage2) { operatorList.addOp(_localImage2.fn, _localImage2.args); args = null; continue; } } next(self.buildPaintImageXObject({ resources: resources, image: args[0], isInline: true, operatorList: operatorList, cacheKey: cacheKey, localImageCache: localImageCache, localColorSpaceCache: localColorSpaceCache })); return; case _util.OPS.showText: if (!stateManager.state.font) { self.ensureStateFont(stateManager.state); continue; } args[0] = self.handleText(args[0], stateManager.state); break; case _util.OPS.showSpacedText: if (!stateManager.state.font) { self.ensureStateFont(stateManager.state); continue; } var arr = args[0]; var combinedGlyphs = []; var arrLength = arr.length; var state = stateManager.state; for (i = 0; i < arrLength; ++i) { var arrItem = arr[i]; if ((0, _util.isString)(arrItem)) { Array.prototype.push.apply(combinedGlyphs, self.handleText(arrItem, state)); } else if ((0, _util.isNum)(arrItem)) { combinedGlyphs.push(arrItem); } } args[0] = combinedGlyphs; fn = _util.OPS.showText; break; case _util.OPS.nextLineShowText: if (!stateManager.state.font) { self.ensureStateFont(stateManager.state); continue; } operatorList.addOp(_util.OPS.nextLine); args[0] = self.handleText(args[0], stateManager.state); fn = _util.OPS.showText; break; case _util.OPS.nextLineSetSpacingShowText: if (!stateManager.state.font) { self.ensureStateFont(stateManager.state); continue; } operatorList.addOp(_util.OPS.nextLine); operatorList.addOp(_util.OPS.setWordSpacing, [args.shift()]); operatorList.addOp(_util.OPS.setCharSpacing, [args.shift()]); args[0] = self.handleText(args[0], stateManager.state); fn = _util.OPS.showText; break; case _util.OPS.setTextRenderingMode: stateManager.state.textRenderingMode = args[0]; break; case _util.OPS.setFillColorSpace: { var cachedColorSpace = _colorspace.ColorSpace.getCached(args[0], xref, localColorSpaceCache); if (cachedColorSpace) { stateManager.state.fillColorSpace = cachedColorSpace; continue; } next(self.parseColorSpace({ cs: args[0], resources: resources, localColorSpaceCache: localColorSpaceCache }).then(function (colorSpace) { if (colorSpace) { stateManager.state.fillColorSpace = colorSpace; } })); return; } case _util.OPS.setStrokeColorSpace: { var _cachedColorSpace = _colorspace.ColorSpace.getCached(args[0], xref, localColorSpaceCache); if (_cachedColorSpace) { stateManager.state.strokeColorSpace = _cachedColorSpace; continue; } next(self.parseColorSpace({ cs: args[0], resources: resources, localColorSpaceCache: localColorSpaceCache }).then(function (colorSpace) { if (colorSpace) { stateManager.state.strokeColorSpace = colorSpace; } })); return; } case _util.OPS.setFillColor: cs = stateManager.state.fillColorSpace; args = cs.getRgb(args, 0); fn = _util.OPS.setFillRGBColor; break; case _util.OPS.setStrokeColor: cs = stateManager.state.strokeColorSpace; args = cs.getRgb(args, 0); fn = _util.OPS.setStrokeRGBColor; break; case _util.OPS.setFillGray: stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.gray; args = _colorspace.ColorSpace.singletons.gray.getRgb(args, 0); fn = _util.OPS.setFillRGBColor; break; case _util.OPS.setStrokeGray: stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.gray; args = _colorspace.ColorSpace.singletons.gray.getRgb(args, 0); fn = _util.OPS.setStrokeRGBColor; break; case _util.OPS.setFillCMYKColor: stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.cmyk; args = _colorspace.ColorSpace.singletons.cmyk.getRgb(args, 0); fn = _util.OPS.setFillRGBColor; break; case _util.OPS.setStrokeCMYKColor: stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.cmyk; args = _colorspace.ColorSpace.singletons.cmyk.getRgb(args, 0); fn = _util.OPS.setStrokeRGBColor; break; case _util.OPS.setFillRGBColor: stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.rgb; args = _colorspace.ColorSpace.singletons.rgb.getRgb(args, 0); break; case _util.OPS.setStrokeRGBColor: stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.rgb; args = _colorspace.ColorSpace.singletons.rgb.getRgb(args, 0); break; case _util.OPS.setFillColorN: cs = stateManager.state.fillColorSpace; if (cs.name === "Pattern") { next(self.handleColorN(operatorList, _util.OPS.setFillColorN, args, cs, patterns, resources, task, localColorSpaceCache, localTilingPatternCache)); return; } args = cs.getRgb(args, 0); fn = _util.OPS.setFillRGBColor; break; case _util.OPS.setStrokeColorN: cs = stateManager.state.strokeColorSpace; if (cs.name === "Pattern") { next(self.handleColorN(operatorList, _util.OPS.setStrokeColorN, args, cs, patterns, resources, task, localColorSpaceCache, localTilingPatternCache)); return; } args = cs.getRgb(args, 0); fn = _util.OPS.setStrokeRGBColor; break; case _util.OPS.shadingFill: var shadingRes = resources.get("Shading"); if (!shadingRes) { throw new _util.FormatError("No shading resource found"); } var shading = shadingRes.get(args[0].name); if (!shading) { throw new _util.FormatError("No shading object found"); } var shadingFill = _pattern.Pattern.parseShading(shading, null, xref, resources, self.handler, self._pdfFunctionFactory, localColorSpaceCache); var patternIR = shadingFill.getIR(); args = [patternIR]; fn = _util.OPS.shadingFill; break; case _util.OPS.setGState: name = args[0].name; if (name) { var localGStateObj = localGStateCache.getByName(name); if (localGStateObj) { if (localGStateObj.length > 0) { operatorList.addOp(_util.OPS.setGState, [localGStateObj]); } args = null; continue; } } next(new Promise(function (resolveGState, rejectGState) { if (!name) { throw new _util.FormatError("GState must be referred to by name."); } var extGState = resources.get("ExtGState"); if (!(extGState instanceof _primitives.Dict)) { throw new _util.FormatError("ExtGState should be a dictionary."); } var gState = extGState.get(name); if (!(gState instanceof _primitives.Dict)) { throw new _util.FormatError("GState should be a dictionary."); } self.setGState({ resources: resources, gState: gState, operatorList: operatorList, cacheKey: name, task: task, stateManager: stateManager, localGStateCache: localGStateCache, localColorSpaceCache: localColorSpaceCache }).then(resolveGState, rejectGState); })["catch"](function (reason) { if (reason instanceof _util.AbortException) { return; } if (self.options.ignoreErrors) { self.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorExtGState }); (0, _util.warn)("getOperatorList - ignoring ExtGState: \"".concat(reason, "\".")); return; } throw reason; })); return; case _util.OPS.moveTo: case _util.OPS.lineTo: case _util.OPS.curveTo: case _util.OPS.curveTo2: case _util.OPS.curveTo3: case _util.OPS.closePath: case _util.OPS.rectangle: self.buildPath(operatorList, fn, args, parsingText); continue; case _util.OPS.markPoint: case _util.OPS.markPointProps: case _util.OPS.beginCompat: case _util.OPS.endCompat: continue; case _util.OPS.beginMarkedContentProps: if (!(0, _primitives.isName)(args[0])) { (0, _util.warn)("Expected name for beginMarkedContentProps arg0=".concat(args[0])); continue; } if (args[0].name === "OC") { next(self.parseMarkedContentProps(args[1], resources).then(function (data) { operatorList.addOp(_util.OPS.beginMarkedContentProps, ["OC", data]); })["catch"](function (reason) { if (reason instanceof _util.AbortException) { return; } if (self.options.ignoreErrors) { self.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorMarkedContent }); (0, _util.warn)("getOperatorList - ignoring beginMarkedContentProps: \"".concat(reason, "\".")); return; } throw reason; })); return; } args = [args[0].name]; break; case _util.OPS.beginMarkedContent: case _util.OPS.endMarkedContent: default: if (args !== null) { for (i = 0, ii = args.length; i < ii; i++) { if (args[i] instanceof _primitives.Dict) { break; } } if (i < ii) { (0, _util.warn)("getOperatorList - ignoring operator: " + fn); continue; } } } operatorList.addOp(fn, args); } if (stop) { next(deferred); return; } closePendingRestoreOPS(); resolve(); })["catch"](function (reason) { if (reason instanceof _util.AbortException) { return; } if (_this7.options.ignoreErrors) { _this7.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorOperatorList }); (0, _util.warn)("getOperatorList - ignoring errors during \"".concat(task.name, "\" ") + "task: \"".concat(reason, "\".")); closePendingRestoreOPS(); return; } throw reason; }); } }, { key: "getTextContent", value: function getTextContent(_ref8) { var _this8 = this; var stream = _ref8.stream, task = _ref8.task, resources = _ref8.resources, _ref8$stateManager = _ref8.stateManager, stateManager = _ref8$stateManager === void 0 ? null : _ref8$stateManager, _ref8$normalizeWhites = _ref8.normalizeWhitespace, normalizeWhitespace = _ref8$normalizeWhites === void 0 ? false : _ref8$normalizeWhites, _ref8$combineTextItem = _ref8.combineTextItems, combineTextItems = _ref8$combineTextItem === void 0 ? false : _ref8$combineTextItem, sink = _ref8.sink, _ref8$seenStyles = _ref8.seenStyles, seenStyles = _ref8$seenStyles === void 0 ? Object.create(null) : _ref8$seenStyles; resources = resources || _primitives.Dict.empty; stateManager = stateManager || new StateManager(new TextState()); var WhitespaceRegexp = /\s/g; var textContent = { items: [], styles: Object.create(null) }; var textContentItem = { initialized: false, str: [], width: 0, height: 0, vertical: false, lastAdvanceWidth: 0, lastAdvanceHeight: 0, textAdvanceScale: 0, spaceWidth: 0, fakeSpaceMin: Infinity, fakeMultiSpaceMin: Infinity, fakeMultiSpaceMax: -0, textRunBreakAllowed: false, transform: null, fontName: null }; var SPACE_FACTOR = 0.3; var MULTI_SPACE_FACTOR = 1.5; var MULTI_SPACE_FACTOR_MAX = 4; var self = this; var xref = this.xref; var xobjs = null; var emptyXObjectCache = new _image_utils.LocalImageCache(); var emptyGStateCache = new _image_utils.LocalGStateCache(); var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager); var textState; function ensureTextContentItem() { if (textContentItem.initialized) { return textContentItem; } var font = textState.font; if (!(font.loadedName in seenStyles)) { seenStyles[font.loadedName] = true; textContent.styles[font.loadedName] = { fontFamily: font.fallbackName, ascent: font.ascent, descent: font.descent, vertical: font.vertical }; } textContentItem.fontName = font.loadedName; var tsm = [textState.fontSize * textState.textHScale, 0, 0, textState.fontSize, 0, textState.textRise]; if (font.isType3Font && textState.fontSize <= 1 && !(0, _util.isArrayEqual)(textState.fontMatrix, _util.FONT_IDENTITY_MATRIX)) { var glyphHeight = font.bbox[3] - font.bbox[1]; if (glyphHeight > 0) { tsm[3] *= glyphHeight * textState.fontMatrix[3]; } } var trm = _util.Util.transform(textState.ctm, _util.Util.transform(textState.textMatrix, tsm)); textContentItem.transform = trm; if (!font.vertical) { textContentItem.width = 0; textContentItem.height = Math.sqrt(trm[2] * trm[2] + trm[3] * trm[3]); textContentItem.vertical = false; } else { textContentItem.width = Math.sqrt(trm[0] * trm[0] + trm[1] * trm[1]); textContentItem.height = 0; textContentItem.vertical = true; } var a = textState.textLineMatrix[0]; var b = textState.textLineMatrix[1]; var scaleLineX = Math.sqrt(a * a + b * b); a = textState.ctm[0]; b = textState.ctm[1]; var scaleCtmX = Math.sqrt(a * a + b * b); textContentItem.textAdvanceScale = scaleCtmX * scaleLineX; textContentItem.lastAdvanceWidth = 0; textContentItem.lastAdvanceHeight = 0; var spaceWidth = font.spaceWidth / 1000 * textState.fontSize; if (spaceWidth) { textContentItem.spaceWidth = spaceWidth; textContentItem.fakeSpaceMin = spaceWidth * SPACE_FACTOR; textContentItem.fakeMultiSpaceMin = spaceWidth * MULTI_SPACE_FACTOR; textContentItem.fakeMultiSpaceMax = spaceWidth * MULTI_SPACE_FACTOR_MAX; textContentItem.textRunBreakAllowed = !font.isMonospace; } else { textContentItem.spaceWidth = 0; textContentItem.fakeSpaceMin = Infinity; textContentItem.fakeMultiSpaceMin = Infinity; textContentItem.fakeMultiSpaceMax = 0; textContentItem.textRunBreakAllowed = false; } textContentItem.initialized = true; return textContentItem; } function replaceWhitespace(str) { var i = 0, ii = str.length, code; while (i < ii && (code = str.charCodeAt(i)) >= 0x20 && code <= 0x7f) { i++; } return i < ii ? str.replace(WhitespaceRegexp, " ") : str; } function runBidiTransform(textChunk) { var str = textChunk.str.join(""); var bidiResult = (0, _bidi.bidi)(str, -1, textChunk.vertical); return { str: normalizeWhitespace ? replaceWhitespace(bidiResult.str) : bidiResult.str, dir: bidiResult.dir, width: textChunk.width, height: textChunk.height, transform: textChunk.transform, fontName: textChunk.fontName }; } function handleSetFont(fontName, fontRef) { return self.loadFont(fontName, fontRef, resources).then(function (translated) { textState.font = translated.font; textState.fontMatrix = translated.font.fontMatrix || _util.FONT_IDENTITY_MATRIX; }); } function buildTextContentItem(chars) { var font = textState.font; var textChunk = ensureTextContentItem(); var width = 0; var height = 0; var glyphs = font.charsToGlyphs(chars); for (var i = 0; i < glyphs.length; i++) { var glyph = glyphs[i]; var glyphWidth = null; if (font.vertical && glyph.vmetric) { glyphWidth = glyph.vmetric[0]; } else { glyphWidth = glyph.width; } var glyphUnicode = glyph.unicode; var NormalizedUnicodes = (0, _unicode.getNormalizedUnicodes)(); if (NormalizedUnicodes[glyphUnicode] !== undefined) { glyphUnicode = NormalizedUnicodes[glyphUnicode]; } glyphUnicode = (0, _unicode.reverseIfRtl)(glyphUnicode); var charSpacing = textState.charSpacing; if (glyph.isSpace) { var wordSpacing = textState.wordSpacing; charSpacing += wordSpacing; if (wordSpacing > 0) { addFakeSpaces(wordSpacing, textChunk.str); } } var tx = 0; var ty = 0; if (!font.vertical) { var w0 = glyphWidth * textState.fontMatrix[0]; tx = (w0 * textState.fontSize + charSpacing) * textState.textHScale; width += tx; } else { var w1 = glyphWidth * textState.fontMatrix[0]; ty = w1 * textState.fontSize + charSpacing; height += ty; } textState.translateTextMatrix(tx, ty); textChunk.str.push(glyphUnicode); } if (!font.vertical) { textChunk.lastAdvanceWidth = width; textChunk.width += width; } else { textChunk.lastAdvanceHeight = height; textChunk.height += Math.abs(height); } return textChunk; } function addFakeSpaces(width, strBuf) { if (width < textContentItem.fakeSpaceMin) { return; } if (width < textContentItem.fakeMultiSpaceMin) { strBuf.push(" "); return; } var fakeSpaces = Math.round(width / textContentItem.spaceWidth); while (fakeSpaces-- > 0) { strBuf.push(" "); } } function flushTextContentItem() { if (!textContentItem.initialized) { return; } if (!textContentItem.vertical) { textContentItem.width *= textContentItem.textAdvanceScale; } else { textContentItem.height *= textContentItem.textAdvanceScale; } textContent.items.push(runBidiTransform(textContentItem)); textContentItem.initialized = false; textContentItem.str.length = 0; } function enqueueChunk() { var length = textContent.items.length; if (length > 0) { sink.enqueue(textContent, length); textContent.items = []; textContent.styles = Object.create(null); } } var timeSlotManager = new TimeSlotManager(); return new Promise(function promiseBody(resolve, reject) { var next = function next(promise) { enqueueChunk(); Promise.all([promise, sink.ready]).then(function () { try { promiseBody(resolve, reject); } catch (ex) { reject(ex); } }, reject); }; task.ensureNotTerminated(); timeSlotManager.reset(); var stop, operation = {}, args = []; while (!(stop = timeSlotManager.check())) { args.length = 0; operation.args = args; if (!preprocessor.read(operation)) { break; } textState = stateManager.state; var fn = operation.fn; args = operation.args; var advance, diff; switch (fn | 0) { case _util.OPS.setFont: var fontNameArg = args[0].name, fontSizeArg = args[1]; if (textState.font && fontNameArg === textState.fontName && fontSizeArg === textState.fontSize) { break; } flushTextContentItem(); textState.fontName = fontNameArg; textState.fontSize = fontSizeArg; next(handleSetFont(fontNameArg, null)); return; case _util.OPS.setTextRise: flushTextContentItem(); textState.textRise = args[0]; break; case _util.OPS.setHScale: flushTextContentItem(); textState.textHScale = args[0] / 100; break; case _util.OPS.setLeading: flushTextContentItem(); textState.leading = args[0]; break; case _util.OPS.moveText: var isSameTextLine = !textState.font ? false : (textState.font.vertical ? args[0] : args[1]) === 0; advance = args[0] - args[1]; if (combineTextItems && isSameTextLine && textContentItem.initialized && advance > 0 && advance <= textContentItem.fakeMultiSpaceMax) { textState.translateTextLineMatrix(args[0], args[1]); textContentItem.width += args[0] - textContentItem.lastAdvanceWidth; textContentItem.height += args[1] - textContentItem.lastAdvanceHeight; diff = args[0] - textContentItem.lastAdvanceWidth - (args[1] - textContentItem.lastAdvanceHeight); addFakeSpaces(diff, textContentItem.str); break; } flushTextContentItem(); textState.translateTextLineMatrix(args[0], args[1]); textState.textMatrix = textState.textLineMatrix.slice(); break; case _util.OPS.setLeadingMoveText: flushTextContentItem(); textState.leading = -args[1]; textState.translateTextLineMatrix(args[0], args[1]); textState.textMatrix = textState.textLineMatrix.slice(); break; case _util.OPS.nextLine: flushTextContentItem(); textState.carriageReturn(); break; case _util.OPS.setTextMatrix: advance = textState.calcTextLineMatrixAdvance(args[0], args[1], args[2], args[3], args[4], args[5]); if (combineTextItems && advance !== null && textContentItem.initialized && advance.value > 0 && advance.value <= textContentItem.fakeMultiSpaceMax) { textState.translateTextLineMatrix(advance.width, advance.height); textContentItem.width += advance.width - textContentItem.lastAdvanceWidth; textContentItem.height += advance.height - textContentItem.lastAdvanceHeight; diff = advance.width - textContentItem.lastAdvanceWidth - (advance.height - textContentItem.lastAdvanceHeight); addFakeSpaces(diff, textContentItem.str); break; } flushTextContentItem(); textState.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]); textState.setTextLineMatrix(args[0], args[1], args[2], args[3], args[4], args[5]); break; case _util.OPS.setCharSpacing: textState.charSpacing = args[0]; break; case _util.OPS.setWordSpacing: textState.wordSpacing = args[0]; break; case _util.OPS.beginText: flushTextContentItem(); textState.textMatrix = _util.IDENTITY_MATRIX.slice(); textState.textLineMatrix = _util.IDENTITY_MATRIX.slice(); break; case _util.OPS.showSpacedText: if (!stateManager.state.font) { self.ensureStateFont(stateManager.state); continue; } var items = args[0]; var offset; for (var j = 0, jj = items.length; j < jj; j++) { if (typeof items[j] === "string") { buildTextContentItem(items[j]); } else if ((0, _util.isNum)(items[j])) { ensureTextContentItem(); advance = items[j] * textState.fontSize / 1000; var breakTextRun = false; if (textState.font.vertical) { offset = advance; textState.translateTextMatrix(0, offset); breakTextRun = textContentItem.textRunBreakAllowed && advance > textContentItem.fakeMultiSpaceMax; if (!breakTextRun) { textContentItem.height += offset; } } else { advance = -advance; offset = advance * textState.textHScale; textState.translateTextMatrix(offset, 0); breakTextRun = textContentItem.textRunBreakAllowed && advance > textContentItem.fakeMultiSpaceMax; if (!breakTextRun) { textContentItem.width += offset; } } if (breakTextRun) { flushTextContentItem(); } else if (advance > 0) { addFakeSpaces(advance, textContentItem.str); } } } break; case _util.OPS.showText: if (!stateManager.state.font) { self.ensureStateFont(stateManager.state); continue; } buildTextContentItem(args[0]); break; case _util.OPS.nextLineShowText: if (!stateManager.state.font) { self.ensureStateFont(stateManager.state); continue; } flushTextContentItem(); textState.carriageReturn(); buildTextContentItem(args[0]); break; case _util.OPS.nextLineSetSpacingShowText: if (!stateManager.state.font) { self.ensureStateFont(stateManager.state); continue; } flushTextContentItem(); textState.wordSpacing = args[0]; textState.charSpacing = args[1]; textState.carriageReturn(); buildTextContentItem(args[2]); break; case _util.OPS.paintXObject: flushTextContentItem(); if (!xobjs) { xobjs = resources.get("XObject") || _primitives.Dict.empty; } var name = args[0].name; if (name && emptyXObjectCache.getByName(name)) { break; } next(new Promise(function (resolveXObject, rejectXObject) { if (!name) { throw new _util.FormatError("XObject must be referred to by name."); } var xobj = xobjs.getRaw(name); if (xobj instanceof _primitives.Ref) { if (emptyXObjectCache.getByRef(xobj)) { resolveXObject(); return; } var globalImage = self.globalImageCache.getData(xobj, self.pageIndex); if (globalImage) { resolveXObject(); return; } xobj = xref.fetch(xobj); } if (!(0, _primitives.isStream)(xobj)) { throw new _util.FormatError("XObject should be a stream"); } var type = xobj.dict.get("Subtype"); if (!(0, _primitives.isName)(type)) { throw new _util.FormatError("XObject should have a Name subtype"); } if (type.name !== "Form") { emptyXObjectCache.set(name, xobj.dict.objId, true); resolveXObject(); return; } var currentState = stateManager.state.clone(); var xObjStateManager = new StateManager(currentState); var matrix = xobj.dict.getArray("Matrix"); if (Array.isArray(matrix) && matrix.length === 6) { xObjStateManager.transform(matrix); } enqueueChunk(); var sinkWrapper = { enqueueInvoked: false, enqueue: function enqueue(chunk, size) { this.enqueueInvoked = true; sink.enqueue(chunk, size); }, get desiredSize() { return sink.desiredSize; }, get ready() { return sink.ready; } }; self.getTextContent({ stream: xobj, task: task, resources: xobj.dict.get("Resources") || resources, stateManager: xObjStateManager, normalizeWhitespace: normalizeWhitespace, combineTextItems: combineTextItems, sink: sinkWrapper, seenStyles: seenStyles }).then(function () { if (!sinkWrapper.enqueueInvoked) { emptyXObjectCache.set(name, xobj.dict.objId, true); } resolveXObject(); }, rejectXObject); })["catch"](function (reason) { if (reason instanceof _util.AbortException) { return; } if (self.options.ignoreErrors) { (0, _util.warn)("getTextContent - ignoring XObject: \"".concat(reason, "\".")); return; } throw reason; })); return; case _util.OPS.setGState: name = args[0].name; if (name && emptyGStateCache.getByName(name)) { break; } next(new Promise(function (resolveGState, rejectGState) { if (!name) { throw new _util.FormatError("GState must be referred to by name."); } var extGState = resources.get("ExtGState"); if (!(extGState instanceof _primitives.Dict)) { throw new _util.FormatError("ExtGState should be a dictionary."); } var gState = extGState.get(name); if (!(gState instanceof _primitives.Dict)) { throw new _util.FormatError("GState should be a dictionary."); } var gStateFont = gState.get("Font"); if (!gStateFont) { emptyGStateCache.set(name, gState.objId, true); resolveGState(); return; } flushTextContentItem(); textState.fontName = null; textState.fontSize = gStateFont[1]; handleSetFont(null, gStateFont[0]).then(resolveGState, rejectGState); })["catch"](function (reason) { if (reason instanceof _util.AbortException) { return; } if (self.options.ignoreErrors) { (0, _util.warn)("getTextContent - ignoring ExtGState: \"".concat(reason, "\".")); return; } throw reason; })); return; } if (textContent.items.length >= sink.desiredSize) { stop = true; break; } } if (stop) { next(deferred); return; } flushTextContentItem(); enqueueChunk(); resolve(); })["catch"](function (reason) { if (reason instanceof _util.AbortException) { return; } if (_this8.options.ignoreErrors) { (0, _util.warn)("getTextContent - ignoring errors during \"".concat(task.name, "\" ") + "task: \"".concat(reason, "\".")); flushTextContentItem(); enqueueChunk(); return; } throw reason; }); } }, { key: "extractDataStructures", value: function extractDataStructures(dict, baseDict, properties) { var _this9 = this; var xref = this.xref; var cidToGidBytes; var toUnicode = dict.get("ToUnicode") || baseDict.get("ToUnicode"); var toUnicodePromise = toUnicode ? this.readToUnicode(toUnicode) : Promise.resolve(undefined); if (properties.composite) { var cidSystemInfo = dict.get("CIDSystemInfo"); if ((0, _primitives.isDict)(cidSystemInfo)) { properties.cidSystemInfo = { registry: (0, _util.stringToPDFString)(cidSystemInfo.get("Registry")), ordering: (0, _util.stringToPDFString)(cidSystemInfo.get("Ordering")), supplement: cidSystemInfo.get("Supplement") }; } var cidToGidMap = dict.get("CIDToGIDMap"); if ((0, _primitives.isStream)(cidToGidMap)) { cidToGidBytes = cidToGidMap.getBytes(); } } var differences = []; var baseEncodingName = null; var encoding; if (dict.has("Encoding")) { encoding = dict.get("Encoding"); if ((0, _primitives.isDict)(encoding)) { baseEncodingName = encoding.get("BaseEncoding"); baseEncodingName = (0, _primitives.isName)(baseEncodingName) ? baseEncodingName.name : null; if (encoding.has("Differences")) { var diffEncoding = encoding.get("Differences"); var index = 0; for (var j = 0, jj = diffEncoding.length; j < jj; j++) { var data = xref.fetchIfRef(diffEncoding[j]); if ((0, _util.isNum)(data)) { index = data; } else if ((0, _primitives.isName)(data)) { differences[index++] = data.name; } else { throw new _util.FormatError("Invalid entry in 'Differences' array: ".concat(data)); } } } } else if ((0, _primitives.isName)(encoding)) { baseEncodingName = encoding.name; } else { throw new _util.FormatError("Encoding is not a Name nor a Dict"); } if (baseEncodingName !== "MacRomanEncoding" && baseEncodingName !== "MacExpertEncoding" && baseEncodingName !== "WinAnsiEncoding") { baseEncodingName = null; } } if (baseEncodingName) { properties.defaultEncoding = (0, _encodings.getEncoding)(baseEncodingName).slice(); } else { var isSymbolicFont = !!(properties.flags & _fonts.FontFlags.Symbolic); var isNonsymbolicFont = !!(properties.flags & _fonts.FontFlags.Nonsymbolic); encoding = _encodings.StandardEncoding; if (properties.type === "TrueType" && !isNonsymbolicFont) { encoding = _encodings.WinAnsiEncoding; } if (isSymbolicFont) { encoding = _encodings.MacRomanEncoding; if (!properties.file) { if (/Symbol/i.test(properties.name)) { encoding = _encodings.SymbolSetEncoding; } else if (/Dingbats|Wingdings/i.test(properties.name)) { encoding = _encodings.ZapfDingbatsEncoding; } } } properties.defaultEncoding = encoding; } properties.differences = differences; properties.baseEncodingName = baseEncodingName; properties.hasEncoding = !!baseEncodingName || differences.length > 0; properties.dict = dict; return toUnicodePromise.then(function (readToUnicode) { properties.toUnicode = readToUnicode; return _this9.buildToUnicode(properties); }).then(function (builtToUnicode) { properties.toUnicode = builtToUnicode; if (cidToGidBytes) { properties.cidToGidMap = _this9.readCidToGidMap(cidToGidBytes, builtToUnicode); } return properties; }); } }, { key: "_buildSimpleFontToUnicode", value: function _buildSimpleFontToUnicode(properties) { var forceGlyphs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; (0, _util.assert)(!properties.composite, "Must be a simple font."); var toUnicode = []; var encoding = properties.defaultEncoding.slice(); var baseEncodingName = properties.baseEncodingName; var differences = properties.differences; for (var charcode in differences) { var glyphName = differences[charcode]; if (glyphName === ".notdef") { continue; } encoding[charcode] = glyphName; } var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); for (var _charcode in encoding) { var _glyphName = encoding[_charcode]; if (_glyphName === "") { continue; } else if (glyphsUnicodeMap[_glyphName] === undefined) { var code = 0; switch (_glyphName[0]) { case "G": if (_glyphName.length === 3) { code = parseInt(_glyphName.substring(1), 16); } break; case "g": if (_glyphName.length === 5) { code = parseInt(_glyphName.substring(1), 16); } break; case "C": case "c": if (_glyphName.length >= 3 && _glyphName.length <= 4) { var codeStr = _glyphName.substring(1); if (forceGlyphs) { code = parseInt(codeStr, 16); break; } code = +codeStr; if (Number.isNaN(code) && Number.isInteger(parseInt(codeStr, 16))) { return this._buildSimpleFontToUnicode(properties, true); } } break; default: var unicode = (0, _unicode.getUnicodeForGlyph)(_glyphName, glyphsUnicodeMap); if (unicode !== -1) { code = unicode; } } if (code > 0 && code <= 0x10ffff && Number.isInteger(code)) { if (baseEncodingName && code === +_charcode) { var baseEncoding = (0, _encodings.getEncoding)(baseEncodingName); if (baseEncoding && (_glyphName = baseEncoding[_charcode])) { toUnicode[_charcode] = String.fromCharCode(glyphsUnicodeMap[_glyphName]); continue; } } toUnicode[_charcode] = String.fromCodePoint(code); } continue; } toUnicode[_charcode] = String.fromCharCode(glyphsUnicodeMap[_glyphName]); } return new _fonts.ToUnicodeMap(toUnicode); } }, { key: "buildToUnicode", value: function buildToUnicode(properties) { properties.hasIncludedToUnicodeMap = !!properties.toUnicode && properties.toUnicode.length > 0; if (properties.hasIncludedToUnicodeMap) { if (!properties.composite && properties.hasEncoding) { properties.fallbackToUnicode = this._buildSimpleFontToUnicode(properties); } return Promise.resolve(properties.toUnicode); } if (!properties.composite) { return Promise.resolve(this._buildSimpleFontToUnicode(properties)); } if (properties.composite && (properties.cMap.builtInCMap && !(properties.cMap instanceof _cmap.IdentityCMap) || properties.cidSystemInfo.registry === "Adobe" && (properties.cidSystemInfo.ordering === "GB1" || properties.cidSystemInfo.ordering === "CNS1" || properties.cidSystemInfo.ordering === "Japan1" || properties.cidSystemInfo.ordering === "Korea1"))) { var registry = properties.cidSystemInfo.registry; var ordering = properties.cidSystemInfo.ordering; var ucs2CMapName = _primitives.Name.get(registry + "-" + ordering + "-UCS2"); return _cmap.CMapFactory.create({ encoding: ucs2CMapName, fetchBuiltInCMap: this._fetchBuiltInCMapBound, useCMap: null }).then(function (ucs2CMap) { var cMap = properties.cMap; var toUnicode = []; cMap.forEach(function (charcode, cid) { if (cid > 0xffff) { throw new _util.FormatError("Max size of CID is 65,535"); } var ucs2 = ucs2CMap.lookup(cid); if (ucs2) { toUnicode[charcode] = String.fromCharCode((ucs2.charCodeAt(0) << 8) + ucs2.charCodeAt(1)); } }); return new _fonts.ToUnicodeMap(toUnicode); }); } return Promise.resolve(new _fonts.IdentityToUnicodeMap(properties.firstChar, properties.lastChar)); } }, { key: "readToUnicode", value: function readToUnicode(toUnicode) { var _this10 = this; var cmapObj = toUnicode; if ((0, _primitives.isName)(cmapObj)) { return _cmap.CMapFactory.create({ encoding: cmapObj, fetchBuiltInCMap: this._fetchBuiltInCMapBound, useCMap: null }).then(function (cmap) { if (cmap instanceof _cmap.IdentityCMap) { return new _fonts.IdentityToUnicodeMap(0, 0xffff); } return new _fonts.ToUnicodeMap(cmap.getMap()); }); } else if ((0, _primitives.isStream)(cmapObj)) { return _cmap.CMapFactory.create({ encoding: cmapObj, fetchBuiltInCMap: this._fetchBuiltInCMapBound, useCMap: null }).then(function (cmap) { if (cmap instanceof _cmap.IdentityCMap) { return new _fonts.IdentityToUnicodeMap(0, 0xffff); } var map = new Array(cmap.length); cmap.forEach(function (charCode, token) { var str = []; for (var k = 0; k < token.length; k += 2) { var w1 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1); if ((w1 & 0xf800) !== 0xd800) { str.push(w1); continue; } k += 2; var w2 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1); str.push(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000); } map[charCode] = String.fromCodePoint.apply(String, str); }); return new _fonts.ToUnicodeMap(map); }, function (reason) { if (reason instanceof _util.AbortException) { return null; } if (_this10.options.ignoreErrors) { _this10.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorFontToUnicode }); (0, _util.warn)("readToUnicode - ignoring ToUnicode data: \"".concat(reason, "\".")); return null; } throw reason; }); } return Promise.resolve(null); } }, { key: "readCidToGidMap", value: function readCidToGidMap(glyphsData, toUnicode) { var result = []; for (var j = 0, jj = glyphsData.length; j < jj; j++) { var glyphID = glyphsData[j++] << 8 | glyphsData[j]; var code = j >> 1; if (glyphID === 0 && !toUnicode.has(code)) { continue; } result[code] = glyphID; } return result; } }, { key: "extractWidths", value: function extractWidths(dict, descriptor, properties) { var xref = this.xref; var glyphsWidths = []; var defaultWidth = 0; var glyphsVMetrics = []; var defaultVMetrics; var i, ii, j, jj, start, code, widths; if (properties.composite) { defaultWidth = dict.has("DW") ? dict.get("DW") : 1000; widths = dict.get("W"); if (widths) { for (i = 0, ii = widths.length; i < ii; i++) { start = xref.fetchIfRef(widths[i++]); code = xref.fetchIfRef(widths[i]); if (Array.isArray(code)) { for (j = 0, jj = code.length; j < jj; j++) { glyphsWidths[start++] = xref.fetchIfRef(code[j]); } } else { var width = xref.fetchIfRef(widths[++i]); for (j = start; j <= code; j++) { glyphsWidths[j] = width; } } } } if (properties.vertical) { var vmetrics = dict.getArray("DW2") || [880, -1000]; defaultVMetrics = [vmetrics[1], defaultWidth * 0.5, vmetrics[0]]; vmetrics = dict.get("W2"); if (vmetrics) { for (i = 0, ii = vmetrics.length; i < ii; i++) { start = xref.fetchIfRef(vmetrics[i++]); code = xref.fetchIfRef(vmetrics[i]); if (Array.isArray(code)) { for (j = 0, jj = code.length; j < jj; j++) { glyphsVMetrics[start++] = [xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j])]; } } else { var vmetric = [xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i])]; for (j = start; j <= code; j++) { glyphsVMetrics[j] = vmetric; } } } } } } else { var firstChar = properties.firstChar; widths = dict.get("Widths"); if (widths) { j = firstChar; for (i = 0, ii = widths.length; i < ii; i++) { glyphsWidths[j++] = xref.fetchIfRef(widths[i]); } defaultWidth = parseFloat(descriptor.get("MissingWidth")) || 0; } else { var baseFontName = dict.get("BaseFont"); if ((0, _primitives.isName)(baseFontName)) { var metrics = this.getBaseFontMetrics(baseFontName.name); glyphsWidths = this.buildCharCodeToWidth(metrics.widths, properties); defaultWidth = metrics.defaultWidth; } } } var isMonospace = true; var firstWidth = defaultWidth; for (var glyph in glyphsWidths) { var glyphWidth = glyphsWidths[glyph]; if (!glyphWidth) { continue; } if (!firstWidth) { firstWidth = glyphWidth; continue; } if (firstWidth !== glyphWidth) { isMonospace = false; break; } } if (isMonospace) { properties.flags |= _fonts.FontFlags.FixedPitch; } properties.defaultWidth = defaultWidth; properties.widths = glyphsWidths; properties.defaultVMetrics = defaultVMetrics; properties.vmetrics = glyphsVMetrics; } }, { key: "isSerifFont", value: function isSerifFont(baseFontName) { var fontNameWoStyle = baseFontName.split("-")[0]; return fontNameWoStyle in (0, _standard_fonts.getSerifFonts)() || fontNameWoStyle.search(/serif/gi) !== -1; } }, { key: "getBaseFontMetrics", value: function getBaseFontMetrics(name) { var defaultWidth = 0; var widths = Object.create(null); var monospace = false; var stdFontMap = (0, _standard_fonts.getStdFontMap)(); var lookupName = stdFontMap[name] || name; var Metrics = (0, _metrics.getMetrics)(); if (!(lookupName in Metrics)) { if (this.isSerifFont(name)) { lookupName = "Times-Roman"; } else { lookupName = "Helvetica"; } } var glyphWidths = Metrics[lookupName]; if ((0, _util.isNum)(glyphWidths)) { defaultWidth = glyphWidths; monospace = true; } else { widths = glyphWidths(); } return { defaultWidth: defaultWidth, monospace: monospace, widths: widths }; } }, { key: "buildCharCodeToWidth", value: function buildCharCodeToWidth(widthsByGlyphName, properties) { var widths = Object.create(null); var differences = properties.differences; var encoding = properties.defaultEncoding; for (var charCode = 0; charCode < 256; charCode++) { if (charCode in differences && widthsByGlyphName[differences[charCode]]) { widths[charCode] = widthsByGlyphName[differences[charCode]]; continue; } if (charCode in encoding && widthsByGlyphName[encoding[charCode]]) { widths[charCode] = widthsByGlyphName[encoding[charCode]]; continue; } } return widths; } }, { key: "preEvaluateFont", value: function preEvaluateFont(dict) { var baseDict = dict; var type = dict.get("Subtype"); if (!(0, _primitives.isName)(type)) { throw new _util.FormatError("invalid font Subtype"); } var composite = false; var uint8array; if (type.name === "Type0") { var df = dict.get("DescendantFonts"); if (!df) { throw new _util.FormatError("Descendant fonts are not specified"); } dict = Array.isArray(df) ? this.xref.fetchIfRef(df[0]) : df; if (!(dict instanceof _primitives.Dict)) { throw new _util.FormatError("Descendant font is not a dictionary."); } type = dict.get("Subtype"); if (!(0, _primitives.isName)(type)) { throw new _util.FormatError("invalid font Subtype"); } composite = true; } var descriptor = dict.get("FontDescriptor"); if (descriptor) { var hash = new _murmurhash.MurmurHash3_64(); var encoding = baseDict.getRaw("Encoding"); if ((0, _primitives.isName)(encoding)) { hash.update(encoding.name); } else if ((0, _primitives.isRef)(encoding)) { hash.update(encoding.toString()); } else if ((0, _primitives.isDict)(encoding)) { var _iterator5 = _createForOfIteratorHelper(encoding.getRawValues()), _step5; try { for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { var entry = _step5.value; if ((0, _primitives.isName)(entry)) { hash.update(entry.name); } else if ((0, _primitives.isRef)(entry)) { hash.update(entry.toString()); } else if (Array.isArray(entry)) { var diffLength = entry.length, diffBuf = new Array(diffLength); for (var j = 0; j < diffLength; j++) { var diffEntry = entry[j]; if ((0, _primitives.isName)(diffEntry)) { diffBuf[j] = diffEntry.name; } else if ((0, _util.isNum)(diffEntry) || (0, _primitives.isRef)(diffEntry)) { diffBuf[j] = diffEntry.toString(); } } hash.update(diffBuf.join()); } } } catch (err) { _iterator5.e(err); } finally { _iterator5.f(); } } var firstChar = dict.get("FirstChar") || 0; var lastChar = dict.get("LastChar") || (composite ? 0xffff : 0xff); hash.update("".concat(firstChar, "-").concat(lastChar)); var toUnicode = dict.get("ToUnicode") || baseDict.get("ToUnicode"); if ((0, _primitives.isStream)(toUnicode)) { var stream = toUnicode.str || toUnicode; uint8array = stream.buffer ? new Uint8Array(stream.buffer.buffer, 0, stream.bufferLength) : new Uint8Array(stream.bytes.buffer, stream.start, stream.end - stream.start); hash.update(uint8array); } else if ((0, _primitives.isName)(toUnicode)) { hash.update(toUnicode.name); } var widths = dict.get("Widths") || baseDict.get("Widths"); if (widths) { uint8array = new Uint8Array(new Uint32Array(widths).buffer); hash.update(uint8array); } } return { descriptor: descriptor, dict: dict, baseDict: baseDict, composite: composite, type: type.name, hash: hash ? hash.hexdigest() : "" }; } }, { key: "translateFont", value: function () { var _translateFont = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee7(preEvaluatedFont) { var _this11 = this; var baseDict, dict, composite, descriptor, type, maxCharIndex, properties, firstChar, lastChar, baseFontName, metrics, fontNameWoStyle, flags, widths, fontName, baseFont, fontNameStr, baseFontStr, fontFile, subtype, length1, length2, length3, cidEncoding, cMap; return _regenerator["default"].wrap(function _callee7$(_context7) { while (1) { switch (_context7.prev = _context7.next) { case 0: baseDict = preEvaluatedFont.baseDict; dict = preEvaluatedFont.dict; composite = preEvaluatedFont.composite; descriptor = preEvaluatedFont.descriptor; type = preEvaluatedFont.type; maxCharIndex = composite ? 0xffff : 0xff; firstChar = dict.get("FirstChar") || 0; lastChar = dict.get("LastChar") || maxCharIndex; if (descriptor) { _context7.next = 25; break; } if (!(type === "Type3")) { _context7.next = 15; break; } descriptor = new _primitives.Dict(null); descriptor.set("FontName", _primitives.Name.get(type)); descriptor.set("FontBBox", dict.getArray("FontBBox") || [0, 0, 0, 0]); _context7.next = 25; break; case 15: baseFontName = dict.get("BaseFont"); if ((0, _primitives.isName)(baseFontName)) { _context7.next = 18; break; } throw new _util.FormatError("Base font is not specified"); case 18: baseFontName = baseFontName.name.replace(/[,_]/g, "-"); metrics = this.getBaseFontMetrics(baseFontName); fontNameWoStyle = baseFontName.split("-")[0]; flags = (this.isSerifFont(fontNameWoStyle) ? _fonts.FontFlags.Serif : 0) | (metrics.monospace ? _fonts.FontFlags.FixedPitch : 0) | ((0, _standard_fonts.getSymbolsFonts)()[fontNameWoStyle] ? _fonts.FontFlags.Symbolic : _fonts.FontFlags.Nonsymbolic); properties = { type: type, name: baseFontName, widths: metrics.widths, defaultWidth: metrics.defaultWidth, flags: flags, firstChar: firstChar, lastChar: lastChar }; widths = dict.get("Widths"); return _context7.abrupt("return", this.extractDataStructures(dict, dict, properties).then(function (newProperties) { if (widths) { var glyphWidths = []; var j = firstChar; for (var _i = 0, ii = widths.length; _i < ii; _i++) { glyphWidths[j++] = _this11.xref.fetchIfRef(widths[_i]); } newProperties.widths = glyphWidths; } else { newProperties.widths = _this11.buildCharCodeToWidth(metrics.widths, newProperties); } return new _fonts.Font(baseFontName, null, newProperties); })); case 25: fontName = descriptor.get("FontName"); baseFont = dict.get("BaseFont"); if ((0, _util.isString)(fontName)) { fontName = _primitives.Name.get(fontName); } if ((0, _util.isString)(baseFont)) { baseFont = _primitives.Name.get(baseFont); } if (type !== "Type3") { fontNameStr = fontName && fontName.name; baseFontStr = baseFont && baseFont.name; if (fontNameStr !== baseFontStr) { (0, _util.info)("The FontDescriptor's FontName is \"".concat(fontNameStr, "\" but ") + "should be the same as the Font's BaseFont \"".concat(baseFontStr, "\".")); if (fontNameStr && baseFontStr && baseFontStr.startsWith(fontNameStr)) { fontName = baseFont; } } } fontName = fontName || baseFont; if ((0, _primitives.isName)(fontName)) { _context7.next = 33; break; } throw new _util.FormatError("invalid font name"); case 33: _context7.prev = 33; fontFile = descriptor.get("FontFile", "FontFile2", "FontFile3"); _context7.next = 43; break; case 37: _context7.prev = 37; _context7.t0 = _context7["catch"](33); if (this.options.ignoreErrors) { _context7.next = 41; break; } throw _context7.t0; case 41: (0, _util.warn)("translateFont - fetching \"".concat(fontName.name, "\" font file: \"").concat(_context7.t0, "\".")); fontFile = new _stream.NullStream(); case 43: if (fontFile) { if (fontFile.dict) { subtype = fontFile.dict.get("Subtype"); if (subtype) { subtype = subtype.name; } length1 = fontFile.dict.get("Length1"); length2 = fontFile.dict.get("Length2"); length3 = fontFile.dict.get("Length3"); } } properties = { type: type, name: fontName.name, subtype: subtype, file: fontFile, length1: length1, length2: length2, length3: length3, loadedName: baseDict.loadedName, composite: composite, fixedPitch: false, fontMatrix: dict.getArray("FontMatrix") || _util.FONT_IDENTITY_MATRIX, firstChar: firstChar || 0, lastChar: lastChar || maxCharIndex, bbox: descriptor.getArray("FontBBox"), ascent: descriptor.get("Ascent"), descent: descriptor.get("Descent"), xHeight: descriptor.get("XHeight"), capHeight: descriptor.get("CapHeight"), flags: descriptor.get("Flags"), italicAngle: descriptor.get("ItalicAngle"), isType3Font: false }; if (!composite) { _context7.next = 53; break; } cidEncoding = baseDict.get("Encoding"); if ((0, _primitives.isName)(cidEncoding)) { properties.cidEncoding = cidEncoding.name; } _context7.next = 50; return _cmap.CMapFactory.create({ encoding: cidEncoding, fetchBuiltInCMap: this._fetchBuiltInCMapBound, useCMap: null }); case 50: cMap = _context7.sent; properties.cMap = cMap; properties.vertical = properties.cMap.vertical; case 53: return _context7.abrupt("return", this.extractDataStructures(dict, baseDict, properties).then(function (newProperties) { _this11.extractWidths(dict, descriptor, newProperties); if (type === "Type3") { newProperties.isType3Font = true; } return new _fonts.Font(fontName.name, fontFile, newProperties); })); case 54: case "end": return _context7.stop(); } } }, _callee7, this, [[33, 37]]); })); function translateFont(_x13) { return _translateFont.apply(this, arguments); } return translateFont; }() }], [{ key: "buildFontPaths", value: function buildFontPaths(font, glyphs, handler) { function buildPath(fontChar) { if (font.renderer.hasBuiltPath(fontChar)) { return; } handler.send("commonobj", ["".concat(font.loadedName, "_path_").concat(fontChar), "FontPath", font.renderer.getPathJs(fontChar)]); } var _iterator6 = _createForOfIteratorHelper(glyphs), _step6; try { for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) { var glyph = _step6.value; buildPath(glyph.fontChar); var accent = glyph.accent; if (accent && accent.fontChar) { buildPath(accent.fontChar); } } } catch (err) { _iterator6.e(err); } finally { _iterator6.f(); } } }, { key: "fallbackFontDict", get: function get() { var dict = new _primitives.Dict(); dict.set("BaseFont", _primitives.Name.get("PDFJS-FallbackFont")); dict.set("Type", _primitives.Name.get("FallbackType")); dict.set("Subtype", _primitives.Name.get("FallbackType")); dict.set("Encoding", _primitives.Name.get("WinAnsiEncoding")); return (0, _util.shadow)(this, "fallbackFontDict", dict); } }]); return PartialEvaluator; }(); exports.PartialEvaluator = PartialEvaluator; var TranslatedFont = /*#__PURE__*/function () { function TranslatedFont(_ref9) { var loadedName = _ref9.loadedName, font = _ref9.font, dict = _ref9.dict, _ref9$extraProperties = _ref9.extraProperties, extraProperties = _ref9$extraProperties === void 0 ? false : _ref9$extraProperties; _classCallCheck(this, TranslatedFont); this.loadedName = loadedName; this.font = font; this.dict = dict; this._extraProperties = extraProperties; this.type3Loaded = null; this.type3Dependencies = font.isType3Font ? new Set() : null; this.sent = false; } _createClass(TranslatedFont, [{ key: "send", value: function send(handler) { if (this.sent) { return; } this.sent = true; handler.send("commonobj", [this.loadedName, "Font", this.font.exportData(this._extraProperties)]); } }, { key: "fallback", value: function fallback(handler) { if (!this.font.data) { return; } this.font.disableFontFace = true; var glyphs = this.font.glyphCacheValues; PartialEvaluator.buildFontPaths(this.font, glyphs, handler); } }, { key: "loadType3Data", value: function loadType3Data(evaluator, resources, task) { var _this12 = this; if (this.type3Loaded) { return this.type3Loaded; } if (!this.font.isType3Font) { throw new Error("Must be a Type3 font."); } var type3Options = Object.create(evaluator.options); type3Options.ignoreErrors = false; var type3Evaluator = evaluator.clone(type3Options); type3Evaluator.parsingType3Font = true; var translatedFont = this.font, type3Dependencies = this.type3Dependencies; var loadCharProcsPromise = Promise.resolve(); var charProcs = this.dict.get("CharProcs"); var fontResources = this.dict.get("Resources") || resources; var charProcOperatorList = Object.create(null); var _iterator7 = _createForOfIteratorHelper(charProcs.getKeys()), _step7; try { var _loop2 = function _loop2() { var key = _step7.value; loadCharProcsPromise = loadCharProcsPromise.then(function () { var glyphStream = charProcs.get(key); var operatorList = new _operator_list.OperatorList(); return type3Evaluator.getOperatorList({ stream: glyphStream, task: task, resources: fontResources, operatorList: operatorList }).then(function () { if (operatorList.fnArray[0] === _util.OPS.setCharWidthAndBounds) { _this12._removeType3ColorOperators(operatorList); } charProcOperatorList[key] = operatorList.getIR(); var _iterator8 = _createForOfIteratorHelper(operatorList.dependencies), _step8; try { for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) { var dependency = _step8.value; type3Dependencies.add(dependency); } } catch (err) { _iterator8.e(err); } finally { _iterator8.f(); } })["catch"](function (reason) { (0, _util.warn)("Type3 font resource \"".concat(key, "\" is not available.")); var dummyOperatorList = new _operator_list.OperatorList(); charProcOperatorList[key] = dummyOperatorList.getIR(); }); }); }; for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) { _loop2(); } } catch (err) { _iterator7.e(err); } finally { _iterator7.f(); } this.type3Loaded = loadCharProcsPromise.then(function () { translatedFont.charProcOperatorList = charProcOperatorList; }); return this.type3Loaded; } }, { key: "_removeType3ColorOperators", value: function _removeType3ColorOperators(operatorList) { var i = 1, ii = operatorList.length; while (i < ii) { switch (operatorList.fnArray[i]) { case _util.OPS.setStrokeColorSpace: case _util.OPS.setFillColorSpace: case _util.OPS.setStrokeColor: case _util.OPS.setStrokeColorN: case _util.OPS.setFillColor: case _util.OPS.setFillColorN: case _util.OPS.setStrokeGray: case _util.OPS.setFillGray: case _util.OPS.setStrokeRGBColor: case _util.OPS.setFillRGBColor: case _util.OPS.setStrokeCMYKColor: case _util.OPS.setFillCMYKColor: case _util.OPS.shadingFill: case _util.OPS.setRenderingIntent: operatorList.fnArray.splice(i, 1); operatorList.argsArray.splice(i, 1); ii--; continue; case _util.OPS.setGState: var _operatorList$argsArr = _slicedToArray(operatorList.argsArray[i], 1), _gStateObj = _operatorList$argsArr[0]; var j = 0, jj = _gStateObj.length; while (j < jj) { var _gStateObj$j = _slicedToArray(_gStateObj[j], 1), gStateKey = _gStateObj$j[0]; switch (gStateKey) { case "TR": case "TR2": case "HT": case "BG": case "BG2": case "UCR": case "UCR2": _gStateObj.splice(j, 1); jj--; continue; } j++; } break; } i++; } } }]); return TranslatedFont; }(); var StateManager = /*#__PURE__*/function () { function StateManager() { var initialState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new EvalState(); _classCallCheck(this, StateManager); this.state = initialState; this.stateStack = []; } _createClass(StateManager, [{ key: "save", value: function save() { var old = this.state; this.stateStack.push(this.state); this.state = old.clone(); } }, { key: "restore", value: function restore() { var prev = this.stateStack.pop(); if (prev) { this.state = prev; } } }, { key: "transform", value: function transform(args) { this.state.ctm = _util.Util.transform(this.state.ctm, args); } }]); return StateManager; }(); var TextState = /*#__PURE__*/function () { function TextState() { _classCallCheck(this, TextState); this.ctm = new Float32Array(_util.IDENTITY_MATRIX); this.fontName = null; this.fontSize = 0; this.font = null; this.fontMatrix = _util.FONT_IDENTITY_MATRIX; this.textMatrix = _util.IDENTITY_MATRIX.slice(); this.textLineMatrix = _util.IDENTITY_MATRIX.slice(); this.charSpacing = 0; this.wordSpacing = 0; this.leading = 0; this.textHScale = 1; this.textRise = 0; } _createClass(TextState, [{ key: "setTextMatrix", value: function setTextMatrix(a, b, c, d, e, f) { var m = this.textMatrix; m[0] = a; m[1] = b; m[2] = c; m[3] = d; m[4] = e; m[5] = f; } }, { key: "setTextLineMatrix", value: function setTextLineMatrix(a, b, c, d, e, f) { var m = this.textLineMatrix; m[0] = a; m[1] = b; m[2] = c; m[3] = d; m[4] = e; m[5] = f; } }, { key: "translateTextMatrix", value: function translateTextMatrix(x, y) { var m = this.textMatrix; m[4] = m[0] * x + m[2] * y + m[4]; m[5] = m[1] * x + m[3] * y + m[5]; } }, { key: "translateTextLineMatrix", value: function translateTextLineMatrix(x, y) { var m = this.textLineMatrix; m[4] = m[0] * x + m[2] * y + m[4]; m[5] = m[1] * x + m[3] * y + m[5]; } }, { key: "calcTextLineMatrixAdvance", value: function calcTextLineMatrixAdvance(a, b, c, d, e, f) { var font = this.font; if (!font) { return null; } var m = this.textLineMatrix; if (!(a === m[0] && b === m[1] && c === m[2] && d === m[3])) { return null; } var txDiff = e - m[4], tyDiff = f - m[5]; if (font.vertical && txDiff !== 0 || !font.vertical && tyDiff !== 0) { return null; } var tx, ty, denominator = a * d - b * c; if (font.vertical) { tx = -tyDiff * c / denominator; ty = tyDiff * a / denominator; } else { tx = txDiff * d / denominator; ty = -txDiff * b / denominator; } return { width: tx, height: ty, value: font.vertical ? ty : tx }; } }, { key: "calcRenderMatrix", value: function calcRenderMatrix(ctm) { var tsm = [this.fontSize * this.textHScale, 0, 0, this.fontSize, 0, this.textRise]; return _util.Util.transform(ctm, _util.Util.transform(this.textMatrix, tsm)); } }, { key: "carriageReturn", value: function carriageReturn() { this.translateTextLineMatrix(0, -this.leading); this.textMatrix = this.textLineMatrix.slice(); } }, { key: "clone", value: function clone() { var clone = Object.create(this); clone.textMatrix = this.textMatrix.slice(); clone.textLineMatrix = this.textLineMatrix.slice(); clone.fontMatrix = this.fontMatrix.slice(); return clone; } }]); return TextState; }(); var EvalState = /*#__PURE__*/function () { function EvalState() { _classCallCheck(this, EvalState); this.ctm = new Float32Array(_util.IDENTITY_MATRIX); this.font = null; this.textRenderingMode = _util.TextRenderingMode.FILL; this.fillColorSpace = _colorspace.ColorSpace.singletons.gray; this.strokeColorSpace = _colorspace.ColorSpace.singletons.gray; } _createClass(EvalState, [{ key: "clone", value: function clone() { return Object.create(this); } }]); return EvalState; }(); var EvaluatorPreprocessor = /*#__PURE__*/function () { function EvaluatorPreprocessor(stream, xref) { var stateManager = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new StateManager(); _classCallCheck(this, EvaluatorPreprocessor); this.parser = new _parser.Parser({ lexer: new _parser.Lexer(stream, EvaluatorPreprocessor.opMap), xref: xref }); this.stateManager = stateManager; this.nonProcessedArgs = []; this._numInvalidPathOPS = 0; } _createClass(EvaluatorPreprocessor, [{ key: "savedStatesDepth", get: function get() { return this.stateManager.stateStack.length; } }, { key: "read", value: function read(operation) { var args = operation.args; while (true) { var obj = this.parser.getObj(); if (obj instanceof _primitives.Cmd) { var cmd = obj.cmd; var opSpec = EvaluatorPreprocessor.opMap[cmd]; if (!opSpec) { (0, _util.warn)("Unknown command \"".concat(cmd, "\".")); continue; } var fn = opSpec.id; var numArgs = opSpec.numArgs; var argsLength = args !== null ? args.length : 0; if (!opSpec.variableArgs) { if (argsLength !== numArgs) { var nonProcessedArgs = this.nonProcessedArgs; while (argsLength > numArgs) { nonProcessedArgs.push(args.shift()); argsLength--; } while (argsLength < numArgs && nonProcessedArgs.length !== 0) { if (args === null) { args = []; } args.unshift(nonProcessedArgs.pop()); argsLength++; } } if (argsLength < numArgs) { var partialMsg = "command ".concat(cmd, ": expected ").concat(numArgs, " args, ") + "but received ".concat(argsLength, " args."); if (fn >= _util.OPS.moveTo && fn <= _util.OPS.endPath && ++this._numInvalidPathOPS > EvaluatorPreprocessor.MAX_INVALID_PATH_OPS) { throw new _util.FormatError("Invalid ".concat(partialMsg)); } (0, _util.warn)("Skipping ".concat(partialMsg)); if (args !== null) { args.length = 0; } continue; } } else if (argsLength > numArgs) { (0, _util.info)("Command ".concat(cmd, ": expected [0, ").concat(numArgs, "] args, ") + "but received ".concat(argsLength, " args.")); } this.preprocessCommand(fn, args); operation.fn = fn; operation.args = args; return true; } if (obj === _primitives.EOF) { return false; } if (obj !== null) { if (args === null) { args = []; } args.push(obj); if (args.length > 33) { throw new _util.FormatError("Too many arguments"); } } } } }, { key: "preprocessCommand", value: function preprocessCommand(fn, args) { switch (fn | 0) { case _util.OPS.save: this.stateManager.save(); break; case _util.OPS.restore: this.stateManager.restore(); break; case _util.OPS.transform: this.stateManager.transform(args); break; } } }], [{ key: "opMap", get: function get() { var getOPMap = (0, _core_utils.getLookupTableFactory)(function (t) { t.w = { id: _util.OPS.setLineWidth, numArgs: 1, variableArgs: false }; t.J = { id: _util.OPS.setLineCap, numArgs: 1, variableArgs: false }; t.j = { id: _util.OPS.setLineJoin, numArgs: 1, variableArgs: false }; t.M = { id: _util.OPS.setMiterLimit, numArgs: 1, variableArgs: false }; t.d = { id: _util.OPS.setDash, numArgs: 2, variableArgs: false }; t.ri = { id: _util.OPS.setRenderingIntent, numArgs: 1, variableArgs: false }; t.i = { id: _util.OPS.setFlatness, numArgs: 1, variableArgs: false }; t.gs = { id: _util.OPS.setGState, numArgs: 1, variableArgs: false }; t.q = { id: _util.OPS.save, numArgs: 0, variableArgs: false }; t.Q = { id: _util.OPS.restore, numArgs: 0, variableArgs: false }; t.cm = { id: _util.OPS.transform, numArgs: 6, variableArgs: false }; t.m = { id: _util.OPS.moveTo, numArgs: 2, variableArgs: false }; t.l = { id: _util.OPS.lineTo, numArgs: 2, variableArgs: false }; t.c = { id: _util.OPS.curveTo, numArgs: 6, variableArgs: false }; t.v = { id: _util.OPS.curveTo2, numArgs: 4, variableArgs: false }; t.y = { id: _util.OPS.curveTo3, numArgs: 4, variableArgs: false }; t.h = { id: _util.OPS.closePath, numArgs: 0, variableArgs: false }; t.re = { id: _util.OPS.rectangle, numArgs: 4, variableArgs: false }; t.S = { id: _util.OPS.stroke, numArgs: 0, variableArgs: false }; t.s = { id: _util.OPS.closeStroke, numArgs: 0, variableArgs: false }; t.f = { id: _util.OPS.fill, numArgs: 0, variableArgs: false }; t.F = { id: _util.OPS.fill, numArgs: 0, variableArgs: false }; t["f*"] = { id: _util.OPS.eoFill, numArgs: 0, variableArgs: false }; t.B = { id: _util.OPS.fillStroke, numArgs: 0, variableArgs: false }; t["B*"] = { id: _util.OPS.eoFillStroke, numArgs: 0, variableArgs: false }; t.b = { id: _util.OPS.closeFillStroke, numArgs: 0, variableArgs: false }; t["b*"] = { id: _util.OPS.closeEOFillStroke, numArgs: 0, variableArgs: false }; t.n = { id: _util.OPS.endPath, numArgs: 0, variableArgs: false }; t.W = { id: _util.OPS.clip, numArgs: 0, variableArgs: false }; t["W*"] = { id: _util.OPS.eoClip, numArgs: 0, variableArgs: false }; t.BT = { id: _util.OPS.beginText, numArgs: 0, variableArgs: false }; t.ET = { id: _util.OPS.endText, numArgs: 0, variableArgs: false }; t.Tc = { id: _util.OPS.setCharSpacing, numArgs: 1, variableArgs: false }; t.Tw = { id: _util.OPS.setWordSpacing, numArgs: 1, variableArgs: false }; t.Tz = { id: _util.OPS.setHScale, numArgs: 1, variableArgs: false }; t.TL = { id: _util.OPS.setLeading, numArgs: 1, variableArgs: false }; t.Tf = { id: _util.OPS.setFont, numArgs: 2, variableArgs: false }; t.Tr = { id: _util.OPS.setTextRenderingMode, numArgs: 1, variableArgs: false }; t.Ts = { id: _util.OPS.setTextRise, numArgs: 1, variableArgs: false }; t.Td = { id: _util.OPS.moveText, numArgs: 2, variableArgs: false }; t.TD = { id: _util.OPS.setLeadingMoveText, numArgs: 2, variableArgs: false }; t.Tm = { id: _util.OPS.setTextMatrix, numArgs: 6, variableArgs: false }; t["T*"] = { id: _util.OPS.nextLine, numArgs: 0, variableArgs: false }; t.Tj = { id: _util.OPS.showText, numArgs: 1, variableArgs: false }; t.TJ = { id: _util.OPS.showSpacedText, numArgs: 1, variableArgs: false }; t["'"] = { id: _util.OPS.nextLineShowText, numArgs: 1, variableArgs: false }; t['"'] = { id: _util.OPS.nextLineSetSpacingShowText, numArgs: 3, variableArgs: false }; t.d0 = { id: _util.OPS.setCharWidth, numArgs: 2, variableArgs: false }; t.d1 = { id: _util.OPS.setCharWidthAndBounds, numArgs: 6, variableArgs: false }; t.CS = { id: _util.OPS.setStrokeColorSpace, numArgs: 1, variableArgs: false }; t.cs = { id: _util.OPS.setFillColorSpace, numArgs: 1, variableArgs: false }; t.SC = { id: _util.OPS.setStrokeColor, numArgs: 4, variableArgs: true }; t.SCN = { id: _util.OPS.setStrokeColorN, numArgs: 33, variableArgs: true }; t.sc = { id: _util.OPS.setFillColor, numArgs: 4, variableArgs: true }; t.scn = { id: _util.OPS.setFillColorN, numArgs: 33, variableArgs: true }; t.G = { id: _util.OPS.setStrokeGray, numArgs: 1, variableArgs: false }; t.g = { id: _util.OPS.setFillGray, numArgs: 1, variableArgs: false }; t.RG = { id: _util.OPS.setStrokeRGBColor, numArgs: 3, variableArgs: false }; t.rg = { id: _util.OPS.setFillRGBColor, numArgs: 3, variableArgs: false }; t.K = { id: _util.OPS.setStrokeCMYKColor, numArgs: 4, variableArgs: false }; t.k = { id: _util.OPS.setFillCMYKColor, numArgs: 4, variableArgs: false }; t.sh = { id: _util.OPS.shadingFill, numArgs: 1, variableArgs: false }; t.BI = { id: _util.OPS.beginInlineImage, numArgs: 0, variableArgs: false }; t.ID = { id: _util.OPS.beginImageData, numArgs: 0, variableArgs: false }; t.EI = { id: _util.OPS.endInlineImage, numArgs: 1, variableArgs: false }; t.Do = { id: _util.OPS.paintXObject, numArgs: 1, variableArgs: false }; t.MP = { id: _util.OPS.markPoint, numArgs: 1, variableArgs: false }; t.DP = { id: _util.OPS.markPointProps, numArgs: 2, variableArgs: false }; t.BMC = { id: _util.OPS.beginMarkedContent, numArgs: 1, variableArgs: false }; t.BDC = { id: _util.OPS.beginMarkedContentProps, numArgs: 2, variableArgs: false }; t.EMC = { id: _util.OPS.endMarkedContent, numArgs: 0, variableArgs: false }; t.BX = { id: _util.OPS.beginCompat, numArgs: 0, variableArgs: false }; t.EX = { id: _util.OPS.endCompat, numArgs: 0, variableArgs: false }; t.BM = null; t.BD = null; t["true"] = null; t.fa = null; t.fal = null; t.fals = null; t["false"] = null; t.nu = null; t.nul = null; t["null"] = null; }); return (0, _util.shadow)(this, "opMap", getOPMap()); } }, { key: "MAX_INVALID_PATH_OPS", get: function get() { return (0, _util.shadow)(this, "MAX_INVALID_PATH_OPS", 20); } }]); return EvaluatorPreprocessor; }(); exports.EvaluatorPreprocessor = EvaluatorPreprocessor; /***/ }), /* 158 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", ({ value: true })); exports.IdentityCMap = exports.CMapFactory = exports.CMap = void 0; var _regenerator = _interopRequireDefault(__w_pdfjs_require__(2)); var _util = __w_pdfjs_require__(4); var _primitives = __w_pdfjs_require__(135); var _parser = __w_pdfjs_require__(141); var _core_utils = __w_pdfjs_require__(138); var _stream = __w_pdfjs_require__(142); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var BUILT_IN_CMAPS = ["Adobe-GB1-UCS2", "Adobe-CNS1-UCS2", "Adobe-Japan1-UCS2", "Adobe-Korea1-UCS2", "78-EUC-H", "78-EUC-V", "78-H", "78-RKSJ-H", "78-RKSJ-V", "78-V", "78ms-RKSJ-H", "78ms-RKSJ-V", "83pv-RKSJ-H", "90ms-RKSJ-H", "90ms-RKSJ-V", "90msp-RKSJ-H", "90msp-RKSJ-V", "90pv-RKSJ-H", "90pv-RKSJ-V", "Add-H", "Add-RKSJ-H", "Add-RKSJ-V", "Add-V", "Adobe-CNS1-0", "Adobe-CNS1-1", "Adobe-CNS1-2", "Adobe-CNS1-3", "Adobe-CNS1-4", "Adobe-CNS1-5", "Adobe-CNS1-6", "Adobe-GB1-0", "Adobe-GB1-1", "Adobe-GB1-2", "Adobe-GB1-3", "Adobe-GB1-4", "Adobe-GB1-5", "Adobe-Japan1-0", "Adobe-Japan1-1", "Adobe-Japan1-2", "Adobe-Japan1-3", "Adobe-Japan1-4", "Adobe-Japan1-5", "Adobe-Japan1-6", "Adobe-Korea1-0", "Adobe-Korea1-1", "Adobe-Korea1-2", "B5-H", "B5-V", "B5pc-H", "B5pc-V", "CNS-EUC-H", "CNS-EUC-V", "CNS1-H", "CNS1-V", "CNS2-H", "CNS2-V", "ETHK-B5-H", "ETHK-B5-V", "ETen-B5-H", "ETen-B5-V", "ETenms-B5-H", "ETenms-B5-V", "EUC-H", "EUC-V", "Ext-H", "Ext-RKSJ-H", "Ext-RKSJ-V", "Ext-V", "GB-EUC-H", "GB-EUC-V", "GB-H", "GB-V", "GBK-EUC-H", "GBK-EUC-V", "GBK2K-H", "GBK2K-V", "GBKp-EUC-H", "GBKp-EUC-V", "GBT-EUC-H", "GBT-EUC-V", "GBT-H", "GBT-V", "GBTpc-EUC-H", "GBTpc-EUC-V", "GBpc-EUC-H", "GBpc-EUC-V", "H", "HKdla-B5-H", "HKdla-B5-V", "HKdlb-B5-H", "HKdlb-B5-V", "HKgccs-B5-H", "HKgccs-B5-V", "HKm314-B5-H", "HKm314-B5-V", "HKm471-B5-H", "HKm471-B5-V", "HKscs-B5-H", "HKscs-B5-V", "Hankaku", "Hiragana", "KSC-EUC-H", "KSC-EUC-V", "KSC-H", "KSC-Johab-H", "KSC-Johab-V", "KSC-V", "KSCms-UHC-H", "KSCms-UHC-HW-H", "KSCms-UHC-HW-V", "KSCms-UHC-V", "KSCpc-EUC-H", "KSCpc-EUC-V", "Katakana", "NWP-H", "NWP-V", "RKSJ-H", "RKSJ-V", "Roman", "UniCNS-UCS2-H", "UniCNS-UCS2-V", "UniCNS-UTF16-H", "UniCNS-UTF16-V", "UniCNS-UTF32-H", "UniCNS-UTF32-V", "UniCNS-UTF8-H", "UniCNS-UTF8-V", "UniGB-UCS2-H", "UniGB-UCS2-V", "UniGB-UTF16-H", "UniGB-UTF16-V", "UniGB-UTF32-H", "UniGB-UTF32-V", "UniGB-UTF8-H", "UniGB-UTF8-V", "UniJIS-UCS2-H", "UniJIS-UCS2-HW-H", "UniJIS-UCS2-HW-V", "UniJIS-UCS2-V", "UniJIS-UTF16-H", "UniJIS-UTF16-V", "UniJIS-UTF32-H", "UniJIS-UTF32-V", "UniJIS-UTF8-H", "UniJIS-UTF8-V", "UniJIS2004-UTF16-H", "UniJIS2004-UTF16-V", "UniJIS2004-UTF32-H", "UniJIS2004-UTF32-V", "UniJIS2004-UTF8-H", "UniJIS2004-UTF8-V", "UniJISPro-UCS2-HW-V", "UniJISPro-UCS2-V", "UniJISPro-UTF8-V", "UniJISX0213-UTF32-H", "UniJISX0213-UTF32-V", "UniJISX02132004-UTF32-H", "UniJISX02132004-UTF32-V", "UniKS-UCS2-H", "UniKS-UCS2-V", "UniKS-UTF16-H", "UniKS-UTF16-V", "UniKS-UTF32-H", "UniKS-UTF32-V", "UniKS-UTF8-H", "UniKS-UTF8-V", "V", "WP-Symbol"]; var MAX_MAP_RANGE = Math.pow(2, 24) - 1; var CMap = /*#__PURE__*/function () { function CMap() { var builtInCMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; _classCallCheck(this, CMap); this.codespaceRanges = [[], [], [], []]; this.numCodespaceRanges = 0; this._map = []; this.name = ""; this.vertical = false; this.useCMap = null; this.builtInCMap = builtInCMap; } _createClass(CMap, [{ key: "addCodespaceRange", value: function addCodespaceRange(n, low, high) { this.codespaceRanges[n - 1].push(low, high); this.numCodespaceRanges++; } }, { key: "mapCidRange", value: function mapCidRange(low, high, dstLow) { if (high - low > MAX_MAP_RANGE) { throw new Error("mapCidRange - ignoring data above MAX_MAP_RANGE."); } while (low <= high) { this._map[low++] = dstLow++; } } }, { key: "mapBfRange", value: function mapBfRange(low, high, dstLow) { if (high - low > MAX_MAP_RANGE) { throw new Error("mapBfRange - ignoring data above MAX_MAP_RANGE."); } var lastByte = dstLow.length - 1; while (low <= high) { this._map[low++] = dstLow; dstLow = dstLow.substring(0, lastByte) + String.fromCharCode(dstLow.charCodeAt(lastByte) + 1); } } }, { key: "mapBfRangeToArray", value: function mapBfRangeToArray(low, high, array) { if (high - low > MAX_MAP_RANGE) { throw new Error("mapBfRangeToArray - ignoring data above MAX_MAP_RANGE."); } var ii = array.length; var i = 0; while (low <= high && i < ii) { this._map[low] = array[i++]; ++low; } } }, { key: "mapOne", value: function mapOne(src, dst) { this._map[src] = dst; } }, { key: "lookup", value: function lookup(code) { return this._map[code]; } }, { key: "contains", value: function contains(code) { return this._map[code] !== undefined; } }, { key: "forEach", value: function forEach(callback) { var map = this._map; var length = map.length; if (length <= 0x10000) { for (var i = 0; i < length; i++) { if (map[i] !== undefined) { callback(i, map[i]); } } } else { for (var _i in map) { callback(_i, map[_i]); } } } }, { key: "charCodeOf", value: function charCodeOf(value) { var map = this._map; if (map.length <= 0x10000) { return map.indexOf(value); } for (var charCode in map) { if (map[charCode] === value) { return charCode | 0; } } return -1; } }, { key: "getMap", value: function getMap() { return this._map; } }, { key: "readCharCode", value: function readCharCode(str, offset, out) { var c = 0; var codespaceRanges = this.codespaceRanges; for (var n = 0, nn = codespaceRanges.length; n < nn; n++) { c = (c << 8 | str.charCodeAt(offset + n)) >>> 0; var codespaceRange = codespaceRanges[n]; for (var k = 0, kk = codespaceRange.length; k < kk;) { var low = codespaceRange[k++]; var high = codespaceRange[k++]; if (c >= low && c <= high) { out.charcode = c; out.length = n + 1; return; } } } out.charcode = 0; out.length = 1; } }, { key: "getCharCodeLength", value: function getCharCodeLength(charCode) { var codespaceRanges = this.codespaceRanges; for (var n = 0, nn = codespaceRanges.length; n < nn; n++) { var codespaceRange = codespaceRanges[n]; for (var k = 0, kk = codespaceRange.length; k < kk;) { var low = codespaceRange[k++]; var high = codespaceRange[k++]; if (charCode >= low && charCode <= high) { return n + 1; } } } return 1; } }, { key: "length", get: function get() { return this._map.length; } }, { key: "isIdentityCMap", get: function get() { if (!(this.name === "Identity-H" || this.name === "Identity-V")) { return false; } if (this._map.length !== 0x10000) { return false; } for (var i = 0; i < 0x10000; i++) { if (this._map[i] !== i) { return false; } } return true; } }]); return CMap; }(); exports.CMap = CMap; var IdentityCMap = /*#__PURE__*/function (_CMap) { _inherits(IdentityCMap, _CMap); var _super = _createSuper(IdentityCMap); function IdentityCMap(vertical, n) { var _this; _classCallCheck(this, IdentityCMap); _this = _super.call(this); _this.vertical = vertical; _this.addCodespaceRange(n, 0, 0xffff); return _this; } _createClass(IdentityCMap, [{ key: "mapCidRange", value: function mapCidRange(low, high, dstLow) { (0, _util.unreachable)("should not call mapCidRange"); } }, { key: "mapBfRange", value: function mapBfRange(low, high, dstLow) { (0, _util.unreachable)("should not call mapBfRange"); } }, { key: "mapBfRangeToArray", value: function mapBfRangeToArray(low, high, array) { (0, _util.unreachable)("should not call mapBfRangeToArray"); } }, { key: "mapOne", value: function mapOne(src, dst) { (0, _util.unreachable)("should not call mapCidOne"); } }, { key: "lookup", value: function lookup(code) { return Number.isInteger(code) && code <= 0xffff ? code : undefined; } }, { key: "contains", value: function contains(code) { return Number.isInteger(code) && code <= 0xffff; } }, { key: "forEach", value: function forEach(callback) { for (var i = 0; i <= 0xffff; i++) { callback(i, i); } } }, { key: "charCodeOf", value: function charCodeOf(value) { return Number.isInteger(value) && value <= 0xffff ? value : -1; } }, { key: "getMap", value: function getMap() { var map = new Array(0x10000); for (var i = 0; i <= 0xffff; i++) { map[i] = i; } return map; } }, { key: "length", get: function get() { return 0x10000; } }, { key: "isIdentityCMap", get: function get() { (0, _util.unreachable)("should not access .isIdentityCMap"); } }]); return IdentityCMap; }(CMap); exports.IdentityCMap = IdentityCMap; var BinaryCMapReader = function BinaryCMapReaderClosure() { function hexToInt(a, size) { var n = 0; for (var i = 0; i <= size; i++) { n = n << 8 | a[i]; } return n >>> 0; } function hexToStr(a, size) { if (size === 1) { return String.fromCharCode(a[0], a[1]); } if (size === 3) { return String.fromCharCode(a[0], a[1], a[2], a[3]); } return String.fromCharCode.apply(null, a.subarray(0, size + 1)); } function addHex(a, b, size) { var c = 0; for (var i = size; i >= 0; i--) { c += a[i] + b[i]; a[i] = c & 255; c >>= 8; } } function incHex(a, size) { var c = 1; for (var i = size; i >= 0 && c > 0; i--) { c += a[i]; a[i] = c & 255; c >>= 8; } } var MAX_NUM_SIZE = 16; var MAX_ENCODED_NUM_SIZE = 19; function BinaryCMapStream(data) { this.buffer = data; this.pos = 0; this.end = data.length; this.tmpBuf = new Uint8Array(MAX_ENCODED_NUM_SIZE); } BinaryCMapStream.prototype = { readByte: function readByte() { if (this.pos >= this.end) { return -1; } return this.buffer[this.pos++]; }, readNumber: function readNumber() { var n = 0; var last; do { var b = this.readByte(); if (b < 0) { throw new _util.FormatError("unexpected EOF in bcmap"); } last = !(b & 0x80); n = n << 7 | b & 0x7f; } while (!last); return n; }, readSigned: function readSigned() { var n = this.readNumber(); return n & 1 ? ~(n >>> 1) : n >>> 1; }, readHex: function readHex(num, size) { num.set(this.buffer.subarray(this.pos, this.pos + size + 1)); this.pos += size + 1; }, readHexNumber: function readHexNumber(num, size) { var last; var stack = this.tmpBuf, sp = 0; do { var b = this.readByte(); if (b < 0) { throw new _util.FormatError("unexpected EOF in bcmap"); } last = !(b & 0x80); stack[sp++] = b & 0x7f; } while (!last); var i = size, buffer = 0, bufferSize = 0; while (i >= 0) { while (bufferSize < 8 && stack.length > 0) { buffer = stack[--sp] << bufferSize | buffer; bufferSize += 7; } num[i] = buffer & 255; i--; buffer >>= 8; bufferSize -= 8; } }, readHexSigned: function readHexSigned(num, size) { this.readHexNumber(num, size); var sign = num[size] & 1 ? 255 : 0; var c = 0; for (var i = 0; i <= size; i++) { c = (c & 1) << 8 | num[i]; num[i] = c >> 1 ^ sign; } }, readString: function readString() { var len = this.readNumber(); var s = ""; for (var i = 0; i < len; i++) { s += String.fromCharCode(this.readNumber()); } return s; } }; function processBinaryCMap(data, cMap, extend) { return new Promise(function (resolve, reject) { var stream = new BinaryCMapStream(data); var header = stream.readByte(); cMap.vertical = !!(header & 1); var useCMap = null; var start = new Uint8Array(MAX_NUM_SIZE); var end = new Uint8Array(MAX_NUM_SIZE); var _char = new Uint8Array(MAX_NUM_SIZE); var charCode = new Uint8Array(MAX_NUM_SIZE); var tmp = new Uint8Array(MAX_NUM_SIZE); var code; var b; while ((b = stream.readByte()) >= 0) { var type = b >> 5; if (type === 7) { switch (b & 0x1f) { case 0: stream.readString(); break; case 1: useCMap = stream.readString(); break; } continue; } var sequence = !!(b & 0x10); var dataSize = b & 15; if (dataSize + 1 > MAX_NUM_SIZE) { throw new Error("processBinaryCMap: Invalid dataSize."); } var ucs2DataSize = 1; var subitemsCount = stream.readNumber(); var i; switch (type) { case 0: stream.readHex(start, dataSize); stream.readHexNumber(end, dataSize); addHex(end, start, dataSize); cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize)); for (i = 1; i < subitemsCount; i++) { incHex(end, dataSize); stream.readHexNumber(start, dataSize); addHex(start, end, dataSize); stream.readHexNumber(end, dataSize); addHex(end, start, dataSize); cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize)); } break; case 1: stream.readHex(start, dataSize); stream.readHexNumber(end, dataSize); addHex(end, start, dataSize); stream.readNumber(); for (i = 1; i < subitemsCount; i++) { incHex(end, dataSize); stream.readHexNumber(start, dataSize); addHex(start, end, dataSize); stream.readHexNumber(end, dataSize); addHex(end, start, dataSize); stream.readNumber(); } break; case 2: stream.readHex(_char, dataSize); code = stream.readNumber(); cMap.mapOne(hexToInt(_char, dataSize), code); for (i = 1; i < subitemsCount; i++) { incHex(_char, dataSize); if (!sequence) { stream.readHexNumber(tmp, dataSize); addHex(_char, tmp, dataSize); } code = stream.readSigned() + (code + 1); cMap.mapOne(hexToInt(_char, dataSize), code); } break; case 3: stream.readHex(start, dataSize); stream.readHexNumber(end, dataSize); addHex(end, start, dataSize); code = stream.readNumber(); cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code); for (i = 1; i < subitemsCount; i++) { incHex(end, dataSize); if (!sequence) { stream.readHexNumber(start, dataSize); addHex(start, end, dataSize); } else { start.set(end); } stream.readHexNumber(end, dataSize); addHex(end, start, dataSize); code = stream.readNumber(); cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code); } break; case 4: stream.readHex(_char, ucs2DataSize); stream.readHex(charCode, dataSize); cMap.mapOne(hexToInt(_char, ucs2DataSize), hexToStr(charCode, dataSize)); for (i = 1; i < subitemsCount; i++) { incHex(_char, ucs2DataSize); if (!sequence) { stream.readHexNumber(tmp, ucs2DataSize); addHex(_char, tmp, ucs2DataSize); } incHex(charCode, dataSize); stream.readHexSigned(tmp, dataSize); addHex(charCode, tmp, dataSize); cMap.mapOne(hexToInt(_char, ucs2DataSize), hexToStr(charCode, dataSize)); } break; case 5: stream.readHex(start, ucs2DataSize); stream.readHexNumber(end, ucs2DataSize); addHex(end, start, ucs2DataSize); stream.readHex(charCode, dataSize); cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize)); for (i = 1; i < subitemsCount; i++) { incHex(end, ucs2DataSize); if (!sequence) { stream.readHexNumber(start, ucs2DataSize); addHex(start, end, ucs2DataSize); } else { start.set(end); } stream.readHexNumber(end, ucs2DataSize); addHex(end, start, ucs2DataSize); stream.readHex(charCode, dataSize); cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize)); } break; default: reject(new Error("processBinaryCMap: Unknown type: " + type)); return; } } if (useCMap) { resolve(extend(useCMap)); return; } resolve(cMap); }); } function BinaryCMapReader() {} BinaryCMapReader.prototype = { process: processBinaryCMap }; return BinaryCMapReader; }(); var CMapFactory = function CMapFactoryClosure() { function strToInt(str) { var a = 0; for (var i = 0; i < str.length; i++) { a = a << 8 | str.charCodeAt(i); } return a >>> 0; } function expectString(obj) { if (!(0, _util.isString)(obj)) { throw new _util.FormatError("Malformed CMap: expected string."); } } function expectInt(obj) { if (!Number.isInteger(obj)) { throw new _util.FormatError("Malformed CMap: expected int."); } } function parseBfChar(cMap, lexer) { while (true) { var obj = lexer.getObj(); if ((0, _primitives.isEOF)(obj)) { break; } if ((0, _primitives.isCmd)(obj, "endbfchar")) { return; } expectString(obj); var src = strToInt(obj); obj = lexer.getObj(); expectString(obj); var dst = obj; cMap.mapOne(src, dst); } } function parseBfRange(cMap, lexer) { while (true) { var obj = lexer.getObj(); if ((0, _primitives.isEOF)(obj)) { break; } if ((0, _primitives.isCmd)(obj, "endbfrange")) { return; } expectString(obj); var low = strToInt(obj); obj = lexer.getObj(); expectString(obj); var high = strToInt(obj); obj = lexer.getObj(); if (Number.isInteger(obj) || (0, _util.isString)(obj)) { var dstLow = Number.isInteger(obj) ? String.fromCharCode(obj) : obj; cMap.mapBfRange(low, high, dstLow); } else if ((0, _primitives.isCmd)(obj, "[")) { obj = lexer.getObj(); var array = []; while (!(0, _primitives.isCmd)(obj, "]") && !(0, _primitives.isEOF)(obj)) { array.push(obj); obj = lexer.getObj(); } cMap.mapBfRangeToArray(low, high, array); } else { break; } } throw new _util.FormatError("Invalid bf range."); } function parseCidChar(cMap, lexer) { while (true) { var obj = lexer.getObj(); if ((0, _primitives.isEOF)(obj)) { break; } if ((0, _primitives.isCmd)(obj, "endcidchar")) { return; } expectString(obj); var src = strToInt(obj); obj = lexer.getObj(); expectInt(obj); var dst = obj; cMap.mapOne(src, dst); } } function parseCidRange(cMap, lexer) { while (true) { var obj = lexer.getObj(); if ((0, _primitives.isEOF)(obj)) { break; } if ((0, _primitives.isCmd)(obj, "endcidrange")) { return; } expectString(obj); var low = strToInt(obj); obj = lexer.getObj(); expectString(obj); var high = strToInt(obj); obj = lexer.getObj(); expectInt(obj); var dstLow = obj; cMap.mapCidRange(low, high, dstLow); } } function parseCodespaceRange(cMap, lexer) { while (true) { var obj = lexer.getObj(); if ((0, _primitives.isEOF)(obj)) { break; } if ((0, _primitives.isCmd)(obj, "endcodespacerange")) { return; } if (!(0, _util.isString)(obj)) { break; } var low = strToInt(obj); obj = lexer.getObj(); if (!(0, _util.isString)(obj)) { break; } var high = strToInt(obj); cMap.addCodespaceRange(obj.length, low, high); } throw new _util.FormatError("Invalid codespace range."); } function parseWMode(cMap, lexer) { var obj = lexer.getObj(); if (Number.isInteger(obj)) { cMap.vertical = !!obj; } } function parseCMapName(cMap, lexer) { var obj = lexer.getObj(); if ((0, _primitives.isName)(obj) && (0, _util.isString)(obj.name)) { cMap.name = obj.name; } } function parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap) { var previous; var embeddedUseCMap; objLoop: while (true) { try { var obj = lexer.getObj(); if ((0, _primitives.isEOF)(obj)) { break; } else if ((0, _primitives.isName)(obj)) { if (obj.name === "WMode") { parseWMode(cMap, lexer); } else if (obj.name === "CMapName") { parseCMapName(cMap, lexer); } previous = obj; } else if ((0, _primitives.isCmd)(obj)) { switch (obj.cmd) { case "endcmap": break objLoop; case "usecmap": if ((0, _primitives.isName)(previous)) { embeddedUseCMap = previous.name; } break; case "begincodespacerange": parseCodespaceRange(cMap, lexer); break; case "beginbfchar": parseBfChar(cMap, lexer); break; case "begincidchar": parseCidChar(cMap, lexer); break; case "beginbfrange": parseBfRange(cMap, lexer); break; case "begincidrange": parseCidRange(cMap, lexer); break; } } } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)("Invalid cMap data: " + ex); continue; } } if (!useCMap && embeddedUseCMap) { useCMap = embeddedUseCMap; } if (useCMap) { return extendCMap(cMap, fetchBuiltInCMap, useCMap); } return Promise.resolve(cMap); } function extendCMap(cMap, fetchBuiltInCMap, useCMap) { return createBuiltInCMap(useCMap, fetchBuiltInCMap).then(function (newCMap) { cMap.useCMap = newCMap; if (cMap.numCodespaceRanges === 0) { var useCodespaceRanges = cMap.useCMap.codespaceRanges; for (var i = 0; i < useCodespaceRanges.length; i++) { cMap.codespaceRanges[i] = useCodespaceRanges[i].slice(); } cMap.numCodespaceRanges = cMap.useCMap.numCodespaceRanges; } cMap.useCMap.forEach(function (key, value) { if (!cMap.contains(key)) { cMap.mapOne(key, cMap.useCMap.lookup(key)); } }); return cMap; }); } function createBuiltInCMap(name, fetchBuiltInCMap) { if (name === "Identity-H") { return Promise.resolve(new IdentityCMap(false, 2)); } else if (name === "Identity-V") { return Promise.resolve(new IdentityCMap(true, 2)); } if (!BUILT_IN_CMAPS.includes(name)) { return Promise.reject(new Error("Unknown CMap name: " + name)); } if (!fetchBuiltInCMap) { return Promise.reject(new Error("Built-in CMap parameters are not provided.")); } return fetchBuiltInCMap(name).then(function (data) { var cMapData = data.cMapData, compressionType = data.compressionType; var cMap = new CMap(true); if (compressionType === _util.CMapCompressionType.BINARY) { return new BinaryCMapReader().process(cMapData, cMap, function (useCMap) { return extendCMap(cMap, fetchBuiltInCMap, useCMap); }); } if (compressionType === _util.CMapCompressionType.NONE) { var lexer = new _parser.Lexer(new _stream.Stream(cMapData)); return parseCMap(cMap, lexer, fetchBuiltInCMap, null); } return Promise.reject(new Error("TODO: Only BINARY/NONE CMap compression is currently supported.")); }); } return { create: function create(params) { return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() { var encoding, fetchBuiltInCMap, useCMap, cMap, lexer; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: encoding = params.encoding; fetchBuiltInCMap = params.fetchBuiltInCMap; useCMap = params.useCMap; if (!(0, _primitives.isName)(encoding)) { _context.next = 7; break; } return _context.abrupt("return", createBuiltInCMap(encoding.name, fetchBuiltInCMap)); case 7: if (!(0, _primitives.isStream)(encoding)) { _context.next = 11; break; } cMap = new CMap(); lexer = new _parser.Lexer(encoding); return _context.abrupt("return", parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap).then(function (parsedCMap) { if (parsedCMap.isIdentityCMap) { return createBuiltInCMap(parsedCMap.name, fetchBuiltInCMap); } return parsedCMap; })); case 11: throw new Error("Encoding required."); case 12: case "end": return _context.stop(); } } }, _callee); }))(); } }; }(); exports.CMapFactory = CMapFactory; /***/ }), /* 159 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getFontType = getFontType; exports.ToUnicodeMap = exports.SEAC_ANALYSIS_ENABLED = exports.IdentityToUnicodeMap = exports.FontFlags = exports.Font = exports.ErrorFont = void 0; var _util = __w_pdfjs_require__(4); var _cff_parser = __w_pdfjs_require__(160); var _glyphlist = __w_pdfjs_require__(163); var _encodings = __w_pdfjs_require__(162); var _standard_fonts = __w_pdfjs_require__(164); var _unicode = __w_pdfjs_require__(165); var _core_utils = __w_pdfjs_require__(138); var _font_renderer = __w_pdfjs_require__(166); var _cmap = __w_pdfjs_require__(158); var _stream = __w_pdfjs_require__(142); var _type1_parser = __w_pdfjs_require__(167); function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } var PRIVATE_USE_AREAS = [[0xe000, 0xf8ff], [0x100000, 0x10fffd]]; var PDF_GLYPH_SPACE_UNITS = 1000; var SEAC_ANALYSIS_ENABLED = true; exports.SEAC_ANALYSIS_ENABLED = SEAC_ANALYSIS_ENABLED; var EXPORT_DATA_PROPERTIES = ["ascent", "bbox", "black", "bold", "charProcOperatorList", "composite", "data", "defaultVMetrics", "defaultWidth", "descent", "fallbackName", "fontMatrix", "fontType", "isMonospace", "isSerifFont", "isType3Font", "italic", "loadedName", "mimetype", "missingFile", "name", "remeasure", "subtype", "type", "vertical"]; var EXPORT_DATA_EXTRA_PROPERTIES = ["cMap", "defaultEncoding", "differences", "isSymbolicFont", "seacMap", "toFontChar", "toUnicode", "vmetrics", "widths"]; var FontFlags = { FixedPitch: 1, Serif: 2, Symbolic: 4, Script: 8, Nonsymbolic: 32, Italic: 64, AllCap: 65536, SmallCap: 131072, ForceBold: 262144 }; exports.FontFlags = FontFlags; var MacStandardGlyphOrdering = [".notdef", ".null", "nonmarkingreturn", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "Adieresis", "Aring", "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis", "aacute", "agrave", "acircumflex", "adieresis", "atilde", "aring", "ccedilla", "eacute", "egrave", "ecircumflex", "edieresis", "iacute", "igrave", "icircumflex", "idieresis", "ntilde", "oacute", "ograve", "ocircumflex", "odieresis", "otilde", "uacute", "ugrave", "ucircumflex", "udieresis", "dagger", "degree", "cent", "sterling", "section", "bullet", "paragraph", "germandbls", "registered", "copyright", "trademark", "acute", "dieresis", "notequal", "AE", "Oslash", "infinity", "plusminus", "lessequal", "greaterequal", "yen", "mu", "partialdiff", "summation", "product", "pi", "integral", "ordfeminine", "ordmasculine", "Omega", "ae", "oslash", "questiondown", "exclamdown", "logicalnot", "radical", "florin", "approxequal", "Delta", "guillemotleft", "guillemotright", "ellipsis", "nonbreakingspace", "Agrave", "Atilde", "Otilde", "OE", "oe", "endash", "emdash", "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide", "lozenge", "ydieresis", "Ydieresis", "fraction", "currency", "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl", "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex", "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex", "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave", "dotlessi", "circumflex", "tilde", "macron", "breve", "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "Lslash", "lslash", "Scaron", "scaron", "Zcaron", "zcaron", "brokenbar", "Eth", "eth", "Yacute", "yacute", "Thorn", "thorn", "minus", "multiply", "onesuperior", "twosuperior", "threesuperior", "onehalf", "onequarter", "threequarters", "franc", "Gbreve", "gbreve", "Idotaccent", "Scedilla", "scedilla", "Cacute", "cacute", "Ccaron", "ccaron", "dcroat"]; function adjustWidths(properties) { if (!properties.fontMatrix) { return; } if (properties.fontMatrix[0] === _util.FONT_IDENTITY_MATRIX[0]) { return; } var scale = 0.001 / properties.fontMatrix[0]; var glyphsWidths = properties.widths; for (var glyph in glyphsWidths) { glyphsWidths[glyph] *= scale; } properties.defaultWidth *= scale; } function adjustToUnicode(properties, builtInEncoding) { if (properties.hasIncludedToUnicodeMap) { return; } if (properties.hasEncoding) { return; } if (builtInEncoding === properties.defaultEncoding) { return; } if (properties.toUnicode instanceof IdentityToUnicodeMap) { return; } var toUnicode = [], glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); for (var charCode in builtInEncoding) { var glyphName = builtInEncoding[charCode]; var unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap); if (unicode !== -1) { toUnicode[charCode] = String.fromCharCode(unicode); } } properties.toUnicode.amend(toUnicode); } function getFontType(type, subtype) { switch (type) { case "Type1": return subtype === "Type1C" ? _util.FontType.TYPE1C : _util.FontType.TYPE1; case "CIDFontType0": return subtype === "CIDFontType0C" ? _util.FontType.CIDFONTTYPE0C : _util.FontType.CIDFONTTYPE0; case "OpenType": return _util.FontType.OPENTYPE; case "TrueType": return _util.FontType.TRUETYPE; case "CIDFontType2": return _util.FontType.CIDFONTTYPE2; case "MMType1": return _util.FontType.MMTYPE1; case "Type0": return _util.FontType.TYPE0; default: return _util.FontType.UNKNOWN; } } function recoverGlyphName(name, glyphsUnicodeMap) { if (glyphsUnicodeMap[name] !== undefined) { return name; } var unicode = (0, _unicode.getUnicodeForGlyph)(name, glyphsUnicodeMap); if (unicode !== -1) { for (var key in glyphsUnicodeMap) { if (glyphsUnicodeMap[key] === unicode) { return key; } } } (0, _util.info)("Unable to recover a standard glyph name for: " + name); return name; } var Glyph = function GlyphClosure() { function Glyph(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) { this.fontChar = fontChar; this.unicode = unicode; this.accent = accent; this.width = width; this.vmetric = vmetric; this.operatorListId = operatorListId; this.isSpace = isSpace; this.isInFont = isInFont; } Glyph.prototype.matchesForCache = function (fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) { return this.fontChar === fontChar && this.unicode === unicode && this.accent === accent && this.width === width && this.vmetric === vmetric && this.operatorListId === operatorListId && this.isSpace === isSpace && this.isInFont === isInFont; }; return Glyph; }(); var ToUnicodeMap = function ToUnicodeMapClosure() { function ToUnicodeMap() { var cmap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; this._map = cmap; } ToUnicodeMap.prototype = { get length() { return this._map.length; }, forEach: function forEach(callback) { for (var charCode in this._map) { callback(charCode, this._map[charCode].charCodeAt(0)); } }, has: function has(i) { return this._map[i] !== undefined; }, get: function get(i) { return this._map[i]; }, charCodeOf: function charCodeOf(value) { var map = this._map; if (map.length <= 0x10000) { return map.indexOf(value); } for (var charCode in map) { if (map[charCode] === value) { return charCode | 0; } } return -1; }, amend: function amend(map) { for (var charCode in map) { this._map[charCode] = map[charCode]; } } }; return ToUnicodeMap; }(); exports.ToUnicodeMap = ToUnicodeMap; var IdentityToUnicodeMap = function IdentityToUnicodeMapClosure() { function IdentityToUnicodeMap(firstChar, lastChar) { this.firstChar = firstChar; this.lastChar = lastChar; } IdentityToUnicodeMap.prototype = { get length() { return this.lastChar + 1 - this.firstChar; }, forEach: function forEach(callback) { for (var i = this.firstChar, ii = this.lastChar; i <= ii; i++) { callback(i, i); } }, has: function has(i) { return this.firstChar <= i && i <= this.lastChar; }, get: function get(i) { if (this.firstChar <= i && i <= this.lastChar) { return String.fromCharCode(i); } return undefined; }, charCodeOf: function charCodeOf(v) { return Number.isInteger(v) && v >= this.firstChar && v <= this.lastChar ? v : -1; }, amend: function amend(map) { (0, _util.unreachable)("Should not call amend()"); } }; return IdentityToUnicodeMap; }(); exports.IdentityToUnicodeMap = IdentityToUnicodeMap; var OpenTypeFileBuilder = function OpenTypeFileBuilderClosure() { function writeInt16(dest, offset, num) { dest[offset] = num >> 8 & 0xff; dest[offset + 1] = num & 0xff; } function writeInt32(dest, offset, num) { dest[offset] = num >> 24 & 0xff; dest[offset + 1] = num >> 16 & 0xff; dest[offset + 2] = num >> 8 & 0xff; dest[offset + 3] = num & 0xff; } function writeData(dest, offset, data) { var i, ii; if (data instanceof Uint8Array) { dest.set(data, offset); } else if (typeof data === "string") { for (i = 0, ii = data.length; i < ii; i++) { dest[offset++] = data.charCodeAt(i) & 0xff; } } else { for (i = 0, ii = data.length; i < ii; i++) { dest[offset++] = data[i] & 0xff; } } } function OpenTypeFileBuilder(sfnt) { this.sfnt = sfnt; this.tables = Object.create(null); } OpenTypeFileBuilder.getSearchParams = function OpenTypeFileBuilder_getSearchParams(entriesCount, entrySize) { var maxPower2 = 1, log2 = 0; while ((maxPower2 ^ entriesCount) > maxPower2) { maxPower2 <<= 1; log2++; } var searchRange = maxPower2 * entrySize; return { range: searchRange, entry: log2, rangeShift: entrySize * entriesCount - searchRange }; }; var OTF_HEADER_SIZE = 12; var OTF_TABLE_ENTRY_SIZE = 16; OpenTypeFileBuilder.prototype = { toArray: function OpenTypeFileBuilder_toArray() { var sfnt = this.sfnt; var tables = this.tables; var tablesNames = Object.keys(tables); tablesNames.sort(); var numTables = tablesNames.length; var i, j, jj, table, tableName; var offset = OTF_HEADER_SIZE + numTables * OTF_TABLE_ENTRY_SIZE; var tableOffsets = [offset]; for (i = 0; i < numTables; i++) { table = tables[tablesNames[i]]; var paddedLength = (table.length + 3 & ~3) >>> 0; offset += paddedLength; tableOffsets.push(offset); } var file = new Uint8Array(offset); for (i = 0; i < numTables; i++) { table = tables[tablesNames[i]]; writeData(file, tableOffsets[i], table); } if (sfnt === "true") { sfnt = (0, _util.string32)(0x00010000); } file[0] = sfnt.charCodeAt(0) & 0xff; file[1] = sfnt.charCodeAt(1) & 0xff; file[2] = sfnt.charCodeAt(2) & 0xff; file[3] = sfnt.charCodeAt(3) & 0xff; writeInt16(file, 4, numTables); var searchParams = OpenTypeFileBuilder.getSearchParams(numTables, 16); writeInt16(file, 6, searchParams.range); writeInt16(file, 8, searchParams.entry); writeInt16(file, 10, searchParams.rangeShift); offset = OTF_HEADER_SIZE; for (i = 0; i < numTables; i++) { tableName = tablesNames[i]; file[offset] = tableName.charCodeAt(0) & 0xff; file[offset + 1] = tableName.charCodeAt(1) & 0xff; file[offset + 2] = tableName.charCodeAt(2) & 0xff; file[offset + 3] = tableName.charCodeAt(3) & 0xff; var checksum = 0; for (j = tableOffsets[i], jj = tableOffsets[i + 1]; j < jj; j += 4) { var quad = (0, _core_utils.readUint32)(file, j); checksum = checksum + quad >>> 0; } writeInt32(file, offset + 4, checksum); writeInt32(file, offset + 8, tableOffsets[i]); writeInt32(file, offset + 12, tables[tableName].length); offset += OTF_TABLE_ENTRY_SIZE; } return file; }, addTable: function OpenTypeFileBuilder_addTable(tag, data) { if (tag in this.tables) { throw new Error("Table " + tag + " already exists"); } this.tables[tag] = data; } }; return OpenTypeFileBuilder; }(); var Font = function FontClosure() { function Font(name, file, properties) { var charCode; this.name = name; this.loadedName = properties.loadedName; this.isType3Font = properties.isType3Font; this.missingFile = false; this.glyphCache = Object.create(null); this.isSerifFont = !!(properties.flags & FontFlags.Serif); this.isSymbolicFont = !!(properties.flags & FontFlags.Symbolic); this.isMonospace = !!(properties.flags & FontFlags.FixedPitch); var type = properties.type; var subtype = properties.subtype; this.type = type; this.subtype = subtype; var fallbackName = "sans-serif"; if (this.isMonospace) { fallbackName = "monospace"; } else if (this.isSerifFont) { fallbackName = "serif"; } this.fallbackName = fallbackName; this.differences = properties.differences; this.widths = properties.widths; this.defaultWidth = properties.defaultWidth; this.composite = properties.composite; this.cMap = properties.cMap; this.capHeight = properties.capHeight / PDF_GLYPH_SPACE_UNITS; this.ascent = properties.ascent / PDF_GLYPH_SPACE_UNITS; this.descent = properties.descent / PDF_GLYPH_SPACE_UNITS; this.fontMatrix = properties.fontMatrix; this.bbox = properties.bbox; this.defaultEncoding = properties.defaultEncoding; this.toUnicode = properties.toUnicode; this.fallbackToUnicode = properties.fallbackToUnicode || new ToUnicodeMap(); this.toFontChar = []; if (properties.type === "Type3") { for (charCode = 0; charCode < 256; charCode++) { this.toFontChar[charCode] = this.differences[charCode] || properties.defaultEncoding[charCode]; } this.fontType = _util.FontType.TYPE3; return; } this.cidEncoding = properties.cidEncoding; this.vertical = !!properties.vertical; if (this.vertical) { this.vmetrics = properties.vmetrics; this.defaultVMetrics = properties.defaultVMetrics; } if (!file || file.isEmpty) { if (file) { (0, _util.warn)('Font file is empty in "' + name + '" (' + this.loadedName + ")"); } this.fallbackToSystemFont(properties); return; } var _getFontFileType = getFontFileType(file, properties); var _getFontFileType2 = _slicedToArray(_getFontFileType, 2); type = _getFontFileType2[0]; subtype = _getFontFileType2[1]; if (type !== this.type || subtype !== this.subtype) { (0, _util.info)("Inconsistent font file Type/SubType, expected: " + "".concat(this.type, "/").concat(this.subtype, " but found: ").concat(type, "/").concat(subtype, ".")); } try { var data; switch (type) { case "MMType1": (0, _util.info)("MMType1 font (" + name + "), falling back to Type1."); case "Type1": case "CIDFontType0": this.mimetype = "font/opentype"; var cff = subtype === "Type1C" || subtype === "CIDFontType0C" ? new CFFFont(file, properties) : new Type1Font(name, file, properties); adjustWidths(properties); data = this.convert(name, cff, properties); break; case "OpenType": case "TrueType": case "CIDFontType2": this.mimetype = "font/opentype"; data = this.checkAndRepair(name, file, properties); if (this.isOpenType) { adjustWidths(properties); type = "OpenType"; } break; default: throw new _util.FormatError("Font ".concat(type, " is not supported")); } } catch (e) { (0, _util.warn)(e); this.fallbackToSystemFont(properties); return; } this.data = data; this.fontType = getFontType(type, subtype); this.fontMatrix = properties.fontMatrix; this.widths = properties.widths; this.defaultWidth = properties.defaultWidth; this.toUnicode = properties.toUnicode; this.seacMap = properties.seacMap; } function int16(b0, b1) { return (b0 << 8) + b1; } function writeSignedInt16(bytes, index, value) { bytes[index + 1] = value; bytes[index] = value >>> 8; } function signedInt16(b0, b1) { var value = (b0 << 8) + b1; return value & 1 << 15 ? value - 0x10000 : value; } function int32(b0, b1, b2, b3) { return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; } function string16(value) { return String.fromCharCode(value >> 8 & 0xff, value & 0xff); } function safeString16(value) { if (value > 0x7fff) { value = 0x7fff; } else if (value < -0x8000) { value = -0x8000; } return String.fromCharCode(value >> 8 & 0xff, value & 0xff); } function isTrueTypeFile(file) { var header = file.peekBytes(4); return (0, _core_utils.readUint32)(header, 0) === 0x00010000 || (0, _util.bytesToString)(header) === "true"; } function isTrueTypeCollectionFile(file) { var header = file.peekBytes(4); return (0, _util.bytesToString)(header) === "ttcf"; } function isOpenTypeFile(file) { var header = file.peekBytes(4); return (0, _util.bytesToString)(header) === "OTTO"; } function isType1File(file) { var header = file.peekBytes(2); if (header[0] === 0x25 && header[1] === 0x21) { return true; } if (header[0] === 0x80 && header[1] === 0x01) { return true; } return false; } function isCFFFile(file) { var header = file.peekBytes(4); if (header[0] >= 1 && header[3] >= 1 && header[3] <= 4) { return true; } return false; } function getFontFileType(file, _ref) { var type = _ref.type, subtype = _ref.subtype, composite = _ref.composite; var fileType, fileSubtype; if (isTrueTypeFile(file) || isTrueTypeCollectionFile(file)) { if (composite) { fileType = "CIDFontType2"; } else { fileType = "TrueType"; } } else if (isOpenTypeFile(file)) { if (composite) { fileType = "CIDFontType2"; } else { fileType = "OpenType"; } } else if (isType1File(file)) { if (composite) { fileType = "CIDFontType0"; } else { fileType = type === "MMType1" ? "MMType1" : "Type1"; } } else if (isCFFFile(file)) { if (composite) { fileType = "CIDFontType0"; fileSubtype = "CIDFontType0C"; } else { fileType = type === "MMType1" ? "MMType1" : "Type1"; fileSubtype = "Type1C"; } } else { (0, _util.warn)("getFontFileType: Unable to detect correct font file Type/Subtype."); fileType = type; fileSubtype = subtype; } return [fileType, fileSubtype]; } function buildToFontChar(encoding, glyphsUnicodeMap, differences) { var toFontChar = [], unicode; for (var i = 0, ii = encoding.length; i < ii; i++) { unicode = (0, _unicode.getUnicodeForGlyph)(encoding[i], glyphsUnicodeMap); if (unicode !== -1) { toFontChar[i] = unicode; } } for (var charCode in differences) { unicode = (0, _unicode.getUnicodeForGlyph)(differences[charCode], glyphsUnicodeMap); if (unicode !== -1) { toFontChar[+charCode] = unicode; } } return toFontChar; } function adjustMapping(charCodeToGlyphId, hasGlyph, newGlyphZeroId) { var newMap = Object.create(null); var toFontChar = []; var privateUseAreaIndex = 0; var nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0]; var privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1]; for (var originalCharCode in charCodeToGlyphId) { originalCharCode |= 0; var glyphId = charCodeToGlyphId[originalCharCode]; if (!hasGlyph(glyphId)) { continue; } if (nextAvailableFontCharCode > privateUseOffetEnd) { privateUseAreaIndex++; if (privateUseAreaIndex >= PRIVATE_USE_AREAS.length) { (0, _util.warn)("Ran out of space in font private use area."); break; } nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0]; privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1]; } var fontCharCode = nextAvailableFontCharCode++; if (glyphId === 0) { glyphId = newGlyphZeroId; } newMap[fontCharCode] = glyphId; toFontChar[originalCharCode] = fontCharCode; } return { toFontChar: toFontChar, charCodeToGlyphId: newMap, nextAvailableFontCharCode: nextAvailableFontCharCode }; } function getRanges(glyphs, numGlyphs) { var codes = []; for (var charCode in glyphs) { if (glyphs[charCode] >= numGlyphs) { continue; } codes.push({ fontCharCode: charCode | 0, glyphId: glyphs[charCode] }); } if (codes.length === 0) { codes.push({ fontCharCode: 0, glyphId: 0 }); } codes.sort(function fontGetRangesSort(a, b) { return a.fontCharCode - b.fontCharCode; }); var ranges = []; var length = codes.length; for (var n = 0; n < length;) { var start = codes[n].fontCharCode; var codeIndices = [codes[n].glyphId]; ++n; var end = start; while (n < length && end + 1 === codes[n].fontCharCode) { codeIndices.push(codes[n].glyphId); ++end; ++n; if (end === 0xffff) { break; } } ranges.push([start, end, codeIndices]); } return ranges; } function createCmapTable(glyphs, numGlyphs) { var ranges = getRanges(glyphs, numGlyphs); var numTables = ranges[ranges.length - 1][1] > 0xffff ? 2 : 1; var cmap = "\x00\x00" + string16(numTables) + "\x00\x03" + "\x00\x01" + (0, _util.string32)(4 + numTables * 8); var i, ii, j, jj; for (i = ranges.length - 1; i >= 0; --i) { if (ranges[i][0] <= 0xffff) { break; } } var bmpLength = i + 1; if (ranges[i][0] < 0xffff && ranges[i][1] === 0xffff) { ranges[i][1] = 0xfffe; } var trailingRangesCount = ranges[i][1] < 0xffff ? 1 : 0; var segCount = bmpLength + trailingRangesCount; var searchParams = OpenTypeFileBuilder.getSearchParams(segCount, 2); var startCount = ""; var endCount = ""; var idDeltas = ""; var idRangeOffsets = ""; var glyphsIds = ""; var bias = 0; var range, start, end, codes; for (i = 0, ii = bmpLength; i < ii; i++) { range = ranges[i]; start = range[0]; end = range[1]; startCount += string16(start); endCount += string16(end); codes = range[2]; var contiguous = true; for (j = 1, jj = codes.length; j < jj; ++j) { if (codes[j] !== codes[j - 1] + 1) { contiguous = false; break; } } if (!contiguous) { var offset = (segCount - i) * 2 + bias * 2; bias += end - start + 1; idDeltas += string16(0); idRangeOffsets += string16(offset); for (j = 0, jj = codes.length; j < jj; ++j) { glyphsIds += string16(codes[j]); } } else { var startCode = codes[0]; idDeltas += string16(startCode - start & 0xffff); idRangeOffsets += string16(0); } } if (trailingRangesCount > 0) { endCount += "\xFF\xFF"; startCount += "\xFF\xFF"; idDeltas += "\x00\x01"; idRangeOffsets += "\x00\x00"; } var format314 = "\x00\x00" + string16(2 * segCount) + string16(searchParams.range) + string16(searchParams.entry) + string16(searchParams.rangeShift) + endCount + "\x00\x00" + startCount + idDeltas + idRangeOffsets + glyphsIds; var format31012 = ""; var header31012 = ""; if (numTables > 1) { cmap += "\x00\x03" + "\x00\x0A" + (0, _util.string32)(4 + numTables * 8 + 4 + format314.length); format31012 = ""; for (i = 0, ii = ranges.length; i < ii; i++) { range = ranges[i]; start = range[0]; codes = range[2]; var code = codes[0]; for (j = 1, jj = codes.length; j < jj; ++j) { if (codes[j] !== codes[j - 1] + 1) { end = range[0] + j - 1; format31012 += (0, _util.string32)(start) + (0, _util.string32)(end) + (0, _util.string32)(code); start = end + 1; code = codes[j]; } } format31012 += (0, _util.string32)(start) + (0, _util.string32)(range[1]) + (0, _util.string32)(code); } header31012 = "\x00\x0C" + "\x00\x00" + (0, _util.string32)(format31012.length + 16) + "\x00\x00\x00\x00" + (0, _util.string32)(format31012.length / 12); } return cmap + "\x00\x04" + string16(format314.length + 4) + format314 + header31012 + format31012; } function validateOS2Table(os2, file) { file.pos = (file.start || 0) + os2.offset; var version = file.getUint16(); file.skip(60); var selection = file.getUint16(); if (version < 4 && selection & 0x0300) { return false; } var firstChar = file.getUint16(); var lastChar = file.getUint16(); if (firstChar > lastChar) { return false; } file.skip(6); var usWinAscent = file.getUint16(); if (usWinAscent === 0) { return false; } os2.data[8] = os2.data[9] = 0; return true; } function createOS2Table(properties, charstrings, override) { override = override || { unitsPerEm: 0, yMax: 0, yMin: 0, ascent: 0, descent: 0 }; var ulUnicodeRange1 = 0; var ulUnicodeRange2 = 0; var ulUnicodeRange3 = 0; var ulUnicodeRange4 = 0; var firstCharIndex = null; var lastCharIndex = 0; if (charstrings) { for (var code in charstrings) { code |= 0; if (firstCharIndex > code || !firstCharIndex) { firstCharIndex = code; } if (lastCharIndex < code) { lastCharIndex = code; } var position = (0, _unicode.getUnicodeRangeFor)(code); if (position < 32) { ulUnicodeRange1 |= 1 << position; } else if (position < 64) { ulUnicodeRange2 |= 1 << position - 32; } else if (position < 96) { ulUnicodeRange3 |= 1 << position - 64; } else if (position < 123) { ulUnicodeRange4 |= 1 << position - 96; } else { throw new _util.FormatError("Unicode ranges Bits > 123 are reserved for internal usage"); } } if (lastCharIndex > 0xffff) { lastCharIndex = 0xffff; } } else { firstCharIndex = 0; lastCharIndex = 255; } var bbox = properties.bbox || [0, 0, 0, 0]; var unitsPerEm = override.unitsPerEm || 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0]; var scale = properties.ascentScaled ? 1.0 : unitsPerEm / PDF_GLYPH_SPACE_UNITS; var typoAscent = override.ascent || Math.round(scale * (properties.ascent || bbox[3])); var typoDescent = override.descent || Math.round(scale * (properties.descent || bbox[1])); if (typoDescent > 0 && properties.descent > 0 && bbox[1] < 0) { typoDescent = -typoDescent; } var winAscent = override.yMax || typoAscent; var winDescent = -override.yMin || -typoDescent; return "\x00\x03" + "\x02\x24" + "\x01\xF4" + "\x00\x05" + "\x00\x00" + "\x02\x8A" + "\x02\xBB" + "\x00\x00" + "\x00\x8C" + "\x02\x8A" + "\x02\xBB" + "\x00\x00" + "\x01\xDF" + "\x00\x31" + "\x01\x02" + "\x00\x00" + "\x00\x00\x06" + String.fromCharCode(properties.fixedPitch ? 0x09 : 0x00) + "\x00\x00\x00\x00\x00\x00" + (0, _util.string32)(ulUnicodeRange1) + (0, _util.string32)(ulUnicodeRange2) + (0, _util.string32)(ulUnicodeRange3) + (0, _util.string32)(ulUnicodeRange4) + "\x2A\x32\x31\x2A" + string16(properties.italicAngle ? 1 : 0) + string16(firstCharIndex || properties.firstChar) + string16(lastCharIndex || properties.lastChar) + string16(typoAscent) + string16(typoDescent) + "\x00\x64" + string16(winAscent) + string16(winDescent) + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + string16(properties.xHeight) + string16(properties.capHeight) + string16(0) + string16(firstCharIndex || properties.firstChar) + "\x00\x03"; } function createPostTable(properties) { var angle = Math.floor(properties.italicAngle * Math.pow(2, 16)); return "\x00\x03\x00\x00" + (0, _util.string32)(angle) + "\x00\x00" + "\x00\x00" + (0, _util.string32)(properties.fixedPitch) + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + "\x00\x00\x00\x00"; } function createNameTable(name, proto) { if (!proto) { proto = [[], []]; } var strings = [proto[0][0] || "Original licence", proto[0][1] || name, proto[0][2] || "Unknown", proto[0][3] || "uniqueID", proto[0][4] || name, proto[0][5] || "Version 0.11", proto[0][6] || "", proto[0][7] || "Unknown", proto[0][8] || "Unknown", proto[0][9] || "Unknown"]; var stringsUnicode = []; var i, ii, j, jj, str; for (i = 0, ii = strings.length; i < ii; i++) { str = proto[1][i] || strings[i]; var strBufUnicode = []; for (j = 0, jj = str.length; j < jj; j++) { strBufUnicode.push(string16(str.charCodeAt(j))); } stringsUnicode.push(strBufUnicode.join("")); } var names = [strings, stringsUnicode]; var platforms = ["\x00\x01", "\x00\x03"]; var encodings = ["\x00\x00", "\x00\x01"]; var languages = ["\x00\x00", "\x04\x09"]; var namesRecordCount = strings.length * platforms.length; var nameTable = "\x00\x00" + string16(namesRecordCount) + string16(namesRecordCount * 12 + 6); var strOffset = 0; for (i = 0, ii = platforms.length; i < ii; i++) { var strs = names[i]; for (j = 0, jj = strs.length; j < jj; j++) { str = strs[j]; var nameRecord = platforms[i] + encodings[i] + languages[i] + string16(j) + string16(str.length) + string16(strOffset); nameTable += nameRecord; strOffset += str.length; } } nameTable += strings.join("") + stringsUnicode.join(""); return nameTable; } Font.prototype = { name: null, font: null, mimetype: null, disableFontFace: false, get renderer() { var renderer = _font_renderer.FontRendererFactory.create(this, SEAC_ANALYSIS_ENABLED); return (0, _util.shadow)(this, "renderer", renderer); }, exportData: function exportData() { var extraProperties = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var exportDataProperties = extraProperties ? [].concat(EXPORT_DATA_PROPERTIES, EXPORT_DATA_EXTRA_PROPERTIES) : EXPORT_DATA_PROPERTIES; var data = Object.create(null); var property, value; var _iterator = _createForOfIteratorHelper(exportDataProperties), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { property = _step.value; value = this[property]; if (value !== undefined) { data[property] = value; } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } return data; }, fallbackToSystemFont: function fallbackToSystemFont(properties) { var _this = this; this.missingFile = true; var name = this.name; var type = this.type; var subtype = this.subtype; var fontName = name.replace(/[,_]/g, "-").replace(/\s/g, ""); var stdFontMap = (0, _standard_fonts.getStdFontMap)(), nonStdFontMap = (0, _standard_fonts.getNonStdFontMap)(); var isStandardFont = !!stdFontMap[fontName]; var isMappedToStandardFont = !!(nonStdFontMap[fontName] && stdFontMap[nonStdFontMap[fontName]]); fontName = stdFontMap[fontName] || nonStdFontMap[fontName] || fontName; this.bold = fontName.search(/bold/gi) !== -1; this.italic = fontName.search(/oblique/gi) !== -1 || fontName.search(/italic/gi) !== -1; this.black = name.search(/Black/g) !== -1; var isNarrow = name.search(/Narrow/g) !== -1; this.remeasure = (!isStandardFont || isNarrow) && Object.keys(this.widths).length > 0; if ((isStandardFont || isMappedToStandardFont) && type === "CIDFontType2" && this.cidEncoding.startsWith("Identity-")) { var GlyphMapForStandardFonts = (0, _standard_fonts.getGlyphMapForStandardFonts)(), cidToGidMap = properties.cidToGidMap; var map = []; for (var charCode in GlyphMapForStandardFonts) { map[+charCode] = GlyphMapForStandardFonts[charCode]; } if (/Arial-?Black/i.test(name)) { var SupplementalGlyphMapForArialBlack = (0, _standard_fonts.getSupplementalGlyphMapForArialBlack)(); for (var _charCode in SupplementalGlyphMapForArialBlack) { map[+_charCode] = SupplementalGlyphMapForArialBlack[_charCode]; } } else if (/Calibri/i.test(name)) { var SupplementalGlyphMapForCalibri = (0, _standard_fonts.getSupplementalGlyphMapForCalibri)(); for (var _charCode2 in SupplementalGlyphMapForCalibri) { map[+_charCode2] = SupplementalGlyphMapForCalibri[_charCode2]; } } if (cidToGidMap) { for (var _charCode3 in map) { var cid = map[_charCode3]; if (cidToGidMap[cid] !== undefined) { map[+_charCode3] = cidToGidMap[cid]; } } } var isIdentityUnicode = this.toUnicode instanceof IdentityToUnicodeMap; if (!isIdentityUnicode) { this.toUnicode.forEach(function (charCode, unicodeCharCode) { map[+charCode] = unicodeCharCode; }); } this.toFontChar = map; this.toUnicode = new ToUnicodeMap(map); } else if (/Symbol/i.test(fontName)) { this.toFontChar = buildToFontChar(_encodings.SymbolSetEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences); } else if (/Dingbats/i.test(fontName)) { if (/Wingdings/i.test(name)) { (0, _util.warn)("Non-embedded Wingdings font, falling back to ZapfDingbats."); } this.toFontChar = buildToFontChar(_encodings.ZapfDingbatsEncoding, (0, _glyphlist.getDingbatsGlyphsUnicode)(), this.differences); } else if (isStandardFont) { this.toFontChar = buildToFontChar(this.defaultEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences); } else { var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); var _map = []; this.toUnicode.forEach(function (charCode, unicodeCharCode) { if (!_this.composite) { var glyphName = _this.differences[charCode] || _this.defaultEncoding[charCode]; var unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap); if (unicode !== -1) { unicodeCharCode = unicode; } } _map[+charCode] = unicodeCharCode; }); if (this.composite && this.toUnicode instanceof IdentityToUnicodeMap) { if (/Verdana/i.test(name)) { var _GlyphMapForStandardFonts = (0, _standard_fonts.getGlyphMapForStandardFonts)(); for (var _charCode4 in _GlyphMapForStandardFonts) { _map[+_charCode4] = _GlyphMapForStandardFonts[_charCode4]; } } } this.toFontChar = _map; } this.loadedName = fontName.split("-")[0]; this.fontType = getFontType(type, subtype); }, checkAndRepair: function Font_checkAndRepair(name, font, properties) { var VALID_TABLES = ["OS/2", "cmap", "head", "hhea", "hmtx", "maxp", "name", "post", "loca", "glyf", "fpgm", "prep", "cvt ", "CFF "]; function readTables(file, numTables) { var tables = Object.create(null); tables["OS/2"] = null; tables.cmap = null; tables.head = null; tables.hhea = null; tables.hmtx = null; tables.maxp = null; tables.name = null; tables.post = null; for (var i = 0; i < numTables; i++) { var table = readTableEntry(file); if (!VALID_TABLES.includes(table.tag)) { continue; } if (table.length === 0) { continue; } tables[table.tag] = table; } return tables; } function readTableEntry(file) { var tag = (0, _util.bytesToString)(file.getBytes(4)); var checksum = file.getInt32() >>> 0; var offset = file.getInt32() >>> 0; var length = file.getInt32() >>> 0; var previousPosition = file.pos; file.pos = file.start ? file.start : 0; file.skip(offset); var data = file.getBytes(length); file.pos = previousPosition; if (tag === "head") { data[8] = data[9] = data[10] = data[11] = 0; data[17] |= 0x20; } return { tag: tag, checksum: checksum, length: length, offset: offset, data: data }; } function readOpenTypeHeader(ttf) { return { version: (0, _util.bytesToString)(ttf.getBytes(4)), numTables: ttf.getUint16(), searchRange: ttf.getUint16(), entrySelector: ttf.getUint16(), rangeShift: ttf.getUint16() }; } function readTrueTypeCollectionHeader(ttc) { var ttcTag = (0, _util.bytesToString)(ttc.getBytes(4)); (0, _util.assert)(ttcTag === "ttcf", "Must be a TrueType Collection font."); var majorVersion = ttc.getUint16(); var minorVersion = ttc.getUint16(); var numFonts = ttc.getInt32() >>> 0; var offsetTable = []; for (var i = 0; i < numFonts; i++) { offsetTable.push(ttc.getInt32() >>> 0); } var header = { ttcTag: ttcTag, majorVersion: majorVersion, minorVersion: minorVersion, numFonts: numFonts, offsetTable: offsetTable }; switch (majorVersion) { case 1: return header; case 2: header.dsigTag = ttc.getInt32() >>> 0; header.dsigLength = ttc.getInt32() >>> 0; header.dsigOffset = ttc.getInt32() >>> 0; return header; } throw new _util.FormatError("Invalid TrueType Collection majorVersion: ".concat(majorVersion, ".")); } function readTrueTypeCollectionData(ttc, fontName) { var _readTrueTypeCollecti = readTrueTypeCollectionHeader(ttc), numFonts = _readTrueTypeCollecti.numFonts, offsetTable = _readTrueTypeCollecti.offsetTable; for (var i = 0; i < numFonts; i++) { ttc.pos = (ttc.start || 0) + offsetTable[i]; var potentialHeader = readOpenTypeHeader(ttc); var potentialTables = readTables(ttc, potentialHeader.numTables); if (!potentialTables.name) { throw new _util.FormatError('TrueType Collection font must contain a "name" table.'); } var nameTable = readNameTable(potentialTables.name); for (var j = 0, jj = nameTable.length; j < jj; j++) { for (var k = 0, kk = nameTable[j].length; k < kk; k++) { var nameEntry = nameTable[j][k]; if (nameEntry && nameEntry.replace(/\s/g, "") === fontName) { return { header: potentialHeader, tables: potentialTables }; } } } } throw new _util.FormatError("TrueType Collection does not contain \"".concat(fontName, "\" font.")); } function readCmapTable(cmap, file, isSymbolicFont, hasEncoding) { if (!cmap) { (0, _util.warn)("No cmap table available."); return { platformId: -1, encodingId: -1, mappings: [], hasShortCmap: false }; } var segment; var start = (file.start ? file.start : 0) + cmap.offset; file.pos = start; file.skip(2); var numTables = file.getUint16(); var potentialTable; var canBreak = false; for (var i = 0; i < numTables; i++) { var platformId = file.getUint16(); var encodingId = file.getUint16(); var offset = file.getInt32() >>> 0; var useTable = false; if (potentialTable && potentialTable.platformId === platformId && potentialTable.encodingId === encodingId) { continue; } if (platformId === 0 && (encodingId === 0 || encodingId === 1 || encodingId === 3)) { useTable = true; } else if (platformId === 1 && encodingId === 0) { useTable = true; } else if (platformId === 3 && encodingId === 1 && (hasEncoding || !potentialTable)) { useTable = true; if (!isSymbolicFont) { canBreak = true; } } else if (isSymbolicFont && platformId === 3 && encodingId === 0) { useTable = true; canBreak = true; } if (useTable) { potentialTable = { platformId: platformId, encodingId: encodingId, offset: offset }; } if (canBreak) { break; } } if (potentialTable) { file.pos = start + potentialTable.offset; } if (!potentialTable || file.peekByte() === -1) { (0, _util.warn)("Could not find a preferred cmap table."); return { platformId: -1, encodingId: -1, mappings: [], hasShortCmap: false }; } var format = file.getUint16(); file.skip(2 + 2); var hasShortCmap = false; var mappings = []; var j, glyphId; if (format === 0) { for (j = 0; j < 256; j++) { var index = file.getByte(); if (!index) { continue; } mappings.push({ charCode: j, glyphId: index }); } hasShortCmap = true; } else if (format === 4) { var segCount = file.getUint16() >> 1; file.skip(6); var segIndex, segments = []; for (segIndex = 0; segIndex < segCount; segIndex++) { segments.push({ end: file.getUint16() }); } file.skip(2); for (segIndex = 0; segIndex < segCount; segIndex++) { segments[segIndex].start = file.getUint16(); } for (segIndex = 0; segIndex < segCount; segIndex++) { segments[segIndex].delta = file.getUint16(); } var offsetsCount = 0; for (segIndex = 0; segIndex < segCount; segIndex++) { segment = segments[segIndex]; var rangeOffset = file.getUint16(); if (!rangeOffset) { segment.offsetIndex = -1; continue; } var offsetIndex = (rangeOffset >> 1) - (segCount - segIndex); segment.offsetIndex = offsetIndex; offsetsCount = Math.max(offsetsCount, offsetIndex + segment.end - segment.start + 1); } var offsets = []; for (j = 0; j < offsetsCount; j++) { offsets.push(file.getUint16()); } for (segIndex = 0; segIndex < segCount; segIndex++) { segment = segments[segIndex]; start = segment.start; var end = segment.end; var delta = segment.delta; offsetIndex = segment.offsetIndex; for (j = start; j <= end; j++) { if (j === 0xffff) { continue; } glyphId = offsetIndex < 0 ? j : offsets[offsetIndex + j - start]; glyphId = glyphId + delta & 0xffff; mappings.push({ charCode: j, glyphId: glyphId }); } } } else if (format === 6) { var firstCode = file.getUint16(); var entryCount = file.getUint16(); for (j = 0; j < entryCount; j++) { glyphId = file.getUint16(); var charCode = firstCode + j; mappings.push({ charCode: charCode, glyphId: glyphId }); } } else { (0, _util.warn)("cmap table has unsupported format: " + format); return { platformId: -1, encodingId: -1, mappings: [], hasShortCmap: false }; } mappings.sort(function (a, b) { return a.charCode - b.charCode; }); for (i = 1; i < mappings.length; i++) { if (mappings[i - 1].charCode === mappings[i].charCode) { mappings.splice(i, 1); i--; } } return { platformId: potentialTable.platformId, encodingId: potentialTable.encodingId, mappings: mappings, hasShortCmap: hasShortCmap }; } function sanitizeMetrics(file, header, metrics, numGlyphs, dupFirstEntry) { if (!header) { if (metrics) { metrics.data = null; } return; } file.pos = (file.start ? file.start : 0) + header.offset; file.pos += 4; file.pos += 2; file.pos += 2; file.pos += 2; file.pos += 2; file.pos += 2; file.pos += 2; file.pos += 2; file.pos += 2; file.pos += 2; file.pos += 2; file.pos += 8; file.pos += 2; var numOfMetrics = file.getUint16(); if (numOfMetrics > numGlyphs) { (0, _util.info)("The numOfMetrics (" + numOfMetrics + ") should not be " + "greater than the numGlyphs (" + numGlyphs + ")"); numOfMetrics = numGlyphs; header.data[34] = (numOfMetrics & 0xff00) >> 8; header.data[35] = numOfMetrics & 0x00ff; } var numOfSidebearings = numGlyphs - numOfMetrics; var numMissing = numOfSidebearings - (metrics.length - numOfMetrics * 4 >> 1); if (numMissing > 0) { var entries = new Uint8Array(metrics.length + numMissing * 2); entries.set(metrics.data); if (dupFirstEntry) { entries[metrics.length] = metrics.data[2]; entries[metrics.length + 1] = metrics.data[3]; } metrics.data = entries; } } function sanitizeGlyph(source, sourceStart, sourceEnd, dest, destStart, hintsValid) { var glyphProfile = { length: 0, sizeOfInstructions: 0 }; if (sourceEnd - sourceStart <= 12) { return glyphProfile; } var glyf = source.subarray(sourceStart, sourceEnd); var contoursCount = signedInt16(glyf[0], glyf[1]); if (contoursCount < 0) { contoursCount = -1; writeSignedInt16(glyf, 0, contoursCount); dest.set(glyf, destStart); glyphProfile.length = glyf.length; return glyphProfile; } var i, j = 10, flagsCount = 0; for (i = 0; i < contoursCount; i++) { var endPoint = glyf[j] << 8 | glyf[j + 1]; flagsCount = endPoint + 1; j += 2; } var instructionsStart = j; var instructionsLength = glyf[j] << 8 | glyf[j + 1]; glyphProfile.sizeOfInstructions = instructionsLength; j += 2 + instructionsLength; var instructionsEnd = j; var coordinatesLength = 0; for (i = 0; i < flagsCount; i++) { var flag = glyf[j++]; if (flag & 0xc0) { glyf[j - 1] = flag & 0x3f; } var xLength = 2; if (flag & 2) { xLength = 1; } else if (flag & 16) { xLength = 0; } var yLength = 2; if (flag & 4) { yLength = 1; } else if (flag & 32) { yLength = 0; } var xyLength = xLength + yLength; coordinatesLength += xyLength; if (flag & 8) { var repeat = glyf[j++]; i += repeat; coordinatesLength += repeat * xyLength; } } if (coordinatesLength === 0) { return glyphProfile; } var glyphDataLength = j + coordinatesLength; if (glyphDataLength > glyf.length) { return glyphProfile; } if (!hintsValid && instructionsLength > 0) { dest.set(glyf.subarray(0, instructionsStart), destStart); dest.set([0, 0], destStart + instructionsStart); dest.set(glyf.subarray(instructionsEnd, glyphDataLength), destStart + instructionsStart + 2); glyphDataLength -= instructionsLength; if (glyf.length - glyphDataLength > 3) { glyphDataLength = glyphDataLength + 3 & ~3; } glyphProfile.length = glyphDataLength; return glyphProfile; } if (glyf.length - glyphDataLength > 3) { glyphDataLength = glyphDataLength + 3 & ~3; dest.set(glyf.subarray(0, glyphDataLength), destStart); glyphProfile.length = glyphDataLength; return glyphProfile; } dest.set(glyf, destStart); glyphProfile.length = glyf.length; return glyphProfile; } function sanitizeHead(head, numGlyphs, locaLength) { var data = head.data; var version = int32(data[0], data[1], data[2], data[3]); if (version >> 16 !== 1) { (0, _util.info)("Attempting to fix invalid version in head table: " + version); data[0] = 0; data[1] = 1; data[2] = 0; data[3] = 0; } var indexToLocFormat = int16(data[50], data[51]); if (indexToLocFormat < 0 || indexToLocFormat > 1) { (0, _util.info)("Attempting to fix invalid indexToLocFormat in head table: " + indexToLocFormat); var numGlyphsPlusOne = numGlyphs + 1; if (locaLength === numGlyphsPlusOne << 1) { data[50] = 0; data[51] = 0; } else if (locaLength === numGlyphsPlusOne << 2) { data[50] = 0; data[51] = 1; } else { throw new _util.FormatError("Could not fix indexToLocFormat: " + indexToLocFormat); } } } function sanitizeGlyphLocations(loca, glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions) { var itemSize, itemDecode, itemEncode; if (isGlyphLocationsLong) { itemSize = 4; itemDecode = function fontItemDecodeLong(data, offset) { return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]; }; itemEncode = function fontItemEncodeLong(data, offset, value) { data[offset] = value >>> 24 & 0xff; data[offset + 1] = value >> 16 & 0xff; data[offset + 2] = value >> 8 & 0xff; data[offset + 3] = value & 0xff; }; } else { itemSize = 2; itemDecode = function fontItemDecode(data, offset) { return data[offset] << 9 | data[offset + 1] << 1; }; itemEncode = function fontItemEncode(data, offset, value) { data[offset] = value >> 9 & 0xff; data[offset + 1] = value >> 1 & 0xff; }; } var numGlyphsOut = dupFirstEntry ? numGlyphs + 1 : numGlyphs; var locaDataSize = itemSize * (1 + numGlyphsOut); var locaData = new Uint8Array(locaDataSize); locaData.set(loca.data.subarray(0, locaDataSize)); loca.data = locaData; var oldGlyfData = glyf.data; var oldGlyfDataLength = oldGlyfData.length; var newGlyfData = new Uint8Array(oldGlyfDataLength); var i, j; var locaEntries = []; for (i = 0, j = 0; i < numGlyphs + 1; i++, j += itemSize) { var offset = itemDecode(locaData, j); if (offset > oldGlyfDataLength) { offset = oldGlyfDataLength; } locaEntries.push({ index: i, offset: offset, endOffset: 0 }); } locaEntries.sort(function (a, b) { return a.offset - b.offset; }); for (i = 0; i < numGlyphs; i++) { locaEntries[i].endOffset = locaEntries[i + 1].offset; } locaEntries.sort(function (a, b) { return a.index - b.index; }); var missingGlyphs = Object.create(null); var writeOffset = 0; itemEncode(locaData, 0, writeOffset); for (i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) { var glyphProfile = sanitizeGlyph(oldGlyfData, locaEntries[i].offset, locaEntries[i].endOffset, newGlyfData, writeOffset, hintsValid); var newLength = glyphProfile.length; if (newLength === 0) { missingGlyphs[i] = true; } if (glyphProfile.sizeOfInstructions > maxSizeOfInstructions) { maxSizeOfInstructions = glyphProfile.sizeOfInstructions; } writeOffset += newLength; itemEncode(locaData, j, writeOffset); } if (writeOffset === 0) { var simpleGlyph = new Uint8Array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0]); for (i = 0, j = itemSize; i < numGlyphsOut; i++, j += itemSize) { itemEncode(locaData, j, simpleGlyph.length); } glyf.data = simpleGlyph; } else if (dupFirstEntry) { var firstEntryLength = itemDecode(locaData, itemSize); if (newGlyfData.length > firstEntryLength + writeOffset) { glyf.data = newGlyfData.subarray(0, firstEntryLength + writeOffset); } else { glyf.data = new Uint8Array(firstEntryLength + writeOffset); glyf.data.set(newGlyfData.subarray(0, writeOffset)); } glyf.data.set(newGlyfData.subarray(0, firstEntryLength), writeOffset); itemEncode(loca.data, locaData.length - itemSize, writeOffset + firstEntryLength); } else { glyf.data = newGlyfData.subarray(0, writeOffset); } return { missingGlyphs: missingGlyphs, maxSizeOfInstructions: maxSizeOfInstructions }; } function readPostScriptTable(post, propertiesObj, maxpNumGlyphs) { var start = (font.start ? font.start : 0) + post.offset; font.pos = start; var length = post.length, end = start + length; var version = font.getInt32(); font.skip(28); var glyphNames; var valid = true; var i; switch (version) { case 0x00010000: glyphNames = MacStandardGlyphOrdering; break; case 0x00020000: var numGlyphs = font.getUint16(); if (numGlyphs !== maxpNumGlyphs) { valid = false; break; } var glyphNameIndexes = []; for (i = 0; i < numGlyphs; ++i) { var index = font.getUint16(); if (index >= 32768) { valid = false; break; } glyphNameIndexes.push(index); } if (!valid) { break; } var customNames = []; var strBuf = []; while (font.pos < end) { var stringLength = font.getByte(); strBuf.length = stringLength; for (i = 0; i < stringLength; ++i) { strBuf[i] = String.fromCharCode(font.getByte()); } customNames.push(strBuf.join("")); } glyphNames = []; for (i = 0; i < numGlyphs; ++i) { var j = glyphNameIndexes[i]; if (j < 258) { glyphNames.push(MacStandardGlyphOrdering[j]); continue; } glyphNames.push(customNames[j - 258]); } break; case 0x00030000: break; default: (0, _util.warn)("Unknown/unsupported post table version " + version); valid = false; if (propertiesObj.defaultEncoding) { glyphNames = propertiesObj.defaultEncoding; } break; } propertiesObj.glyphNames = glyphNames; return valid; } function readNameTable(nameTable) { var start = (font.start ? font.start : 0) + nameTable.offset; font.pos = start; var names = [[], []]; var length = nameTable.length, end = start + length; var format = font.getUint16(); var FORMAT_0_HEADER_LENGTH = 6; if (format !== 0 || length < FORMAT_0_HEADER_LENGTH) { return names; } var numRecords = font.getUint16(); var stringsStart = font.getUint16(); var records = []; var NAME_RECORD_LENGTH = 12; var i, ii; for (i = 0; i < numRecords && font.pos + NAME_RECORD_LENGTH <= end; i++) { var r = { platform: font.getUint16(), encoding: font.getUint16(), language: font.getUint16(), name: font.getUint16(), length: font.getUint16(), offset: font.getUint16() }; if (r.platform === 1 && r.encoding === 0 && r.language === 0 || r.platform === 3 && r.encoding === 1 && r.language === 0x409) { records.push(r); } } for (i = 0, ii = records.length; i < ii; i++) { var record = records[i]; if (record.length <= 0) { continue; } var pos = start + stringsStart + record.offset; if (pos + record.length > end) { continue; } font.pos = pos; var nameIndex = record.name; if (record.encoding) { var str = ""; for (var j = 0, jj = record.length; j < jj; j += 2) { str += String.fromCharCode(font.getUint16()); } names[1][nameIndex] = str; } else { names[0][nameIndex] = (0, _util.bytesToString)(font.getBytes(record.length)); } } return names; } var TTOpsStackDeltas = [0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, -2, 0, 0, -2, -5, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, -1, -1, 1, -1, -999, 0, 1, 0, -1, -2, 0, -1, -2, -1, -1, 0, -1, -1, 0, 0, -999, -999, -1, -1, -1, -1, -2, -999, -2, -2, -999, 0, -2, -2, 0, 0, -2, 0, -2, 0, 0, 0, -2, -1, -1, 1, 1, 0, 0, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, 0, -999, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -999, -999, -999, -999, -999, -1, -1, -2, -2, 0, 0, 0, 0, -1, -1, -999, -2, -2, 0, 0, -1, -2, -2, 0, 0, 0, -1, -1, -1, -2]; function sanitizeTTProgram(table, ttContext) { var data = table.data; var i = 0, j, n, b, funcId, pc, lastEndf = 0, lastDeff = 0; var stack = []; var callstack = []; var functionsCalled = []; var tooComplexToFollowFunctions = ttContext.tooComplexToFollowFunctions; var inFDEF = false, ifLevel = 0, inELSE = 0; for (var ii = data.length; i < ii;) { var op = data[i++]; if (op === 0x40) { n = data[i++]; if (inFDEF || inELSE) { i += n; } else { for (j = 0; j < n; j++) { stack.push(data[i++]); } } } else if (op === 0x41) { n = data[i++]; if (inFDEF || inELSE) { i += n * 2; } else { for (j = 0; j < n; j++) { b = data[i++]; stack.push(b << 8 | data[i++]); } } } else if ((op & 0xf8) === 0xb0) { n = op - 0xb0 + 1; if (inFDEF || inELSE) { i += n; } else { for (j = 0; j < n; j++) { stack.push(data[i++]); } } } else if ((op & 0xf8) === 0xb8) { n = op - 0xb8 + 1; if (inFDEF || inELSE) { i += n * 2; } else { for (j = 0; j < n; j++) { b = data[i++]; stack.push(b << 8 | data[i++]); } } } else if (op === 0x2b && !tooComplexToFollowFunctions) { if (!inFDEF && !inELSE) { funcId = stack[stack.length - 1]; if (isNaN(funcId)) { (0, _util.info)("TT: CALL empty stack (or invalid entry)."); } else { ttContext.functionsUsed[funcId] = true; if (funcId in ttContext.functionsStackDeltas) { var newStackLength = stack.length + ttContext.functionsStackDeltas[funcId]; if (newStackLength < 0) { (0, _util.warn)("TT: CALL invalid functions stack delta."); ttContext.hintsValid = false; return; } stack.length = newStackLength; } else if (funcId in ttContext.functionsDefined && !functionsCalled.includes(funcId)) { callstack.push({ data: data, i: i, stackTop: stack.length - 1 }); functionsCalled.push(funcId); pc = ttContext.functionsDefined[funcId]; if (!pc) { (0, _util.warn)("TT: CALL non-existent function"); ttContext.hintsValid = false; return; } data = pc.data; i = pc.i; } } } } else if (op === 0x2c && !tooComplexToFollowFunctions) { if (inFDEF || inELSE) { (0, _util.warn)("TT: nested FDEFs not allowed"); tooComplexToFollowFunctions = true; } inFDEF = true; lastDeff = i; funcId = stack.pop(); ttContext.functionsDefined[funcId] = { data: data, i: i }; } else if (op === 0x2d) { if (inFDEF) { inFDEF = false; lastEndf = i; } else { pc = callstack.pop(); if (!pc) { (0, _util.warn)("TT: ENDF bad stack"); ttContext.hintsValid = false; return; } funcId = functionsCalled.pop(); data = pc.data; i = pc.i; ttContext.functionsStackDeltas[funcId] = stack.length - pc.stackTop; } } else if (op === 0x89) { if (inFDEF || inELSE) { (0, _util.warn)("TT: nested IDEFs not allowed"); tooComplexToFollowFunctions = true; } inFDEF = true; lastDeff = i; } else if (op === 0x58) { ++ifLevel; } else if (op === 0x1b) { inELSE = ifLevel; } else if (op === 0x59) { if (inELSE === ifLevel) { inELSE = 0; } --ifLevel; } else if (op === 0x1c) { if (!inFDEF && !inELSE) { var offset = stack[stack.length - 1]; if (offset > 0) { i += offset - 1; } } } if (!inFDEF && !inELSE) { var stackDelta = 0; if (op <= 0x8e) { stackDelta = TTOpsStackDeltas[op]; } else if (op >= 0xc0 && op <= 0xdf) { stackDelta = -1; } else if (op >= 0xe0) { stackDelta = -2; } if (op >= 0x71 && op <= 0x75) { n = stack.pop(); if (!isNaN(n)) { stackDelta = -n * 2; } } while (stackDelta < 0 && stack.length > 0) { stack.pop(); stackDelta++; } while (stackDelta > 0) { stack.push(NaN); stackDelta--; } } } ttContext.tooComplexToFollowFunctions = tooComplexToFollowFunctions; var content = [data]; if (i > data.length) { content.push(new Uint8Array(i - data.length)); } if (lastDeff > lastEndf) { (0, _util.warn)("TT: complementing a missing function tail"); content.push(new Uint8Array([0x22, 0x2d])); } foldTTTable(table, content); } function checkInvalidFunctions(ttContext, maxFunctionDefs) { if (ttContext.tooComplexToFollowFunctions) { return; } if (ttContext.functionsDefined.length > maxFunctionDefs) { (0, _util.warn)("TT: more functions defined than expected"); ttContext.hintsValid = false; return; } for (var j = 0, jj = ttContext.functionsUsed.length; j < jj; j++) { if (j > maxFunctionDefs) { (0, _util.warn)("TT: invalid function id: " + j); ttContext.hintsValid = false; return; } if (ttContext.functionsUsed[j] && !ttContext.functionsDefined[j]) { (0, _util.warn)("TT: undefined function: " + j); ttContext.hintsValid = false; return; } } } function foldTTTable(table, content) { if (content.length > 1) { var newLength = 0; var j, jj; for (j = 0, jj = content.length; j < jj; j++) { newLength += content[j].length; } newLength = newLength + 3 & ~3; var result = new Uint8Array(newLength); var pos = 0; for (j = 0, jj = content.length; j < jj; j++) { result.set(content[j], pos); pos += content[j].length; } table.data = result; table.length = newLength; } } function sanitizeTTPrograms(fpgm, prep, cvt, maxFunctionDefs) { var ttContext = { functionsDefined: [], functionsUsed: [], functionsStackDeltas: [], tooComplexToFollowFunctions: false, hintsValid: true }; if (fpgm) { sanitizeTTProgram(fpgm, ttContext); } if (prep) { sanitizeTTProgram(prep, ttContext); } if (fpgm) { checkInvalidFunctions(ttContext, maxFunctionDefs); } if (cvt && cvt.length & 1) { var cvtData = new Uint8Array(cvt.length + 1); cvtData.set(cvt.data); cvt.data = cvtData; } return ttContext.hintsValid; } font = new _stream.Stream(new Uint8Array(font.getBytes())); var header, tables; if (isTrueTypeCollectionFile(font)) { var ttcData = readTrueTypeCollectionData(font, this.name); header = ttcData.header; tables = ttcData.tables; } else { header = readOpenTypeHeader(font); tables = readTables(font, header.numTables); } var cff, cffFile; var isTrueType = !tables["CFF "]; if (!isTrueType) { var isComposite = properties.composite && ((properties.cidToGidMap || []).length > 0 || !(properties.cMap instanceof _cmap.IdentityCMap)); if (header.version === "OTTO" && !isComposite || !tables.head || !tables.hhea || !tables.maxp || !tables.post) { cffFile = new _stream.Stream(tables["CFF "].data); cff = new CFFFont(cffFile, properties); adjustWidths(properties); return this.convert(name, cff, properties); } delete tables.glyf; delete tables.loca; delete tables.fpgm; delete tables.prep; delete tables["cvt "]; this.isOpenType = true; } else { if (!tables.loca) { throw new _util.FormatError('Required "loca" table is not found'); } if (!tables.glyf) { (0, _util.warn)('Required "glyf" table is not found -- trying to recover.'); tables.glyf = { tag: "glyf", data: new Uint8Array(0) }; } this.isOpenType = false; } if (!tables.maxp) { throw new _util.FormatError('Required "maxp" table is not found'); } font.pos = (font.start || 0) + tables.maxp.offset; var version = font.getInt32(); var numGlyphs = font.getUint16(); var numGlyphsOut = numGlyphs + 1; var dupFirstEntry = true; if (numGlyphsOut > 0xffff) { dupFirstEntry = false; numGlyphsOut = numGlyphs; (0, _util.warn)("Not enough space in glyfs to duplicate first glyph."); } var maxFunctionDefs = 0; var maxSizeOfInstructions = 0; if (version >= 0x00010000 && tables.maxp.length >= 22) { font.pos += 8; var maxZones = font.getUint16(); if (maxZones > 2) { tables.maxp.data[14] = 0; tables.maxp.data[15] = 2; } font.pos += 4; maxFunctionDefs = font.getUint16(); font.pos += 4; maxSizeOfInstructions = font.getUint16(); } tables.maxp.data[4] = numGlyphsOut >> 8; tables.maxp.data[5] = numGlyphsOut & 255; var hintsValid = sanitizeTTPrograms(tables.fpgm, tables.prep, tables["cvt "], maxFunctionDefs); if (!hintsValid) { delete tables.fpgm; delete tables.prep; delete tables["cvt "]; } sanitizeMetrics(font, tables.hhea, tables.hmtx, numGlyphsOut, dupFirstEntry); if (!tables.head) { throw new _util.FormatError('Required "head" table is not found'); } sanitizeHead(tables.head, numGlyphs, isTrueType ? tables.loca.length : 0); var missingGlyphs = Object.create(null); if (isTrueType) { var isGlyphLocationsLong = int16(tables.head.data[50], tables.head.data[51]); var glyphsInfo = sanitizeGlyphLocations(tables.loca, tables.glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions); missingGlyphs = glyphsInfo.missingGlyphs; if (version >= 0x00010000 && tables.maxp.length >= 22) { tables.maxp.data[26] = glyphsInfo.maxSizeOfInstructions >> 8; tables.maxp.data[27] = glyphsInfo.maxSizeOfInstructions & 255; } } if (!tables.hhea) { throw new _util.FormatError('Required "hhea" table is not found'); } if (tables.hhea.data[10] === 0 && tables.hhea.data[11] === 0) { tables.hhea.data[10] = 0xff; tables.hhea.data[11] = 0xff; } var metricsOverride = { unitsPerEm: int16(tables.head.data[18], tables.head.data[19]), yMax: int16(tables.head.data[42], tables.head.data[43]), yMin: signedInt16(tables.head.data[38], tables.head.data[39]), ascent: int16(tables.hhea.data[4], tables.hhea.data[5]), descent: signedInt16(tables.hhea.data[6], tables.hhea.data[7]) }; this.ascent = metricsOverride.ascent / metricsOverride.unitsPerEm; this.descent = metricsOverride.descent / metricsOverride.unitsPerEm; if (tables.post) { readPostScriptTable(tables.post, properties, numGlyphs); } tables.post = { tag: "post", data: createPostTable(properties) }; var charCodeToGlyphId = []; function hasGlyph(glyphId) { return !missingGlyphs[glyphId]; } if (properties.composite) { var cidToGidMap = properties.cidToGidMap || []; var isCidToGidMapEmpty = cidToGidMap.length === 0; properties.cMap.forEach(function (charCode, cid) { if (cid > 0xffff) { throw new _util.FormatError("Max size of CID is 65,535"); } var glyphId = -1; if (isCidToGidMapEmpty) { glyphId = cid; } else if (cidToGidMap[cid] !== undefined) { glyphId = cidToGidMap[cid]; } if (glyphId >= 0 && glyphId < numGlyphs && hasGlyph(glyphId)) { charCodeToGlyphId[charCode] = glyphId; } }); } else { var cmapTable = readCmapTable(tables.cmap, font, this.isSymbolicFont, properties.hasEncoding); var cmapPlatformId = cmapTable.platformId; var cmapEncodingId = cmapTable.encodingId; var cmapMappings = cmapTable.mappings; var cmapMappingsLength = cmapMappings.length; var baseEncoding = []; if (properties.hasEncoding && (properties.baseEncodingName === "MacRomanEncoding" || properties.baseEncodingName === "WinAnsiEncoding")) { baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName); } if (properties.hasEncoding && !this.isSymbolicFont && (cmapPlatformId === 3 && cmapEncodingId === 1 || cmapPlatformId === 1 && cmapEncodingId === 0)) { var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); for (var charCode = 0; charCode < 256; charCode++) { var glyphName, standardGlyphName; if (this.differences && charCode in this.differences) { glyphName = this.differences[charCode]; } else if (charCode in baseEncoding && baseEncoding[charCode] !== "") { glyphName = baseEncoding[charCode]; } else { glyphName = _encodings.StandardEncoding[charCode]; } if (!glyphName) { continue; } standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap); var unicodeOrCharCode; if (cmapPlatformId === 3 && cmapEncodingId === 1) { unicodeOrCharCode = glyphsUnicodeMap[standardGlyphName]; } else if (cmapPlatformId === 1 && cmapEncodingId === 0) { unicodeOrCharCode = _encodings.MacRomanEncoding.indexOf(standardGlyphName); } for (var i = 0; i < cmapMappingsLength; ++i) { if (cmapMappings[i].charCode !== unicodeOrCharCode) { continue; } charCodeToGlyphId[charCode] = cmapMappings[i].glyphId; break; } } } else if (cmapPlatformId === 0) { for (var _i2 = 0; _i2 < cmapMappingsLength; ++_i2) { charCodeToGlyphId[cmapMappings[_i2].charCode] = cmapMappings[_i2].glyphId; } } else { for (var _i3 = 0; _i3 < cmapMappingsLength; ++_i3) { var _charCode5 = cmapMappings[_i3].charCode; if (cmapPlatformId === 3 && _charCode5 >= 0xf000 && _charCode5 <= 0xf0ff) { _charCode5 &= 0xff; } charCodeToGlyphId[_charCode5] = cmapMappings[_i3].glyphId; } } if (properties.glyphNames && baseEncoding.length) { for (var _i4 = 0; _i4 < 256; ++_i4) { if (charCodeToGlyphId[_i4] === undefined && baseEncoding[_i4]) { glyphName = baseEncoding[_i4]; var glyphId = properties.glyphNames.indexOf(glyphName); if (glyphId > 0 && hasGlyph(glyphId)) { charCodeToGlyphId[_i4] = glyphId; } } } } } if (charCodeToGlyphId.length === 0) { charCodeToGlyphId[0] = 0; } var glyphZeroId = numGlyphsOut - 1; if (!dupFirstEntry) { glyphZeroId = 0; } var newMapping = adjustMapping(charCodeToGlyphId, hasGlyph, glyphZeroId); this.toFontChar = newMapping.toFontChar; tables.cmap = { tag: "cmap", data: createCmapTable(newMapping.charCodeToGlyphId, numGlyphsOut) }; if (!tables["OS/2"] || !validateOS2Table(tables["OS/2"], font)) { tables["OS/2"] = { tag: "OS/2", data: createOS2Table(properties, newMapping.charCodeToGlyphId, metricsOverride) }; } if (!isTrueType) { try { cffFile = new _stream.Stream(tables["CFF "].data); var parser = new _cff_parser.CFFParser(cffFile, properties, SEAC_ANALYSIS_ENABLED); cff = parser.parse(); cff.duplicateFirstGlyph(); var compiler = new _cff_parser.CFFCompiler(cff); tables["CFF "].data = compiler.compile(); } catch (e) { (0, _util.warn)("Failed to compile font " + properties.loadedName); } } if (!tables.name) { tables.name = { tag: "name", data: createNameTable(this.name) }; } else { var namePrototype = readNameTable(tables.name); tables.name.data = createNameTable(name, namePrototype); } var builder = new OpenTypeFileBuilder(header.version); for (var tableTag in tables) { builder.addTable(tableTag, tables[tableTag].data); } return builder.toArray(); }, convert: function Font_convert(fontName, font, properties) { properties.fixedPitch = false; if (properties.builtInEncoding) { adjustToUnicode(properties, properties.builtInEncoding); } var glyphZeroId = 1; if (font instanceof CFFFont) { glyphZeroId = font.numGlyphs - 1; } var mapping = font.getGlyphMapping(properties); var newMapping = adjustMapping(mapping, font.hasGlyphId.bind(font), glyphZeroId); this.toFontChar = newMapping.toFontChar; var numGlyphs = font.numGlyphs; function getCharCodes(charCodeToGlyphId, glyphId) { var charCodes = null; for (var charCode in charCodeToGlyphId) { if (glyphId === charCodeToGlyphId[charCode]) { if (!charCodes) { charCodes = []; } charCodes.push(charCode | 0); } } return charCodes; } function createCharCode(charCodeToGlyphId, glyphId) { for (var charCode in charCodeToGlyphId) { if (glyphId === charCodeToGlyphId[charCode]) { return charCode | 0; } } newMapping.charCodeToGlyphId[newMapping.nextAvailableFontCharCode] = glyphId; return newMapping.nextAvailableFontCharCode++; } var seacs = font.seacs; if (SEAC_ANALYSIS_ENABLED && seacs && seacs.length) { var matrix = properties.fontMatrix || _util.FONT_IDENTITY_MATRIX; var charset = font.getCharset(); var seacMap = Object.create(null); for (var glyphId in seacs) { glyphId |= 0; var seac = seacs[glyphId]; var baseGlyphName = _encodings.StandardEncoding[seac[2]]; var accentGlyphName = _encodings.StandardEncoding[seac[3]]; var baseGlyphId = charset.indexOf(baseGlyphName); var accentGlyphId = charset.indexOf(accentGlyphName); if (baseGlyphId < 0 || accentGlyphId < 0) { continue; } var accentOffset = { x: seac[0] * matrix[0] + seac[1] * matrix[2] + matrix[4], y: seac[0] * matrix[1] + seac[1] * matrix[3] + matrix[5] }; var charCodes = getCharCodes(mapping, glyphId); if (!charCodes) { continue; } for (var i = 0, ii = charCodes.length; i < ii; i++) { var charCode = charCodes[i]; var charCodeToGlyphId = newMapping.charCodeToGlyphId; var baseFontCharCode = createCharCode(charCodeToGlyphId, baseGlyphId); var accentFontCharCode = createCharCode(charCodeToGlyphId, accentGlyphId); seacMap[charCode] = { baseFontCharCode: baseFontCharCode, accentFontCharCode: accentFontCharCode, accentOffset: accentOffset }; } } properties.seacMap = seacMap; } var unitsPerEm = 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0]; var builder = new OpenTypeFileBuilder("\x4F\x54\x54\x4F"); builder.addTable("CFF ", font.data); builder.addTable("OS/2", createOS2Table(properties, newMapping.charCodeToGlyphId)); builder.addTable("cmap", createCmapTable(newMapping.charCodeToGlyphId, numGlyphs)); builder.addTable("head", "\x00\x01\x00\x00" + "\x00\x00\x10\x00" + "\x00\x00\x00\x00" + "\x5F\x0F\x3C\xF5" + "\x00\x00" + safeString16(unitsPerEm) + "\x00\x00\x00\x00\x9e\x0b\x7e\x27" + "\x00\x00\x00\x00\x9e\x0b\x7e\x27" + "\x00\x00" + safeString16(properties.descent) + "\x0F\xFF" + safeString16(properties.ascent) + string16(properties.italicAngle ? 2 : 0) + "\x00\x11" + "\x00\x00" + "\x00\x00" + "\x00\x00"); builder.addTable("hhea", "\x00\x01\x00\x00" + safeString16(properties.ascent) + safeString16(properties.descent) + "\x00\x00" + "\xFF\xFF" + "\x00\x00" + "\x00\x00" + "\x00\x00" + safeString16(properties.capHeight) + safeString16(Math.tan(properties.italicAngle) * properties.xHeight) + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + string16(numGlyphs)); builder.addTable("hmtx", function fontFieldsHmtx() { var charstrings = font.charstrings; var cffWidths = font.cff ? font.cff.widths : null; var hmtx = "\x00\x00\x00\x00"; for (var _i5 = 1, _ii = numGlyphs; _i5 < _ii; _i5++) { var width = 0; if (charstrings) { var charstring = charstrings[_i5 - 1]; width = "width" in charstring ? charstring.width : 0; } else if (cffWidths) { width = Math.ceil(cffWidths[_i5] || 0); } hmtx += string16(width) + string16(0); } return hmtx; }()); builder.addTable("maxp", "\x00\x00\x50\x00" + string16(numGlyphs)); builder.addTable("name", createNameTable(fontName)); builder.addTable("post", createPostTable(properties)); return builder.toArray(); }, get spaceWidth() { var possibleSpaceReplacements = ["space", "minus", "one", "i", "I"]; var width; for (var i = 0, ii = possibleSpaceReplacements.length; i < ii; i++) { var glyphName = possibleSpaceReplacements[i]; if (glyphName in this.widths) { width = this.widths[glyphName]; break; } var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); var glyphUnicode = glyphsUnicodeMap[glyphName]; var charcode = 0; if (this.composite && this.cMap.contains(glyphUnicode)) { charcode = this.cMap.lookup(glyphUnicode); } if (!charcode && this.toUnicode) { charcode = this.toUnicode.charCodeOf(glyphUnicode); } if (charcode <= 0) { charcode = glyphUnicode; } width = this.widths[charcode]; if (width) { break; } } width = width || this.defaultWidth; return (0, _util.shadow)(this, "spaceWidth", width); }, _charToGlyph: function _charToGlyph(charcode) { var isSpace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var fontCharCode, width, operatorListId; var widthCode = charcode; if (this.cMap && this.cMap.contains(charcode)) { widthCode = this.cMap.lookup(charcode); } width = this.widths[widthCode]; width = (0, _util.isNum)(width) ? width : this.defaultWidth; var vmetric = this.vmetrics && this.vmetrics[widthCode]; var unicode = this.toUnicode.get(charcode) || this.fallbackToUnicode.get(charcode) || charcode; if (typeof unicode === "number") { unicode = String.fromCharCode(unicode); } var isInFont = (charcode in this.toFontChar); fontCharCode = this.toFontChar[charcode] || charcode; if (this.missingFile) { var glyphName = this.differences[charcode] || this.defaultEncoding[charcode]; if ((glyphName === ".notdef" || glyphName === "") && this.type === "Type1") { fontCharCode = 0x20; } fontCharCode = (0, _unicode.mapSpecialUnicodeValues)(fontCharCode); } if (this.isType3Font) { operatorListId = fontCharCode; } var accent = null; if (this.seacMap && this.seacMap[charcode]) { isInFont = true; var seac = this.seacMap[charcode]; fontCharCode = seac.baseFontCharCode; accent = { fontChar: String.fromCodePoint(seac.accentFontCharCode), offset: seac.accentOffset }; } var fontChar = ""; if (typeof fontCharCode === "number") { if (fontCharCode <= 0x10ffff) { fontChar = String.fromCodePoint(fontCharCode); } else { (0, _util.warn)("charToGlyph - invalid fontCharCode: ".concat(fontCharCode)); } } var glyph = this.glyphCache[charcode]; if (!glyph || !glyph.matchesForCache(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont)) { glyph = new Glyph(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont); this.glyphCache[charcode] = glyph; } return glyph; }, charsToGlyphs: function Font_charsToGlyphs(chars) { var charsCache = this.charsCache; var glyphs, glyph, charcode; if (charsCache) { glyphs = charsCache[chars]; if (glyphs) { return glyphs; } } if (!charsCache) { charsCache = this.charsCache = Object.create(null); } glyphs = []; var charsCacheKey = chars; var i = 0, ii; if (this.cMap) { var c = Object.create(null); while (i < chars.length) { this.cMap.readCharCode(chars, i, c); charcode = c.charcode; var length = c.length; i += length; var isSpace = length === 1 && chars.charCodeAt(i - 1) === 0x20; glyph = this._charToGlyph(charcode, isSpace); glyphs.push(glyph); } } else { for (i = 0, ii = chars.length; i < ii; ++i) { charcode = chars.charCodeAt(i); glyph = this._charToGlyph(charcode, charcode === 0x20); glyphs.push(glyph); } } return charsCache[charsCacheKey] = glyphs; }, getCharPositions: function getCharPositions(chars) { var positions = []; if (this.cMap) { var c = Object.create(null); var i = 0; while (i < chars.length) { this.cMap.readCharCode(chars, i, c); var length = c.length; positions.push([i, i + length]); i += length; } } else { for (var _i6 = 0, ii = chars.length; _i6 < ii; ++_i6) { positions.push([_i6, _i6 + 1]); } } return positions; }, get glyphCacheValues() { return Object.values(this.glyphCache); }, encodeString: function encodeString(str) { var buffers = []; var currentBuf = []; var hasCurrentBufErrors = function hasCurrentBufErrors() { return buffers.length % 2 === 1; }; for (var i = 0, ii = str.length; i < ii; i++) { var unicode = str.codePointAt(i); if (unicode > 0xd7ff && (unicode < 0xe000 || unicode > 0xfffd)) { i++; } if (this.toUnicode) { var _char = String.fromCodePoint(unicode); var charCode = this.toUnicode.charCodeOf(_char); if (charCode !== -1) { if (hasCurrentBufErrors()) { buffers.push(currentBuf.join("")); currentBuf.length = 0; } var charCodeLength = this.cMap ? this.cMap.getCharCodeLength(charCode) : 1; for (var j = charCodeLength - 1; j >= 0; j--) { currentBuf.push(String.fromCharCode(charCode >> 8 * j & 0xff)); } continue; } } if (!hasCurrentBufErrors()) { buffers.push(currentBuf.join("")); currentBuf.length = 0; } currentBuf.push(String.fromCodePoint(unicode)); } buffers.push(currentBuf.join("")); return buffers; } }; return Font; }(); exports.Font = Font; var ErrorFont = function ErrorFontClosure() { function ErrorFont(error) { this.error = error; this.loadedName = "g_font_error"; this.missingFile = true; } ErrorFont.prototype = { charsToGlyphs: function ErrorFont_charsToGlyphs() { return []; }, encodeString: function ErrorFont_encodeString(chars) { return [chars]; }, exportData: function exportData() { var extraProperties = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; return { error: this.error }; } }; return ErrorFont; }(); exports.ErrorFont = ErrorFont; function type1FontGlyphMapping(properties, builtInEncoding, glyphNames) { var charCodeToGlyphId = Object.create(null); var glyphId, charCode, baseEncoding; var isSymbolicFont = !!(properties.flags & FontFlags.Symbolic); if (properties.baseEncodingName) { baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName); for (charCode = 0; charCode < baseEncoding.length; charCode++) { glyphId = glyphNames.indexOf(baseEncoding[charCode]); if (glyphId >= 0) { charCodeToGlyphId[charCode] = glyphId; } else { charCodeToGlyphId[charCode] = 0; } } } else if (isSymbolicFont) { for (charCode in builtInEncoding) { charCodeToGlyphId[charCode] = builtInEncoding[charCode]; } } else { baseEncoding = _encodings.StandardEncoding; for (charCode = 0; charCode < baseEncoding.length; charCode++) { glyphId = glyphNames.indexOf(baseEncoding[charCode]); if (glyphId >= 0) { charCodeToGlyphId[charCode] = glyphId; } else { charCodeToGlyphId[charCode] = 0; } } } var differences = properties.differences, glyphsUnicodeMap; if (differences) { for (charCode in differences) { var glyphName = differences[charCode]; glyphId = glyphNames.indexOf(glyphName); if (glyphId === -1) { if (!glyphsUnicodeMap) { glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); } var standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap); if (standardGlyphName !== glyphName) { glyphId = glyphNames.indexOf(standardGlyphName); } } if (glyphId >= 0) { charCodeToGlyphId[charCode] = glyphId; } else { charCodeToGlyphId[charCode] = 0; } } } return charCodeToGlyphId; } var Type1Font = function Type1FontClosure() { function findBlock(streamBytes, signature, startIndex) { var streamBytesLength = streamBytes.length; var signatureLength = signature.length; var scanLength = streamBytesLength - signatureLength; var i = startIndex, j, found = false; while (i < scanLength) { j = 0; while (j < signatureLength && streamBytes[i + j] === signature[j]) { j++; } if (j >= signatureLength) { i += j; while (i < streamBytesLength && (0, _core_utils.isWhiteSpace)(streamBytes[i])) { i++; } found = true; break; } i++; } return { found: found, length: i }; } function getHeaderBlock(stream, suggestedLength) { var EEXEC_SIGNATURE = [0x65, 0x65, 0x78, 0x65, 0x63]; var streamStartPos = stream.pos; var headerBytes, headerBytesLength, block; try { headerBytes = stream.getBytes(suggestedLength); headerBytesLength = headerBytes.length; } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } } if (headerBytesLength === suggestedLength) { block = findBlock(headerBytes, EEXEC_SIGNATURE, suggestedLength - 2 * EEXEC_SIGNATURE.length); if (block.found && block.length === suggestedLength) { return { stream: new _stream.Stream(headerBytes), length: suggestedLength }; } } (0, _util.warn)('Invalid "Length1" property in Type1 font -- trying to recover.'); stream.pos = streamStartPos; var SCAN_BLOCK_LENGTH = 2048; var actualLength; while (true) { var scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH); block = findBlock(scanBytes, EEXEC_SIGNATURE, 0); if (block.length === 0) { break; } stream.pos += block.length; if (block.found) { actualLength = stream.pos - streamStartPos; break; } } stream.pos = streamStartPos; if (actualLength) { return { stream: new _stream.Stream(stream.getBytes(actualLength)), length: actualLength }; } (0, _util.warn)('Unable to recover "Length1" property in Type1 font -- using as is.'); return { stream: new _stream.Stream(stream.getBytes(suggestedLength)), length: suggestedLength }; } function getEexecBlock(stream, suggestedLength) { var eexecBytes = stream.getBytes(); return { stream: new _stream.Stream(eexecBytes), length: eexecBytes.length }; } function Type1Font(name, file, properties) { var PFB_HEADER_SIZE = 6; var headerBlockLength = properties.length1; var eexecBlockLength = properties.length2; var pfbHeader = file.peekBytes(PFB_HEADER_SIZE); var pfbHeaderPresent = pfbHeader[0] === 0x80 && pfbHeader[1] === 0x01; if (pfbHeaderPresent) { file.skip(PFB_HEADER_SIZE); headerBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2]; } var headerBlock = getHeaderBlock(file, headerBlockLength); var headerBlockParser = new _type1_parser.Type1Parser(headerBlock.stream, false, SEAC_ANALYSIS_ENABLED); headerBlockParser.extractFontHeader(properties); if (pfbHeaderPresent) { pfbHeader = file.getBytes(PFB_HEADER_SIZE); eexecBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2]; } var eexecBlock = getEexecBlock(file, eexecBlockLength); var eexecBlockParser = new _type1_parser.Type1Parser(eexecBlock.stream, true, SEAC_ANALYSIS_ENABLED); var data = eexecBlockParser.extractFontProgram(properties); for (var key in data.properties) { properties[key] = data.properties[key]; } var charstrings = data.charstrings; var type2Charstrings = this.getType2Charstrings(charstrings); var subrs = this.getType2Subrs(data.subrs); this.charstrings = charstrings; this.data = this.wrap(name, type2Charstrings, this.charstrings, subrs, properties); this.seacs = this.getSeacs(data.charstrings); } Type1Font.prototype = { get numGlyphs() { return this.charstrings.length + 1; }, getCharset: function Type1Font_getCharset() { var charset = [".notdef"]; var charstrings = this.charstrings; for (var glyphId = 0; glyphId < charstrings.length; glyphId++) { charset.push(charstrings[glyphId].glyphName); } return charset; }, getGlyphMapping: function Type1Font_getGlyphMapping(properties) { var charstrings = this.charstrings; if (properties.composite) { var charCodeToGlyphId = Object.create(null); for (var _glyphId = 0, charstringsLen = charstrings.length; _glyphId < charstringsLen; _glyphId++) { var _charCode6 = properties.cMap.charCodeOf(_glyphId); charCodeToGlyphId[_charCode6] = _glyphId + 1; } return charCodeToGlyphId; } var glyphNames = [".notdef"], glyphId; for (glyphId = 0; glyphId < charstrings.length; glyphId++) { glyphNames.push(charstrings[glyphId].glyphName); } var encoding = properties.builtInEncoding; if (encoding) { var builtInEncoding = Object.create(null); for (var charCode in encoding) { glyphId = glyphNames.indexOf(encoding[charCode]); if (glyphId >= 0) { builtInEncoding[charCode] = glyphId; } } } return type1FontGlyphMapping(properties, builtInEncoding, glyphNames); }, hasGlyphId: function Type1Font_hasGlyphID(id) { if (id < 0 || id >= this.numGlyphs) { return false; } if (id === 0) { return true; } var glyph = this.charstrings[id - 1]; return glyph.charstring.length > 0; }, getSeacs: function Type1Font_getSeacs(charstrings) { var i, ii; var seacMap = []; for (i = 0, ii = charstrings.length; i < ii; i++) { var charstring = charstrings[i]; if (charstring.seac) { seacMap[i + 1] = charstring.seac; } } return seacMap; }, getType2Charstrings: function Type1Font_getType2Charstrings(type1Charstrings) { var type2Charstrings = []; for (var i = 0, ii = type1Charstrings.length; i < ii; i++) { type2Charstrings.push(type1Charstrings[i].charstring); } return type2Charstrings; }, getType2Subrs: function Type1Font_getType2Subrs(type1Subrs) { var bias = 0; var count = type1Subrs.length; if (count < 1133) { bias = 107; } else if (count < 33769) { bias = 1131; } else { bias = 32768; } var type2Subrs = []; var i; for (i = 0; i < bias; i++) { type2Subrs.push([0x0b]); } for (i = 0; i < count; i++) { type2Subrs.push(type1Subrs[i]); } return type2Subrs; }, wrap: function Type1Font_wrap(name, glyphs, charstrings, subrs, properties) { var cff = new _cff_parser.CFF(); cff.header = new _cff_parser.CFFHeader(1, 0, 4, 4); cff.names = [name]; var topDict = new _cff_parser.CFFTopDict(); topDict.setByName("version", 391); topDict.setByName("Notice", 392); topDict.setByName("FullName", 393); topDict.setByName("FamilyName", 394); topDict.setByName("Weight", 395); topDict.setByName("Encoding", null); topDict.setByName("FontMatrix", properties.fontMatrix); topDict.setByName("FontBBox", properties.bbox); topDict.setByName("charset", null); topDict.setByName("CharStrings", null); topDict.setByName("Private", null); cff.topDict = topDict; var strings = new _cff_parser.CFFStrings(); strings.add("Version 0.11"); strings.add("See original notice"); strings.add(name); strings.add(name); strings.add("Medium"); cff.strings = strings; cff.globalSubrIndex = new _cff_parser.CFFIndex(); var count = glyphs.length; var charsetArray = [".notdef"]; var i, ii; for (i = 0; i < count; i++) { var glyphName = charstrings[i].glyphName; var index = _cff_parser.CFFStandardStrings.indexOf(glyphName); if (index === -1) { strings.add(glyphName); } charsetArray.push(glyphName); } cff.charset = new _cff_parser.CFFCharset(false, 0, charsetArray); var charStringsIndex = new _cff_parser.CFFIndex(); charStringsIndex.add([0x8b, 0x0e]); for (i = 0; i < count; i++) { charStringsIndex.add(glyphs[i]); } cff.charStrings = charStringsIndex; var privateDict = new _cff_parser.CFFPrivateDict(); privateDict.setByName("Subrs", null); var fields = ["BlueValues", "OtherBlues", "FamilyBlues", "FamilyOtherBlues", "StemSnapH", "StemSnapV", "BlueShift", "BlueFuzz", "BlueScale", "LanguageGroup", "ExpansionFactor", "ForceBold", "StdHW", "StdVW"]; for (i = 0, ii = fields.length; i < ii; i++) { var field = fields[i]; if (!(field in properties.privateData)) { continue; } var value = properties.privateData[field]; if (Array.isArray(value)) { for (var j = value.length - 1; j > 0; j--) { value[j] -= value[j - 1]; } } privateDict.setByName(field, value); } cff.topDict.privateDict = privateDict; var subrIndex = new _cff_parser.CFFIndex(); for (i = 0, ii = subrs.length; i < ii; i++) { subrIndex.add(subrs[i]); } privateDict.subrsIndex = subrIndex; var compiler = new _cff_parser.CFFCompiler(cff); return compiler.compile(); } }; return Type1Font; }(); var CFFFont = function CFFFontClosure() { function CFFFont(file, properties) { this.properties = properties; var parser = new _cff_parser.CFFParser(file, properties, SEAC_ANALYSIS_ENABLED); this.cff = parser.parse(); this.cff.duplicateFirstGlyph(); var compiler = new _cff_parser.CFFCompiler(this.cff); this.seacs = this.cff.seacs; try { this.data = compiler.compile(); } catch (e) { (0, _util.warn)("Failed to compile font " + properties.loadedName); this.data = file; } } CFFFont.prototype = { get numGlyphs() { return this.cff.charStrings.count; }, getCharset: function CFFFont_getCharset() { return this.cff.charset.charset; }, getGlyphMapping: function CFFFont_getGlyphMapping() { var cff = this.cff; var properties = this.properties; var charsets = cff.charset.charset; var charCodeToGlyphId; var glyphId; if (properties.composite) { charCodeToGlyphId = Object.create(null); var charCode; if (cff.isCIDFont) { for (glyphId = 0; glyphId < charsets.length; glyphId++) { var cid = charsets[glyphId]; charCode = properties.cMap.charCodeOf(cid); charCodeToGlyphId[charCode] = glyphId; } } else { for (glyphId = 0; glyphId < cff.charStrings.count; glyphId++) { charCode = properties.cMap.charCodeOf(glyphId); charCodeToGlyphId[charCode] = glyphId; } } return charCodeToGlyphId; } var encoding = cff.encoding ? cff.encoding.encoding : null; charCodeToGlyphId = type1FontGlyphMapping(properties, encoding, charsets); return charCodeToGlyphId; }, hasGlyphId: function CFFFont_hasGlyphID(id) { return this.cff.hasGlyphId(id); } }; return CFFFont; }(); /***/ }), /* 160 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", ({ value: true })); exports.CFFTopDict = exports.CFFStrings = exports.CFFStandardStrings = exports.CFFPrivateDict = exports.CFFParser = exports.CFFIndex = exports.CFFHeader = exports.CFFFDSelect = exports.CFFCompiler = exports.CFFCharset = exports.CFF = void 0; var _util = __w_pdfjs_require__(4); var _charsets = __w_pdfjs_require__(161); var _encodings = __w_pdfjs_require__(162); function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var MAX_SUBR_NESTING = 10; var CFFStandardStrings = [".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash", "dagger", "daggerdbl", "periodcentered", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar", "degree", "thorn", "threequarters", "twosuperior", "registered", "minus", "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis", "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave", "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", "ydieresis", "zcaron", "exclamsmall", "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall", "001.000", "001.001", "001.002", "001.003", "Black", "Bold", "Book", "Light", "Medium", "Regular", "Roman", "Semibold"]; exports.CFFStandardStrings = CFFStandardStrings; var NUM_STANDARD_CFF_STRINGS = 391; var CFFParser = function CFFParserClosure() { var CharstringValidationData = [null, { id: "hstem", min: 2, stackClearing: true, stem: true }, null, { id: "vstem", min: 2, stackClearing: true, stem: true }, { id: "vmoveto", min: 1, stackClearing: true }, { id: "rlineto", min: 2, resetStack: true }, { id: "hlineto", min: 1, resetStack: true }, { id: "vlineto", min: 1, resetStack: true }, { id: "rrcurveto", min: 6, resetStack: true }, null, { id: "callsubr", min: 1, undefStack: true }, { id: "return", min: 0, undefStack: true }, null, null, { id: "endchar", min: 0, stackClearing: true }, null, null, null, { id: "hstemhm", min: 2, stackClearing: true, stem: true }, { id: "hintmask", min: 0, stackClearing: true }, { id: "cntrmask", min: 0, stackClearing: true }, { id: "rmoveto", min: 2, stackClearing: true }, { id: "hmoveto", min: 1, stackClearing: true }, { id: "vstemhm", min: 2, stackClearing: true, stem: true }, { id: "rcurveline", min: 8, resetStack: true }, { id: "rlinecurve", min: 8, resetStack: true }, { id: "vvcurveto", min: 4, resetStack: true }, { id: "hhcurveto", min: 4, resetStack: true }, null, { id: "callgsubr", min: 1, undefStack: true }, { id: "vhcurveto", min: 4, resetStack: true }, { id: "hvcurveto", min: 4, resetStack: true }]; var CharstringValidationData12 = [null, null, null, { id: "and", min: 2, stackDelta: -1 }, { id: "or", min: 2, stackDelta: -1 }, { id: "not", min: 1, stackDelta: 0 }, null, null, null, { id: "abs", min: 1, stackDelta: 0 }, { id: "add", min: 2, stackDelta: -1, stackFn: function stack_div(stack, index) { stack[index - 2] = stack[index - 2] + stack[index - 1]; } }, { id: "sub", min: 2, stackDelta: -1, stackFn: function stack_div(stack, index) { stack[index - 2] = stack[index - 2] - stack[index - 1]; } }, { id: "div", min: 2, stackDelta: -1, stackFn: function stack_div(stack, index) { stack[index - 2] = stack[index - 2] / stack[index - 1]; } }, null, { id: "neg", min: 1, stackDelta: 0, stackFn: function stack_div(stack, index) { stack[index - 1] = -stack[index - 1]; } }, { id: "eq", min: 2, stackDelta: -1 }, null, null, { id: "drop", min: 1, stackDelta: -1 }, null, { id: "put", min: 2, stackDelta: -2 }, { id: "get", min: 1, stackDelta: 0 }, { id: "ifelse", min: 4, stackDelta: -3 }, { id: "random", min: 0, stackDelta: 1 }, { id: "mul", min: 2, stackDelta: -1, stackFn: function stack_div(stack, index) { stack[index - 2] = stack[index - 2] * stack[index - 1]; } }, null, { id: "sqrt", min: 1, stackDelta: 0 }, { id: "dup", min: 1, stackDelta: 1 }, { id: "exch", min: 2, stackDelta: 0 }, { id: "index", min: 2, stackDelta: 0 }, { id: "roll", min: 3, stackDelta: -2 }, null, null, null, { id: "hflex", min: 7, resetStack: true }, { id: "flex", min: 13, resetStack: true }, { id: "hflex1", min: 9, resetStack: true }, { id: "flex1", min: 11, resetStack: true }]; var CFFParser = /*#__PURE__*/function () { function CFFParser(file, properties, seacAnalysisEnabled) { _classCallCheck(this, CFFParser); this.bytes = file.getBytes(); this.properties = properties; this.seacAnalysisEnabled = !!seacAnalysisEnabled; } _createClass(CFFParser, [{ key: "parse", value: function parse() { var properties = this.properties; var cff = new CFF(); this.cff = cff; var header = this.parseHeader(); var nameIndex = this.parseIndex(header.endPos); var topDictIndex = this.parseIndex(nameIndex.endPos); var stringIndex = this.parseIndex(topDictIndex.endPos); var globalSubrIndex = this.parseIndex(stringIndex.endPos); var topDictParsed = this.parseDict(topDictIndex.obj.get(0)); var topDict = this.createDict(CFFTopDict, topDictParsed, cff.strings); cff.header = header.obj; cff.names = this.parseNameIndex(nameIndex.obj); cff.strings = this.parseStringIndex(stringIndex.obj); cff.topDict = topDict; cff.globalSubrIndex = globalSubrIndex.obj; this.parsePrivateDict(cff.topDict); cff.isCIDFont = topDict.hasName("ROS"); var charStringOffset = topDict.getByName("CharStrings"); var charStringIndex = this.parseIndex(charStringOffset).obj; var fontMatrix = topDict.getByName("FontMatrix"); if (fontMatrix) { properties.fontMatrix = fontMatrix; } var fontBBox = topDict.getByName("FontBBox"); if (fontBBox) { properties.ascent = Math.max(fontBBox[3], fontBBox[1]); properties.descent = Math.min(fontBBox[1], fontBBox[3]); properties.ascentScaled = true; } var charset, encoding; if (cff.isCIDFont) { var fdArrayIndex = this.parseIndex(topDict.getByName("FDArray")).obj; for (var i = 0, ii = fdArrayIndex.count; i < ii; ++i) { var dictRaw = fdArrayIndex.get(i); var fontDict = this.createDict(CFFTopDict, this.parseDict(dictRaw), cff.strings); this.parsePrivateDict(fontDict); cff.fdArray.push(fontDict); } encoding = null; charset = this.parseCharsets(topDict.getByName("charset"), charStringIndex.count, cff.strings, true); cff.fdSelect = this.parseFDSelect(topDict.getByName("FDSelect"), charStringIndex.count); } else { charset = this.parseCharsets(topDict.getByName("charset"), charStringIndex.count, cff.strings, false); encoding = this.parseEncoding(topDict.getByName("Encoding"), properties, cff.strings, charset.charset); } cff.charset = charset; cff.encoding = encoding; var charStringsAndSeacs = this.parseCharStrings({ charStrings: charStringIndex, localSubrIndex: topDict.privateDict.subrsIndex, globalSubrIndex: globalSubrIndex.obj, fdSelect: cff.fdSelect, fdArray: cff.fdArray, privateDict: topDict.privateDict }); cff.charStrings = charStringsAndSeacs.charStrings; cff.seacs = charStringsAndSeacs.seacs; cff.widths = charStringsAndSeacs.widths; return cff; } }, { key: "parseHeader", value: function parseHeader() { var bytes = this.bytes; var bytesLength = bytes.length; var offset = 0; while (offset < bytesLength && bytes[offset] !== 1) { ++offset; } if (offset >= bytesLength) { throw new _util.FormatError("Invalid CFF header"); } if (offset !== 0) { (0, _util.info)("cff data is shifted"); bytes = bytes.subarray(offset); this.bytes = bytes; } var major = bytes[0]; var minor = bytes[1]; var hdrSize = bytes[2]; var offSize = bytes[3]; var header = new CFFHeader(major, minor, hdrSize, offSize); return { obj: header, endPos: hdrSize }; } }, { key: "parseDict", value: function parseDict(dict) { var pos = 0; function parseOperand() { var value = dict[pos++]; if (value === 30) { return parseFloatOperand(); } else if (value === 28) { value = dict[pos++]; value = (value << 24 | dict[pos++] << 16) >> 16; return value; } else if (value === 29) { value = dict[pos++]; value = value << 8 | dict[pos++]; value = value << 8 | dict[pos++]; value = value << 8 | dict[pos++]; return value; } else if (value >= 32 && value <= 246) { return value - 139; } else if (value >= 247 && value <= 250) { return (value - 247) * 256 + dict[pos++] + 108; } else if (value >= 251 && value <= 254) { return -((value - 251) * 256) - dict[pos++] - 108; } (0, _util.warn)('CFFParser_parseDict: "' + value + '" is a reserved command.'); return NaN; } function parseFloatOperand() { var str = ""; var eof = 15; var lookup = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", "E", "E-", null, "-"]; var length = dict.length; while (pos < length) { var b = dict[pos++]; var b1 = b >> 4; var b2 = b & 15; if (b1 === eof) { break; } str += lookup[b1]; if (b2 === eof) { break; } str += lookup[b2]; } return parseFloat(str); } var operands = []; var entries = []; pos = 0; var end = dict.length; while (pos < end) { var b = dict[pos]; if (b <= 21) { if (b === 12) { b = b << 8 | dict[++pos]; } entries.push([b, operands]); operands = []; ++pos; } else { operands.push(parseOperand()); } } return entries; } }, { key: "parseIndex", value: function parseIndex(pos) { var cffIndex = new CFFIndex(); var bytes = this.bytes; var count = bytes[pos++] << 8 | bytes[pos++]; var offsets = []; var end = pos; var i, ii; if (count !== 0) { var offsetSize = bytes[pos++]; var startPos = pos + (count + 1) * offsetSize - 1; for (i = 0, ii = count + 1; i < ii; ++i) { var offset = 0; for (var j = 0; j < offsetSize; ++j) { offset <<= 8; offset += bytes[pos++]; } offsets.push(startPos + offset); } end = offsets[count]; } for (i = 0, ii = offsets.length - 1; i < ii; ++i) { var offsetStart = offsets[i]; var offsetEnd = offsets[i + 1]; cffIndex.add(bytes.subarray(offsetStart, offsetEnd)); } return { obj: cffIndex, endPos: end }; } }, { key: "parseNameIndex", value: function parseNameIndex(index) { var names = []; for (var i = 0, ii = index.count; i < ii; ++i) { var name = index.get(i); names.push((0, _util.bytesToString)(name)); } return names; } }, { key: "parseStringIndex", value: function parseStringIndex(index) { var strings = new CFFStrings(); for (var i = 0, ii = index.count; i < ii; ++i) { var data = index.get(i); strings.add((0, _util.bytesToString)(data)); } return strings; } }, { key: "createDict", value: function createDict(Type, dict, strings) { var cffDict = new Type(strings); for (var i = 0, ii = dict.length; i < ii; ++i) { var pair = dict[i]; var key = pair[0]; var value = pair[1]; cffDict.setByKey(key, value); } return cffDict; } }, { key: "parseCharString", value: function parseCharString(state, data, localSubrIndex, globalSubrIndex) { if (!data || state.callDepth > MAX_SUBR_NESTING) { return false; } var stackSize = state.stackSize; var stack = state.stack; var length = data.length; for (var j = 0; j < length;) { var value = data[j++]; var validationCommand = null; if (value === 12) { var q = data[j++]; if (q === 0) { data[j - 2] = 139; data[j - 1] = 22; stackSize = 0; } else { validationCommand = CharstringValidationData12[q]; } } else if (value === 28) { stack[stackSize] = (data[j] << 24 | data[j + 1] << 16) >> 16; j += 2; stackSize++; } else if (value === 14) { if (stackSize >= 4) { stackSize -= 4; if (this.seacAnalysisEnabled) { state.seac = stack.slice(stackSize, stackSize + 4); return false; } } validationCommand = CharstringValidationData[value]; } else if (value >= 32 && value <= 246) { stack[stackSize] = value - 139; stackSize++; } else if (value >= 247 && value <= 254) { stack[stackSize] = value < 251 ? (value - 247 << 8) + data[j] + 108 : -(value - 251 << 8) - data[j] - 108; j++; stackSize++; } else if (value === 255) { stack[stackSize] = (data[j] << 24 | data[j + 1] << 16 | data[j + 2] << 8 | data[j + 3]) / 65536; j += 4; stackSize++; } else if (value === 19 || value === 20) { state.hints += stackSize >> 1; j += state.hints + 7 >> 3; stackSize %= 2; validationCommand = CharstringValidationData[value]; } else if (value === 10 || value === 29) { var subrsIndex; if (value === 10) { subrsIndex = localSubrIndex; } else { subrsIndex = globalSubrIndex; } if (!subrsIndex) { validationCommand = CharstringValidationData[value]; (0, _util.warn)("Missing subrsIndex for " + validationCommand.id); return false; } var bias = 32768; if (subrsIndex.count < 1240) { bias = 107; } else if (subrsIndex.count < 33900) { bias = 1131; } var subrNumber = stack[--stackSize] + bias; if (subrNumber < 0 || subrNumber >= subrsIndex.count || isNaN(subrNumber)) { validationCommand = CharstringValidationData[value]; (0, _util.warn)("Out of bounds subrIndex for " + validationCommand.id); return false; } state.stackSize = stackSize; state.callDepth++; var valid = this.parseCharString(state, subrsIndex.get(subrNumber), localSubrIndex, globalSubrIndex); if (!valid) { return false; } state.callDepth--; stackSize = state.stackSize; continue; } else if (value === 11) { state.stackSize = stackSize; return true; } else { validationCommand = CharstringValidationData[value]; } if (validationCommand) { if (validationCommand.stem) { state.hints += stackSize >> 1; if (value === 3 || value === 23) { state.hasVStems = true; } else if (state.hasVStems && (value === 1 || value === 18)) { (0, _util.warn)("CFF stem hints are in wrong order"); data[j - 1] = value === 1 ? 3 : 23; } } if ("min" in validationCommand) { if (!state.undefStack && stackSize < validationCommand.min) { (0, _util.warn)("Not enough parameters for " + validationCommand.id + "; actual: " + stackSize + ", expected: " + validationCommand.min); return false; } } if (state.firstStackClearing && validationCommand.stackClearing) { state.firstStackClearing = false; stackSize -= validationCommand.min; if (stackSize >= 2 && validationCommand.stem) { stackSize %= 2; } else if (stackSize > 1) { (0, _util.warn)("Found too many parameters for stack-clearing command"); } if (stackSize > 0 && stack[stackSize - 1] >= 0) { state.width = stack[stackSize - 1]; } } if ("stackDelta" in validationCommand) { if ("stackFn" in validationCommand) { validationCommand.stackFn(stack, stackSize); } stackSize += validationCommand.stackDelta; } else if (validationCommand.stackClearing) { stackSize = 0; } else if (validationCommand.resetStack) { stackSize = 0; state.undefStack = false; } else if (validationCommand.undefStack) { stackSize = 0; state.undefStack = true; state.firstStackClearing = false; } } } state.stackSize = stackSize; return true; } }, { key: "parseCharStrings", value: function parseCharStrings(_ref) { var charStrings = _ref.charStrings, localSubrIndex = _ref.localSubrIndex, globalSubrIndex = _ref.globalSubrIndex, fdSelect = _ref.fdSelect, fdArray = _ref.fdArray, privateDict = _ref.privateDict; var seacs = []; var widths = []; var count = charStrings.count; for (var i = 0; i < count; i++) { var charstring = charStrings.get(i); var state = { callDepth: 0, stackSize: 0, stack: [], undefStack: true, hints: 0, firstStackClearing: true, seac: null, width: null, hasVStems: false }; var valid = true; var localSubrToUse = null; var privateDictToUse = privateDict; if (fdSelect && fdArray.length) { var fdIndex = fdSelect.getFDIndex(i); if (fdIndex === -1) { (0, _util.warn)("Glyph index is not in fd select."); valid = false; } if (fdIndex >= fdArray.length) { (0, _util.warn)("Invalid fd index for glyph index."); valid = false; } if (valid) { privateDictToUse = fdArray[fdIndex].privateDict; localSubrToUse = privateDictToUse.subrsIndex; } } else if (localSubrIndex) { localSubrToUse = localSubrIndex; } if (valid) { valid = this.parseCharString(state, charstring, localSubrToUse, globalSubrIndex); } if (state.width !== null) { var nominalWidth = privateDictToUse.getByName("nominalWidthX"); widths[i] = nominalWidth + state.width; } else { var defaultWidth = privateDictToUse.getByName("defaultWidthX"); widths[i] = defaultWidth; } if (state.seac !== null) { seacs[i] = state.seac; } if (!valid) { charStrings.set(i, new Uint8Array([14])); } } return { charStrings: charStrings, seacs: seacs, widths: widths }; } }, { key: "emptyPrivateDictionary", value: function emptyPrivateDictionary(parentDict) { var privateDict = this.createDict(CFFPrivateDict, [], parentDict.strings); parentDict.setByKey(18, [0, 0]); parentDict.privateDict = privateDict; } }, { key: "parsePrivateDict", value: function parsePrivateDict(parentDict) { if (!parentDict.hasName("Private")) { this.emptyPrivateDictionary(parentDict); return; } var privateOffset = parentDict.getByName("Private"); if (!Array.isArray(privateOffset) || privateOffset.length !== 2) { parentDict.removeByName("Private"); return; } var size = privateOffset[0]; var offset = privateOffset[1]; if (size === 0 || offset >= this.bytes.length) { this.emptyPrivateDictionary(parentDict); return; } var privateDictEnd = offset + size; var dictData = this.bytes.subarray(offset, privateDictEnd); var dict = this.parseDict(dictData); var privateDict = this.createDict(CFFPrivateDict, dict, parentDict.strings); parentDict.privateDict = privateDict; if (!privateDict.getByName("Subrs")) { return; } var subrsOffset = privateDict.getByName("Subrs"); var relativeOffset = offset + subrsOffset; if (subrsOffset === 0 || relativeOffset >= this.bytes.length) { this.emptyPrivateDictionary(parentDict); return; } var subrsIndex = this.parseIndex(relativeOffset); privateDict.subrsIndex = subrsIndex.obj; } }, { key: "parseCharsets", value: function parseCharsets(pos, length, strings, cid) { if (pos === 0) { return new CFFCharset(true, CFFCharsetPredefinedTypes.ISO_ADOBE, _charsets.ISOAdobeCharset); } else if (pos === 1) { return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT, _charsets.ExpertCharset); } else if (pos === 2) { return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT_SUBSET, _charsets.ExpertSubsetCharset); } var bytes = this.bytes; var start = pos; var format = bytes[pos++]; var charset = [cid ? 0 : ".notdef"]; var id, count, i; length -= 1; switch (format) { case 0: for (i = 0; i < length; i++) { id = bytes[pos++] << 8 | bytes[pos++]; charset.push(cid ? id : strings.get(id)); } break; case 1: while (charset.length <= length) { id = bytes[pos++] << 8 | bytes[pos++]; count = bytes[pos++]; for (i = 0; i <= count; i++) { charset.push(cid ? id++ : strings.get(id++)); } } break; case 2: while (charset.length <= length) { id = bytes[pos++] << 8 | bytes[pos++]; count = bytes[pos++] << 8 | bytes[pos++]; for (i = 0; i <= count; i++) { charset.push(cid ? id++ : strings.get(id++)); } } break; default: throw new _util.FormatError("Unknown charset format"); } var end = pos; var raw = bytes.subarray(start, end); return new CFFCharset(false, format, charset, raw); } }, { key: "parseEncoding", value: function parseEncoding(pos, properties, strings, charset) { var encoding = Object.create(null); var bytes = this.bytes; var predefined = false; var format, i, ii; var raw = null; function readSupplement() { var supplementsCount = bytes[pos++]; for (i = 0; i < supplementsCount; i++) { var code = bytes[pos++]; var sid = (bytes[pos++] << 8) + (bytes[pos++] & 0xff); encoding[code] = charset.indexOf(strings.get(sid)); } } if (pos === 0 || pos === 1) { predefined = true; format = pos; var baseEncoding = pos ? _encodings.ExpertEncoding : _encodings.StandardEncoding; for (i = 0, ii = charset.length; i < ii; i++) { var index = baseEncoding.indexOf(charset[i]); if (index !== -1) { encoding[index] = i; } } } else { var dataStart = pos; format = bytes[pos++]; switch (format & 0x7f) { case 0: var glyphsCount = bytes[pos++]; for (i = 1; i <= glyphsCount; i++) { encoding[bytes[pos++]] = i; } break; case 1: var rangesCount = bytes[pos++]; var gid = 1; for (i = 0; i < rangesCount; i++) { var start = bytes[pos++]; var left = bytes[pos++]; for (var j = start; j <= start + left; j++) { encoding[j] = gid++; } } break; default: throw new _util.FormatError("Unknown encoding format: ".concat(format, " in CFF")); } var dataEnd = pos; if (format & 0x80) { bytes[dataStart] &= 0x7f; readSupplement(); } raw = bytes.subarray(dataStart, dataEnd); } format = format & 0x7f; return new CFFEncoding(predefined, format, encoding, raw); } }, { key: "parseFDSelect", value: function parseFDSelect(pos, length) { var bytes = this.bytes; var format = bytes[pos++]; var fdSelect = []; var i; switch (format) { case 0: for (i = 0; i < length; ++i) { var id = bytes[pos++]; fdSelect.push(id); } break; case 3: var rangesCount = bytes[pos++] << 8 | bytes[pos++]; for (i = 0; i < rangesCount; ++i) { var first = bytes[pos++] << 8 | bytes[pos++]; if (i === 0 && first !== 0) { (0, _util.warn)("parseFDSelect: The first range must have a first GID of 0" + " -- trying to recover."); first = 0; } var fdIndex = bytes[pos++]; var next = bytes[pos] << 8 | bytes[pos + 1]; for (var j = first; j < next; ++j) { fdSelect.push(fdIndex); } } pos += 2; break; default: throw new _util.FormatError("parseFDSelect: Unknown format \"".concat(format, "\".")); } if (fdSelect.length !== length) { throw new _util.FormatError("parseFDSelect: Invalid font data."); } return new CFFFDSelect(format, fdSelect); } }]); return CFFParser; }(); return CFFParser; }(); exports.CFFParser = CFFParser; var CFF = /*#__PURE__*/function () { function CFF() { _classCallCheck(this, CFF); this.header = null; this.names = []; this.topDict = null; this.strings = new CFFStrings(); this.globalSubrIndex = null; this.encoding = null; this.charset = null; this.charStrings = null; this.fdArray = []; this.fdSelect = null; this.isCIDFont = false; } _createClass(CFF, [{ key: "duplicateFirstGlyph", value: function duplicateFirstGlyph() { if (this.charStrings.count >= 65535) { (0, _util.warn)("Not enough space in charstrings to duplicate first glyph."); return; } var glyphZero = this.charStrings.get(0); this.charStrings.add(glyphZero); if (this.isCIDFont) { this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0]); } } }, { key: "hasGlyphId", value: function hasGlyphId(id) { if (id < 0 || id >= this.charStrings.count) { return false; } var glyph = this.charStrings.get(id); return glyph.length > 0; } }]); return CFF; }(); exports.CFF = CFF; var CFFHeader = function CFFHeader(major, minor, hdrSize, offSize) { _classCallCheck(this, CFFHeader); this.major = major; this.minor = minor; this.hdrSize = hdrSize; this.offSize = offSize; }; exports.CFFHeader = CFFHeader; var CFFStrings = /*#__PURE__*/function () { function CFFStrings() { _classCallCheck(this, CFFStrings); this.strings = []; } _createClass(CFFStrings, [{ key: "get", value: function get(index) { if (index >= 0 && index <= NUM_STANDARD_CFF_STRINGS - 1) { return CFFStandardStrings[index]; } if (index - NUM_STANDARD_CFF_STRINGS <= this.strings.length) { return this.strings[index - NUM_STANDARD_CFF_STRINGS]; } return CFFStandardStrings[0]; } }, { key: "getSID", value: function getSID(str) { var index = CFFStandardStrings.indexOf(str); if (index !== -1) { return index; } index = this.strings.indexOf(str); if (index !== -1) { return index + NUM_STANDARD_CFF_STRINGS; } return -1; } }, { key: "add", value: function add(value) { this.strings.push(value); } }, { key: "count", get: function get() { return this.strings.length; } }]); return CFFStrings; }(); exports.CFFStrings = CFFStrings; var CFFIndex = /*#__PURE__*/function () { function CFFIndex() { _classCallCheck(this, CFFIndex); this.objects = []; this.length = 0; } _createClass(CFFIndex, [{ key: "add", value: function add(data) { this.length += data.length; this.objects.push(data); } }, { key: "set", value: function set(index, data) { this.length += data.length - this.objects[index].length; this.objects[index] = data; } }, { key: "get", value: function get(index) { return this.objects[index]; } }, { key: "count", get: function get() { return this.objects.length; } }]); return CFFIndex; }(); exports.CFFIndex = CFFIndex; var CFFDict = /*#__PURE__*/function () { function CFFDict(tables, strings) { _classCallCheck(this, CFFDict); this.keyToNameMap = tables.keyToNameMap; this.nameToKeyMap = tables.nameToKeyMap; this.defaults = tables.defaults; this.types = tables.types; this.opcodes = tables.opcodes; this.order = tables.order; this.strings = strings; this.values = Object.create(null); } _createClass(CFFDict, [{ key: "setByKey", value: function setByKey(key, value) { if (!(key in this.keyToNameMap)) { return false; } var valueLength = value.length; if (valueLength === 0) { return true; } for (var i = 0; i < valueLength; i++) { if (isNaN(value[i])) { (0, _util.warn)('Invalid CFFDict value: "' + value + '" for key "' + key + '".'); return true; } } var type = this.types[key]; if (type === "num" || type === "sid" || type === "offset") { value = value[0]; } this.values[key] = value; return true; } }, { key: "setByName", value: function setByName(name, value) { if (!(name in this.nameToKeyMap)) { throw new _util.FormatError("Invalid dictionary name \"".concat(name, "\"")); } this.values[this.nameToKeyMap[name]] = value; } }, { key: "hasName", value: function hasName(name) { return this.nameToKeyMap[name] in this.values; } }, { key: "getByName", value: function getByName(name) { if (!(name in this.nameToKeyMap)) { throw new _util.FormatError("Invalid dictionary name ".concat(name, "\"")); } var key = this.nameToKeyMap[name]; if (!(key in this.values)) { return this.defaults[key]; } return this.values[key]; } }, { key: "removeByName", value: function removeByName(name) { delete this.values[this.nameToKeyMap[name]]; } }], [{ key: "createTables", value: function createTables(layout) { var tables = { keyToNameMap: {}, nameToKeyMap: {}, defaults: {}, types: {}, opcodes: {}, order: [] }; for (var i = 0, ii = layout.length; i < ii; ++i) { var entry = layout[i]; var key = Array.isArray(entry[0]) ? (entry[0][0] << 8) + entry[0][1] : entry[0]; tables.keyToNameMap[key] = entry[1]; tables.nameToKeyMap[entry[1]] = key; tables.types[key] = entry[2]; tables.defaults[key] = entry[3]; tables.opcodes[key] = Array.isArray(entry[0]) ? entry[0] : [entry[0]]; tables.order.push(key); } return tables; } }]); return CFFDict; }(); var CFFTopDict = function CFFTopDictClosure() { var layout = [[[12, 30], "ROS", ["sid", "sid", "num"], null], [[12, 20], "SyntheticBase", "num", null], [0, "version", "sid", null], [1, "Notice", "sid", null], [[12, 0], "Copyright", "sid", null], [2, "FullName", "sid", null], [3, "FamilyName", "sid", null], [4, "Weight", "sid", null], [[12, 1], "isFixedPitch", "num", 0], [[12, 2], "ItalicAngle", "num", 0], [[12, 3], "UnderlinePosition", "num", -100], [[12, 4], "UnderlineThickness", "num", 50], [[12, 5], "PaintType", "num", 0], [[12, 6], "CharstringType", "num", 2], [[12, 7], "FontMatrix", ["num", "num", "num", "num", "num", "num"], [0.001, 0, 0, 0.001, 0, 0]], [13, "UniqueID", "num", null], [5, "FontBBox", ["num", "num", "num", "num"], [0, 0, 0, 0]], [[12, 8], "StrokeWidth", "num", 0], [14, "XUID", "array", null], [15, "charset", "offset", 0], [16, "Encoding", "offset", 0], [17, "CharStrings", "offset", 0], [18, "Private", ["offset", "offset"], null], [[12, 21], "PostScript", "sid", null], [[12, 22], "BaseFontName", "sid", null], [[12, 23], "BaseFontBlend", "delta", null], [[12, 31], "CIDFontVersion", "num", 0], [[12, 32], "CIDFontRevision", "num", 0], [[12, 33], "CIDFontType", "num", 0], [[12, 34], "CIDCount", "num", 8720], [[12, 35], "UIDBase", "num", null], [[12, 37], "FDSelect", "offset", null], [[12, 36], "FDArray", "offset", null], [[12, 38], "FontName", "sid", null]]; var tables = null; var CFFTopDict = /*#__PURE__*/function (_CFFDict) { _inherits(CFFTopDict, _CFFDict); var _super = _createSuper(CFFTopDict); function CFFTopDict(strings) { var _this; _classCallCheck(this, CFFTopDict); if (tables === null) { tables = CFFDict.createTables(layout); } _this = _super.call(this, tables, strings); _this.privateDict = null; return _this; } return CFFTopDict; }(CFFDict); return CFFTopDict; }(); exports.CFFTopDict = CFFTopDict; var CFFPrivateDict = function CFFPrivateDictClosure() { var layout = [[6, "BlueValues", "delta", null], [7, "OtherBlues", "delta", null], [8, "FamilyBlues", "delta", null], [9, "FamilyOtherBlues", "delta", null], [[12, 9], "BlueScale", "num", 0.039625], [[12, 10], "BlueShift", "num", 7], [[12, 11], "BlueFuzz", "num", 1], [10, "StdHW", "num", null], [11, "StdVW", "num", null], [[12, 12], "StemSnapH", "delta", null], [[12, 13], "StemSnapV", "delta", null], [[12, 14], "ForceBold", "num", 0], [[12, 17], "LanguageGroup", "num", 0], [[12, 18], "ExpansionFactor", "num", 0.06], [[12, 19], "initialRandomSeed", "num", 0], [20, "defaultWidthX", "num", 0], [21, "nominalWidthX", "num", 0], [19, "Subrs", "offset", null]]; var tables = null; var CFFPrivateDict = /*#__PURE__*/function (_CFFDict2) { _inherits(CFFPrivateDict, _CFFDict2); var _super2 = _createSuper(CFFPrivateDict); function CFFPrivateDict(strings) { var _this2; _classCallCheck(this, CFFPrivateDict); if (tables === null) { tables = CFFDict.createTables(layout); } _this2 = _super2.call(this, tables, strings); _this2.subrsIndex = null; return _this2; } return CFFPrivateDict; }(CFFDict); return CFFPrivateDict; }(); exports.CFFPrivateDict = CFFPrivateDict; var CFFCharsetPredefinedTypes = { ISO_ADOBE: 0, EXPERT: 1, EXPERT_SUBSET: 2 }; var CFFCharset = function CFFCharset(predefined, format, charset, raw) { _classCallCheck(this, CFFCharset); this.predefined = predefined; this.format = format; this.charset = charset; this.raw = raw; }; exports.CFFCharset = CFFCharset; var CFFEncoding = function CFFEncoding(predefined, format, encoding, raw) { _classCallCheck(this, CFFEncoding); this.predefined = predefined; this.format = format; this.encoding = encoding; this.raw = raw; }; var CFFFDSelect = /*#__PURE__*/function () { function CFFFDSelect(format, fdSelect) { _classCallCheck(this, CFFFDSelect); this.format = format; this.fdSelect = fdSelect; } _createClass(CFFFDSelect, [{ key: "getFDIndex", value: function getFDIndex(glyphIndex) { if (glyphIndex < 0 || glyphIndex >= this.fdSelect.length) { return -1; } return this.fdSelect[glyphIndex]; } }]); return CFFFDSelect; }(); exports.CFFFDSelect = CFFFDSelect; var CFFOffsetTracker = /*#__PURE__*/function () { function CFFOffsetTracker() { _classCallCheck(this, CFFOffsetTracker); this.offsets = Object.create(null); } _createClass(CFFOffsetTracker, [{ key: "isTracking", value: function isTracking(key) { return key in this.offsets; } }, { key: "track", value: function track(key, location) { if (key in this.offsets) { throw new _util.FormatError("Already tracking location of ".concat(key)); } this.offsets[key] = location; } }, { key: "offset", value: function offset(value) { for (var key in this.offsets) { this.offsets[key] += value; } } }, { key: "setEntryLocation", value: function setEntryLocation(key, values, output) { if (!(key in this.offsets)) { throw new _util.FormatError("Not tracking location of ".concat(key)); } var data = output.data; var dataOffset = this.offsets[key]; var size = 5; for (var i = 0, ii = values.length; i < ii; ++i) { var offset0 = i * size + dataOffset; var offset1 = offset0 + 1; var offset2 = offset0 + 2; var offset3 = offset0 + 3; var offset4 = offset0 + 4; if (data[offset0] !== 0x1d || data[offset1] !== 0 || data[offset2] !== 0 || data[offset3] !== 0 || data[offset4] !== 0) { throw new _util.FormatError("writing to an offset that is not empty"); } var value = values[i]; data[offset0] = 0x1d; data[offset1] = value >> 24 & 0xff; data[offset2] = value >> 16 & 0xff; data[offset3] = value >> 8 & 0xff; data[offset4] = value & 0xff; } } }]); return CFFOffsetTracker; }(); var CFFCompiler = /*#__PURE__*/function () { function CFFCompiler(cff) { _classCallCheck(this, CFFCompiler); this.cff = cff; } _createClass(CFFCompiler, [{ key: "compile", value: function compile() { var cff = this.cff; var output = { data: [], length: 0, add: function CFFCompiler_add(data) { this.data = this.data.concat(data); this.length = this.data.length; } }; var header = this.compileHeader(cff.header); output.add(header); var nameIndex = this.compileNameIndex(cff.names); output.add(nameIndex); if (cff.isCIDFont) { if (cff.topDict.hasName("FontMatrix")) { var base = cff.topDict.getByName("FontMatrix"); cff.topDict.removeByName("FontMatrix"); for (var i = 0, ii = cff.fdArray.length; i < ii; i++) { var subDict = cff.fdArray[i]; var matrix = base.slice(0); if (subDict.hasName("FontMatrix")) { matrix = _util.Util.transform(matrix, subDict.getByName("FontMatrix")); } subDict.setByName("FontMatrix", matrix); } } } var xuid = cff.topDict.getByName("XUID"); if (xuid && xuid.length > 16) { cff.topDict.removeByName("XUID"); } cff.topDict.setByName("charset", 0); var compiled = this.compileTopDicts([cff.topDict], output.length, cff.isCIDFont); output.add(compiled.output); var topDictTracker = compiled.trackers[0]; var stringIndex = this.compileStringIndex(cff.strings.strings); output.add(stringIndex); var globalSubrIndex = this.compileIndex(cff.globalSubrIndex); output.add(globalSubrIndex); if (cff.encoding && cff.topDict.hasName("Encoding")) { if (cff.encoding.predefined) { topDictTracker.setEntryLocation("Encoding", [cff.encoding.format], output); } else { var encoding = this.compileEncoding(cff.encoding); topDictTracker.setEntryLocation("Encoding", [output.length], output); output.add(encoding); } } var charset = this.compileCharset(cff.charset, cff.charStrings.count, cff.strings, cff.isCIDFont); topDictTracker.setEntryLocation("charset", [output.length], output); output.add(charset); var charStrings = this.compileCharStrings(cff.charStrings); topDictTracker.setEntryLocation("CharStrings", [output.length], output); output.add(charStrings); if (cff.isCIDFont) { topDictTracker.setEntryLocation("FDSelect", [output.length], output); var fdSelect = this.compileFDSelect(cff.fdSelect); output.add(fdSelect); compiled = this.compileTopDicts(cff.fdArray, output.length, true); topDictTracker.setEntryLocation("FDArray", [output.length], output); output.add(compiled.output); var fontDictTrackers = compiled.trackers; this.compilePrivateDicts(cff.fdArray, fontDictTrackers, output); } this.compilePrivateDicts([cff.topDict], [topDictTracker], output); output.add([0]); return output.data; } }, { key: "encodeNumber", value: function encodeNumber(value) { if (Number.isInteger(value)) { return this.encodeInteger(value); } return this.encodeFloat(value); } }, { key: "encodeFloat", value: function encodeFloat(num) { var value = num.toString(); var m = CFFCompiler.EncodeFloatRegExp.exec(value); if (m) { var epsilon = parseFloat("1e" + ((m[2] ? +m[2] : 0) + m[1].length)); value = (Math.round(num * epsilon) / epsilon).toString(); } var nibbles = ""; var i, ii; for (i = 0, ii = value.length; i < ii; ++i) { var a = value[i]; if (a === "e") { nibbles += value[++i] === "-" ? "c" : "b"; } else if (a === ".") { nibbles += "a"; } else if (a === "-") { nibbles += "e"; } else { nibbles += a; } } nibbles += nibbles.length & 1 ? "f" : "ff"; var out = [30]; for (i = 0, ii = nibbles.length; i < ii; i += 2) { out.push(parseInt(nibbles.substring(i, i + 2), 16)); } return out; } }, { key: "encodeInteger", value: function encodeInteger(value) { var code; if (value >= -107 && value <= 107) { code = [value + 139]; } else if (value >= 108 && value <= 1131) { value = value - 108; code = [(value >> 8) + 247, value & 0xff]; } else if (value >= -1131 && value <= -108) { value = -value - 108; code = [(value >> 8) + 251, value & 0xff]; } else if (value >= -32768 && value <= 32767) { code = [0x1c, value >> 8 & 0xff, value & 0xff]; } else { code = [0x1d, value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff]; } return code; } }, { key: "compileHeader", value: function compileHeader(header) { return [header.major, header.minor, header.hdrSize, header.offSize]; } }, { key: "compileNameIndex", value: function compileNameIndex(names) { var nameIndex = new CFFIndex(); for (var i = 0, ii = names.length; i < ii; ++i) { var name = names[i]; var length = Math.min(name.length, 127); var sanitizedName = new Array(length); for (var j = 0; j < length; j++) { var _char = name[j]; if (_char < "!" || _char > "~" || _char === "[" || _char === "]" || _char === "(" || _char === ")" || _char === "{" || _char === "}" || _char === "<" || _char === ">" || _char === "/" || _char === "%") { _char = "_"; } sanitizedName[j] = _char; } sanitizedName = sanitizedName.join(""); if (sanitizedName === "") { sanitizedName = "Bad_Font_Name"; } nameIndex.add((0, _util.stringToBytes)(sanitizedName)); } return this.compileIndex(nameIndex); } }, { key: "compileTopDicts", value: function compileTopDicts(dicts, length, removeCidKeys) { var fontDictTrackers = []; var fdArrayIndex = new CFFIndex(); for (var i = 0, ii = dicts.length; i < ii; ++i) { var fontDict = dicts[i]; if (removeCidKeys) { fontDict.removeByName("CIDFontVersion"); fontDict.removeByName("CIDFontRevision"); fontDict.removeByName("CIDFontType"); fontDict.removeByName("CIDCount"); fontDict.removeByName("UIDBase"); } var fontDictTracker = new CFFOffsetTracker(); var fontDictData = this.compileDict(fontDict, fontDictTracker); fontDictTrackers.push(fontDictTracker); fdArrayIndex.add(fontDictData); fontDictTracker.offset(length); } fdArrayIndex = this.compileIndex(fdArrayIndex, fontDictTrackers); return { trackers: fontDictTrackers, output: fdArrayIndex }; } }, { key: "compilePrivateDicts", value: function compilePrivateDicts(dicts, trackers, output) { for (var i = 0, ii = dicts.length; i < ii; ++i) { var fontDict = dicts[i]; var privateDict = fontDict.privateDict; if (!privateDict || !fontDict.hasName("Private")) { throw new _util.FormatError("There must be a private dictionary."); } var privateDictTracker = new CFFOffsetTracker(); var privateDictData = this.compileDict(privateDict, privateDictTracker); var outputLength = output.length; privateDictTracker.offset(outputLength); if (!privateDictData.length) { outputLength = 0; } trackers[i].setEntryLocation("Private", [privateDictData.length, outputLength], output); output.add(privateDictData); if (privateDict.subrsIndex && privateDict.hasName("Subrs")) { var subrs = this.compileIndex(privateDict.subrsIndex); privateDictTracker.setEntryLocation("Subrs", [privateDictData.length], output); output.add(subrs); } } } }, { key: "compileDict", value: function compileDict(dict, offsetTracker) { var out = []; var order = dict.order; for (var i = 0; i < order.length; ++i) { var key = order[i]; if (!(key in dict.values)) { continue; } var values = dict.values[key]; var types = dict.types[key]; if (!Array.isArray(types)) { types = [types]; } if (!Array.isArray(values)) { values = [values]; } if (values.length === 0) { continue; } for (var j = 0, jj = types.length; j < jj; ++j) { var type = types[j]; var value = values[j]; switch (type) { case "num": case "sid": out = out.concat(this.encodeNumber(value)); break; case "offset": var name = dict.keyToNameMap[key]; if (!offsetTracker.isTracking(name)) { offsetTracker.track(name, out.length); } out = out.concat([0x1d, 0, 0, 0, 0]); break; case "array": case "delta": out = out.concat(this.encodeNumber(value)); for (var k = 1, kk = values.length; k < kk; ++k) { out = out.concat(this.encodeNumber(values[k])); } break; default: throw new _util.FormatError("Unknown data type of ".concat(type)); } } out = out.concat(dict.opcodes[key]); } return out; } }, { key: "compileStringIndex", value: function compileStringIndex(strings) { var stringIndex = new CFFIndex(); for (var i = 0, ii = strings.length; i < ii; ++i) { stringIndex.add((0, _util.stringToBytes)(strings[i])); } return this.compileIndex(stringIndex); } }, { key: "compileGlobalSubrIndex", value: function compileGlobalSubrIndex() { var globalSubrIndex = this.cff.globalSubrIndex; this.out.writeByteArray(this.compileIndex(globalSubrIndex)); } }, { key: "compileCharStrings", value: function compileCharStrings(charStrings) { var charStringsIndex = new CFFIndex(); for (var i = 0; i < charStrings.count; i++) { var glyph = charStrings.get(i); if (glyph.length === 0) { charStringsIndex.add(new Uint8Array([0x8b, 0x0e])); continue; } charStringsIndex.add(glyph); } return this.compileIndex(charStringsIndex); } }, { key: "compileCharset", value: function compileCharset(charset, numGlyphs, strings, isCIDFont) { var out; var numGlyphsLessNotDef = numGlyphs - 1; if (isCIDFont) { out = new Uint8Array([2, 0, 0, numGlyphsLessNotDef >> 8 & 0xff, numGlyphsLessNotDef & 0xff]); } else { var length = 1 + numGlyphsLessNotDef * 2; out = new Uint8Array(length); out[0] = 0; var charsetIndex = 0; var numCharsets = charset.charset.length; var warned = false; for (var i = 1; i < out.length; i += 2) { var sid = 0; if (charsetIndex < numCharsets) { var name = charset.charset[charsetIndex++]; sid = strings.getSID(name); if (sid === -1) { sid = 0; if (!warned) { warned = true; (0, _util.warn)("Couldn't find ".concat(name, " in CFF strings")); } } } out[i] = sid >> 8 & 0xff; out[i + 1] = sid & 0xff; } } return this.compileTypedArray(out); } }, { key: "compileEncoding", value: function compileEncoding(encoding) { return this.compileTypedArray(encoding.raw); } }, { key: "compileFDSelect", value: function compileFDSelect(fdSelect) { var format = fdSelect.format; var out, i; switch (format) { case 0: out = new Uint8Array(1 + fdSelect.fdSelect.length); out[0] = format; for (i = 0; i < fdSelect.fdSelect.length; i++) { out[i + 1] = fdSelect.fdSelect[i]; } break; case 3: var start = 0; var lastFD = fdSelect.fdSelect[0]; var ranges = [format, 0, 0, start >> 8 & 0xff, start & 0xff, lastFD]; for (i = 1; i < fdSelect.fdSelect.length; i++) { var currentFD = fdSelect.fdSelect[i]; if (currentFD !== lastFD) { ranges.push(i >> 8 & 0xff, i & 0xff, currentFD); lastFD = currentFD; } } var numRanges = (ranges.length - 3) / 3; ranges[1] = numRanges >> 8 & 0xff; ranges[2] = numRanges & 0xff; ranges.push(i >> 8 & 0xff, i & 0xff); out = new Uint8Array(ranges); break; } return this.compileTypedArray(out); } }, { key: "compileTypedArray", value: function compileTypedArray(data) { var out = []; for (var i = 0, ii = data.length; i < ii; ++i) { out[i] = data[i]; } return out; } }, { key: "compileIndex", value: function compileIndex(index) { var trackers = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; var objects = index.objects; var count = objects.length; if (count === 0) { return [0, 0, 0]; } var data = [count >> 8 & 0xff, count & 0xff]; var lastOffset = 1, i; for (i = 0; i < count; ++i) { lastOffset += objects[i].length; } var offsetSize; if (lastOffset < 0x100) { offsetSize = 1; } else if (lastOffset < 0x10000) { offsetSize = 2; } else if (lastOffset < 0x1000000) { offsetSize = 3; } else { offsetSize = 4; } data.push(offsetSize); var relativeOffset = 1; for (i = 0; i < count + 1; i++) { if (offsetSize === 1) { data.push(relativeOffset & 0xff); } else if (offsetSize === 2) { data.push(relativeOffset >> 8 & 0xff, relativeOffset & 0xff); } else if (offsetSize === 3) { data.push(relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff); } else { data.push(relativeOffset >>> 24 & 0xff, relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff); } if (objects[i]) { relativeOffset += objects[i].length; } } for (i = 0; i < count; i++) { if (trackers[i]) { trackers[i].offset(data.length); } for (var j = 0, jj = objects[i].length; j < jj; j++) { data.push(objects[i][j]); } } return data; } }], [{ key: "EncodeFloatRegExp", get: function get() { return (0, _util.shadow)(this, "EncodeFloatRegExp", /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/); } }]); return CFFCompiler; }(); exports.CFFCompiler = CFFCompiler; /***/ }), /* 161 */ /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ISOAdobeCharset = exports.ExpertSubsetCharset = exports.ExpertCharset = void 0; var ISOAdobeCharset = [".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash", "dagger", "daggerdbl", "periodcentered", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar", "degree", "thorn", "threequarters", "twosuperior", "registered", "minus", "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis", "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave", "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", "ydieresis", "zcaron"]; exports.ISOAdobeCharset = ISOAdobeCharset; var ExpertCharset = [".notdef", "space", "exclamsmall", "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", "onequarter", "onehalf", "threequarters", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall"]; exports.ExpertCharset = ExpertCharset; var ExpertSubsetCharset = [".notdef", "space", "dollaroldstyle", "dollarsuperior", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "hyphensuperior", "colonmonetary", "onefitted", "rupiah", "centoldstyle", "figuredash", "hypheninferior", "onequarter", "onehalf", "threequarters", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior"]; exports.ExpertSubsetCharset = ExpertSubsetCharset; /***/ }), /* 162 */ /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getEncoding = getEncoding; exports.ZapfDingbatsEncoding = exports.WinAnsiEncoding = exports.SymbolSetEncoding = exports.StandardEncoding = exports.MacRomanEncoding = exports.ExpertEncoding = void 0; var ExpertEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclamsmall", "Hungarumlautsmall", "", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "", "", "", "isuperior", "", "", "lsuperior", "msuperior", "nsuperior", "osuperior", "", "", "rsuperior", "ssuperior", "tsuperior", "", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "exclamdownsmall", "centoldstyle", "Lslashsmall", "", "", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "", "Dotaccentsmall", "", "", "Macronsmall", "", "", "figuredash", "hypheninferior", "", "", "Ogoneksmall", "Ringsmall", "Cedillasmall", "", "", "", "onequarter", "onehalf", "threequarters", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "", "", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall"]; exports.ExpertEncoding = ExpertEncoding; var MacExpertEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclamsmall", "Hungarumlautsmall", "centoldstyle", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "", "threequartersemdash", "", "questionsmall", "", "", "", "", "Ethsmall", "", "", "onequarter", "onehalf", "threequarters", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "", "", "", "", "", "", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "", "parenrightinferior", "Circumflexsmall", "hypheninferior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "", "", "asuperior", "centsuperior", "", "", "", "", "Aacutesmall", "Agravesmall", "Acircumflexsmall", "Adieresissmall", "Atildesmall", "Aringsmall", "Ccedillasmall", "Eacutesmall", "Egravesmall", "Ecircumflexsmall", "Edieresissmall", "Iacutesmall", "Igravesmall", "Icircumflexsmall", "Idieresissmall", "Ntildesmall", "Oacutesmall", "Ogravesmall", "Ocircumflexsmall", "Odieresissmall", "Otildesmall", "Uacutesmall", "Ugravesmall", "Ucircumflexsmall", "Udieresissmall", "", "eightsuperior", "fourinferior", "threeinferior", "sixinferior", "eightinferior", "seveninferior", "Scaronsmall", "", "centinferior", "twoinferior", "", "Dieresissmall", "", "Caronsmall", "osuperior", "fiveinferior", "", "commainferior", "periodinferior", "Yacutesmall", "", "dollarinferior", "", "", "Thornsmall", "", "nineinferior", "zeroinferior", "Zcaronsmall", "AEsmall", "Oslashsmall", "questiondownsmall", "oneinferior", "Lslashsmall", "", "", "", "", "", "", "Cedillasmall", "", "", "", "", "", "OEsmall", "figuredash", "hyphensuperior", "", "", "", "", "exclamdownsmall", "", "Ydieresissmall", "", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "ninesuperior", "zerosuperior", "", "esuperior", "rsuperior", "tsuperior", "", "", "isuperior", "ssuperior", "dsuperior", "", "", "", "", "", "lsuperior", "Ogoneksmall", "Brevesmall", "Macronsmall", "bsuperior", "nsuperior", "msuperior", "commasuperior", "periodsuperior", "Dotaccentsmall", "Ringsmall", "", "", "", ""]; var MacRomanEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "", "Adieresis", "Aring", "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis", "aacute", "agrave", "acircumflex", "adieresis", "atilde", "aring", "ccedilla", "eacute", "egrave", "ecircumflex", "edieresis", "iacute", "igrave", "icircumflex", "idieresis", "ntilde", "oacute", "ograve", "ocircumflex", "odieresis", "otilde", "uacute", "ugrave", "ucircumflex", "udieresis", "dagger", "degree", "cent", "sterling", "section", "bullet", "paragraph", "germandbls", "registered", "copyright", "trademark", "acute", "dieresis", "notequal", "AE", "Oslash", "infinity", "plusminus", "lessequal", "greaterequal", "yen", "mu", "partialdiff", "summation", "product", "pi", "integral", "ordfeminine", "ordmasculine", "Omega", "ae", "oslash", "questiondown", "exclamdown", "logicalnot", "radical", "florin", "approxequal", "Delta", "guillemotleft", "guillemotright", "ellipsis", "space", "Agrave", "Atilde", "Otilde", "OE", "oe", "endash", "emdash", "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide", "lozenge", "ydieresis", "Ydieresis", "fraction", "currency", "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl", "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex", "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex", "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave", "dotlessi", "circumflex", "tilde", "macron", "breve", "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek", "caron"]; exports.MacRomanEncoding = MacRomanEncoding; var StandardEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "", "endash", "dagger", "daggerdbl", "periodcentered", "", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "", "questiondown", "", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "", "ring", "cedilla", "", "hungarumlaut", "ogonek", "caron", "emdash", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "AE", "", "ordfeminine", "", "", "", "", "Lslash", "Oslash", "OE", "ordmasculine", "", "", "", "", "", "ae", "", "", "", "dotlessi", "", "", "lslash", "oslash", "oe", "germandbls", "", "", "", ""]; exports.StandardEncoding = StandardEncoding; var WinAnsiEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "bullet", "Euro", "bullet", "quotesinglbase", "florin", "quotedblbase", "ellipsis", "dagger", "daggerdbl", "circumflex", "perthousand", "Scaron", "guilsinglleft", "OE", "bullet", "Zcaron", "bullet", "bullet", "quoteleft", "quoteright", "quotedblleft", "quotedblright", "bullet", "endash", "emdash", "tilde", "trademark", "scaron", "guilsinglright", "oe", "bullet", "zcaron", "Ydieresis", "space", "exclamdown", "cent", "sterling", "currency", "yen", "brokenbar", "section", "dieresis", "copyright", "ordfeminine", "guillemotleft", "logicalnot", "hyphen", "registered", "macron", "degree", "plusminus", "twosuperior", "threesuperior", "acute", "mu", "paragraph", "periodcentered", "cedilla", "onesuperior", "ordmasculine", "guillemotright", "onequarter", "onehalf", "threequarters", "questiondown", "Agrave", "Aacute", "Acircumflex", "Atilde", "Adieresis", "Aring", "AE", "Ccedilla", "Egrave", "Eacute", "Ecircumflex", "Edieresis", "Igrave", "Iacute", "Icircumflex", "Idieresis", "Eth", "Ntilde", "Ograve", "Oacute", "Ocircumflex", "Otilde", "Odieresis", "multiply", "Oslash", "Ugrave", "Uacute", "Ucircumflex", "Udieresis", "Yacute", "Thorn", "germandbls", "agrave", "aacute", "acircumflex", "atilde", "adieresis", "aring", "ae", "ccedilla", "egrave", "eacute", "ecircumflex", "edieresis", "igrave", "iacute", "icircumflex", "idieresis", "eth", "ntilde", "ograve", "oacute", "ocircumflex", "otilde", "odieresis", "divide", "oslash", "ugrave", "uacute", "ucircumflex", "udieresis", "yacute", "thorn", "ydieresis"]; exports.WinAnsiEncoding = WinAnsiEncoding; var SymbolSetEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "universal", "numbersign", "existential", "percent", "ampersand", "suchthat", "parenleft", "parenright", "asteriskmath", "plus", "comma", "minus", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "congruent", "Alpha", "Beta", "Chi", "Delta", "Epsilon", "Phi", "Gamma", "Eta", "Iota", "theta1", "Kappa", "Lambda", "Mu", "Nu", "Omicron", "Pi", "Theta", "Rho", "Sigma", "Tau", "Upsilon", "sigma1", "Omega", "Xi", "Psi", "Zeta", "bracketleft", "therefore", "bracketright", "perpendicular", "underscore", "radicalex", "alpha", "beta", "chi", "delta", "epsilon", "phi", "gamma", "eta", "iota", "phi1", "kappa", "lambda", "mu", "nu", "omicron", "pi", "theta", "rho", "sigma", "tau", "upsilon", "omega1", "omega", "xi", "psi", "zeta", "braceleft", "bar", "braceright", "similar", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Euro", "Upsilon1", "minute", "lessequal", "fraction", "infinity", "florin", "club", "diamond", "heart", "spade", "arrowboth", "arrowleft", "arrowup", "arrowright", "arrowdown", "degree", "plusminus", "second", "greaterequal", "multiply", "proportional", "partialdiff", "bullet", "divide", "notequal", "equivalence", "approxequal", "ellipsis", "arrowvertex", "arrowhorizex", "carriagereturn", "aleph", "Ifraktur", "Rfraktur", "weierstrass", "circlemultiply", "circleplus", "emptyset", "intersection", "union", "propersuperset", "reflexsuperset", "notsubset", "propersubset", "reflexsubset", "element", "notelement", "angle", "gradient", "registerserif", "copyrightserif", "trademarkserif", "product", "radical", "dotmath", "logicalnot", "logicaland", "logicalor", "arrowdblboth", "arrowdblleft", "arrowdblup", "arrowdblright", "arrowdbldown", "lozenge", "angleleft", "registersans", "copyrightsans", "trademarksans", "summation", "parenlefttp", "parenleftex", "parenleftbt", "bracketlefttp", "bracketleftex", "bracketleftbt", "bracelefttp", "braceleftmid", "braceleftbt", "braceex", "", "angleright", "integral", "integraltp", "integralex", "integralbt", "parenrighttp", "parenrightex", "parenrightbt", "bracketrighttp", "bracketrightex", "bracketrightbt", "bracerighttp", "bracerightmid", "bracerightbt", ""]; exports.SymbolSetEncoding = SymbolSetEncoding; var ZapfDingbatsEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "a1", "a2", "a202", "a3", "a4", "a5", "a119", "a118", "a117", "a11", "a12", "a13", "a14", "a15", "a16", "a105", "a17", "a18", "a19", "a20", "a21", "a22", "a23", "a24", "a25", "a26", "a27", "a28", "a6", "a7", "a8", "a9", "a10", "a29", "a30", "a31", "a32", "a33", "a34", "a35", "a36", "a37", "a38", "a39", "a40", "a41", "a42", "a43", "a44", "a45", "a46", "a47", "a48", "a49", "a50", "a51", "a52", "a53", "a54", "a55", "a56", "a57", "a58", "a59", "a60", "a61", "a62", "a63", "a64", "a65", "a66", "a67", "a68", "a69", "a70", "a71", "a72", "a73", "a74", "a203", "a75", "a204", "a76", "a77", "a78", "a79", "a81", "a82", "a83", "a84", "a97", "a98", "a99", "a100", "", "a89", "a90", "a93", "a94", "a91", "a92", "a205", "a85", "a206", "a86", "a87", "a88", "a95", "a96", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "a101", "a102", "a103", "a104", "a106", "a107", "a108", "a112", "a111", "a110", "a109", "a120", "a121", "a122", "a123", "a124", "a125", "a126", "a127", "a128", "a129", "a130", "a131", "a132", "a133", "a134", "a135", "a136", "a137", "a138", "a139", "a140", "a141", "a142", "a143", "a144", "a145", "a146", "a147", "a148", "a149", "a150", "a151", "a152", "a153", "a154", "a155", "a156", "a157", "a158", "a159", "a160", "a161", "a163", "a164", "a196", "a165", "a192", "a166", "a167", "a168", "a169", "a170", "a171", "a172", "a173", "a162", "a174", "a175", "a176", "a177", "a178", "a179", "a193", "a180", "a199", "a181", "a200", "a182", "", "a201", "a183", "a184", "a197", "a185", "a194", "a198", "a186", "a195", "a187", "a188", "a189", "a190", "a191", ""]; exports.ZapfDingbatsEncoding = ZapfDingbatsEncoding; function getEncoding(encodingName) { switch (encodingName) { case "WinAnsiEncoding": return WinAnsiEncoding; case "StandardEncoding": return StandardEncoding; case "MacRomanEncoding": return MacRomanEncoding; case "SymbolSetEncoding": return SymbolSetEncoding; case "ZapfDingbatsEncoding": return ZapfDingbatsEncoding; case "ExpertEncoding": return ExpertEncoding; case "MacExpertEncoding": return MacExpertEncoding; default: return null; } } /***/ }), /* 163 */ /***/ ((__unused_webpack_module, __webpack_exports__, __w_pdfjs_require__) => { "use strict"; __w_pdfjs_require__.r(__webpack_exports__); /* harmony export */ __w_pdfjs_require__.d(__webpack_exports__, { /* harmony export */ "getDingbatsGlyphsUnicode": () => (/* binding */ getDingbatsGlyphsUnicode), /* harmony export */ "getGlyphsUnicode": () => (/* binding */ getGlyphsUnicode) /* harmony export */ }); /* harmony import */ var _core_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __w_pdfjs_require__(138); var getGlyphsUnicode = (0,_core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getArrayLookupTableFactory)(function () { return [ "A", 0x0041, "AE", 0x00c6, "AEacute", 0x01fc, "AEmacron", 0x01e2, "AEsmall", 0xf7e6, "Aacute", 0x00c1, "Aacutesmall", 0xf7e1, "Abreve", 0x0102, "Abreveacute", 0x1eae, "Abrevecyrillic", 0x04d0, "Abrevedotbelow", 0x1eb6, "Abrevegrave", 0x1eb0, "Abrevehookabove", 0x1eb2, "Abrevetilde", 0x1eb4, "Acaron", 0x01cd, "Acircle", 0x24b6, "Acircumflex", 0x00c2, "Acircumflexacute", 0x1ea4, "Acircumflexdotbelow", 0x1eac, "Acircumflexgrave", 0x1ea6, "Acircumflexhookabove", 0x1ea8, "Acircumflexsmall", 0xf7e2, "Acircumflextilde", 0x1eaa, "Acute", 0xf6c9, "Acutesmall", 0xf7b4, "Acyrillic", 0x0410, "Adblgrave", 0x0200, "Adieresis", 0x00c4, "Adieresiscyrillic", 0x04d2, "Adieresismacron", 0x01de, "Adieresissmall", 0xf7e4, "Adotbelow", 0x1ea0, "Adotmacron", 0x01e0, "Agrave", 0x00c0, "Agravesmall", 0xf7e0, "Ahookabove", 0x1ea2, "Aiecyrillic", 0x04d4, "Ainvertedbreve", 0x0202, "Alpha", 0x0391, "Alphatonos", 0x0386, "Amacron", 0x0100, "Amonospace", 0xff21, "Aogonek", 0x0104, "Aring", 0x00c5, "Aringacute", 0x01fa, "Aringbelow", 0x1e00, "Aringsmall", 0xf7e5, "Asmall", 0xf761, "Atilde", 0x00c3, "Atildesmall", 0xf7e3, "Aybarmenian", 0x0531, "B", 0x0042, "Bcircle", 0x24b7, "Bdotaccent", 0x1e02, "Bdotbelow", 0x1e04, "Becyrillic", 0x0411, "Benarmenian", 0x0532, "Beta", 0x0392, "Bhook", 0x0181, "Blinebelow", 0x1e06, "Bmonospace", 0xff22, "Brevesmall", 0xf6f4, "Bsmall", 0xf762, "Btopbar", 0x0182, "C", 0x0043, "Caarmenian", 0x053e, "Cacute", 0x0106, "Caron", 0xf6ca, "Caronsmall", 0xf6f5, "Ccaron", 0x010c, "Ccedilla", 0x00c7, "Ccedillaacute", 0x1e08, "Ccedillasmall", 0xf7e7, "Ccircle", 0x24b8, "Ccircumflex", 0x0108, "Cdot", 0x010a, "Cdotaccent", 0x010a, "Cedillasmall", 0xf7b8, "Chaarmenian", 0x0549, "Cheabkhasiancyrillic", 0x04bc, "Checyrillic", 0x0427, "Chedescenderabkhasiancyrillic", 0x04be, "Chedescendercyrillic", 0x04b6, "Chedieresiscyrillic", 0x04f4, "Cheharmenian", 0x0543, "Chekhakassiancyrillic", 0x04cb, "Cheverticalstrokecyrillic", 0x04b8, "Chi", 0x03a7, "Chook", 0x0187, "Circumflexsmall", 0xf6f6, "Cmonospace", 0xff23, "Coarmenian", 0x0551, "Csmall", 0xf763, "D", 0x0044, "DZ", 0x01f1, "DZcaron", 0x01c4, "Daarmenian", 0x0534, "Dafrican", 0x0189, "Dcaron", 0x010e, "Dcedilla", 0x1e10, "Dcircle", 0x24b9, "Dcircumflexbelow", 0x1e12, "Dcroat", 0x0110, "Ddotaccent", 0x1e0a, "Ddotbelow", 0x1e0c, "Decyrillic", 0x0414, "Deicoptic", 0x03ee, "Delta", 0x2206, "Deltagreek", 0x0394, "Dhook", 0x018a, "Dieresis", 0xf6cb, "DieresisAcute", 0xf6cc, "DieresisGrave", 0xf6cd, "Dieresissmall", 0xf7a8, "Digammagreek", 0x03dc, "Djecyrillic", 0x0402, "Dlinebelow", 0x1e0e, "Dmonospace", 0xff24, "Dotaccentsmall", 0xf6f7, "Dslash", 0x0110, "Dsmall", 0xf764, "Dtopbar", 0x018b, "Dz", 0x01f2, "Dzcaron", 0x01c5, "Dzeabkhasiancyrillic", 0x04e0, "Dzecyrillic", 0x0405, "Dzhecyrillic", 0x040f, "E", 0x0045, "Eacute", 0x00c9, "Eacutesmall", 0xf7e9, "Ebreve", 0x0114, "Ecaron", 0x011a, "Ecedillabreve", 0x1e1c, "Echarmenian", 0x0535, "Ecircle", 0x24ba, "Ecircumflex", 0x00ca, "Ecircumflexacute", 0x1ebe, "Ecircumflexbelow", 0x1e18, "Ecircumflexdotbelow", 0x1ec6, "Ecircumflexgrave", 0x1ec0, "Ecircumflexhookabove", 0x1ec2, "Ecircumflexsmall", 0xf7ea, "Ecircumflextilde", 0x1ec4, "Ecyrillic", 0x0404, "Edblgrave", 0x0204, "Edieresis", 0x00cb, "Edieresissmall", 0xf7eb, "Edot", 0x0116, "Edotaccent", 0x0116, "Edotbelow", 0x1eb8, "Efcyrillic", 0x0424, "Egrave", 0x00c8, "Egravesmall", 0xf7e8, "Eharmenian", 0x0537, "Ehookabove", 0x1eba, "Eightroman", 0x2167, "Einvertedbreve", 0x0206, "Eiotifiedcyrillic", 0x0464, "Elcyrillic", 0x041b, "Elevenroman", 0x216a, "Emacron", 0x0112, "Emacronacute", 0x1e16, "Emacrongrave", 0x1e14, "Emcyrillic", 0x041c, "Emonospace", 0xff25, "Encyrillic", 0x041d, "Endescendercyrillic", 0x04a2, "Eng", 0x014a, "Enghecyrillic", 0x04a4, "Enhookcyrillic", 0x04c7, "Eogonek", 0x0118, "Eopen", 0x0190, "Epsilon", 0x0395, "Epsilontonos", 0x0388, "Ercyrillic", 0x0420, "Ereversed", 0x018e, "Ereversedcyrillic", 0x042d, "Escyrillic", 0x0421, "Esdescendercyrillic", 0x04aa, "Esh", 0x01a9, "Esmall", 0xf765, "Eta", 0x0397, "Etarmenian", 0x0538, "Etatonos", 0x0389, "Eth", 0x00d0, "Ethsmall", 0xf7f0, "Etilde", 0x1ebc, "Etildebelow", 0x1e1a, "Euro", 0x20ac, "Ezh", 0x01b7, "Ezhcaron", 0x01ee, "Ezhreversed", 0x01b8, "F", 0x0046, "Fcircle", 0x24bb, "Fdotaccent", 0x1e1e, "Feharmenian", 0x0556, "Feicoptic", 0x03e4, "Fhook", 0x0191, "Fitacyrillic", 0x0472, "Fiveroman", 0x2164, "Fmonospace", 0xff26, "Fourroman", 0x2163, "Fsmall", 0xf766, "G", 0x0047, "GBsquare", 0x3387, "Gacute", 0x01f4, "Gamma", 0x0393, "Gammaafrican", 0x0194, "Gangiacoptic", 0x03ea, "Gbreve", 0x011e, "Gcaron", 0x01e6, "Gcedilla", 0x0122, "Gcircle", 0x24bc, "Gcircumflex", 0x011c, "Gcommaaccent", 0x0122, "Gdot", 0x0120, "Gdotaccent", 0x0120, "Gecyrillic", 0x0413, "Ghadarmenian", 0x0542, "Ghemiddlehookcyrillic", 0x0494, "Ghestrokecyrillic", 0x0492, "Gheupturncyrillic", 0x0490, "Ghook", 0x0193, "Gimarmenian", 0x0533, "Gjecyrillic", 0x0403, "Gmacron", 0x1e20, "Gmonospace", 0xff27, "Grave", 0xf6ce, "Gravesmall", 0xf760, "Gsmall", 0xf767, "Gsmallhook", 0x029b, "Gstroke", 0x01e4, "H", 0x0048, "H18533", 0x25cf, "H18543", 0x25aa, "H18551", 0x25ab, "H22073", 0x25a1, "HPsquare", 0x33cb, "Haabkhasiancyrillic", 0x04a8, "Hadescendercyrillic", 0x04b2, "Hardsigncyrillic", 0x042a, "Hbar", 0x0126, "Hbrevebelow", 0x1e2a, "Hcedilla", 0x1e28, "Hcircle", 0x24bd, "Hcircumflex", 0x0124, "Hdieresis", 0x1e26, "Hdotaccent", 0x1e22, "Hdotbelow", 0x1e24, "Hmonospace", 0xff28, "Hoarmenian", 0x0540, "Horicoptic", 0x03e8, "Hsmall", 0xf768, "Hungarumlaut", 0xf6cf, "Hungarumlautsmall", 0xf6f8, "Hzsquare", 0x3390, "I", 0x0049, "IAcyrillic", 0x042f, "IJ", 0x0132, "IUcyrillic", 0x042e, "Iacute", 0x00cd, "Iacutesmall", 0xf7ed, "Ibreve", 0x012c, "Icaron", 0x01cf, "Icircle", 0x24be, "Icircumflex", 0x00ce, "Icircumflexsmall", 0xf7ee, "Icyrillic", 0x0406, "Idblgrave", 0x0208, "Idieresis", 0x00cf, "Idieresisacute", 0x1e2e, "Idieresiscyrillic", 0x04e4, "Idieresissmall", 0xf7ef, "Idot", 0x0130, "Idotaccent", 0x0130, "Idotbelow", 0x1eca, "Iebrevecyrillic", 0x04d6, "Iecyrillic", 0x0415, "Ifraktur", 0x2111, "Igrave", 0x00cc, "Igravesmall", 0xf7ec, "Ihookabove", 0x1ec8, "Iicyrillic", 0x0418, "Iinvertedbreve", 0x020a, "Iishortcyrillic", 0x0419, "Imacron", 0x012a, "Imacroncyrillic", 0x04e2, "Imonospace", 0xff29, "Iniarmenian", 0x053b, "Iocyrillic", 0x0401, "Iogonek", 0x012e, "Iota", 0x0399, "Iotaafrican", 0x0196, "Iotadieresis", 0x03aa, "Iotatonos", 0x038a, "Ismall", 0xf769, "Istroke", 0x0197, "Itilde", 0x0128, "Itildebelow", 0x1e2c, "Izhitsacyrillic", 0x0474, "Izhitsadblgravecyrillic", 0x0476, "J", 0x004a, "Jaarmenian", 0x0541, "Jcircle", 0x24bf, "Jcircumflex", 0x0134, "Jecyrillic", 0x0408, "Jheharmenian", 0x054b, "Jmonospace", 0xff2a, "Jsmall", 0xf76a, "K", 0x004b, "KBsquare", 0x3385, "KKsquare", 0x33cd, "Kabashkircyrillic", 0x04a0, "Kacute", 0x1e30, "Kacyrillic", 0x041a, "Kadescendercyrillic", 0x049a, "Kahookcyrillic", 0x04c3, "Kappa", 0x039a, "Kastrokecyrillic", 0x049e, "Kaverticalstrokecyrillic", 0x049c, "Kcaron", 0x01e8, "Kcedilla", 0x0136, "Kcircle", 0x24c0, "Kcommaaccent", 0x0136, "Kdotbelow", 0x1e32, "Keharmenian", 0x0554, "Kenarmenian", 0x053f, "Khacyrillic", 0x0425, "Kheicoptic", 0x03e6, "Khook", 0x0198, "Kjecyrillic", 0x040c, "Klinebelow", 0x1e34, "Kmonospace", 0xff2b, "Koppacyrillic", 0x0480, "Koppagreek", 0x03de, "Ksicyrillic", 0x046e, "Ksmall", 0xf76b, "L", 0x004c, "LJ", 0x01c7, "LL", 0xf6bf, "Lacute", 0x0139, "Lambda", 0x039b, "Lcaron", 0x013d, "Lcedilla", 0x013b, "Lcircle", 0x24c1, "Lcircumflexbelow", 0x1e3c, "Lcommaaccent", 0x013b, "Ldot", 0x013f, "Ldotaccent", 0x013f, "Ldotbelow", 0x1e36, "Ldotbelowmacron", 0x1e38, "Liwnarmenian", 0x053c, "Lj", 0x01c8, "Ljecyrillic", 0x0409, "Llinebelow", 0x1e3a, "Lmonospace", 0xff2c, "Lslash", 0x0141, "Lslashsmall", 0xf6f9, "Lsmall", 0xf76c, "M", 0x004d, "MBsquare", 0x3386, "Macron", 0xf6d0, "Macronsmall", 0xf7af, "Macute", 0x1e3e, "Mcircle", 0x24c2, "Mdotaccent", 0x1e40, "Mdotbelow", 0x1e42, "Menarmenian", 0x0544, "Mmonospace", 0xff2d, "Msmall", 0xf76d, "Mturned", 0x019c, "Mu", 0x039c, "N", 0x004e, "NJ", 0x01ca, "Nacute", 0x0143, "Ncaron", 0x0147, "Ncedilla", 0x0145, "Ncircle", 0x24c3, "Ncircumflexbelow", 0x1e4a, "Ncommaaccent", 0x0145, "Ndotaccent", 0x1e44, "Ndotbelow", 0x1e46, "Nhookleft", 0x019d, "Nineroman", 0x2168, "Nj", 0x01cb, "Njecyrillic", 0x040a, "Nlinebelow", 0x1e48, "Nmonospace", 0xff2e, "Nowarmenian", 0x0546, "Nsmall", 0xf76e, "Ntilde", 0x00d1, "Ntildesmall", 0xf7f1, "Nu", 0x039d, "O", 0x004f, "OE", 0x0152, "OEsmall", 0xf6fa, "Oacute", 0x00d3, "Oacutesmall", 0xf7f3, "Obarredcyrillic", 0x04e8, "Obarreddieresiscyrillic", 0x04ea, "Obreve", 0x014e, "Ocaron", 0x01d1, "Ocenteredtilde", 0x019f, "Ocircle", 0x24c4, "Ocircumflex", 0x00d4, "Ocircumflexacute", 0x1ed0, "Ocircumflexdotbelow", 0x1ed8, "Ocircumflexgrave", 0x1ed2, "Ocircumflexhookabove", 0x1ed4, "Ocircumflexsmall", 0xf7f4, "Ocircumflextilde", 0x1ed6, "Ocyrillic", 0x041e, "Odblacute", 0x0150, "Odblgrave", 0x020c, "Odieresis", 0x00d6, "Odieresiscyrillic", 0x04e6, "Odieresissmall", 0xf7f6, "Odotbelow", 0x1ecc, "Ogoneksmall", 0xf6fb, "Ograve", 0x00d2, "Ogravesmall", 0xf7f2, "Oharmenian", 0x0555, "Ohm", 0x2126, "Ohookabove", 0x1ece, "Ohorn", 0x01a0, "Ohornacute", 0x1eda, "Ohorndotbelow", 0x1ee2, "Ohorngrave", 0x1edc, "Ohornhookabove", 0x1ede, "Ohorntilde", 0x1ee0, "Ohungarumlaut", 0x0150, "Oi", 0x01a2, "Oinvertedbreve", 0x020e, "Omacron", 0x014c, "Omacronacute", 0x1e52, "Omacrongrave", 0x1e50, "Omega", 0x2126, "Omegacyrillic", 0x0460, "Omegagreek", 0x03a9, "Omegaroundcyrillic", 0x047a, "Omegatitlocyrillic", 0x047c, "Omegatonos", 0x038f, "Omicron", 0x039f, "Omicrontonos", 0x038c, "Omonospace", 0xff2f, "Oneroman", 0x2160, "Oogonek", 0x01ea, "Oogonekmacron", 0x01ec, "Oopen", 0x0186, "Oslash", 0x00d8, "Oslashacute", 0x01fe, "Oslashsmall", 0xf7f8, "Osmall", 0xf76f, "Ostrokeacute", 0x01fe, "Otcyrillic", 0x047e, "Otilde", 0x00d5, "Otildeacute", 0x1e4c, "Otildedieresis", 0x1e4e, "Otildesmall", 0xf7f5, "P", 0x0050, "Pacute", 0x1e54, "Pcircle", 0x24c5, "Pdotaccent", 0x1e56, "Pecyrillic", 0x041f, "Peharmenian", 0x054a, "Pemiddlehookcyrillic", 0x04a6, "Phi", 0x03a6, "Phook", 0x01a4, "Pi", 0x03a0, "Piwrarmenian", 0x0553, "Pmonospace", 0xff30, "Psi", 0x03a8, "Psicyrillic", 0x0470, "Psmall", 0xf770, "Q", 0x0051, "Qcircle", 0x24c6, "Qmonospace", 0xff31, "Qsmall", 0xf771, "R", 0x0052, "Raarmenian", 0x054c, "Racute", 0x0154, "Rcaron", 0x0158, "Rcedilla", 0x0156, "Rcircle", 0x24c7, "Rcommaaccent", 0x0156, "Rdblgrave", 0x0210, "Rdotaccent", 0x1e58, "Rdotbelow", 0x1e5a, "Rdotbelowmacron", 0x1e5c, "Reharmenian", 0x0550, "Rfraktur", 0x211c, "Rho", 0x03a1, "Ringsmall", 0xf6fc, "Rinvertedbreve", 0x0212, "Rlinebelow", 0x1e5e, "Rmonospace", 0xff32, "Rsmall", 0xf772, "Rsmallinverted", 0x0281, "Rsmallinvertedsuperior", 0x02b6, "S", 0x0053, "SF010000", 0x250c, "SF020000", 0x2514, "SF030000", 0x2510, "SF040000", 0x2518, "SF050000", 0x253c, "SF060000", 0x252c, "SF070000", 0x2534, "SF080000", 0x251c, "SF090000", 0x2524, "SF100000", 0x2500, "SF110000", 0x2502, "SF190000", 0x2561, "SF200000", 0x2562, "SF210000", 0x2556, "SF220000", 0x2555, "SF230000", 0x2563, "SF240000", 0x2551, "SF250000", 0x2557, "SF260000", 0x255d, "SF270000", 0x255c, "SF280000", 0x255b, "SF360000", 0x255e, "SF370000", 0x255f, "SF380000", 0x255a, "SF390000", 0x2554, "SF400000", 0x2569, "SF410000", 0x2566, "SF420000", 0x2560, "SF430000", 0x2550, "SF440000", 0x256c, "SF450000", 0x2567, "SF460000", 0x2568, "SF470000", 0x2564, "SF480000", 0x2565, "SF490000", 0x2559, "SF500000", 0x2558, "SF510000", 0x2552, "SF520000", 0x2553, "SF530000", 0x256b, "SF540000", 0x256a, "Sacute", 0x015a, "Sacutedotaccent", 0x1e64, "Sampigreek", 0x03e0, "Scaron", 0x0160, "Scarondotaccent", 0x1e66, "Scaronsmall", 0xf6fd, "Scedilla", 0x015e, "Schwa", 0x018f, "Schwacyrillic", 0x04d8, "Schwadieresiscyrillic", 0x04da, "Scircle", 0x24c8, "Scircumflex", 0x015c, "Scommaaccent", 0x0218, "Sdotaccent", 0x1e60, "Sdotbelow", 0x1e62, "Sdotbelowdotaccent", 0x1e68, "Seharmenian", 0x054d, "Sevenroman", 0x2166, "Shaarmenian", 0x0547, "Shacyrillic", 0x0428, "Shchacyrillic", 0x0429, "Sheicoptic", 0x03e2, "Shhacyrillic", 0x04ba, "Shimacoptic", 0x03ec, "Sigma", 0x03a3, "Sixroman", 0x2165, "Smonospace", 0xff33, "Softsigncyrillic", 0x042c, "Ssmall", 0xf773, "Stigmagreek", 0x03da, "T", 0x0054, "Tau", 0x03a4, "Tbar", 0x0166, "Tcaron", 0x0164, "Tcedilla", 0x0162, "Tcircle", 0x24c9, "Tcircumflexbelow", 0x1e70, "Tcommaaccent", 0x0162, "Tdotaccent", 0x1e6a, "Tdotbelow", 0x1e6c, "Tecyrillic", 0x0422, "Tedescendercyrillic", 0x04ac, "Tenroman", 0x2169, "Tetsecyrillic", 0x04b4, "Theta", 0x0398, "Thook", 0x01ac, "Thorn", 0x00de, "Thornsmall", 0xf7fe, "Threeroman", 0x2162, "Tildesmall", 0xf6fe, "Tiwnarmenian", 0x054f, "Tlinebelow", 0x1e6e, "Tmonospace", 0xff34, "Toarmenian", 0x0539, "Tonefive", 0x01bc, "Tonesix", 0x0184, "Tonetwo", 0x01a7, "Tretroflexhook", 0x01ae, "Tsecyrillic", 0x0426, "Tshecyrillic", 0x040b, "Tsmall", 0xf774, "Twelveroman", 0x216b, "Tworoman", 0x2161, "U", 0x0055, "Uacute", 0x00da, "Uacutesmall", 0xf7fa, "Ubreve", 0x016c, "Ucaron", 0x01d3, "Ucircle", 0x24ca, "Ucircumflex", 0x00db, "Ucircumflexbelow", 0x1e76, "Ucircumflexsmall", 0xf7fb, "Ucyrillic", 0x0423, "Udblacute", 0x0170, "Udblgrave", 0x0214, "Udieresis", 0x00dc, "Udieresisacute", 0x01d7, "Udieresisbelow", 0x1e72, "Udieresiscaron", 0x01d9, "Udieresiscyrillic", 0x04f0, "Udieresisgrave", 0x01db, "Udieresismacron", 0x01d5, "Udieresissmall", 0xf7fc, "Udotbelow", 0x1ee4, "Ugrave", 0x00d9, "Ugravesmall", 0xf7f9, "Uhookabove", 0x1ee6, "Uhorn", 0x01af, "Uhornacute", 0x1ee8, "Uhorndotbelow", 0x1ef0, "Uhorngrave", 0x1eea, "Uhornhookabove", 0x1eec, "Uhorntilde", 0x1eee, "Uhungarumlaut", 0x0170, "Uhungarumlautcyrillic", 0x04f2, "Uinvertedbreve", 0x0216, "Ukcyrillic", 0x0478, "Umacron", 0x016a, "Umacroncyrillic", 0x04ee, "Umacrondieresis", 0x1e7a, "Umonospace", 0xff35, "Uogonek", 0x0172, "Upsilon", 0x03a5, "Upsilon1", 0x03d2, "Upsilonacutehooksymbolgreek", 0x03d3, "Upsilonafrican", 0x01b1, "Upsilondieresis", 0x03ab, "Upsilondieresishooksymbolgreek", 0x03d4, "Upsilonhooksymbol", 0x03d2, "Upsilontonos", 0x038e, "Uring", 0x016e, "Ushortcyrillic", 0x040e, "Usmall", 0xf775, "Ustraightcyrillic", 0x04ae, "Ustraightstrokecyrillic", 0x04b0, "Utilde", 0x0168, "Utildeacute", 0x1e78, "Utildebelow", 0x1e74, "V", 0x0056, "Vcircle", 0x24cb, "Vdotbelow", 0x1e7e, "Vecyrillic", 0x0412, "Vewarmenian", 0x054e, "Vhook", 0x01b2, "Vmonospace", 0xff36, "Voarmenian", 0x0548, "Vsmall", 0xf776, "Vtilde", 0x1e7c, "W", 0x0057, "Wacute", 0x1e82, "Wcircle", 0x24cc, "Wcircumflex", 0x0174, "Wdieresis", 0x1e84, "Wdotaccent", 0x1e86, "Wdotbelow", 0x1e88, "Wgrave", 0x1e80, "Wmonospace", 0xff37, "Wsmall", 0xf777, "X", 0x0058, "Xcircle", 0x24cd, "Xdieresis", 0x1e8c, "Xdotaccent", 0x1e8a, "Xeharmenian", 0x053d, "Xi", 0x039e, "Xmonospace", 0xff38, "Xsmall", 0xf778, "Y", 0x0059, "Yacute", 0x00dd, "Yacutesmall", 0xf7fd, "Yatcyrillic", 0x0462, "Ycircle", 0x24ce, "Ycircumflex", 0x0176, "Ydieresis", 0x0178, "Ydieresissmall", 0xf7ff, "Ydotaccent", 0x1e8e, "Ydotbelow", 0x1ef4, "Yericyrillic", 0x042b, "Yerudieresiscyrillic", 0x04f8, "Ygrave", 0x1ef2, "Yhook", 0x01b3, "Yhookabove", 0x1ef6, "Yiarmenian", 0x0545, "Yicyrillic", 0x0407, "Yiwnarmenian", 0x0552, "Ymonospace", 0xff39, "Ysmall", 0xf779, "Ytilde", 0x1ef8, "Yusbigcyrillic", 0x046a, "Yusbigiotifiedcyrillic", 0x046c, "Yuslittlecyrillic", 0x0466, "Yuslittleiotifiedcyrillic", 0x0468, "Z", 0x005a, "Zaarmenian", 0x0536, "Zacute", 0x0179, "Zcaron", 0x017d, "Zcaronsmall", 0xf6ff, "Zcircle", 0x24cf, "Zcircumflex", 0x1e90, "Zdot", 0x017b, "Zdotaccent", 0x017b, "Zdotbelow", 0x1e92, "Zecyrillic", 0x0417, "Zedescendercyrillic", 0x0498, "Zedieresiscyrillic", 0x04de, "Zeta", 0x0396, "Zhearmenian", 0x053a, "Zhebrevecyrillic", 0x04c1, "Zhecyrillic", 0x0416, "Zhedescendercyrillic", 0x0496, "Zhedieresiscyrillic", 0x04dc, "Zlinebelow", 0x1e94, "Zmonospace", 0xff3a, "Zsmall", 0xf77a, "Zstroke", 0x01b5, "a", 0x0061, "aabengali", 0x0986, "aacute", 0x00e1, "aadeva", 0x0906, "aagujarati", 0x0a86, "aagurmukhi", 0x0a06, "aamatragurmukhi", 0x0a3e, "aarusquare", 0x3303, "aavowelsignbengali", 0x09be, "aavowelsigndeva", 0x093e, "aavowelsigngujarati", 0x0abe, "abbreviationmarkarmenian", 0x055f, "abbreviationsigndeva", 0x0970, "abengali", 0x0985, "abopomofo", 0x311a, "abreve", 0x0103, "abreveacute", 0x1eaf, "abrevecyrillic", 0x04d1, "abrevedotbelow", 0x1eb7, "abrevegrave", 0x1eb1, "abrevehookabove", 0x1eb3, "abrevetilde", 0x1eb5, "acaron", 0x01ce, "acircle", 0x24d0, "acircumflex", 0x00e2, "acircumflexacute", 0x1ea5, "acircumflexdotbelow", 0x1ead, "acircumflexgrave", 0x1ea7, "acircumflexhookabove", 0x1ea9, "acircumflextilde", 0x1eab, "acute", 0x00b4, "acutebelowcmb", 0x0317, "acutecmb", 0x0301, "acutecomb", 0x0301, "acutedeva", 0x0954, "acutelowmod", 0x02cf, "acutetonecmb", 0x0341, "acyrillic", 0x0430, "adblgrave", 0x0201, "addakgurmukhi", 0x0a71, "adeva", 0x0905, "adieresis", 0x00e4, "adieresiscyrillic", 0x04d3, "adieresismacron", 0x01df, "adotbelow", 0x1ea1, "adotmacron", 0x01e1, "ae", 0x00e6, "aeacute", 0x01fd, "aekorean", 0x3150, "aemacron", 0x01e3, "afii00208", 0x2015, "afii08941", 0x20a4, "afii10017", 0x0410, "afii10018", 0x0411, "afii10019", 0x0412, "afii10020", 0x0413, "afii10021", 0x0414, "afii10022", 0x0415, "afii10023", 0x0401, "afii10024", 0x0416, "afii10025", 0x0417, "afii10026", 0x0418, "afii10027", 0x0419, "afii10028", 0x041a, "afii10029", 0x041b, "afii10030", 0x041c, "afii10031", 0x041d, "afii10032", 0x041e, "afii10033", 0x041f, "afii10034", 0x0420, "afii10035", 0x0421, "afii10036", 0x0422, "afii10037", 0x0423, "afii10038", 0x0424, "afii10039", 0x0425, "afii10040", 0x0426, "afii10041", 0x0427, "afii10042", 0x0428, "afii10043", 0x0429, "afii10044", 0x042a, "afii10045", 0x042b, "afii10046", 0x042c, "afii10047", 0x042d, "afii10048", 0x042e, "afii10049", 0x042f, "afii10050", 0x0490, "afii10051", 0x0402, "afii10052", 0x0403, "afii10053", 0x0404, "afii10054", 0x0405, "afii10055", 0x0406, "afii10056", 0x0407, "afii10057", 0x0408, "afii10058", 0x0409, "afii10059", 0x040a, "afii10060", 0x040b, "afii10061", 0x040c, "afii10062", 0x040e, "afii10063", 0xf6c4, "afii10064", 0xf6c5, "afii10065", 0x0430, "afii10066", 0x0431, "afii10067", 0x0432, "afii10068", 0x0433, "afii10069", 0x0434, "afii10070", 0x0435, "afii10071", 0x0451, "afii10072", 0x0436, "afii10073", 0x0437, "afii10074", 0x0438, "afii10075", 0x0439, "afii10076", 0x043a, "afii10077", 0x043b, "afii10078", 0x043c, "afii10079", 0x043d, "afii10080", 0x043e, "afii10081", 0x043f, "afii10082", 0x0440, "afii10083", 0x0441, "afii10084", 0x0442, "afii10085", 0x0443, "afii10086", 0x0444, "afii10087", 0x0445, "afii10088", 0x0446, "afii10089", 0x0447, "afii10090", 0x0448, "afii10091", 0x0449, "afii10092", 0x044a, "afii10093", 0x044b, "afii10094", 0x044c, "afii10095", 0x044d, "afii10096", 0x044e, "afii10097", 0x044f, "afii10098", 0x0491, "afii10099", 0x0452, "afii10100", 0x0453, "afii10101", 0x0454, "afii10102", 0x0455, "afii10103", 0x0456, "afii10104", 0x0457, "afii10105", 0x0458, "afii10106", 0x0459, "afii10107", 0x045a, "afii10108", 0x045b, "afii10109", 0x045c, "afii10110", 0x045e, "afii10145", 0x040f, "afii10146", 0x0462, "afii10147", 0x0472, "afii10148", 0x0474, "afii10192", 0xf6c6, "afii10193", 0x045f, "afii10194", 0x0463, "afii10195", 0x0473, "afii10196", 0x0475, "afii10831", 0xf6c7, "afii10832", 0xf6c8, "afii10846", 0x04d9, "afii299", 0x200e, "afii300", 0x200f, "afii301", 0x200d, "afii57381", 0x066a, "afii57388", 0x060c, "afii57392", 0x0660, "afii57393", 0x0661, "afii57394", 0x0662, "afii57395", 0x0663, "afii57396", 0x0664, "afii57397", 0x0665, "afii57398", 0x0666, "afii57399", 0x0667, "afii57400", 0x0668, "afii57401", 0x0669, "afii57403", 0x061b, "afii57407", 0x061f, "afii57409", 0x0621, "afii57410", 0x0622, "afii57411", 0x0623, "afii57412", 0x0624, "afii57413", 0x0625, "afii57414", 0x0626, "afii57415", 0x0627, "afii57416", 0x0628, "afii57417", 0x0629, "afii57418", 0x062a, "afii57419", 0x062b, "afii57420", 0x062c, "afii57421", 0x062d, "afii57422", 0x062e, "afii57423", 0x062f, "afii57424", 0x0630, "afii57425", 0x0631, "afii57426", 0x0632, "afii57427", 0x0633, "afii57428", 0x0634, "afii57429", 0x0635, "afii57430", 0x0636, "afii57431", 0x0637, "afii57432", 0x0638, "afii57433", 0x0639, "afii57434", 0x063a, "afii57440", 0x0640, "afii57441", 0x0641, "afii57442", 0x0642, "afii57443", 0x0643, "afii57444", 0x0644, "afii57445", 0x0645, "afii57446", 0x0646, "afii57448", 0x0648, "afii57449", 0x0649, "afii57450", 0x064a, "afii57451", 0x064b, "afii57452", 0x064c, "afii57453", 0x064d, "afii57454", 0x064e, "afii57455", 0x064f, "afii57456", 0x0650, "afii57457", 0x0651, "afii57458", 0x0652, "afii57470", 0x0647, "afii57505", 0x06a4, "afii57506", 0x067e, "afii57507", 0x0686, "afii57508", 0x0698, "afii57509", 0x06af, "afii57511", 0x0679, "afii57512", 0x0688, "afii57513", 0x0691, "afii57514", 0x06ba, "afii57519", 0x06d2, "afii57534", 0x06d5, "afii57636", 0x20aa, "afii57645", 0x05be, "afii57658", 0x05c3, "afii57664", 0x05d0, "afii57665", 0x05d1, "afii57666", 0x05d2, "afii57667", 0x05d3, "afii57668", 0x05d4, "afii57669", 0x05d5, "afii57670", 0x05d6, "afii57671", 0x05d7, "afii57672", 0x05d8, "afii57673", 0x05d9, "afii57674", 0x05da, "afii57675", 0x05db, "afii57676", 0x05dc, "afii57677", 0x05dd, "afii57678", 0x05de, "afii57679", 0x05df, "afii57680", 0x05e0, "afii57681", 0x05e1, "afii57682", 0x05e2, "afii57683", 0x05e3, "afii57684", 0x05e4, "afii57685", 0x05e5, "afii57686", 0x05e6, "afii57687", 0x05e7, "afii57688", 0x05e8, "afii57689", 0x05e9, "afii57690", 0x05ea, "afii57694", 0xfb2a, "afii57695", 0xfb2b, "afii57700", 0xfb4b, "afii57705", 0xfb1f, "afii57716", 0x05f0, "afii57717", 0x05f1, "afii57718", 0x05f2, "afii57723", 0xfb35, "afii57793", 0x05b4, "afii57794", 0x05b5, "afii57795", 0x05b6, "afii57796", 0x05bb, "afii57797", 0x05b8, "afii57798", 0x05b7, "afii57799", 0x05b0, "afii57800", 0x05b2, "afii57801", 0x05b1, "afii57802", 0x05b3, "afii57803", 0x05c2, "afii57804", 0x05c1, "afii57806", 0x05b9, "afii57807", 0x05bc, "afii57839", 0x05bd, "afii57841", 0x05bf, "afii57842", 0x05c0, "afii57929", 0x02bc, "afii61248", 0x2105, "afii61289", 0x2113, "afii61352", 0x2116, "afii61573", 0x202c, "afii61574", 0x202d, "afii61575", 0x202e, "afii61664", 0x200c, "afii63167", 0x066d, "afii64937", 0x02bd, "agrave", 0x00e0, "agujarati", 0x0a85, "agurmukhi", 0x0a05, "ahiragana", 0x3042, "ahookabove", 0x1ea3, "aibengali", 0x0990, "aibopomofo", 0x311e, "aideva", 0x0910, "aiecyrillic", 0x04d5, "aigujarati", 0x0a90, "aigurmukhi", 0x0a10, "aimatragurmukhi", 0x0a48, "ainarabic", 0x0639, "ainfinalarabic", 0xfeca, "aininitialarabic", 0xfecb, "ainmedialarabic", 0xfecc, "ainvertedbreve", 0x0203, "aivowelsignbengali", 0x09c8, "aivowelsigndeva", 0x0948, "aivowelsigngujarati", 0x0ac8, "akatakana", 0x30a2, "akatakanahalfwidth", 0xff71, "akorean", 0x314f, "alef", 0x05d0, "alefarabic", 0x0627, "alefdageshhebrew", 0xfb30, "aleffinalarabic", 0xfe8e, "alefhamzaabovearabic", 0x0623, "alefhamzaabovefinalarabic", 0xfe84, "alefhamzabelowarabic", 0x0625, "alefhamzabelowfinalarabic", 0xfe88, "alefhebrew", 0x05d0, "aleflamedhebrew", 0xfb4f, "alefmaddaabovearabic", 0x0622, "alefmaddaabovefinalarabic", 0xfe82, "alefmaksuraarabic", 0x0649, "alefmaksurafinalarabic", 0xfef0, "alefmaksurainitialarabic", 0xfef3, "alefmaksuramedialarabic", 0xfef4, "alefpatahhebrew", 0xfb2e, "alefqamatshebrew", 0xfb2f, "aleph", 0x2135, "allequal", 0x224c, "alpha", 0x03b1, "alphatonos", 0x03ac, "amacron", 0x0101, "amonospace", 0xff41, "ampersand", 0x0026, "ampersandmonospace", 0xff06, "ampersandsmall", 0xf726, "amsquare", 0x33c2, "anbopomofo", 0x3122, "angbopomofo", 0x3124, "angbracketleft", 0x3008, "angbracketright", 0x3009, "angkhankhuthai", 0x0e5a, "angle", 0x2220, "anglebracketleft", 0x3008, "anglebracketleftvertical", 0xfe3f, "anglebracketright", 0x3009, "anglebracketrightvertical", 0xfe40, "angleleft", 0x2329, "angleright", 0x232a, "angstrom", 0x212b, "anoteleia", 0x0387, "anudattadeva", 0x0952, "anusvarabengali", 0x0982, "anusvaradeva", 0x0902, "anusvaragujarati", 0x0a82, "aogonek", 0x0105, "apaatosquare", 0x3300, "aparen", 0x249c, "apostrophearmenian", 0x055a, "apostrophemod", 0x02bc, "apple", 0xf8ff, "approaches", 0x2250, "approxequal", 0x2248, "approxequalorimage", 0x2252, "approximatelyequal", 0x2245, "araeaekorean", 0x318e, "araeakorean", 0x318d, "arc", 0x2312, "arighthalfring", 0x1e9a, "aring", 0x00e5, "aringacute", 0x01fb, "aringbelow", 0x1e01, "arrowboth", 0x2194, "arrowdashdown", 0x21e3, "arrowdashleft", 0x21e0, "arrowdashright", 0x21e2, "arrowdashup", 0x21e1, "arrowdblboth", 0x21d4, "arrowdbldown", 0x21d3, "arrowdblleft", 0x21d0, "arrowdblright", 0x21d2, "arrowdblup", 0x21d1, "arrowdown", 0x2193, "arrowdownleft", 0x2199, "arrowdownright", 0x2198, "arrowdownwhite", 0x21e9, "arrowheaddownmod", 0x02c5, "arrowheadleftmod", 0x02c2, "arrowheadrightmod", 0x02c3, "arrowheadupmod", 0x02c4, "arrowhorizex", 0xf8e7, "arrowleft", 0x2190, "arrowleftdbl", 0x21d0, "arrowleftdblstroke", 0x21cd, "arrowleftoverright", 0x21c6, "arrowleftwhite", 0x21e6, "arrowright", 0x2192, "arrowrightdblstroke", 0x21cf, "arrowrightheavy", 0x279e, "arrowrightoverleft", 0x21c4, "arrowrightwhite", 0x21e8, "arrowtableft", 0x21e4, "arrowtabright", 0x21e5, "arrowup", 0x2191, "arrowupdn", 0x2195, "arrowupdnbse", 0x21a8, "arrowupdownbase", 0x21a8, "arrowupleft", 0x2196, "arrowupleftofdown", 0x21c5, "arrowupright", 0x2197, "arrowupwhite", 0x21e7, "arrowvertex", 0xf8e6, "asciicircum", 0x005e, "asciicircummonospace", 0xff3e, "asciitilde", 0x007e, "asciitildemonospace", 0xff5e, "ascript", 0x0251, "ascriptturned", 0x0252, "asmallhiragana", 0x3041, "asmallkatakana", 0x30a1, "asmallkatakanahalfwidth", 0xff67, "asterisk", 0x002a, "asteriskaltonearabic", 0x066d, "asteriskarabic", 0x066d, "asteriskmath", 0x2217, "asteriskmonospace", 0xff0a, "asterisksmall", 0xfe61, "asterism", 0x2042, "asuperior", 0xf6e9, "asymptoticallyequal", 0x2243, "at", 0x0040, "atilde", 0x00e3, "atmonospace", 0xff20, "atsmall", 0xfe6b, "aturned", 0x0250, "aubengali", 0x0994, "aubopomofo", 0x3120, "audeva", 0x0914, "augujarati", 0x0a94, "augurmukhi", 0x0a14, "aulengthmarkbengali", 0x09d7, "aumatragurmukhi", 0x0a4c, "auvowelsignbengali", 0x09cc, "auvowelsigndeva", 0x094c, "auvowelsigngujarati", 0x0acc, "avagrahadeva", 0x093d, "aybarmenian", 0x0561, "ayin", 0x05e2, "ayinaltonehebrew", 0xfb20, "ayinhebrew", 0x05e2, "b", 0x0062, "babengali", 0x09ac, "backslash", 0x005c, "backslashmonospace", 0xff3c, "badeva", 0x092c, "bagujarati", 0x0aac, "bagurmukhi", 0x0a2c, "bahiragana", 0x3070, "bahtthai", 0x0e3f, "bakatakana", 0x30d0, "bar", 0x007c, "barmonospace", 0xff5c, "bbopomofo", 0x3105, "bcircle", 0x24d1, "bdotaccent", 0x1e03, "bdotbelow", 0x1e05, "beamedsixteenthnotes", 0x266c, "because", 0x2235, "becyrillic", 0x0431, "beharabic", 0x0628, "behfinalarabic", 0xfe90, "behinitialarabic", 0xfe91, "behiragana", 0x3079, "behmedialarabic", 0xfe92, "behmeeminitialarabic", 0xfc9f, "behmeemisolatedarabic", 0xfc08, "behnoonfinalarabic", 0xfc6d, "bekatakana", 0x30d9, "benarmenian", 0x0562, "bet", 0x05d1, "beta", 0x03b2, "betasymbolgreek", 0x03d0, "betdagesh", 0xfb31, "betdageshhebrew", 0xfb31, "bethebrew", 0x05d1, "betrafehebrew", 0xfb4c, "bhabengali", 0x09ad, "bhadeva", 0x092d, "bhagujarati", 0x0aad, "bhagurmukhi", 0x0a2d, "bhook", 0x0253, "bihiragana", 0x3073, "bikatakana", 0x30d3, "bilabialclick", 0x0298, "bindigurmukhi", 0x0a02, "birusquare", 0x3331, "blackcircle", 0x25cf, "blackdiamond", 0x25c6, "blackdownpointingtriangle", 0x25bc, "blackleftpointingpointer", 0x25c4, "blackleftpointingtriangle", 0x25c0, "blacklenticularbracketleft", 0x3010, "blacklenticularbracketleftvertical", 0xfe3b, "blacklenticularbracketright", 0x3011, "blacklenticularbracketrightvertical", 0xfe3c, "blacklowerlefttriangle", 0x25e3, "blacklowerrighttriangle", 0x25e2, "blackrectangle", 0x25ac, "blackrightpointingpointer", 0x25ba, "blackrightpointingtriangle", 0x25b6, "blacksmallsquare", 0x25aa, "blacksmilingface", 0x263b, "blacksquare", 0x25a0, "blackstar", 0x2605, "blackupperlefttriangle", 0x25e4, "blackupperrighttriangle", 0x25e5, "blackuppointingsmalltriangle", 0x25b4, "blackuppointingtriangle", 0x25b2, "blank", 0x2423, "blinebelow", 0x1e07, "block", 0x2588, "bmonospace", 0xff42, "bobaimaithai", 0x0e1a, "bohiragana", 0x307c, "bokatakana", 0x30dc, "bparen", 0x249d, "bqsquare", 0x33c3, "braceex", 0xf8f4, "braceleft", 0x007b, "braceleftbt", 0xf8f3, "braceleftmid", 0xf8f2, "braceleftmonospace", 0xff5b, "braceleftsmall", 0xfe5b, "bracelefttp", 0xf8f1, "braceleftvertical", 0xfe37, "braceright", 0x007d, "bracerightbt", 0xf8fe, "bracerightmid", 0xf8fd, "bracerightmonospace", 0xff5d, "bracerightsmall", 0xfe5c, "bracerighttp", 0xf8fc, "bracerightvertical", 0xfe38, "bracketleft", 0x005b, "bracketleftbt", 0xf8f0, "bracketleftex", 0xf8ef, "bracketleftmonospace", 0xff3b, "bracketlefttp", 0xf8ee, "bracketright", 0x005d, "bracketrightbt", 0xf8fb, "bracketrightex", 0xf8fa, "bracketrightmonospace", 0xff3d, "bracketrighttp", 0xf8f9, "breve", 0x02d8, "brevebelowcmb", 0x032e, "brevecmb", 0x0306, "breveinvertedbelowcmb", 0x032f, "breveinvertedcmb", 0x0311, "breveinverteddoublecmb", 0x0361, "bridgebelowcmb", 0x032a, "bridgeinvertedbelowcmb", 0x033a, "brokenbar", 0x00a6, "bstroke", 0x0180, "bsuperior", 0xf6ea, "btopbar", 0x0183, "buhiragana", 0x3076, "bukatakana", 0x30d6, "bullet", 0x2022, "bulletinverse", 0x25d8, "bulletoperator", 0x2219, "bullseye", 0x25ce, "c", 0x0063, "caarmenian", 0x056e, "cabengali", 0x099a, "cacute", 0x0107, "cadeva", 0x091a, "cagujarati", 0x0a9a, "cagurmukhi", 0x0a1a, "calsquare", 0x3388, "candrabindubengali", 0x0981, "candrabinducmb", 0x0310, "candrabindudeva", 0x0901, "candrabindugujarati", 0x0a81, "capslock", 0x21ea, "careof", 0x2105, "caron", 0x02c7, "caronbelowcmb", 0x032c, "caroncmb", 0x030c, "carriagereturn", 0x21b5, "cbopomofo", 0x3118, "ccaron", 0x010d, "ccedilla", 0x00e7, "ccedillaacute", 0x1e09, "ccircle", 0x24d2, "ccircumflex", 0x0109, "ccurl", 0x0255, "cdot", 0x010b, "cdotaccent", 0x010b, "cdsquare", 0x33c5, "cedilla", 0x00b8, "cedillacmb", 0x0327, "cent", 0x00a2, "centigrade", 0x2103, "centinferior", 0xf6df, "centmonospace", 0xffe0, "centoldstyle", 0xf7a2, "centsuperior", 0xf6e0, "chaarmenian", 0x0579, "chabengali", 0x099b, "chadeva", 0x091b, "chagujarati", 0x0a9b, "chagurmukhi", 0x0a1b, "chbopomofo", 0x3114, "cheabkhasiancyrillic", 0x04bd, "checkmark", 0x2713, "checyrillic", 0x0447, "chedescenderabkhasiancyrillic", 0x04bf, "chedescendercyrillic", 0x04b7, "chedieresiscyrillic", 0x04f5, "cheharmenian", 0x0573, "chekhakassiancyrillic", 0x04cc, "cheverticalstrokecyrillic", 0x04b9, "chi", 0x03c7, "chieuchacirclekorean", 0x3277, "chieuchaparenkorean", 0x3217, "chieuchcirclekorean", 0x3269, "chieuchkorean", 0x314a, "chieuchparenkorean", 0x3209, "chochangthai", 0x0e0a, "chochanthai", 0x0e08, "chochingthai", 0x0e09, "chochoethai", 0x0e0c, "chook", 0x0188, "cieucacirclekorean", 0x3276, "cieucaparenkorean", 0x3216, "cieuccirclekorean", 0x3268, "cieuckorean", 0x3148, "cieucparenkorean", 0x3208, "cieucuparenkorean", 0x321c, "circle", 0x25cb, "circlecopyrt", 0x00a9, "circlemultiply", 0x2297, "circleot", 0x2299, "circleplus", 0x2295, "circlepostalmark", 0x3036, "circlewithlefthalfblack", 0x25d0, "circlewithrighthalfblack", 0x25d1, "circumflex", 0x02c6, "circumflexbelowcmb", 0x032d, "circumflexcmb", 0x0302, "clear", 0x2327, "clickalveolar", 0x01c2, "clickdental", 0x01c0, "clicklateral", 0x01c1, "clickretroflex", 0x01c3, "club", 0x2663, "clubsuitblack", 0x2663, "clubsuitwhite", 0x2667, "cmcubedsquare", 0x33a4, "cmonospace", 0xff43, "cmsquaredsquare", 0x33a0, "coarmenian", 0x0581, "colon", 0x003a, "colonmonetary", 0x20a1, "colonmonospace", 0xff1a, "colonsign", 0x20a1, "colonsmall", 0xfe55, "colontriangularhalfmod", 0x02d1, "colontriangularmod", 0x02d0, "comma", 0x002c, "commaabovecmb", 0x0313, "commaaboverightcmb", 0x0315, "commaaccent", 0xf6c3, "commaarabic", 0x060c, "commaarmenian", 0x055d, "commainferior", 0xf6e1, "commamonospace", 0xff0c, "commareversedabovecmb", 0x0314, "commareversedmod", 0x02bd, "commasmall", 0xfe50, "commasuperior", 0xf6e2, "commaturnedabovecmb", 0x0312, "commaturnedmod", 0x02bb, "compass", 0x263c, "congruent", 0x2245, "contourintegral", 0x222e, "control", 0x2303, "controlACK", 0x0006, "controlBEL", 0x0007, "controlBS", 0x0008, "controlCAN", 0x0018, "controlCR", 0x000d, "controlDC1", 0x0011, "controlDC2", 0x0012, "controlDC3", 0x0013, "controlDC4", 0x0014, "controlDEL", 0x007f, "controlDLE", 0x0010, "controlEM", 0x0019, "controlENQ", 0x0005, "controlEOT", 0x0004, "controlESC", 0x001b, "controlETB", 0x0017, "controlETX", 0x0003, "controlFF", 0x000c, "controlFS", 0x001c, "controlGS", 0x001d, "controlHT", 0x0009, "controlLF", 0x000a, "controlNAK", 0x0015, "controlNULL", 0x0000, "controlRS", 0x001e, "controlSI", 0x000f, "controlSO", 0x000e, "controlSOT", 0x0002, "controlSTX", 0x0001, "controlSUB", 0x001a, "controlSYN", 0x0016, "controlUS", 0x001f, "controlVT", 0x000b, "copyright", 0x00a9, "copyrightsans", 0xf8e9, "copyrightserif", 0xf6d9, "cornerbracketleft", 0x300c, "cornerbracketlefthalfwidth", 0xff62, "cornerbracketleftvertical", 0xfe41, "cornerbracketright", 0x300d, "cornerbracketrighthalfwidth", 0xff63, "cornerbracketrightvertical", 0xfe42, "corporationsquare", 0x337f, "cosquare", 0x33c7, "coverkgsquare", 0x33c6, "cparen", 0x249e, "cruzeiro", 0x20a2, "cstretched", 0x0297, "curlyand", 0x22cf, "curlyor", 0x22ce, "currency", 0x00a4, "cyrBreve", 0xf6d1, "cyrFlex", 0xf6d2, "cyrbreve", 0xf6d4, "cyrflex", 0xf6d5, "d", 0x0064, "daarmenian", 0x0564, "dabengali", 0x09a6, "dadarabic", 0x0636, "dadeva", 0x0926, "dadfinalarabic", 0xfebe, "dadinitialarabic", 0xfebf, "dadmedialarabic", 0xfec0, "dagesh", 0x05bc, "dageshhebrew", 0x05bc, "dagger", 0x2020, "daggerdbl", 0x2021, "dagujarati", 0x0aa6, "dagurmukhi", 0x0a26, "dahiragana", 0x3060, "dakatakana", 0x30c0, "dalarabic", 0x062f, "dalet", 0x05d3, "daletdagesh", 0xfb33, "daletdageshhebrew", 0xfb33, "dalethebrew", 0x05d3, "dalfinalarabic", 0xfeaa, "dammaarabic", 0x064f, "dammalowarabic", 0x064f, "dammatanaltonearabic", 0x064c, "dammatanarabic", 0x064c, "danda", 0x0964, "dargahebrew", 0x05a7, "dargalefthebrew", 0x05a7, "dasiapneumatacyrilliccmb", 0x0485, "dblGrave", 0xf6d3, "dblanglebracketleft", 0x300a, "dblanglebracketleftvertical", 0xfe3d, "dblanglebracketright", 0x300b, "dblanglebracketrightvertical", 0xfe3e, "dblarchinvertedbelowcmb", 0x032b, "dblarrowleft", 0x21d4, "dblarrowright", 0x21d2, "dbldanda", 0x0965, "dblgrave", 0xf6d6, "dblgravecmb", 0x030f, "dblintegral", 0x222c, "dbllowline", 0x2017, "dbllowlinecmb", 0x0333, "dbloverlinecmb", 0x033f, "dblprimemod", 0x02ba, "dblverticalbar", 0x2016, "dblverticallineabovecmb", 0x030e, "dbopomofo", 0x3109, "dbsquare", 0x33c8, "dcaron", 0x010f, "dcedilla", 0x1e11, "dcircle", 0x24d3, "dcircumflexbelow", 0x1e13, "dcroat", 0x0111, "ddabengali", 0x09a1, "ddadeva", 0x0921, "ddagujarati", 0x0aa1, "ddagurmukhi", 0x0a21, "ddalarabic", 0x0688, "ddalfinalarabic", 0xfb89, "dddhadeva", 0x095c, "ddhabengali", 0x09a2, "ddhadeva", 0x0922, "ddhagujarati", 0x0aa2, "ddhagurmukhi", 0x0a22, "ddotaccent", 0x1e0b, "ddotbelow", 0x1e0d, "decimalseparatorarabic", 0x066b, "decimalseparatorpersian", 0x066b, "decyrillic", 0x0434, "degree", 0x00b0, "dehihebrew", 0x05ad, "dehiragana", 0x3067, "deicoptic", 0x03ef, "dekatakana", 0x30c7, "deleteleft", 0x232b, "deleteright", 0x2326, "delta", 0x03b4, "deltaturned", 0x018d, "denominatorminusonenumeratorbengali", 0x09f8, "dezh", 0x02a4, "dhabengali", 0x09a7, "dhadeva", 0x0927, "dhagujarati", 0x0aa7, "dhagurmukhi", 0x0a27, "dhook", 0x0257, "dialytikatonos", 0x0385, "dialytikatonoscmb", 0x0344, "diamond", 0x2666, "diamondsuitwhite", 0x2662, "dieresis", 0x00a8, "dieresisacute", 0xf6d7, "dieresisbelowcmb", 0x0324, "dieresiscmb", 0x0308, "dieresisgrave", 0xf6d8, "dieresistonos", 0x0385, "dihiragana", 0x3062, "dikatakana", 0x30c2, "dittomark", 0x3003, "divide", 0x00f7, "divides", 0x2223, "divisionslash", 0x2215, "djecyrillic", 0x0452, "dkshade", 0x2593, "dlinebelow", 0x1e0f, "dlsquare", 0x3397, "dmacron", 0x0111, "dmonospace", 0xff44, "dnblock", 0x2584, "dochadathai", 0x0e0e, "dodekthai", 0x0e14, "dohiragana", 0x3069, "dokatakana", 0x30c9, "dollar", 0x0024, "dollarinferior", 0xf6e3, "dollarmonospace", 0xff04, "dollaroldstyle", 0xf724, "dollarsmall", 0xfe69, "dollarsuperior", 0xf6e4, "dong", 0x20ab, "dorusquare", 0x3326, "dotaccent", 0x02d9, "dotaccentcmb", 0x0307, "dotbelowcmb", 0x0323, "dotbelowcomb", 0x0323, "dotkatakana", 0x30fb, "dotlessi", 0x0131, "dotlessj", 0xf6be, "dotlessjstrokehook", 0x0284, "dotmath", 0x22c5, "dottedcircle", 0x25cc, "doubleyodpatah", 0xfb1f, "doubleyodpatahhebrew", 0xfb1f, "downtackbelowcmb", 0x031e, "downtackmod", 0x02d5, "dparen", 0x249f, "dsuperior", 0xf6eb, "dtail", 0x0256, "dtopbar", 0x018c, "duhiragana", 0x3065, "dukatakana", 0x30c5, "dz", 0x01f3, "dzaltone", 0x02a3, "dzcaron", 0x01c6, "dzcurl", 0x02a5, "dzeabkhasiancyrillic", 0x04e1, "dzecyrillic", 0x0455, "dzhecyrillic", 0x045f, "e", 0x0065, "eacute", 0x00e9, "earth", 0x2641, "ebengali", 0x098f, "ebopomofo", 0x311c, "ebreve", 0x0115, "ecandradeva", 0x090d, "ecandragujarati", 0x0a8d, "ecandravowelsigndeva", 0x0945, "ecandravowelsigngujarati", 0x0ac5, "ecaron", 0x011b, "ecedillabreve", 0x1e1d, "echarmenian", 0x0565, "echyiwnarmenian", 0x0587, "ecircle", 0x24d4, "ecircumflex", 0x00ea, "ecircumflexacute", 0x1ebf, "ecircumflexbelow", 0x1e19, "ecircumflexdotbelow", 0x1ec7, "ecircumflexgrave", 0x1ec1, "ecircumflexhookabove", 0x1ec3, "ecircumflextilde", 0x1ec5, "ecyrillic", 0x0454, "edblgrave", 0x0205, "edeva", 0x090f, "edieresis", 0x00eb, "edot", 0x0117, "edotaccent", 0x0117, "edotbelow", 0x1eb9, "eegurmukhi", 0x0a0f, "eematragurmukhi", 0x0a47, "efcyrillic", 0x0444, "egrave", 0x00e8, "egujarati", 0x0a8f, "eharmenian", 0x0567, "ehbopomofo", 0x311d, "ehiragana", 0x3048, "ehookabove", 0x1ebb, "eibopomofo", 0x311f, "eight", 0x0038, "eightarabic", 0x0668, "eightbengali", 0x09ee, "eightcircle", 0x2467, "eightcircleinversesansserif", 0x2791, "eightdeva", 0x096e, "eighteencircle", 0x2471, "eighteenparen", 0x2485, "eighteenperiod", 0x2499, "eightgujarati", 0x0aee, "eightgurmukhi", 0x0a6e, "eighthackarabic", 0x0668, "eighthangzhou", 0x3028, "eighthnotebeamed", 0x266b, "eightideographicparen", 0x3227, "eightinferior", 0x2088, "eightmonospace", 0xff18, "eightoldstyle", 0xf738, "eightparen", 0x247b, "eightperiod", 0x248f, "eightpersian", 0x06f8, "eightroman", 0x2177, "eightsuperior", 0x2078, "eightthai", 0x0e58, "einvertedbreve", 0x0207, "eiotifiedcyrillic", 0x0465, "ekatakana", 0x30a8, "ekatakanahalfwidth", 0xff74, "ekonkargurmukhi", 0x0a74, "ekorean", 0x3154, "elcyrillic", 0x043b, "element", 0x2208, "elevencircle", 0x246a, "elevenparen", 0x247e, "elevenperiod", 0x2492, "elevenroman", 0x217a, "ellipsis", 0x2026, "ellipsisvertical", 0x22ee, "emacron", 0x0113, "emacronacute", 0x1e17, "emacrongrave", 0x1e15, "emcyrillic", 0x043c, "emdash", 0x2014, "emdashvertical", 0xfe31, "emonospace", 0xff45, "emphasismarkarmenian", 0x055b, "emptyset", 0x2205, "enbopomofo", 0x3123, "encyrillic", 0x043d, "endash", 0x2013, "endashvertical", 0xfe32, "endescendercyrillic", 0x04a3, "eng", 0x014b, "engbopomofo", 0x3125, "enghecyrillic", 0x04a5, "enhookcyrillic", 0x04c8, "enspace", 0x2002, "eogonek", 0x0119, "eokorean", 0x3153, "eopen", 0x025b, "eopenclosed", 0x029a, "eopenreversed", 0x025c, "eopenreversedclosed", 0x025e, "eopenreversedhook", 0x025d, "eparen", 0x24a0, "epsilon", 0x03b5, "epsilontonos", 0x03ad, "equal", 0x003d, "equalmonospace", 0xff1d, "equalsmall", 0xfe66, "equalsuperior", 0x207c, "equivalence", 0x2261, "erbopomofo", 0x3126, "ercyrillic", 0x0440, "ereversed", 0x0258, "ereversedcyrillic", 0x044d, "escyrillic", 0x0441, "esdescendercyrillic", 0x04ab, "esh", 0x0283, "eshcurl", 0x0286, "eshortdeva", 0x090e, "eshortvowelsigndeva", 0x0946, "eshreversedloop", 0x01aa, "eshsquatreversed", 0x0285, "esmallhiragana", 0x3047, "esmallkatakana", 0x30a7, "esmallkatakanahalfwidth", 0xff6a, "estimated", 0x212e, "esuperior", 0xf6ec, "eta", 0x03b7, "etarmenian", 0x0568, "etatonos", 0x03ae, "eth", 0x00f0, "etilde", 0x1ebd, "etildebelow", 0x1e1b, "etnahtafoukhhebrew", 0x0591, "etnahtafoukhlefthebrew", 0x0591, "etnahtahebrew", 0x0591, "etnahtalefthebrew", 0x0591, "eturned", 0x01dd, "eukorean", 0x3161, "euro", 0x20ac, "evowelsignbengali", 0x09c7, "evowelsigndeva", 0x0947, "evowelsigngujarati", 0x0ac7, "exclam", 0x0021, "exclamarmenian", 0x055c, "exclamdbl", 0x203c, "exclamdown", 0x00a1, "exclamdownsmall", 0xf7a1, "exclammonospace", 0xff01, "exclamsmall", 0xf721, "existential", 0x2203, "ezh", 0x0292, "ezhcaron", 0x01ef, "ezhcurl", 0x0293, "ezhreversed", 0x01b9, "ezhtail", 0x01ba, "f", 0x0066, "fadeva", 0x095e, "fagurmukhi", 0x0a5e, "fahrenheit", 0x2109, "fathaarabic", 0x064e, "fathalowarabic", 0x064e, "fathatanarabic", 0x064b, "fbopomofo", 0x3108, "fcircle", 0x24d5, "fdotaccent", 0x1e1f, "feharabic", 0x0641, "feharmenian", 0x0586, "fehfinalarabic", 0xfed2, "fehinitialarabic", 0xfed3, "fehmedialarabic", 0xfed4, "feicoptic", 0x03e5, "female", 0x2640, "ff", 0xfb00, "f_f", 0xfb00, "ffi", 0xfb03, "ffl", 0xfb04, "fi", 0xfb01, "fifteencircle", 0x246e, "fifteenparen", 0x2482, "fifteenperiod", 0x2496, "figuredash", 0x2012, "filledbox", 0x25a0, "filledrect", 0x25ac, "finalkaf", 0x05da, "finalkafdagesh", 0xfb3a, "finalkafdageshhebrew", 0xfb3a, "finalkafhebrew", 0x05da, "finalmem", 0x05dd, "finalmemhebrew", 0x05dd, "finalnun", 0x05df, "finalnunhebrew", 0x05df, "finalpe", 0x05e3, "finalpehebrew", 0x05e3, "finaltsadi", 0x05e5, "finaltsadihebrew", 0x05e5, "firsttonechinese", 0x02c9, "fisheye", 0x25c9, "fitacyrillic", 0x0473, "five", 0x0035, "fivearabic", 0x0665, "fivebengali", 0x09eb, "fivecircle", 0x2464, "fivecircleinversesansserif", 0x278e, "fivedeva", 0x096b, "fiveeighths", 0x215d, "fivegujarati", 0x0aeb, "fivegurmukhi", 0x0a6b, "fivehackarabic", 0x0665, "fivehangzhou", 0x3025, "fiveideographicparen", 0x3224, "fiveinferior", 0x2085, "fivemonospace", 0xff15, "fiveoldstyle", 0xf735, "fiveparen", 0x2478, "fiveperiod", 0x248c, "fivepersian", 0x06f5, "fiveroman", 0x2174, "fivesuperior", 0x2075, "fivethai", 0x0e55, "fl", 0xfb02, "florin", 0x0192, "fmonospace", 0xff46, "fmsquare", 0x3399, "fofanthai", 0x0e1f, "fofathai", 0x0e1d, "fongmanthai", 0x0e4f, "forall", 0x2200, "four", 0x0034, "fourarabic", 0x0664, "fourbengali", 0x09ea, "fourcircle", 0x2463, "fourcircleinversesansserif", 0x278d, "fourdeva", 0x096a, "fourgujarati", 0x0aea, "fourgurmukhi", 0x0a6a, "fourhackarabic", 0x0664, "fourhangzhou", 0x3024, "fourideographicparen", 0x3223, "fourinferior", 0x2084, "fourmonospace", 0xff14, "fournumeratorbengali", 0x09f7, "fouroldstyle", 0xf734, "fourparen", 0x2477, "fourperiod", 0x248b, "fourpersian", 0x06f4, "fourroman", 0x2173, "foursuperior", 0x2074, "fourteencircle", 0x246d, "fourteenparen", 0x2481, "fourteenperiod", 0x2495, "fourthai", 0x0e54, "fourthtonechinese", 0x02cb, "fparen", 0x24a1, "fraction", 0x2044, "franc", 0x20a3, "g", 0x0067, "gabengali", 0x0997, "gacute", 0x01f5, "gadeva", 0x0917, "gafarabic", 0x06af, "gaffinalarabic", 0xfb93, "gafinitialarabic", 0xfb94, "gafmedialarabic", 0xfb95, "gagujarati", 0x0a97, "gagurmukhi", 0x0a17, "gahiragana", 0x304c, "gakatakana", 0x30ac, "gamma", 0x03b3, "gammalatinsmall", 0x0263, "gammasuperior", 0x02e0, "gangiacoptic", 0x03eb, "gbopomofo", 0x310d, "gbreve", 0x011f, "gcaron", 0x01e7, "gcedilla", 0x0123, "gcircle", 0x24d6, "gcircumflex", 0x011d, "gcommaaccent", 0x0123, "gdot", 0x0121, "gdotaccent", 0x0121, "gecyrillic", 0x0433, "gehiragana", 0x3052, "gekatakana", 0x30b2, "geometricallyequal", 0x2251, "gereshaccenthebrew", 0x059c, "gereshhebrew", 0x05f3, "gereshmuqdamhebrew", 0x059d, "germandbls", 0x00df, "gershayimaccenthebrew", 0x059e, "gershayimhebrew", 0x05f4, "getamark", 0x3013, "ghabengali", 0x0998, "ghadarmenian", 0x0572, "ghadeva", 0x0918, "ghagujarati", 0x0a98, "ghagurmukhi", 0x0a18, "ghainarabic", 0x063a, "ghainfinalarabic", 0xfece, "ghaininitialarabic", 0xfecf, "ghainmedialarabic", 0xfed0, "ghemiddlehookcyrillic", 0x0495, "ghestrokecyrillic", 0x0493, "gheupturncyrillic", 0x0491, "ghhadeva", 0x095a, "ghhagurmukhi", 0x0a5a, "ghook", 0x0260, "ghzsquare", 0x3393, "gihiragana", 0x304e, "gikatakana", 0x30ae, "gimarmenian", 0x0563, "gimel", 0x05d2, "gimeldagesh", 0xfb32, "gimeldageshhebrew", 0xfb32, "gimelhebrew", 0x05d2, "gjecyrillic", 0x0453, "glottalinvertedstroke", 0x01be, "glottalstop", 0x0294, "glottalstopinverted", 0x0296, "glottalstopmod", 0x02c0, "glottalstopreversed", 0x0295, "glottalstopreversedmod", 0x02c1, "glottalstopreversedsuperior", 0x02e4, "glottalstopstroke", 0x02a1, "glottalstopstrokereversed", 0x02a2, "gmacron", 0x1e21, "gmonospace", 0xff47, "gohiragana", 0x3054, "gokatakana", 0x30b4, "gparen", 0x24a2, "gpasquare", 0x33ac, "gradient", 0x2207, "grave", 0x0060, "gravebelowcmb", 0x0316, "gravecmb", 0x0300, "gravecomb", 0x0300, "gravedeva", 0x0953, "gravelowmod", 0x02ce, "gravemonospace", 0xff40, "gravetonecmb", 0x0340, "greater", 0x003e, "greaterequal", 0x2265, "greaterequalorless", 0x22db, "greatermonospace", 0xff1e, "greaterorequivalent", 0x2273, "greaterorless", 0x2277, "greateroverequal", 0x2267, "greatersmall", 0xfe65, "gscript", 0x0261, "gstroke", 0x01e5, "guhiragana", 0x3050, "guillemotleft", 0x00ab, "guillemotright", 0x00bb, "guilsinglleft", 0x2039, "guilsinglright", 0x203a, "gukatakana", 0x30b0, "guramusquare", 0x3318, "gysquare", 0x33c9, "h", 0x0068, "haabkhasiancyrillic", 0x04a9, "haaltonearabic", 0x06c1, "habengali", 0x09b9, "hadescendercyrillic", 0x04b3, "hadeva", 0x0939, "hagujarati", 0x0ab9, "hagurmukhi", 0x0a39, "haharabic", 0x062d, "hahfinalarabic", 0xfea2, "hahinitialarabic", 0xfea3, "hahiragana", 0x306f, "hahmedialarabic", 0xfea4, "haitusquare", 0x332a, "hakatakana", 0x30cf, "hakatakanahalfwidth", 0xff8a, "halantgurmukhi", 0x0a4d, "hamzaarabic", 0x0621, "hamzalowarabic", 0x0621, "hangulfiller", 0x3164, "hardsigncyrillic", 0x044a, "harpoonleftbarbup", 0x21bc, "harpoonrightbarbup", 0x21c0, "hasquare", 0x33ca, "hatafpatah", 0x05b2, "hatafpatah16", 0x05b2, "hatafpatah23", 0x05b2, "hatafpatah2f", 0x05b2, "hatafpatahhebrew", 0x05b2, "hatafpatahnarrowhebrew", 0x05b2, "hatafpatahquarterhebrew", 0x05b2, "hatafpatahwidehebrew", 0x05b2, "hatafqamats", 0x05b3, "hatafqamats1b", 0x05b3, "hatafqamats28", 0x05b3, "hatafqamats34", 0x05b3, "hatafqamatshebrew", 0x05b3, "hatafqamatsnarrowhebrew", 0x05b3, "hatafqamatsquarterhebrew", 0x05b3, "hatafqamatswidehebrew", 0x05b3, "hatafsegol", 0x05b1, "hatafsegol17", 0x05b1, "hatafsegol24", 0x05b1, "hatafsegol30", 0x05b1, "hatafsegolhebrew", 0x05b1, "hatafsegolnarrowhebrew", 0x05b1, "hatafsegolquarterhebrew", 0x05b1, "hatafsegolwidehebrew", 0x05b1, "hbar", 0x0127, "hbopomofo", 0x310f, "hbrevebelow", 0x1e2b, "hcedilla", 0x1e29, "hcircle", 0x24d7, "hcircumflex", 0x0125, "hdieresis", 0x1e27, "hdotaccent", 0x1e23, "hdotbelow", 0x1e25, "he", 0x05d4, "heart", 0x2665, "heartsuitblack", 0x2665, "heartsuitwhite", 0x2661, "hedagesh", 0xfb34, "hedageshhebrew", 0xfb34, "hehaltonearabic", 0x06c1, "heharabic", 0x0647, "hehebrew", 0x05d4, "hehfinalaltonearabic", 0xfba7, "hehfinalalttwoarabic", 0xfeea, "hehfinalarabic", 0xfeea, "hehhamzaabovefinalarabic", 0xfba5, "hehhamzaaboveisolatedarabic", 0xfba4, "hehinitialaltonearabic", 0xfba8, "hehinitialarabic", 0xfeeb, "hehiragana", 0x3078, "hehmedialaltonearabic", 0xfba9, "hehmedialarabic", 0xfeec, "heiseierasquare", 0x337b, "hekatakana", 0x30d8, "hekatakanahalfwidth", 0xff8d, "hekutaarusquare", 0x3336, "henghook", 0x0267, "herutusquare", 0x3339, "het", 0x05d7, "hethebrew", 0x05d7, "hhook", 0x0266, "hhooksuperior", 0x02b1, "hieuhacirclekorean", 0x327b, "hieuhaparenkorean", 0x321b, "hieuhcirclekorean", 0x326d, "hieuhkorean", 0x314e, "hieuhparenkorean", 0x320d, "hihiragana", 0x3072, "hikatakana", 0x30d2, "hikatakanahalfwidth", 0xff8b, "hiriq", 0x05b4, "hiriq14", 0x05b4, "hiriq21", 0x05b4, "hiriq2d", 0x05b4, "hiriqhebrew", 0x05b4, "hiriqnarrowhebrew", 0x05b4, "hiriqquarterhebrew", 0x05b4, "hiriqwidehebrew", 0x05b4, "hlinebelow", 0x1e96, "hmonospace", 0xff48, "hoarmenian", 0x0570, "hohipthai", 0x0e2b, "hohiragana", 0x307b, "hokatakana", 0x30db, "hokatakanahalfwidth", 0xff8e, "holam", 0x05b9, "holam19", 0x05b9, "holam26", 0x05b9, "holam32", 0x05b9, "holamhebrew", 0x05b9, "holamnarrowhebrew", 0x05b9, "holamquarterhebrew", 0x05b9, "holamwidehebrew", 0x05b9, "honokhukthai", 0x0e2e, "hookabovecomb", 0x0309, "hookcmb", 0x0309, "hookpalatalizedbelowcmb", 0x0321, "hookretroflexbelowcmb", 0x0322, "hoonsquare", 0x3342, "horicoptic", 0x03e9, "horizontalbar", 0x2015, "horncmb", 0x031b, "hotsprings", 0x2668, "house", 0x2302, "hparen", 0x24a3, "hsuperior", 0x02b0, "hturned", 0x0265, "huhiragana", 0x3075, "huiitosquare", 0x3333, "hukatakana", 0x30d5, "hukatakanahalfwidth", 0xff8c, "hungarumlaut", 0x02dd, "hungarumlautcmb", 0x030b, "hv", 0x0195, "hyphen", 0x002d, "hypheninferior", 0xf6e5, "hyphenmonospace", 0xff0d, "hyphensmall", 0xfe63, "hyphensuperior", 0xf6e6, "hyphentwo", 0x2010, "i", 0x0069, "iacute", 0x00ed, "iacyrillic", 0x044f, "ibengali", 0x0987, "ibopomofo", 0x3127, "ibreve", 0x012d, "icaron", 0x01d0, "icircle", 0x24d8, "icircumflex", 0x00ee, "icyrillic", 0x0456, "idblgrave", 0x0209, "ideographearthcircle", 0x328f, "ideographfirecircle", 0x328b, "ideographicallianceparen", 0x323f, "ideographiccallparen", 0x323a, "ideographiccentrecircle", 0x32a5, "ideographicclose", 0x3006, "ideographiccomma", 0x3001, "ideographiccommaleft", 0xff64, "ideographiccongratulationparen", 0x3237, "ideographiccorrectcircle", 0x32a3, "ideographicearthparen", 0x322f, "ideographicenterpriseparen", 0x323d, "ideographicexcellentcircle", 0x329d, "ideographicfestivalparen", 0x3240, "ideographicfinancialcircle", 0x3296, "ideographicfinancialparen", 0x3236, "ideographicfireparen", 0x322b, "ideographichaveparen", 0x3232, "ideographichighcircle", 0x32a4, "ideographiciterationmark", 0x3005, "ideographiclaborcircle", 0x3298, "ideographiclaborparen", 0x3238, "ideographicleftcircle", 0x32a7, "ideographiclowcircle", 0x32a6, "ideographicmedicinecircle", 0x32a9, "ideographicmetalparen", 0x322e, "ideographicmoonparen", 0x322a, "ideographicnameparen", 0x3234, "ideographicperiod", 0x3002, "ideographicprintcircle", 0x329e, "ideographicreachparen", 0x3243, "ideographicrepresentparen", 0x3239, "ideographicresourceparen", 0x323e, "ideographicrightcircle", 0x32a8, "ideographicsecretcircle", 0x3299, "ideographicselfparen", 0x3242, "ideographicsocietyparen", 0x3233, "ideographicspace", 0x3000, "ideographicspecialparen", 0x3235, "ideographicstockparen", 0x3231, "ideographicstudyparen", 0x323b, "ideographicsunparen", 0x3230, "ideographicsuperviseparen", 0x323c, "ideographicwaterparen", 0x322c, "ideographicwoodparen", 0x322d, "ideographiczero", 0x3007, "ideographmetalcircle", 0x328e, "ideographmooncircle", 0x328a, "ideographnamecircle", 0x3294, "ideographsuncircle", 0x3290, "ideographwatercircle", 0x328c, "ideographwoodcircle", 0x328d, "ideva", 0x0907, "idieresis", 0x00ef, "idieresisacute", 0x1e2f, "idieresiscyrillic", 0x04e5, "idotbelow", 0x1ecb, "iebrevecyrillic", 0x04d7, "iecyrillic", 0x0435, "ieungacirclekorean", 0x3275, "ieungaparenkorean", 0x3215, "ieungcirclekorean", 0x3267, "ieungkorean", 0x3147, "ieungparenkorean", 0x3207, "igrave", 0x00ec, "igujarati", 0x0a87, "igurmukhi", 0x0a07, "ihiragana", 0x3044, "ihookabove", 0x1ec9, "iibengali", 0x0988, "iicyrillic", 0x0438, "iideva", 0x0908, "iigujarati", 0x0a88, "iigurmukhi", 0x0a08, "iimatragurmukhi", 0x0a40, "iinvertedbreve", 0x020b, "iishortcyrillic", 0x0439, "iivowelsignbengali", 0x09c0, "iivowelsigndeva", 0x0940, "iivowelsigngujarati", 0x0ac0, "ij", 0x0133, "ikatakana", 0x30a4, "ikatakanahalfwidth", 0xff72, "ikorean", 0x3163, "ilde", 0x02dc, "iluyhebrew", 0x05ac, "imacron", 0x012b, "imacroncyrillic", 0x04e3, "imageorapproximatelyequal", 0x2253, "imatragurmukhi", 0x0a3f, "imonospace", 0xff49, "increment", 0x2206, "infinity", 0x221e, "iniarmenian", 0x056b, "integral", 0x222b, "integralbottom", 0x2321, "integralbt", 0x2321, "integralex", 0xf8f5, "integraltop", 0x2320, "integraltp", 0x2320, "intersection", 0x2229, "intisquare", 0x3305, "invbullet", 0x25d8, "invcircle", 0x25d9, "invsmileface", 0x263b, "iocyrillic", 0x0451, "iogonek", 0x012f, "iota", 0x03b9, "iotadieresis", 0x03ca, "iotadieresistonos", 0x0390, "iotalatin", 0x0269, "iotatonos", 0x03af, "iparen", 0x24a4, "irigurmukhi", 0x0a72, "ismallhiragana", 0x3043, "ismallkatakana", 0x30a3, "ismallkatakanahalfwidth", 0xff68, "issharbengali", 0x09fa, "istroke", 0x0268, "isuperior", 0xf6ed, "iterationhiragana", 0x309d, "iterationkatakana", 0x30fd, "itilde", 0x0129, "itildebelow", 0x1e2d, "iubopomofo", 0x3129, "iucyrillic", 0x044e, "ivowelsignbengali", 0x09bf, "ivowelsigndeva", 0x093f, "ivowelsigngujarati", 0x0abf, "izhitsacyrillic", 0x0475, "izhitsadblgravecyrillic", 0x0477, "j", 0x006a, "jaarmenian", 0x0571, "jabengali", 0x099c, "jadeva", 0x091c, "jagujarati", 0x0a9c, "jagurmukhi", 0x0a1c, "jbopomofo", 0x3110, "jcaron", 0x01f0, "jcircle", 0x24d9, "jcircumflex", 0x0135, "jcrossedtail", 0x029d, "jdotlessstroke", 0x025f, "jecyrillic", 0x0458, "jeemarabic", 0x062c, "jeemfinalarabic", 0xfe9e, "jeeminitialarabic", 0xfe9f, "jeemmedialarabic", 0xfea0, "jeharabic", 0x0698, "jehfinalarabic", 0xfb8b, "jhabengali", 0x099d, "jhadeva", 0x091d, "jhagujarati", 0x0a9d, "jhagurmukhi", 0x0a1d, "jheharmenian", 0x057b, "jis", 0x3004, "jmonospace", 0xff4a, "jparen", 0x24a5, "jsuperior", 0x02b2, "k", 0x006b, "kabashkircyrillic", 0x04a1, "kabengali", 0x0995, "kacute", 0x1e31, "kacyrillic", 0x043a, "kadescendercyrillic", 0x049b, "kadeva", 0x0915, "kaf", 0x05db, "kafarabic", 0x0643, "kafdagesh", 0xfb3b, "kafdageshhebrew", 0xfb3b, "kaffinalarabic", 0xfeda, "kafhebrew", 0x05db, "kafinitialarabic", 0xfedb, "kafmedialarabic", 0xfedc, "kafrafehebrew", 0xfb4d, "kagujarati", 0x0a95, "kagurmukhi", 0x0a15, "kahiragana", 0x304b, "kahookcyrillic", 0x04c4, "kakatakana", 0x30ab, "kakatakanahalfwidth", 0xff76, "kappa", 0x03ba, "kappasymbolgreek", 0x03f0, "kapyeounmieumkorean", 0x3171, "kapyeounphieuphkorean", 0x3184, "kapyeounpieupkorean", 0x3178, "kapyeounssangpieupkorean", 0x3179, "karoriisquare", 0x330d, "kashidaautoarabic", 0x0640, "kashidaautonosidebearingarabic", 0x0640, "kasmallkatakana", 0x30f5, "kasquare", 0x3384, "kasraarabic", 0x0650, "kasratanarabic", 0x064d, "kastrokecyrillic", 0x049f, "katahiraprolongmarkhalfwidth", 0xff70, "kaverticalstrokecyrillic", 0x049d, "kbopomofo", 0x310e, "kcalsquare", 0x3389, "kcaron", 0x01e9, "kcedilla", 0x0137, "kcircle", 0x24da, "kcommaaccent", 0x0137, "kdotbelow", 0x1e33, "keharmenian", 0x0584, "kehiragana", 0x3051, "kekatakana", 0x30b1, "kekatakanahalfwidth", 0xff79, "kenarmenian", 0x056f, "kesmallkatakana", 0x30f6, "kgreenlandic", 0x0138, "khabengali", 0x0996, "khacyrillic", 0x0445, "khadeva", 0x0916, "khagujarati", 0x0a96, "khagurmukhi", 0x0a16, "khaharabic", 0x062e, "khahfinalarabic", 0xfea6, "khahinitialarabic", 0xfea7, "khahmedialarabic", 0xfea8, "kheicoptic", 0x03e7, "khhadeva", 0x0959, "khhagurmukhi", 0x0a59, "khieukhacirclekorean", 0x3278, "khieukhaparenkorean", 0x3218, "khieukhcirclekorean", 0x326a, "khieukhkorean", 0x314b, "khieukhparenkorean", 0x320a, "khokhaithai", 0x0e02, "khokhonthai", 0x0e05, "khokhuatthai", 0x0e03, "khokhwaithai", 0x0e04, "khomutthai", 0x0e5b, "khook", 0x0199, "khorakhangthai", 0x0e06, "khzsquare", 0x3391, "kihiragana", 0x304d, "kikatakana", 0x30ad, "kikatakanahalfwidth", 0xff77, "kiroguramusquare", 0x3315, "kiromeetorusquare", 0x3316, "kirosquare", 0x3314, "kiyeokacirclekorean", 0x326e, "kiyeokaparenkorean", 0x320e, "kiyeokcirclekorean", 0x3260, "kiyeokkorean", 0x3131, "kiyeokparenkorean", 0x3200, "kiyeoksioskorean", 0x3133, "kjecyrillic", 0x045c, "klinebelow", 0x1e35, "klsquare", 0x3398, "kmcubedsquare", 0x33a6, "kmonospace", 0xff4b, "kmsquaredsquare", 0x33a2, "kohiragana", 0x3053, "kohmsquare", 0x33c0, "kokaithai", 0x0e01, "kokatakana", 0x30b3, "kokatakanahalfwidth", 0xff7a, "kooposquare", 0x331e, "koppacyrillic", 0x0481, "koreanstandardsymbol", 0x327f, "koroniscmb", 0x0343, "kparen", 0x24a6, "kpasquare", 0x33aa, "ksicyrillic", 0x046f, "ktsquare", 0x33cf, "kturned", 0x029e, "kuhiragana", 0x304f, "kukatakana", 0x30af, "kukatakanahalfwidth", 0xff78, "kvsquare", 0x33b8, "kwsquare", 0x33be, "l", 0x006c, "labengali", 0x09b2, "lacute", 0x013a, "ladeva", 0x0932, "lagujarati", 0x0ab2, "lagurmukhi", 0x0a32, "lakkhangyaothai", 0x0e45, "lamaleffinalarabic", 0xfefc, "lamalefhamzaabovefinalarabic", 0xfef8, "lamalefhamzaaboveisolatedarabic", 0xfef7, "lamalefhamzabelowfinalarabic", 0xfefa, "lamalefhamzabelowisolatedarabic", 0xfef9, "lamalefisolatedarabic", 0xfefb, "lamalefmaddaabovefinalarabic", 0xfef6, "lamalefmaddaaboveisolatedarabic", 0xfef5, "lamarabic", 0x0644, "lambda", 0x03bb, "lambdastroke", 0x019b, "lamed", 0x05dc, "lameddagesh", 0xfb3c, "lameddageshhebrew", 0xfb3c, "lamedhebrew", 0x05dc, "lamfinalarabic", 0xfede, "lamhahinitialarabic", 0xfcca, "laminitialarabic", 0xfedf, "lamjeeminitialarabic", 0xfcc9, "lamkhahinitialarabic", 0xfccb, "lamlamhehisolatedarabic", 0xfdf2, "lammedialarabic", 0xfee0, "lammeemhahinitialarabic", 0xfd88, "lammeeminitialarabic", 0xfccc, "largecircle", 0x25ef, "lbar", 0x019a, "lbelt", 0x026c, "lbopomofo", 0x310c, "lcaron", 0x013e, "lcedilla", 0x013c, "lcircle", 0x24db, "lcircumflexbelow", 0x1e3d, "lcommaaccent", 0x013c, "ldot", 0x0140, "ldotaccent", 0x0140, "ldotbelow", 0x1e37, "ldotbelowmacron", 0x1e39, "leftangleabovecmb", 0x031a, "lefttackbelowcmb", 0x0318, "less", 0x003c, "lessequal", 0x2264, "lessequalorgreater", 0x22da, "lessmonospace", 0xff1c, "lessorequivalent", 0x2272, "lessorgreater", 0x2276, "lessoverequal", 0x2266, "lesssmall", 0xfe64, "lezh", 0x026e, "lfblock", 0x258c, "lhookretroflex", 0x026d, "lira", 0x20a4, "liwnarmenian", 0x056c, "lj", 0x01c9, "ljecyrillic", 0x0459, "ll", 0xf6c0, "lladeva", 0x0933, "llagujarati", 0x0ab3, "llinebelow", 0x1e3b, "llladeva", 0x0934, "llvocalicbengali", 0x09e1, "llvocalicdeva", 0x0961, "llvocalicvowelsignbengali", 0x09e3, "llvocalicvowelsigndeva", 0x0963, "lmiddletilde", 0x026b, "lmonospace", 0xff4c, "lmsquare", 0x33d0, "lochulathai", 0x0e2c, "logicaland", 0x2227, "logicalnot", 0x00ac, "logicalnotreversed", 0x2310, "logicalor", 0x2228, "lolingthai", 0x0e25, "longs", 0x017f, "lowlinecenterline", 0xfe4e, "lowlinecmb", 0x0332, "lowlinedashed", 0xfe4d, "lozenge", 0x25ca, "lparen", 0x24a7, "lslash", 0x0142, "lsquare", 0x2113, "lsuperior", 0xf6ee, "ltshade", 0x2591, "luthai", 0x0e26, "lvocalicbengali", 0x098c, "lvocalicdeva", 0x090c, "lvocalicvowelsignbengali", 0x09e2, "lvocalicvowelsigndeva", 0x0962, "lxsquare", 0x33d3, "m", 0x006d, "mabengali", 0x09ae, "macron", 0x00af, "macronbelowcmb", 0x0331, "macroncmb", 0x0304, "macronlowmod", 0x02cd, "macronmonospace", 0xffe3, "macute", 0x1e3f, "madeva", 0x092e, "magujarati", 0x0aae, "magurmukhi", 0x0a2e, "mahapakhhebrew", 0x05a4, "mahapakhlefthebrew", 0x05a4, "mahiragana", 0x307e, "maichattawalowleftthai", 0xf895, "maichattawalowrightthai", 0xf894, "maichattawathai", 0x0e4b, "maichattawaupperleftthai", 0xf893, "maieklowleftthai", 0xf88c, "maieklowrightthai", 0xf88b, "maiekthai", 0x0e48, "maiekupperleftthai", 0xf88a, "maihanakatleftthai", 0xf884, "maihanakatthai", 0x0e31, "maitaikhuleftthai", 0xf889, "maitaikhuthai", 0x0e47, "maitholowleftthai", 0xf88f, "maitholowrightthai", 0xf88e, "maithothai", 0x0e49, "maithoupperleftthai", 0xf88d, "maitrilowleftthai", 0xf892, "maitrilowrightthai", 0xf891, "maitrithai", 0x0e4a, "maitriupperleftthai", 0xf890, "maiyamokthai", 0x0e46, "makatakana", 0x30de, "makatakanahalfwidth", 0xff8f, "male", 0x2642, "mansyonsquare", 0x3347, "maqafhebrew", 0x05be, "mars", 0x2642, "masoracirclehebrew", 0x05af, "masquare", 0x3383, "mbopomofo", 0x3107, "mbsquare", 0x33d4, "mcircle", 0x24dc, "mcubedsquare", 0x33a5, "mdotaccent", 0x1e41, "mdotbelow", 0x1e43, "meemarabic", 0x0645, "meemfinalarabic", 0xfee2, "meeminitialarabic", 0xfee3, "meemmedialarabic", 0xfee4, "meemmeeminitialarabic", 0xfcd1, "meemmeemisolatedarabic", 0xfc48, "meetorusquare", 0x334d, "mehiragana", 0x3081, "meizierasquare", 0x337e, "mekatakana", 0x30e1, "mekatakanahalfwidth", 0xff92, "mem", 0x05de, "memdagesh", 0xfb3e, "memdageshhebrew", 0xfb3e, "memhebrew", 0x05de, "menarmenian", 0x0574, "merkhahebrew", 0x05a5, "merkhakefulahebrew", 0x05a6, "merkhakefulalefthebrew", 0x05a6, "merkhalefthebrew", 0x05a5, "mhook", 0x0271, "mhzsquare", 0x3392, "middledotkatakanahalfwidth", 0xff65, "middot", 0x00b7, "mieumacirclekorean", 0x3272, "mieumaparenkorean", 0x3212, "mieumcirclekorean", 0x3264, "mieumkorean", 0x3141, "mieumpansioskorean", 0x3170, "mieumparenkorean", 0x3204, "mieumpieupkorean", 0x316e, "mieumsioskorean", 0x316f, "mihiragana", 0x307f, "mikatakana", 0x30df, "mikatakanahalfwidth", 0xff90, "minus", 0x2212, "minusbelowcmb", 0x0320, "minuscircle", 0x2296, "minusmod", 0x02d7, "minusplus", 0x2213, "minute", 0x2032, "miribaarusquare", 0x334a, "mirisquare", 0x3349, "mlonglegturned", 0x0270, "mlsquare", 0x3396, "mmcubedsquare", 0x33a3, "mmonospace", 0xff4d, "mmsquaredsquare", 0x339f, "mohiragana", 0x3082, "mohmsquare", 0x33c1, "mokatakana", 0x30e2, "mokatakanahalfwidth", 0xff93, "molsquare", 0x33d6, "momathai", 0x0e21, "moverssquare", 0x33a7, "moverssquaredsquare", 0x33a8, "mparen", 0x24a8, "mpasquare", 0x33ab, "mssquare", 0x33b3, "msuperior", 0xf6ef, "mturned", 0x026f, "mu", 0x00b5, "mu1", 0x00b5, "muasquare", 0x3382, "muchgreater", 0x226b, "muchless", 0x226a, "mufsquare", 0x338c, "mugreek", 0x03bc, "mugsquare", 0x338d, "muhiragana", 0x3080, "mukatakana", 0x30e0, "mukatakanahalfwidth", 0xff91, "mulsquare", 0x3395, "multiply", 0x00d7, "mumsquare", 0x339b, "munahhebrew", 0x05a3, "munahlefthebrew", 0x05a3, "musicalnote", 0x266a, "musicalnotedbl", 0x266b, "musicflatsign", 0x266d, "musicsharpsign", 0x266f, "mussquare", 0x33b2, "muvsquare", 0x33b6, "muwsquare", 0x33bc, "mvmegasquare", 0x33b9, "mvsquare", 0x33b7, "mwmegasquare", 0x33bf, "mwsquare", 0x33bd, "n", 0x006e, "nabengali", 0x09a8, "nabla", 0x2207, "nacute", 0x0144, "nadeva", 0x0928, "nagujarati", 0x0aa8, "nagurmukhi", 0x0a28, "nahiragana", 0x306a, "nakatakana", 0x30ca, "nakatakanahalfwidth", 0xff85, "napostrophe", 0x0149, "nasquare", 0x3381, "nbopomofo", 0x310b, "nbspace", 0x00a0, "ncaron", 0x0148, "ncedilla", 0x0146, "ncircle", 0x24dd, "ncircumflexbelow", 0x1e4b, "ncommaaccent", 0x0146, "ndotaccent", 0x1e45, "ndotbelow", 0x1e47, "nehiragana", 0x306d, "nekatakana", 0x30cd, "nekatakanahalfwidth", 0xff88, "newsheqelsign", 0x20aa, "nfsquare", 0x338b, "ngabengali", 0x0999, "ngadeva", 0x0919, "ngagujarati", 0x0a99, "ngagurmukhi", 0x0a19, "ngonguthai", 0x0e07, "nhiragana", 0x3093, "nhookleft", 0x0272, "nhookretroflex", 0x0273, "nieunacirclekorean", 0x326f, "nieunaparenkorean", 0x320f, "nieuncieuckorean", 0x3135, "nieuncirclekorean", 0x3261, "nieunhieuhkorean", 0x3136, "nieunkorean", 0x3134, "nieunpansioskorean", 0x3168, "nieunparenkorean", 0x3201, "nieunsioskorean", 0x3167, "nieuntikeutkorean", 0x3166, "nihiragana", 0x306b, "nikatakana", 0x30cb, "nikatakanahalfwidth", 0xff86, "nikhahitleftthai", 0xf899, "nikhahitthai", 0x0e4d, "nine", 0x0039, "ninearabic", 0x0669, "ninebengali", 0x09ef, "ninecircle", 0x2468, "ninecircleinversesansserif", 0x2792, "ninedeva", 0x096f, "ninegujarati", 0x0aef, "ninegurmukhi", 0x0a6f, "ninehackarabic", 0x0669, "ninehangzhou", 0x3029, "nineideographicparen", 0x3228, "nineinferior", 0x2089, "ninemonospace", 0xff19, "nineoldstyle", 0xf739, "nineparen", 0x247c, "nineperiod", 0x2490, "ninepersian", 0x06f9, "nineroman", 0x2178, "ninesuperior", 0x2079, "nineteencircle", 0x2472, "nineteenparen", 0x2486, "nineteenperiod", 0x249a, "ninethai", 0x0e59, "nj", 0x01cc, "njecyrillic", 0x045a, "nkatakana", 0x30f3, "nkatakanahalfwidth", 0xff9d, "nlegrightlong", 0x019e, "nlinebelow", 0x1e49, "nmonospace", 0xff4e, "nmsquare", 0x339a, "nnabengali", 0x09a3, "nnadeva", 0x0923, "nnagujarati", 0x0aa3, "nnagurmukhi", 0x0a23, "nnnadeva", 0x0929, "nohiragana", 0x306e, "nokatakana", 0x30ce, "nokatakanahalfwidth", 0xff89, "nonbreakingspace", 0x00a0, "nonenthai", 0x0e13, "nonuthai", 0x0e19, "noonarabic", 0x0646, "noonfinalarabic", 0xfee6, "noonghunnaarabic", 0x06ba, "noonghunnafinalarabic", 0xfb9f, "nooninitialarabic", 0xfee7, "noonjeeminitialarabic", 0xfcd2, "noonjeemisolatedarabic", 0xfc4b, "noonmedialarabic", 0xfee8, "noonmeeminitialarabic", 0xfcd5, "noonmeemisolatedarabic", 0xfc4e, "noonnoonfinalarabic", 0xfc8d, "notcontains", 0x220c, "notelement", 0x2209, "notelementof", 0x2209, "notequal", 0x2260, "notgreater", 0x226f, "notgreaternorequal", 0x2271, "notgreaternorless", 0x2279, "notidentical", 0x2262, "notless", 0x226e, "notlessnorequal", 0x2270, "notparallel", 0x2226, "notprecedes", 0x2280, "notsubset", 0x2284, "notsucceeds", 0x2281, "notsuperset", 0x2285, "nowarmenian", 0x0576, "nparen", 0x24a9, "nssquare", 0x33b1, "nsuperior", 0x207f, "ntilde", 0x00f1, "nu", 0x03bd, "nuhiragana", 0x306c, "nukatakana", 0x30cc, "nukatakanahalfwidth", 0xff87, "nuktabengali", 0x09bc, "nuktadeva", 0x093c, "nuktagujarati", 0x0abc, "nuktagurmukhi", 0x0a3c, "numbersign", 0x0023, "numbersignmonospace", 0xff03, "numbersignsmall", 0xfe5f, "numeralsigngreek", 0x0374, "numeralsignlowergreek", 0x0375, "numero", 0x2116, "nun", 0x05e0, "nundagesh", 0xfb40, "nundageshhebrew", 0xfb40, "nunhebrew", 0x05e0, "nvsquare", 0x33b5, "nwsquare", 0x33bb, "nyabengali", 0x099e, "nyadeva", 0x091e, "nyagujarati", 0x0a9e, "nyagurmukhi", 0x0a1e, "o", 0x006f, "oacute", 0x00f3, "oangthai", 0x0e2d, "obarred", 0x0275, "obarredcyrillic", 0x04e9, "obarreddieresiscyrillic", 0x04eb, "obengali", 0x0993, "obopomofo", 0x311b, "obreve", 0x014f, "ocandradeva", 0x0911, "ocandragujarati", 0x0a91, "ocandravowelsigndeva", 0x0949, "ocandravowelsigngujarati", 0x0ac9, "ocaron", 0x01d2, "ocircle", 0x24de, "ocircumflex", 0x00f4, "ocircumflexacute", 0x1ed1, "ocircumflexdotbelow", 0x1ed9, "ocircumflexgrave", 0x1ed3, "ocircumflexhookabove", 0x1ed5, "ocircumflextilde", 0x1ed7, "ocyrillic", 0x043e, "odblacute", 0x0151, "odblgrave", 0x020d, "odeva", 0x0913, "odieresis", 0x00f6, "odieresiscyrillic", 0x04e7, "odotbelow", 0x1ecd, "oe", 0x0153, "oekorean", 0x315a, "ogonek", 0x02db, "ogonekcmb", 0x0328, "ograve", 0x00f2, "ogujarati", 0x0a93, "oharmenian", 0x0585, "ohiragana", 0x304a, "ohookabove", 0x1ecf, "ohorn", 0x01a1, "ohornacute", 0x1edb, "ohorndotbelow", 0x1ee3, "ohorngrave", 0x1edd, "ohornhookabove", 0x1edf, "ohorntilde", 0x1ee1, "ohungarumlaut", 0x0151, "oi", 0x01a3, "oinvertedbreve", 0x020f, "okatakana", 0x30aa, "okatakanahalfwidth", 0xff75, "okorean", 0x3157, "olehebrew", 0x05ab, "omacron", 0x014d, "omacronacute", 0x1e53, "omacrongrave", 0x1e51, "omdeva", 0x0950, "omega", 0x03c9, "omega1", 0x03d6, "omegacyrillic", 0x0461, "omegalatinclosed", 0x0277, "omegaroundcyrillic", 0x047b, "omegatitlocyrillic", 0x047d, "omegatonos", 0x03ce, "omgujarati", 0x0ad0, "omicron", 0x03bf, "omicrontonos", 0x03cc, "omonospace", 0xff4f, "one", 0x0031, "onearabic", 0x0661, "onebengali", 0x09e7, "onecircle", 0x2460, "onecircleinversesansserif", 0x278a, "onedeva", 0x0967, "onedotenleader", 0x2024, "oneeighth", 0x215b, "onefitted", 0xf6dc, "onegujarati", 0x0ae7, "onegurmukhi", 0x0a67, "onehackarabic", 0x0661, "onehalf", 0x00bd, "onehangzhou", 0x3021, "oneideographicparen", 0x3220, "oneinferior", 0x2081, "onemonospace", 0xff11, "onenumeratorbengali", 0x09f4, "oneoldstyle", 0xf731, "oneparen", 0x2474, "oneperiod", 0x2488, "onepersian", 0x06f1, "onequarter", 0x00bc, "oneroman", 0x2170, "onesuperior", 0x00b9, "onethai", 0x0e51, "onethird", 0x2153, "oogonek", 0x01eb, "oogonekmacron", 0x01ed, "oogurmukhi", 0x0a13, "oomatragurmukhi", 0x0a4b, "oopen", 0x0254, "oparen", 0x24aa, "openbullet", 0x25e6, "option", 0x2325, "ordfeminine", 0x00aa, "ordmasculine", 0x00ba, "orthogonal", 0x221f, "oshortdeva", 0x0912, "oshortvowelsigndeva", 0x094a, "oslash", 0x00f8, "oslashacute", 0x01ff, "osmallhiragana", 0x3049, "osmallkatakana", 0x30a9, "osmallkatakanahalfwidth", 0xff6b, "ostrokeacute", 0x01ff, "osuperior", 0xf6f0, "otcyrillic", 0x047f, "otilde", 0x00f5, "otildeacute", 0x1e4d, "otildedieresis", 0x1e4f, "oubopomofo", 0x3121, "overline", 0x203e, "overlinecenterline", 0xfe4a, "overlinecmb", 0x0305, "overlinedashed", 0xfe49, "overlinedblwavy", 0xfe4c, "overlinewavy", 0xfe4b, "overscore", 0x00af, "ovowelsignbengali", 0x09cb, "ovowelsigndeva", 0x094b, "ovowelsigngujarati", 0x0acb, "p", 0x0070, "paampssquare", 0x3380, "paasentosquare", 0x332b, "pabengali", 0x09aa, "pacute", 0x1e55, "padeva", 0x092a, "pagedown", 0x21df, "pageup", 0x21de, "pagujarati", 0x0aaa, "pagurmukhi", 0x0a2a, "pahiragana", 0x3071, "paiyannoithai", 0x0e2f, "pakatakana", 0x30d1, "palatalizationcyrilliccmb", 0x0484, "palochkacyrillic", 0x04c0, "pansioskorean", 0x317f, "paragraph", 0x00b6, "parallel", 0x2225, "parenleft", 0x0028, "parenleftaltonearabic", 0xfd3e, "parenleftbt", 0xf8ed, "parenleftex", 0xf8ec, "parenleftinferior", 0x208d, "parenleftmonospace", 0xff08, "parenleftsmall", 0xfe59, "parenleftsuperior", 0x207d, "parenlefttp", 0xf8eb, "parenleftvertical", 0xfe35, "parenright", 0x0029, "parenrightaltonearabic", 0xfd3f, "parenrightbt", 0xf8f8, "parenrightex", 0xf8f7, "parenrightinferior", 0x208e, "parenrightmonospace", 0xff09, "parenrightsmall", 0xfe5a, "parenrightsuperior", 0x207e, "parenrighttp", 0xf8f6, "parenrightvertical", 0xfe36, "partialdiff", 0x2202, "paseqhebrew", 0x05c0, "pashtahebrew", 0x0599, "pasquare", 0x33a9, "patah", 0x05b7, "patah11", 0x05b7, "patah1d", 0x05b7, "patah2a", 0x05b7, "patahhebrew", 0x05b7, "patahnarrowhebrew", 0x05b7, "patahquarterhebrew", 0x05b7, "patahwidehebrew", 0x05b7, "pazerhebrew", 0x05a1, "pbopomofo", 0x3106, "pcircle", 0x24df, "pdotaccent", 0x1e57, "pe", 0x05e4, "pecyrillic", 0x043f, "pedagesh", 0xfb44, "pedageshhebrew", 0xfb44, "peezisquare", 0x333b, "pefinaldageshhebrew", 0xfb43, "peharabic", 0x067e, "peharmenian", 0x057a, "pehebrew", 0x05e4, "pehfinalarabic", 0xfb57, "pehinitialarabic", 0xfb58, "pehiragana", 0x307a, "pehmedialarabic", 0xfb59, "pekatakana", 0x30da, "pemiddlehookcyrillic", 0x04a7, "perafehebrew", 0xfb4e, "percent", 0x0025, "percentarabic", 0x066a, "percentmonospace", 0xff05, "percentsmall", 0xfe6a, "period", 0x002e, "periodarmenian", 0x0589, "periodcentered", 0x00b7, "periodhalfwidth", 0xff61, "periodinferior", 0xf6e7, "periodmonospace", 0xff0e, "periodsmall", 0xfe52, "periodsuperior", 0xf6e8, "perispomenigreekcmb", 0x0342, "perpendicular", 0x22a5, "perthousand", 0x2030, "peseta", 0x20a7, "pfsquare", 0x338a, "phabengali", 0x09ab, "phadeva", 0x092b, "phagujarati", 0x0aab, "phagurmukhi", 0x0a2b, "phi", 0x03c6, "phi1", 0x03d5, "phieuphacirclekorean", 0x327a, "phieuphaparenkorean", 0x321a, "phieuphcirclekorean", 0x326c, "phieuphkorean", 0x314d, "phieuphparenkorean", 0x320c, "philatin", 0x0278, "phinthuthai", 0x0e3a, "phisymbolgreek", 0x03d5, "phook", 0x01a5, "phophanthai", 0x0e1e, "phophungthai", 0x0e1c, "phosamphaothai", 0x0e20, "pi", 0x03c0, "pieupacirclekorean", 0x3273, "pieupaparenkorean", 0x3213, "pieupcieuckorean", 0x3176, "pieupcirclekorean", 0x3265, "pieupkiyeokkorean", 0x3172, "pieupkorean", 0x3142, "pieupparenkorean", 0x3205, "pieupsioskiyeokkorean", 0x3174, "pieupsioskorean", 0x3144, "pieupsiostikeutkorean", 0x3175, "pieupthieuthkorean", 0x3177, "pieuptikeutkorean", 0x3173, "pihiragana", 0x3074, "pikatakana", 0x30d4, "pisymbolgreek", 0x03d6, "piwrarmenian", 0x0583, "plus", 0x002b, "plusbelowcmb", 0x031f, "pluscircle", 0x2295, "plusminus", 0x00b1, "plusmod", 0x02d6, "plusmonospace", 0xff0b, "plussmall", 0xfe62, "plussuperior", 0x207a, "pmonospace", 0xff50, "pmsquare", 0x33d8, "pohiragana", 0x307d, "pointingindexdownwhite", 0x261f, "pointingindexleftwhite", 0x261c, "pointingindexrightwhite", 0x261e, "pointingindexupwhite", 0x261d, "pokatakana", 0x30dd, "poplathai", 0x0e1b, "postalmark", 0x3012, "postalmarkface", 0x3020, "pparen", 0x24ab, "precedes", 0x227a, "prescription", 0x211e, "primemod", 0x02b9, "primereversed", 0x2035, "product", 0x220f, "projective", 0x2305, "prolongedkana", 0x30fc, "propellor", 0x2318, "propersubset", 0x2282, "propersuperset", 0x2283, "proportion", 0x2237, "proportional", 0x221d, "psi", 0x03c8, "psicyrillic", 0x0471, "psilipneumatacyrilliccmb", 0x0486, "pssquare", 0x33b0, "puhiragana", 0x3077, "pukatakana", 0x30d7, "pvsquare", 0x33b4, "pwsquare", 0x33ba, "q", 0x0071, "qadeva", 0x0958, "qadmahebrew", 0x05a8, "qafarabic", 0x0642, "qaffinalarabic", 0xfed6, "qafinitialarabic", 0xfed7, "qafmedialarabic", 0xfed8, "qamats", 0x05b8, "qamats10", 0x05b8, "qamats1a", 0x05b8, "qamats1c", 0x05b8, "qamats27", 0x05b8, "qamats29", 0x05b8, "qamats33", 0x05b8, "qamatsde", 0x05b8, "qamatshebrew", 0x05b8, "qamatsnarrowhebrew", 0x05b8, "qamatsqatanhebrew", 0x05b8, "qamatsqatannarrowhebrew", 0x05b8, "qamatsqatanquarterhebrew", 0x05b8, "qamatsqatanwidehebrew", 0x05b8, "qamatsquarterhebrew", 0x05b8, "qamatswidehebrew", 0x05b8, "qarneyparahebrew", 0x059f, "qbopomofo", 0x3111, "qcircle", 0x24e0, "qhook", 0x02a0, "qmonospace", 0xff51, "qof", 0x05e7, "qofdagesh", 0xfb47, "qofdageshhebrew", 0xfb47, "qofhebrew", 0x05e7, "qparen", 0x24ac, "quarternote", 0x2669, "qubuts", 0x05bb, "qubuts18", 0x05bb, "qubuts25", 0x05bb, "qubuts31", 0x05bb, "qubutshebrew", 0x05bb, "qubutsnarrowhebrew", 0x05bb, "qubutsquarterhebrew", 0x05bb, "qubutswidehebrew", 0x05bb, "question", 0x003f, "questionarabic", 0x061f, "questionarmenian", 0x055e, "questiondown", 0x00bf, "questiondownsmall", 0xf7bf, "questiongreek", 0x037e, "questionmonospace", 0xff1f, "questionsmall", 0xf73f, "quotedbl", 0x0022, "quotedblbase", 0x201e, "quotedblleft", 0x201c, "quotedblmonospace", 0xff02, "quotedblprime", 0x301e, "quotedblprimereversed", 0x301d, "quotedblright", 0x201d, "quoteleft", 0x2018, "quoteleftreversed", 0x201b, "quotereversed", 0x201b, "quoteright", 0x2019, "quoterightn", 0x0149, "quotesinglbase", 0x201a, "quotesingle", 0x0027, "quotesinglemonospace", 0xff07, "r", 0x0072, "raarmenian", 0x057c, "rabengali", 0x09b0, "racute", 0x0155, "radeva", 0x0930, "radical", 0x221a, "radicalex", 0xf8e5, "radoverssquare", 0x33ae, "radoverssquaredsquare", 0x33af, "radsquare", 0x33ad, "rafe", 0x05bf, "rafehebrew", 0x05bf, "ragujarati", 0x0ab0, "ragurmukhi", 0x0a30, "rahiragana", 0x3089, "rakatakana", 0x30e9, "rakatakanahalfwidth", 0xff97, "ralowerdiagonalbengali", 0x09f1, "ramiddlediagonalbengali", 0x09f0, "ramshorn", 0x0264, "ratio", 0x2236, "rbopomofo", 0x3116, "rcaron", 0x0159, "rcedilla", 0x0157, "rcircle", 0x24e1, "rcommaaccent", 0x0157, "rdblgrave", 0x0211, "rdotaccent", 0x1e59, "rdotbelow", 0x1e5b, "rdotbelowmacron", 0x1e5d, "referencemark", 0x203b, "reflexsubset", 0x2286, "reflexsuperset", 0x2287, "registered", 0x00ae, "registersans", 0xf8e8, "registerserif", 0xf6da, "reharabic", 0x0631, "reharmenian", 0x0580, "rehfinalarabic", 0xfeae, "rehiragana", 0x308c, "rekatakana", 0x30ec, "rekatakanahalfwidth", 0xff9a, "resh", 0x05e8, "reshdageshhebrew", 0xfb48, "reshhebrew", 0x05e8, "reversedtilde", 0x223d, "reviahebrew", 0x0597, "reviamugrashhebrew", 0x0597, "revlogicalnot", 0x2310, "rfishhook", 0x027e, "rfishhookreversed", 0x027f, "rhabengali", 0x09dd, "rhadeva", 0x095d, "rho", 0x03c1, "rhook", 0x027d, "rhookturned", 0x027b, "rhookturnedsuperior", 0x02b5, "rhosymbolgreek", 0x03f1, "rhotichookmod", 0x02de, "rieulacirclekorean", 0x3271, "rieulaparenkorean", 0x3211, "rieulcirclekorean", 0x3263, "rieulhieuhkorean", 0x3140, "rieulkiyeokkorean", 0x313a, "rieulkiyeoksioskorean", 0x3169, "rieulkorean", 0x3139, "rieulmieumkorean", 0x313b, "rieulpansioskorean", 0x316c, "rieulparenkorean", 0x3203, "rieulphieuphkorean", 0x313f, "rieulpieupkorean", 0x313c, "rieulpieupsioskorean", 0x316b, "rieulsioskorean", 0x313d, "rieulthieuthkorean", 0x313e, "rieultikeutkorean", 0x316a, "rieulyeorinhieuhkorean", 0x316d, "rightangle", 0x221f, "righttackbelowcmb", 0x0319, "righttriangle", 0x22bf, "rihiragana", 0x308a, "rikatakana", 0x30ea, "rikatakanahalfwidth", 0xff98, "ring", 0x02da, "ringbelowcmb", 0x0325, "ringcmb", 0x030a, "ringhalfleft", 0x02bf, "ringhalfleftarmenian", 0x0559, "ringhalfleftbelowcmb", 0x031c, "ringhalfleftcentered", 0x02d3, "ringhalfright", 0x02be, "ringhalfrightbelowcmb", 0x0339, "ringhalfrightcentered", 0x02d2, "rinvertedbreve", 0x0213, "rittorusquare", 0x3351, "rlinebelow", 0x1e5f, "rlongleg", 0x027c, "rlonglegturned", 0x027a, "rmonospace", 0xff52, "rohiragana", 0x308d, "rokatakana", 0x30ed, "rokatakanahalfwidth", 0xff9b, "roruathai", 0x0e23, "rparen", 0x24ad, "rrabengali", 0x09dc, "rradeva", 0x0931, "rragurmukhi", 0x0a5c, "rreharabic", 0x0691, "rrehfinalarabic", 0xfb8d, "rrvocalicbengali", 0x09e0, "rrvocalicdeva", 0x0960, "rrvocalicgujarati", 0x0ae0, "rrvocalicvowelsignbengali", 0x09c4, "rrvocalicvowelsigndeva", 0x0944, "rrvocalicvowelsigngujarati", 0x0ac4, "rsuperior", 0xf6f1, "rtblock", 0x2590, "rturned", 0x0279, "rturnedsuperior", 0x02b4, "ruhiragana", 0x308b, "rukatakana", 0x30eb, "rukatakanahalfwidth", 0xff99, "rupeemarkbengali", 0x09f2, "rupeesignbengali", 0x09f3, "rupiah", 0xf6dd, "ruthai", 0x0e24, "rvocalicbengali", 0x098b, "rvocalicdeva", 0x090b, "rvocalicgujarati", 0x0a8b, "rvocalicvowelsignbengali", 0x09c3, "rvocalicvowelsigndeva", 0x0943, "rvocalicvowelsigngujarati", 0x0ac3, "s", 0x0073, "sabengali", 0x09b8, "sacute", 0x015b, "sacutedotaccent", 0x1e65, "sadarabic", 0x0635, "sadeva", 0x0938, "sadfinalarabic", 0xfeba, "sadinitialarabic", 0xfebb, "sadmedialarabic", 0xfebc, "sagujarati", 0x0ab8, "sagurmukhi", 0x0a38, "sahiragana", 0x3055, "sakatakana", 0x30b5, "sakatakanahalfwidth", 0xff7b, "sallallahoualayhewasallamarabic", 0xfdfa, "samekh", 0x05e1, "samekhdagesh", 0xfb41, "samekhdageshhebrew", 0xfb41, "samekhhebrew", 0x05e1, "saraaathai", 0x0e32, "saraaethai", 0x0e41, "saraaimaimalaithai", 0x0e44, "saraaimaimuanthai", 0x0e43, "saraamthai", 0x0e33, "saraathai", 0x0e30, "saraethai", 0x0e40, "saraiileftthai", 0xf886, "saraiithai", 0x0e35, "saraileftthai", 0xf885, "saraithai", 0x0e34, "saraothai", 0x0e42, "saraueeleftthai", 0xf888, "saraueethai", 0x0e37, "saraueleftthai", 0xf887, "sarauethai", 0x0e36, "sarauthai", 0x0e38, "sarauuthai", 0x0e39, "sbopomofo", 0x3119, "scaron", 0x0161, "scarondotaccent", 0x1e67, "scedilla", 0x015f, "schwa", 0x0259, "schwacyrillic", 0x04d9, "schwadieresiscyrillic", 0x04db, "schwahook", 0x025a, "scircle", 0x24e2, "scircumflex", 0x015d, "scommaaccent", 0x0219, "sdotaccent", 0x1e61, "sdotbelow", 0x1e63, "sdotbelowdotaccent", 0x1e69, "seagullbelowcmb", 0x033c, "second", 0x2033, "secondtonechinese", 0x02ca, "section", 0x00a7, "seenarabic", 0x0633, "seenfinalarabic", 0xfeb2, "seeninitialarabic", 0xfeb3, "seenmedialarabic", 0xfeb4, "segol", 0x05b6, "segol13", 0x05b6, "segol1f", 0x05b6, "segol2c", 0x05b6, "segolhebrew", 0x05b6, "segolnarrowhebrew", 0x05b6, "segolquarterhebrew", 0x05b6, "segoltahebrew", 0x0592, "segolwidehebrew", 0x05b6, "seharmenian", 0x057d, "sehiragana", 0x305b, "sekatakana", 0x30bb, "sekatakanahalfwidth", 0xff7e, "semicolon", 0x003b, "semicolonarabic", 0x061b, "semicolonmonospace", 0xff1b, "semicolonsmall", 0xfe54, "semivoicedmarkkana", 0x309c, "semivoicedmarkkanahalfwidth", 0xff9f, "sentisquare", 0x3322, "sentosquare", 0x3323, "seven", 0x0037, "sevenarabic", 0x0667, "sevenbengali", 0x09ed, "sevencircle", 0x2466, "sevencircleinversesansserif", 0x2790, "sevendeva", 0x096d, "seveneighths", 0x215e, "sevengujarati", 0x0aed, "sevengurmukhi", 0x0a6d, "sevenhackarabic", 0x0667, "sevenhangzhou", 0x3027, "sevenideographicparen", 0x3226, "seveninferior", 0x2087, "sevenmonospace", 0xff17, "sevenoldstyle", 0xf737, "sevenparen", 0x247a, "sevenperiod", 0x248e, "sevenpersian", 0x06f7, "sevenroman", 0x2176, "sevensuperior", 0x2077, "seventeencircle", 0x2470, "seventeenparen", 0x2484, "seventeenperiod", 0x2498, "seventhai", 0x0e57, "sfthyphen", 0x00ad, "shaarmenian", 0x0577, "shabengali", 0x09b6, "shacyrillic", 0x0448, "shaddaarabic", 0x0651, "shaddadammaarabic", 0xfc61, "shaddadammatanarabic", 0xfc5e, "shaddafathaarabic", 0xfc60, "shaddakasraarabic", 0xfc62, "shaddakasratanarabic", 0xfc5f, "shade", 0x2592, "shadedark", 0x2593, "shadelight", 0x2591, "shademedium", 0x2592, "shadeva", 0x0936, "shagujarati", 0x0ab6, "shagurmukhi", 0x0a36, "shalshelethebrew", 0x0593, "shbopomofo", 0x3115, "shchacyrillic", 0x0449, "sheenarabic", 0x0634, "sheenfinalarabic", 0xfeb6, "sheeninitialarabic", 0xfeb7, "sheenmedialarabic", 0xfeb8, "sheicoptic", 0x03e3, "sheqel", 0x20aa, "sheqelhebrew", 0x20aa, "sheva", 0x05b0, "sheva115", 0x05b0, "sheva15", 0x05b0, "sheva22", 0x05b0, "sheva2e", 0x05b0, "shevahebrew", 0x05b0, "shevanarrowhebrew", 0x05b0, "shevaquarterhebrew", 0x05b0, "shevawidehebrew", 0x05b0, "shhacyrillic", 0x04bb, "shimacoptic", 0x03ed, "shin", 0x05e9, "shindagesh", 0xfb49, "shindageshhebrew", 0xfb49, "shindageshshindot", 0xfb2c, "shindageshshindothebrew", 0xfb2c, "shindageshsindot", 0xfb2d, "shindageshsindothebrew", 0xfb2d, "shindothebrew", 0x05c1, "shinhebrew", 0x05e9, "shinshindot", 0xfb2a, "shinshindothebrew", 0xfb2a, "shinsindot", 0xfb2b, "shinsindothebrew", 0xfb2b, "shook", 0x0282, "sigma", 0x03c3, "sigma1", 0x03c2, "sigmafinal", 0x03c2, "sigmalunatesymbolgreek", 0x03f2, "sihiragana", 0x3057, "sikatakana", 0x30b7, "sikatakanahalfwidth", 0xff7c, "siluqhebrew", 0x05bd, "siluqlefthebrew", 0x05bd, "similar", 0x223c, "sindothebrew", 0x05c2, "siosacirclekorean", 0x3274, "siosaparenkorean", 0x3214, "sioscieuckorean", 0x317e, "sioscirclekorean", 0x3266, "sioskiyeokkorean", 0x317a, "sioskorean", 0x3145, "siosnieunkorean", 0x317b, "siosparenkorean", 0x3206, "siospieupkorean", 0x317d, "siostikeutkorean", 0x317c, "six", 0x0036, "sixarabic", 0x0666, "sixbengali", 0x09ec, "sixcircle", 0x2465, "sixcircleinversesansserif", 0x278f, "sixdeva", 0x096c, "sixgujarati", 0x0aec, "sixgurmukhi", 0x0a6c, "sixhackarabic", 0x0666, "sixhangzhou", 0x3026, "sixideographicparen", 0x3225, "sixinferior", 0x2086, "sixmonospace", 0xff16, "sixoldstyle", 0xf736, "sixparen", 0x2479, "sixperiod", 0x248d, "sixpersian", 0x06f6, "sixroman", 0x2175, "sixsuperior", 0x2076, "sixteencircle", 0x246f, "sixteencurrencydenominatorbengali", 0x09f9, "sixteenparen", 0x2483, "sixteenperiod", 0x2497, "sixthai", 0x0e56, "slash", 0x002f, "slashmonospace", 0xff0f, "slong", 0x017f, "slongdotaccent", 0x1e9b, "smileface", 0x263a, "smonospace", 0xff53, "sofpasuqhebrew", 0x05c3, "softhyphen", 0x00ad, "softsigncyrillic", 0x044c, "sohiragana", 0x305d, "sokatakana", 0x30bd, "sokatakanahalfwidth", 0xff7f, "soliduslongoverlaycmb", 0x0338, "solidusshortoverlaycmb", 0x0337, "sorusithai", 0x0e29, "sosalathai", 0x0e28, "sosothai", 0x0e0b, "sosuathai", 0x0e2a, "space", 0x0020, "spacehackarabic", 0x0020, "spade", 0x2660, "spadesuitblack", 0x2660, "spadesuitwhite", 0x2664, "sparen", 0x24ae, "squarebelowcmb", 0x033b, "squarecc", 0x33c4, "squarecm", 0x339d, "squarediagonalcrosshatchfill", 0x25a9, "squarehorizontalfill", 0x25a4, "squarekg", 0x338f, "squarekm", 0x339e, "squarekmcapital", 0x33ce, "squareln", 0x33d1, "squarelog", 0x33d2, "squaremg", 0x338e, "squaremil", 0x33d5, "squaremm", 0x339c, "squaremsquared", 0x33a1, "squareorthogonalcrosshatchfill", 0x25a6, "squareupperlefttolowerrightfill", 0x25a7, "squareupperrighttolowerleftfill", 0x25a8, "squareverticalfill", 0x25a5, "squarewhitewithsmallblack", 0x25a3, "srsquare", 0x33db, "ssabengali", 0x09b7, "ssadeva", 0x0937, "ssagujarati", 0x0ab7, "ssangcieuckorean", 0x3149, "ssanghieuhkorean", 0x3185, "ssangieungkorean", 0x3180, "ssangkiyeokkorean", 0x3132, "ssangnieunkorean", 0x3165, "ssangpieupkorean", 0x3143, "ssangsioskorean", 0x3146, "ssangtikeutkorean", 0x3138, "ssuperior", 0xf6f2, "sterling", 0x00a3, "sterlingmonospace", 0xffe1, "strokelongoverlaycmb", 0x0336, "strokeshortoverlaycmb", 0x0335, "subset", 0x2282, "subsetnotequal", 0x228a, "subsetorequal", 0x2286, "succeeds", 0x227b, "suchthat", 0x220b, "suhiragana", 0x3059, "sukatakana", 0x30b9, "sukatakanahalfwidth", 0xff7d, "sukunarabic", 0x0652, "summation", 0x2211, "sun", 0x263c, "superset", 0x2283, "supersetnotequal", 0x228b, "supersetorequal", 0x2287, "svsquare", 0x33dc, "syouwaerasquare", 0x337c, "t", 0x0074, "tabengali", 0x09a4, "tackdown", 0x22a4, "tackleft", 0x22a3, "tadeva", 0x0924, "tagujarati", 0x0aa4, "tagurmukhi", 0x0a24, "taharabic", 0x0637, "tahfinalarabic", 0xfec2, "tahinitialarabic", 0xfec3, "tahiragana", 0x305f, "tahmedialarabic", 0xfec4, "taisyouerasquare", 0x337d, "takatakana", 0x30bf, "takatakanahalfwidth", 0xff80, "tatweelarabic", 0x0640, "tau", 0x03c4, "tav", 0x05ea, "tavdages", 0xfb4a, "tavdagesh", 0xfb4a, "tavdageshhebrew", 0xfb4a, "tavhebrew", 0x05ea, "tbar", 0x0167, "tbopomofo", 0x310a, "tcaron", 0x0165, "tccurl", 0x02a8, "tcedilla", 0x0163, "tcheharabic", 0x0686, "tchehfinalarabic", 0xfb7b, "tchehinitialarabic", 0xfb7c, "tchehmedialarabic", 0xfb7d, "tcircle", 0x24e3, "tcircumflexbelow", 0x1e71, "tcommaaccent", 0x0163, "tdieresis", 0x1e97, "tdotaccent", 0x1e6b, "tdotbelow", 0x1e6d, "tecyrillic", 0x0442, "tedescendercyrillic", 0x04ad, "teharabic", 0x062a, "tehfinalarabic", 0xfe96, "tehhahinitialarabic", 0xfca2, "tehhahisolatedarabic", 0xfc0c, "tehinitialarabic", 0xfe97, "tehiragana", 0x3066, "tehjeeminitialarabic", 0xfca1, "tehjeemisolatedarabic", 0xfc0b, "tehmarbutaarabic", 0x0629, "tehmarbutafinalarabic", 0xfe94, "tehmedialarabic", 0xfe98, "tehmeeminitialarabic", 0xfca4, "tehmeemisolatedarabic", 0xfc0e, "tehnoonfinalarabic", 0xfc73, "tekatakana", 0x30c6, "tekatakanahalfwidth", 0xff83, "telephone", 0x2121, "telephoneblack", 0x260e, "telishagedolahebrew", 0x05a0, "telishaqetanahebrew", 0x05a9, "tencircle", 0x2469, "tenideographicparen", 0x3229, "tenparen", 0x247d, "tenperiod", 0x2491, "tenroman", 0x2179, "tesh", 0x02a7, "tet", 0x05d8, "tetdagesh", 0xfb38, "tetdageshhebrew", 0xfb38, "tethebrew", 0x05d8, "tetsecyrillic", 0x04b5, "tevirhebrew", 0x059b, "tevirlefthebrew", 0x059b, "thabengali", 0x09a5, "thadeva", 0x0925, "thagujarati", 0x0aa5, "thagurmukhi", 0x0a25, "thalarabic", 0x0630, "thalfinalarabic", 0xfeac, "thanthakhatlowleftthai", 0xf898, "thanthakhatlowrightthai", 0xf897, "thanthakhatthai", 0x0e4c, "thanthakhatupperleftthai", 0xf896, "theharabic", 0x062b, "thehfinalarabic", 0xfe9a, "thehinitialarabic", 0xfe9b, "thehmedialarabic", 0xfe9c, "thereexists", 0x2203, "therefore", 0x2234, "theta", 0x03b8, "theta1", 0x03d1, "thetasymbolgreek", 0x03d1, "thieuthacirclekorean", 0x3279, "thieuthaparenkorean", 0x3219, "thieuthcirclekorean", 0x326b, "thieuthkorean", 0x314c, "thieuthparenkorean", 0x320b, "thirteencircle", 0x246c, "thirteenparen", 0x2480, "thirteenperiod", 0x2494, "thonangmonthothai", 0x0e11, "thook", 0x01ad, "thophuthaothai", 0x0e12, "thorn", 0x00fe, "thothahanthai", 0x0e17, "thothanthai", 0x0e10, "thothongthai", 0x0e18, "thothungthai", 0x0e16, "thousandcyrillic", 0x0482, "thousandsseparatorarabic", 0x066c, "thousandsseparatorpersian", 0x066c, "three", 0x0033, "threearabic", 0x0663, "threebengali", 0x09e9, "threecircle", 0x2462, "threecircleinversesansserif", 0x278c, "threedeva", 0x0969, "threeeighths", 0x215c, "threegujarati", 0x0ae9, "threegurmukhi", 0x0a69, "threehackarabic", 0x0663, "threehangzhou", 0x3023, "threeideographicparen", 0x3222, "threeinferior", 0x2083, "threemonospace", 0xff13, "threenumeratorbengali", 0x09f6, "threeoldstyle", 0xf733, "threeparen", 0x2476, "threeperiod", 0x248a, "threepersian", 0x06f3, "threequarters", 0x00be, "threequartersemdash", 0xf6de, "threeroman", 0x2172, "threesuperior", 0x00b3, "threethai", 0x0e53, "thzsquare", 0x3394, "tihiragana", 0x3061, "tikatakana", 0x30c1, "tikatakanahalfwidth", 0xff81, "tikeutacirclekorean", 0x3270, "tikeutaparenkorean", 0x3210, "tikeutcirclekorean", 0x3262, "tikeutkorean", 0x3137, "tikeutparenkorean", 0x3202, "tilde", 0x02dc, "tildebelowcmb", 0x0330, "tildecmb", 0x0303, "tildecomb", 0x0303, "tildedoublecmb", 0x0360, "tildeoperator", 0x223c, "tildeoverlaycmb", 0x0334, "tildeverticalcmb", 0x033e, "timescircle", 0x2297, "tipehahebrew", 0x0596, "tipehalefthebrew", 0x0596, "tippigurmukhi", 0x0a70, "titlocyrilliccmb", 0x0483, "tiwnarmenian", 0x057f, "tlinebelow", 0x1e6f, "tmonospace", 0xff54, "toarmenian", 0x0569, "tohiragana", 0x3068, "tokatakana", 0x30c8, "tokatakanahalfwidth", 0xff84, "tonebarextrahighmod", 0x02e5, "tonebarextralowmod", 0x02e9, "tonebarhighmod", 0x02e6, "tonebarlowmod", 0x02e8, "tonebarmidmod", 0x02e7, "tonefive", 0x01bd, "tonesix", 0x0185, "tonetwo", 0x01a8, "tonos", 0x0384, "tonsquare", 0x3327, "topatakthai", 0x0e0f, "tortoiseshellbracketleft", 0x3014, "tortoiseshellbracketleftsmall", 0xfe5d, "tortoiseshellbracketleftvertical", 0xfe39, "tortoiseshellbracketright", 0x3015, "tortoiseshellbracketrightsmall", 0xfe5e, "tortoiseshellbracketrightvertical", 0xfe3a, "totaothai", 0x0e15, "tpalatalhook", 0x01ab, "tparen", 0x24af, "trademark", 0x2122, "trademarksans", 0xf8ea, "trademarkserif", 0xf6db, "tretroflexhook", 0x0288, "triagdn", 0x25bc, "triaglf", 0x25c4, "triagrt", 0x25ba, "triagup", 0x25b2, "ts", 0x02a6, "tsadi", 0x05e6, "tsadidagesh", 0xfb46, "tsadidageshhebrew", 0xfb46, "tsadihebrew", 0x05e6, "tsecyrillic", 0x0446, "tsere", 0x05b5, "tsere12", 0x05b5, "tsere1e", 0x05b5, "tsere2b", 0x05b5, "tserehebrew", 0x05b5, "tserenarrowhebrew", 0x05b5, "tserequarterhebrew", 0x05b5, "tserewidehebrew", 0x05b5, "tshecyrillic", 0x045b, "tsuperior", 0xf6f3, "ttabengali", 0x099f, "ttadeva", 0x091f, "ttagujarati", 0x0a9f, "ttagurmukhi", 0x0a1f, "tteharabic", 0x0679, "ttehfinalarabic", 0xfb67, "ttehinitialarabic", 0xfb68, "ttehmedialarabic", 0xfb69, "tthabengali", 0x09a0, "tthadeva", 0x0920, "tthagujarati", 0x0aa0, "tthagurmukhi", 0x0a20, "tturned", 0x0287, "tuhiragana", 0x3064, "tukatakana", 0x30c4, "tukatakanahalfwidth", 0xff82, "tusmallhiragana", 0x3063, "tusmallkatakana", 0x30c3, "tusmallkatakanahalfwidth", 0xff6f, "twelvecircle", 0x246b, "twelveparen", 0x247f, "twelveperiod", 0x2493, "twelveroman", 0x217b, "twentycircle", 0x2473, "twentyhangzhou", 0x5344, "twentyparen", 0x2487, "twentyperiod", 0x249b, "two", 0x0032, "twoarabic", 0x0662, "twobengali", 0x09e8, "twocircle", 0x2461, "twocircleinversesansserif", 0x278b, "twodeva", 0x0968, "twodotenleader", 0x2025, "twodotleader", 0x2025, "twodotleadervertical", 0xfe30, "twogujarati", 0x0ae8, "twogurmukhi", 0x0a68, "twohackarabic", 0x0662, "twohangzhou", 0x3022, "twoideographicparen", 0x3221, "twoinferior", 0x2082, "twomonospace", 0xff12, "twonumeratorbengali", 0x09f5, "twooldstyle", 0xf732, "twoparen", 0x2475, "twoperiod", 0x2489, "twopersian", 0x06f2, "tworoman", 0x2171, "twostroke", 0x01bb, "twosuperior", 0x00b2, "twothai", 0x0e52, "twothirds", 0x2154, "u", 0x0075, "uacute", 0x00fa, "ubar", 0x0289, "ubengali", 0x0989, "ubopomofo", 0x3128, "ubreve", 0x016d, "ucaron", 0x01d4, "ucircle", 0x24e4, "ucircumflex", 0x00fb, "ucircumflexbelow", 0x1e77, "ucyrillic", 0x0443, "udattadeva", 0x0951, "udblacute", 0x0171, "udblgrave", 0x0215, "udeva", 0x0909, "udieresis", 0x00fc, "udieresisacute", 0x01d8, "udieresisbelow", 0x1e73, "udieresiscaron", 0x01da, "udieresiscyrillic", 0x04f1, "udieresisgrave", 0x01dc, "udieresismacron", 0x01d6, "udotbelow", 0x1ee5, "ugrave", 0x00f9, "ugujarati", 0x0a89, "ugurmukhi", 0x0a09, "uhiragana", 0x3046, "uhookabove", 0x1ee7, "uhorn", 0x01b0, "uhornacute", 0x1ee9, "uhorndotbelow", 0x1ef1, "uhorngrave", 0x1eeb, "uhornhookabove", 0x1eed, "uhorntilde", 0x1eef, "uhungarumlaut", 0x0171, "uhungarumlautcyrillic", 0x04f3, "uinvertedbreve", 0x0217, "ukatakana", 0x30a6, "ukatakanahalfwidth", 0xff73, "ukcyrillic", 0x0479, "ukorean", 0x315c, "umacron", 0x016b, "umacroncyrillic", 0x04ef, "umacrondieresis", 0x1e7b, "umatragurmukhi", 0x0a41, "umonospace", 0xff55, "underscore", 0x005f, "underscoredbl", 0x2017, "underscoremonospace", 0xff3f, "underscorevertical", 0xfe33, "underscorewavy", 0xfe4f, "union", 0x222a, "universal", 0x2200, "uogonek", 0x0173, "uparen", 0x24b0, "upblock", 0x2580, "upperdothebrew", 0x05c4, "upsilon", 0x03c5, "upsilondieresis", 0x03cb, "upsilondieresistonos", 0x03b0, "upsilonlatin", 0x028a, "upsilontonos", 0x03cd, "uptackbelowcmb", 0x031d, "uptackmod", 0x02d4, "uragurmukhi", 0x0a73, "uring", 0x016f, "ushortcyrillic", 0x045e, "usmallhiragana", 0x3045, "usmallkatakana", 0x30a5, "usmallkatakanahalfwidth", 0xff69, "ustraightcyrillic", 0x04af, "ustraightstrokecyrillic", 0x04b1, "utilde", 0x0169, "utildeacute", 0x1e79, "utildebelow", 0x1e75, "uubengali", 0x098a, "uudeva", 0x090a, "uugujarati", 0x0a8a, "uugurmukhi", 0x0a0a, "uumatragurmukhi", 0x0a42, "uuvowelsignbengali", 0x09c2, "uuvowelsigndeva", 0x0942, "uuvowelsigngujarati", 0x0ac2, "uvowelsignbengali", 0x09c1, "uvowelsigndeva", 0x0941, "uvowelsigngujarati", 0x0ac1, "v", 0x0076, "vadeva", 0x0935, "vagujarati", 0x0ab5, "vagurmukhi", 0x0a35, "vakatakana", 0x30f7, "vav", 0x05d5, "vavdagesh", 0xfb35, "vavdagesh65", 0xfb35, "vavdageshhebrew", 0xfb35, "vavhebrew", 0x05d5, "vavholam", 0xfb4b, "vavholamhebrew", 0xfb4b, "vavvavhebrew", 0x05f0, "vavyodhebrew", 0x05f1, "vcircle", 0x24e5, "vdotbelow", 0x1e7f, "vecyrillic", 0x0432, "veharabic", 0x06a4, "vehfinalarabic", 0xfb6b, "vehinitialarabic", 0xfb6c, "vehmedialarabic", 0xfb6d, "vekatakana", 0x30f9, "venus", 0x2640, "verticalbar", 0x007c, "verticallineabovecmb", 0x030d, "verticallinebelowcmb", 0x0329, "verticallinelowmod", 0x02cc, "verticallinemod", 0x02c8, "vewarmenian", 0x057e, "vhook", 0x028b, "vikatakana", 0x30f8, "viramabengali", 0x09cd, "viramadeva", 0x094d, "viramagujarati", 0x0acd, "visargabengali", 0x0983, "visargadeva", 0x0903, "visargagujarati", 0x0a83, "vmonospace", 0xff56, "voarmenian", 0x0578, "voicediterationhiragana", 0x309e, "voicediterationkatakana", 0x30fe, "voicedmarkkana", 0x309b, "voicedmarkkanahalfwidth", 0xff9e, "vokatakana", 0x30fa, "vparen", 0x24b1, "vtilde", 0x1e7d, "vturned", 0x028c, "vuhiragana", 0x3094, "vukatakana", 0x30f4, "w", 0x0077, "wacute", 0x1e83, "waekorean", 0x3159, "wahiragana", 0x308f, "wakatakana", 0x30ef, "wakatakanahalfwidth", 0xff9c, "wakorean", 0x3158, "wasmallhiragana", 0x308e, "wasmallkatakana", 0x30ee, "wattosquare", 0x3357, "wavedash", 0x301c, "wavyunderscorevertical", 0xfe34, "wawarabic", 0x0648, "wawfinalarabic", 0xfeee, "wawhamzaabovearabic", 0x0624, "wawhamzaabovefinalarabic", 0xfe86, "wbsquare", 0x33dd, "wcircle", 0x24e6, "wcircumflex", 0x0175, "wdieresis", 0x1e85, "wdotaccent", 0x1e87, "wdotbelow", 0x1e89, "wehiragana", 0x3091, "weierstrass", 0x2118, "wekatakana", 0x30f1, "wekorean", 0x315e, "weokorean", 0x315d, "wgrave", 0x1e81, "whitebullet", 0x25e6, "whitecircle", 0x25cb, "whitecircleinverse", 0x25d9, "whitecornerbracketleft", 0x300e, "whitecornerbracketleftvertical", 0xfe43, "whitecornerbracketright", 0x300f, "whitecornerbracketrightvertical", 0xfe44, "whitediamond", 0x25c7, "whitediamondcontainingblacksmalldiamond", 0x25c8, "whitedownpointingsmalltriangle", 0x25bf, "whitedownpointingtriangle", 0x25bd, "whiteleftpointingsmalltriangle", 0x25c3, "whiteleftpointingtriangle", 0x25c1, "whitelenticularbracketleft", 0x3016, "whitelenticularbracketright", 0x3017, "whiterightpointingsmalltriangle", 0x25b9, "whiterightpointingtriangle", 0x25b7, "whitesmallsquare", 0x25ab, "whitesmilingface", 0x263a, "whitesquare", 0x25a1, "whitestar", 0x2606, "whitetelephone", 0x260f, "whitetortoiseshellbracketleft", 0x3018, "whitetortoiseshellbracketright", 0x3019, "whiteuppointingsmalltriangle", 0x25b5, "whiteuppointingtriangle", 0x25b3, "wihiragana", 0x3090, "wikatakana", 0x30f0, "wikorean", 0x315f, "wmonospace", 0xff57, "wohiragana", 0x3092, "wokatakana", 0x30f2, "wokatakanahalfwidth", 0xff66, "won", 0x20a9, "wonmonospace", 0xffe6, "wowaenthai", 0x0e27, "wparen", 0x24b2, "wring", 0x1e98, "wsuperior", 0x02b7, "wturned", 0x028d, "wynn", 0x01bf, "x", 0x0078, "xabovecmb", 0x033d, "xbopomofo", 0x3112, "xcircle", 0x24e7, "xdieresis", 0x1e8d, "xdotaccent", 0x1e8b, "xeharmenian", 0x056d, "xi", 0x03be, "xmonospace", 0xff58, "xparen", 0x24b3, "xsuperior", 0x02e3, "y", 0x0079, "yaadosquare", 0x334e, "yabengali", 0x09af, "yacute", 0x00fd, "yadeva", 0x092f, "yaekorean", 0x3152, "yagujarati", 0x0aaf, "yagurmukhi", 0x0a2f, "yahiragana", 0x3084, "yakatakana", 0x30e4, "yakatakanahalfwidth", 0xff94, "yakorean", 0x3151, "yamakkanthai", 0x0e4e, "yasmallhiragana", 0x3083, "yasmallkatakana", 0x30e3, "yasmallkatakanahalfwidth", 0xff6c, "yatcyrillic", 0x0463, "ycircle", 0x24e8, "ycircumflex", 0x0177, "ydieresis", 0x00ff, "ydotaccent", 0x1e8f, "ydotbelow", 0x1ef5, "yeharabic", 0x064a, "yehbarreearabic", 0x06d2, "yehbarreefinalarabic", 0xfbaf, "yehfinalarabic", 0xfef2, "yehhamzaabovearabic", 0x0626, "yehhamzaabovefinalarabic", 0xfe8a, "yehhamzaaboveinitialarabic", 0xfe8b, "yehhamzaabovemedialarabic", 0xfe8c, "yehinitialarabic", 0xfef3, "yehmedialarabic", 0xfef4, "yehmeeminitialarabic", 0xfcdd, "yehmeemisolatedarabic", 0xfc58, "yehnoonfinalarabic", 0xfc94, "yehthreedotsbelowarabic", 0x06d1, "yekorean", 0x3156, "yen", 0x00a5, "yenmonospace", 0xffe5, "yeokorean", 0x3155, "yeorinhieuhkorean", 0x3186, "yerahbenyomohebrew", 0x05aa, "yerahbenyomolefthebrew", 0x05aa, "yericyrillic", 0x044b, "yerudieresiscyrillic", 0x04f9, "yesieungkorean", 0x3181, "yesieungpansioskorean", 0x3183, "yesieungsioskorean", 0x3182, "yetivhebrew", 0x059a, "ygrave", 0x1ef3, "yhook", 0x01b4, "yhookabove", 0x1ef7, "yiarmenian", 0x0575, "yicyrillic", 0x0457, "yikorean", 0x3162, "yinyang", 0x262f, "yiwnarmenian", 0x0582, "ymonospace", 0xff59, "yod", 0x05d9, "yoddagesh", 0xfb39, "yoddageshhebrew", 0xfb39, "yodhebrew", 0x05d9, "yodyodhebrew", 0x05f2, "yodyodpatahhebrew", 0xfb1f, "yohiragana", 0x3088, "yoikorean", 0x3189, "yokatakana", 0x30e8, "yokatakanahalfwidth", 0xff96, "yokorean", 0x315b, "yosmallhiragana", 0x3087, "yosmallkatakana", 0x30e7, "yosmallkatakanahalfwidth", 0xff6e, "yotgreek", 0x03f3, "yoyaekorean", 0x3188, "yoyakorean", 0x3187, "yoyakthai", 0x0e22, "yoyingthai", 0x0e0d, "yparen", 0x24b4, "ypogegrammeni", 0x037a, "ypogegrammenigreekcmb", 0x0345, "yr", 0x01a6, "yring", 0x1e99, "ysuperior", 0x02b8, "ytilde", 0x1ef9, "yturned", 0x028e, "yuhiragana", 0x3086, "yuikorean", 0x318c, "yukatakana", 0x30e6, "yukatakanahalfwidth", 0xff95, "yukorean", 0x3160, "yusbigcyrillic", 0x046b, "yusbigiotifiedcyrillic", 0x046d, "yuslittlecyrillic", 0x0467, "yuslittleiotifiedcyrillic", 0x0469, "yusmallhiragana", 0x3085, "yusmallkatakana", 0x30e5, "yusmallkatakanahalfwidth", 0xff6d, "yuyekorean", 0x318b, "yuyeokorean", 0x318a, "yyabengali", 0x09df, "yyadeva", 0x095f, "z", 0x007a, "zaarmenian", 0x0566, "zacute", 0x017a, "zadeva", 0x095b, "zagurmukhi", 0x0a5b, "zaharabic", 0x0638, "zahfinalarabic", 0xfec6, "zahinitialarabic", 0xfec7, "zahiragana", 0x3056, "zahmedialarabic", 0xfec8, "zainarabic", 0x0632, "zainfinalarabic", 0xfeb0, "zakatakana", 0x30b6, "zaqefgadolhebrew", 0x0595, "zaqefqatanhebrew", 0x0594, "zarqahebrew", 0x0598, "zayin", 0x05d6, "zayindagesh", 0xfb36, "zayindageshhebrew", 0xfb36, "zayinhebrew", 0x05d6, "zbopomofo", 0x3117, "zcaron", 0x017e, "zcircle", 0x24e9, "zcircumflex", 0x1e91, "zcurl", 0x0291, "zdot", 0x017c, "zdotaccent", 0x017c, "zdotbelow", 0x1e93, "zecyrillic", 0x0437, "zedescendercyrillic", 0x0499, "zedieresiscyrillic", 0x04df, "zehiragana", 0x305c, "zekatakana", 0x30bc, "zero", 0x0030, "zeroarabic", 0x0660, "zerobengali", 0x09e6, "zerodeva", 0x0966, "zerogujarati", 0x0ae6, "zerogurmukhi", 0x0a66, "zerohackarabic", 0x0660, "zeroinferior", 0x2080, "zeromonospace", 0xff10, "zerooldstyle", 0xf730, "zeropersian", 0x06f0, "zerosuperior", 0x2070, "zerothai", 0x0e50, "zerowidthjoiner", 0xfeff, "zerowidthnonjoiner", 0x200c, "zerowidthspace", 0x200b, "zeta", 0x03b6, "zhbopomofo", 0x3113, "zhearmenian", 0x056a, "zhebrevecyrillic", 0x04c2, "zhecyrillic", 0x0436, "zhedescendercyrillic", 0x0497, "zhedieresiscyrillic", 0x04dd, "zihiragana", 0x3058, "zikatakana", 0x30b8, "zinorhebrew", 0x05ae, "zlinebelow", 0x1e95, "zmonospace", 0xff5a, "zohiragana", 0x305e, "zokatakana", 0x30be, "zparen", 0x24b5, "zretroflexhook", 0x0290, "zstroke", 0x01b6, "zuhiragana", 0x305a, "zukatakana", 0x30ba, ".notdef", 0x0000, "angbracketleftbig", 0x2329, "angbracketleftBig", 0x2329, "angbracketleftbigg", 0x2329, "angbracketleftBigg", 0x2329, "angbracketrightBig", 0x232a, "angbracketrightbig", 0x232a, "angbracketrightBigg", 0x232a, "angbracketrightbigg", 0x232a, "arrowhookleft", 0x21aa, "arrowhookright", 0x21a9, "arrowlefttophalf", 0x21bc, "arrowleftbothalf", 0x21bd, "arrownortheast", 0x2197, "arrownorthwest", 0x2196, "arrowrighttophalf", 0x21c0, "arrowrightbothalf", 0x21c1, "arrowsoutheast", 0x2198, "arrowsouthwest", 0x2199, "backslashbig", 0x2216, "backslashBig", 0x2216, "backslashBigg", 0x2216, "backslashbigg", 0x2216, "bardbl", 0x2016, "bracehtipdownleft", 0xfe37, "bracehtipdownright", 0xfe37, "bracehtipupleft", 0xfe38, "bracehtipupright", 0xfe38, "braceleftBig", 0x007b, "braceleftbig", 0x007b, "braceleftbigg", 0x007b, "braceleftBigg", 0x007b, "bracerightBig", 0x007d, "bracerightbig", 0x007d, "bracerightbigg", 0x007d, "bracerightBigg", 0x007d, "bracketleftbig", 0x005b, "bracketleftBig", 0x005b, "bracketleftbigg", 0x005b, "bracketleftBigg", 0x005b, "bracketrightBig", 0x005d, "bracketrightbig", 0x005d, "bracketrightbigg", 0x005d, "bracketrightBigg", 0x005d, "ceilingleftbig", 0x2308, "ceilingleftBig", 0x2308, "ceilingleftBigg", 0x2308, "ceilingleftbigg", 0x2308, "ceilingrightbig", 0x2309, "ceilingrightBig", 0x2309, "ceilingrightbigg", 0x2309, "ceilingrightBigg", 0x2309, "circledotdisplay", 0x2299, "circledottext", 0x2299, "circlemultiplydisplay", 0x2297, "circlemultiplytext", 0x2297, "circleplusdisplay", 0x2295, "circleplustext", 0x2295, "contintegraldisplay", 0x222e, "contintegraltext", 0x222e, "coproductdisplay", 0x2210, "coproducttext", 0x2210, "floorleftBig", 0x230a, "floorleftbig", 0x230a, "floorleftbigg", 0x230a, "floorleftBigg", 0x230a, "floorrightbig", 0x230b, "floorrightBig", 0x230b, "floorrightBigg", 0x230b, "floorrightbigg", 0x230b, "hatwide", 0x0302, "hatwider", 0x0302, "hatwidest", 0x0302, "intercal", 0x1d40, "integraldisplay", 0x222b, "integraltext", 0x222b, "intersectiondisplay", 0x22c2, "intersectiontext", 0x22c2, "logicalanddisplay", 0x2227, "logicalandtext", 0x2227, "logicalordisplay", 0x2228, "logicalortext", 0x2228, "parenleftBig", 0x0028, "parenleftbig", 0x0028, "parenleftBigg", 0x0028, "parenleftbigg", 0x0028, "parenrightBig", 0x0029, "parenrightbig", 0x0029, "parenrightBigg", 0x0029, "parenrightbigg", 0x0029, "prime", 0x2032, "productdisplay", 0x220f, "producttext", 0x220f, "radicalbig", 0x221a, "radicalBig", 0x221a, "radicalBigg", 0x221a, "radicalbigg", 0x221a, "radicalbt", 0x221a, "radicaltp", 0x221a, "radicalvertex", 0x221a, "slashbig", 0x002f, "slashBig", 0x002f, "slashBigg", 0x002f, "slashbigg", 0x002f, "summationdisplay", 0x2211, "summationtext", 0x2211, "tildewide", 0x02dc, "tildewider", 0x02dc, "tildewidest", 0x02dc, "uniondisplay", 0x22c3, "unionmultidisplay", 0x228e, "unionmultitext", 0x228e, "unionsqdisplay", 0x2294, "unionsqtext", 0x2294, "uniontext", 0x22c3, "vextenddouble", 0x2225, "vextendsingle", 0x2223 ]; }); var getDingbatsGlyphsUnicode = (0,_core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getArrayLookupTableFactory)(function () { return [ "space", 0x0020, "a1", 0x2701, "a2", 0x2702, "a202", 0x2703, "a3", 0x2704, "a4", 0x260e, "a5", 0x2706, "a119", 0x2707, "a118", 0x2708, "a117", 0x2709, "a11", 0x261b, "a12", 0x261e, "a13", 0x270c, "a14", 0x270d, "a15", 0x270e, "a16", 0x270f, "a105", 0x2710, "a17", 0x2711, "a18", 0x2712, "a19", 0x2713, "a20", 0x2714, "a21", 0x2715, "a22", 0x2716, "a23", 0x2717, "a24", 0x2718, "a25", 0x2719, "a26", 0x271a, "a27", 0x271b, "a28", 0x271c, "a6", 0x271d, "a7", 0x271e, "a8", 0x271f, "a9", 0x2720, "a10", 0x2721, "a29", 0x2722, "a30", 0x2723, "a31", 0x2724, "a32", 0x2725, "a33", 0x2726, "a34", 0x2727, "a35", 0x2605, "a36", 0x2729, "a37", 0x272a, "a38", 0x272b, "a39", 0x272c, "a40", 0x272d, "a41", 0x272e, "a42", 0x272f, "a43", 0x2730, "a44", 0x2731, "a45", 0x2732, "a46", 0x2733, "a47", 0x2734, "a48", 0x2735, "a49", 0x2736, "a50", 0x2737, "a51", 0x2738, "a52", 0x2739, "a53", 0x273a, "a54", 0x273b, "a55", 0x273c, "a56", 0x273d, "a57", 0x273e, "a58", 0x273f, "a59", 0x2740, "a60", 0x2741, "a61", 0x2742, "a62", 0x2743, "a63", 0x2744, "a64", 0x2745, "a65", 0x2746, "a66", 0x2747, "a67", 0x2748, "a68", 0x2749, "a69", 0x274a, "a70", 0x274b, "a71", 0x25cf, "a72", 0x274d, "a73", 0x25a0, "a74", 0x274f, "a203", 0x2750, "a75", 0x2751, "a204", 0x2752, "a76", 0x25b2, "a77", 0x25bc, "a78", 0x25c6, "a79", 0x2756, "a81", 0x25d7, "a82", 0x2758, "a83", 0x2759, "a84", 0x275a, "a97", 0x275b, "a98", 0x275c, "a99", 0x275d, "a100", 0x275e, "a101", 0x2761, "a102", 0x2762, "a103", 0x2763, "a104", 0x2764, "a106", 0x2765, "a107", 0x2766, "a108", 0x2767, "a112", 0x2663, "a111", 0x2666, "a110", 0x2665, "a109", 0x2660, "a120", 0x2460, "a121", 0x2461, "a122", 0x2462, "a123", 0x2463, "a124", 0x2464, "a125", 0x2465, "a126", 0x2466, "a127", 0x2467, "a128", 0x2468, "a129", 0x2469, "a130", 0x2776, "a131", 0x2777, "a132", 0x2778, "a133", 0x2779, "a134", 0x277a, "a135", 0x277b, "a136", 0x277c, "a137", 0x277d, "a138", 0x277e, "a139", 0x277f, "a140", 0x2780, "a141", 0x2781, "a142", 0x2782, "a143", 0x2783, "a144", 0x2784, "a145", 0x2785, "a146", 0x2786, "a147", 0x2787, "a148", 0x2788, "a149", 0x2789, "a150", 0x278a, "a151", 0x278b, "a152", 0x278c, "a153", 0x278d, "a154", 0x278e, "a155", 0x278f, "a156", 0x2790, "a157", 0x2791, "a158", 0x2792, "a159", 0x2793, "a160", 0x2794, "a161", 0x2192, "a163", 0x2194, "a164", 0x2195, "a196", 0x2798, "a165", 0x2799, "a192", 0x279a, "a166", 0x279b, "a167", 0x279c, "a168", 0x279d, "a169", 0x279e, "a170", 0x279f, "a171", 0x27a0, "a172", 0x27a1, "a173", 0x27a2, "a162", 0x27a3, "a174", 0x27a4, "a175", 0x27a5, "a176", 0x27a6, "a177", 0x27a7, "a178", 0x27a8, "a179", 0x27a9, "a193", 0x27aa, "a180", 0x27ab, "a199", 0x27ac, "a181", 0x27ad, "a200", 0x27ae, "a182", 0x27af, "a201", 0x27b1, "a183", 0x27b2, "a184", 0x27b3, "a197", 0x27b4, "a185", 0x27b5, "a194", 0x27b6, "a198", 0x27b7, "a186", 0x27b8, "a195", 0x27b9, "a187", 0x27ba, "a188", 0x27bb, "a189", 0x27bc, "a190", 0x27bd, "a191", 0x27be, "a89", 0x2768, "a90", 0x2769, "a93", 0x276a, "a94", 0x276b, "a91", 0x276c, "a92", 0x276d, "a205", 0x276e, "a85", 0x276f, "a206", 0x2770, "a86", 0x2771, "a87", 0x2772, "a88", 0x2773, "a95", 0x2774, "a96", 0x2775, ".notdef", 0x0000 ]; }); /***/ }), /* 164 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getSymbolsFonts = exports.getSupplementalGlyphMapForCalibri = exports.getSupplementalGlyphMapForArialBlack = exports.getStdFontMap = exports.getSerifFonts = exports.getNonStdFontMap = exports.getGlyphMapForStandardFonts = void 0; var _core_utils = __w_pdfjs_require__(138); var getStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) { t.ArialNarrow = "Helvetica"; t["ArialNarrow-Bold"] = "Helvetica-Bold"; t["ArialNarrow-BoldItalic"] = "Helvetica-BoldOblique"; t["ArialNarrow-Italic"] = "Helvetica-Oblique"; t.ArialBlack = "Helvetica"; t["ArialBlack-Bold"] = "Helvetica-Bold"; t["ArialBlack-BoldItalic"] = "Helvetica-BoldOblique"; t["ArialBlack-Italic"] = "Helvetica-Oblique"; t["Arial-Black"] = "Helvetica"; t["Arial-Black-Bold"] = "Helvetica-Bold"; t["Arial-Black-BoldItalic"] = "Helvetica-BoldOblique"; t["Arial-Black-Italic"] = "Helvetica-Oblique"; t.Arial = "Helvetica"; t["Arial-Bold"] = "Helvetica-Bold"; t["Arial-BoldItalic"] = "Helvetica-BoldOblique"; t["Arial-Italic"] = "Helvetica-Oblique"; t["Arial-BoldItalicMT"] = "Helvetica-BoldOblique"; t["Arial-BoldMT"] = "Helvetica-Bold"; t["Arial-ItalicMT"] = "Helvetica-Oblique"; t.ArialMT = "Helvetica"; t["Courier-Bold"] = "Courier-Bold"; t["Courier-BoldItalic"] = "Courier-BoldOblique"; t["Courier-Italic"] = "Courier-Oblique"; t.CourierNew = "Courier"; t["CourierNew-Bold"] = "Courier-Bold"; t["CourierNew-BoldItalic"] = "Courier-BoldOblique"; t["CourierNew-Italic"] = "Courier-Oblique"; t["CourierNewPS-BoldItalicMT"] = "Courier-BoldOblique"; t["CourierNewPS-BoldMT"] = "Courier-Bold"; t["CourierNewPS-ItalicMT"] = "Courier-Oblique"; t.CourierNewPSMT = "Courier"; t.Helvetica = "Helvetica"; t["Helvetica-Bold"] = "Helvetica-Bold"; t["Helvetica-BoldItalic"] = "Helvetica-BoldOblique"; t["Helvetica-BoldOblique"] = "Helvetica-BoldOblique"; t["Helvetica-Italic"] = "Helvetica-Oblique"; t["Helvetica-Oblique"] = "Helvetica-Oblique"; t["Symbol-Bold"] = "Symbol"; t["Symbol-BoldItalic"] = "Symbol"; t["Symbol-Italic"] = "Symbol"; t.TimesNewRoman = "Times-Roman"; t["TimesNewRoman-Bold"] = "Times-Bold"; t["TimesNewRoman-BoldItalic"] = "Times-BoldItalic"; t["TimesNewRoman-Italic"] = "Times-Italic"; t.TimesNewRomanPS = "Times-Roman"; t["TimesNewRomanPS-Bold"] = "Times-Bold"; t["TimesNewRomanPS-BoldItalic"] = "Times-BoldItalic"; t["TimesNewRomanPS-BoldItalicMT"] = "Times-BoldItalic"; t["TimesNewRomanPS-BoldMT"] = "Times-Bold"; t["TimesNewRomanPS-Italic"] = "Times-Italic"; t["TimesNewRomanPS-ItalicMT"] = "Times-Italic"; t.TimesNewRomanPSMT = "Times-Roman"; t["TimesNewRomanPSMT-Bold"] = "Times-Bold"; t["TimesNewRomanPSMT-BoldItalic"] = "Times-BoldItalic"; t["TimesNewRomanPSMT-Italic"] = "Times-Italic"; }); exports.getStdFontMap = getStdFontMap; var getNonStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) { t.Calibri = "Helvetica"; t["Calibri-Bold"] = "Helvetica-Bold"; t["Calibri-BoldItalic"] = "Helvetica-BoldOblique"; t["Calibri-Italic"] = "Helvetica-Oblique"; t.CenturyGothic = "Helvetica"; t["CenturyGothic-Bold"] = "Helvetica-Bold"; t["CenturyGothic-BoldItalic"] = "Helvetica-BoldOblique"; t["CenturyGothic-Italic"] = "Helvetica-Oblique"; t.ComicSansMS = "Comic Sans MS"; t["ComicSansMS-Bold"] = "Comic Sans MS-Bold"; t["ComicSansMS-BoldItalic"] = "Comic Sans MS-BoldItalic"; t["ComicSansMS-Italic"] = "Comic Sans MS-Italic"; t.LucidaConsole = "Courier"; t["LucidaConsole-Bold"] = "Courier-Bold"; t["LucidaConsole-BoldItalic"] = "Courier-BoldOblique"; t["LucidaConsole-Italic"] = "Courier-Oblique"; t["LucidaSans-Demi"] = "Helvetica-Bold"; t["MS-Gothic"] = "MS Gothic"; t["MS-Gothic-Bold"] = "MS Gothic-Bold"; t["MS-Gothic-BoldItalic"] = "MS Gothic-BoldItalic"; t["MS-Gothic-Italic"] = "MS Gothic-Italic"; t["MS-Mincho"] = "MS Mincho"; t["MS-Mincho-Bold"] = "MS Mincho-Bold"; t["MS-Mincho-BoldItalic"] = "MS Mincho-BoldItalic"; t["MS-Mincho-Italic"] = "MS Mincho-Italic"; t["MS-PGothic"] = "MS PGothic"; t["MS-PGothic-Bold"] = "MS PGothic-Bold"; t["MS-PGothic-BoldItalic"] = "MS PGothic-BoldItalic"; t["MS-PGothic-Italic"] = "MS PGothic-Italic"; t["MS-PMincho"] = "MS PMincho"; t["MS-PMincho-Bold"] = "MS PMincho-Bold"; t["MS-PMincho-BoldItalic"] = "MS PMincho-BoldItalic"; t["MS-PMincho-Italic"] = "MS PMincho-Italic"; t.NuptialScript = "Times-Italic"; t.SegoeUISymbol = "Helvetica"; t.Wingdings = "ZapfDingbats"; t["Wingdings-Regular"] = "ZapfDingbats"; }); exports.getNonStdFontMap = getNonStdFontMap; var getSerifFonts = (0, _core_utils.getLookupTableFactory)(function (t) { t["Adobe Jenson"] = true; t["Adobe Text"] = true; t.Albertus = true; t.Aldus = true; t.Alexandria = true; t.Algerian = true; t["American Typewriter"] = true; t.Antiqua = true; t.Apex = true; t.Arno = true; t.Aster = true; t.Aurora = true; t.Baskerville = true; t.Bell = true; t.Bembo = true; t["Bembo Schoolbook"] = true; t.Benguiat = true; t["Berkeley Old Style"] = true; t["Bernhard Modern"] = true; t["Berthold City"] = true; t.Bodoni = true; t["Bauer Bodoni"] = true; t["Book Antiqua"] = true; t.Bookman = true; t["Bordeaux Roman"] = true; t["Californian FB"] = true; t.Calisto = true; t.Calvert = true; t.Capitals = true; t.Cambria = true; t.Cartier = true; t.Caslon = true; t.Catull = true; t.Centaur = true; t["Century Old Style"] = true; t["Century Schoolbook"] = true; t.Chaparral = true; t["Charis SIL"] = true; t.Cheltenham = true; t["Cholla Slab"] = true; t.Clarendon = true; t.Clearface = true; t.Cochin = true; t.Colonna = true; t["Computer Modern"] = true; t["Concrete Roman"] = true; t.Constantia = true; t["Cooper Black"] = true; t.Corona = true; t.Ecotype = true; t.Egyptienne = true; t.Elephant = true; t.Excelsior = true; t.Fairfield = true; t["FF Scala"] = true; t.Folkard = true; t.Footlight = true; t.FreeSerif = true; t["Friz Quadrata"] = true; t.Garamond = true; t.Gentium = true; t.Georgia = true; t.Gloucester = true; t["Goudy Old Style"] = true; t["Goudy Schoolbook"] = true; t["Goudy Pro Font"] = true; t.Granjon = true; t["Guardian Egyptian"] = true; t.Heather = true; t.Hercules = true; t["High Tower Text"] = true; t.Hiroshige = true; t["Hoefler Text"] = true; t["Humana Serif"] = true; t.Imprint = true; t["Ionic No. 5"] = true; t.Janson = true; t.Joanna = true; t.Korinna = true; t.Lexicon = true; t["Liberation Serif"] = true; t["Linux Libertine"] = true; t.Literaturnaya = true; t.Lucida = true; t["Lucida Bright"] = true; t.Melior = true; t.Memphis = true; t.Miller = true; t.Minion = true; t.Modern = true; t["Mona Lisa"] = true; t["Mrs Eaves"] = true; t["MS Serif"] = true; t["Museo Slab"] = true; t["New York"] = true; t["Nimbus Roman"] = true; t["NPS Rawlinson Roadway"] = true; t.NuptialScript = true; t.Palatino = true; t.Perpetua = true; t.Plantin = true; t["Plantin Schoolbook"] = true; t.Playbill = true; t["Poor Richard"] = true; t["Rawlinson Roadway"] = true; t.Renault = true; t.Requiem = true; t.Rockwell = true; t.Roman = true; t["Rotis Serif"] = true; t.Sabon = true; t.Scala = true; t.Seagull = true; t.Sistina = true; t.Souvenir = true; t.STIX = true; t["Stone Informal"] = true; t["Stone Serif"] = true; t.Sylfaen = true; t.Times = true; t.Trajan = true; t["Trinité"] = true; t["Trump Mediaeval"] = true; t.Utopia = true; t["Vale Type"] = true; t["Bitstream Vera"] = true; t["Vera Serif"] = true; t.Versailles = true; t.Wanted = true; t.Weiss = true; t["Wide Latin"] = true; t.Windsor = true; t.XITS = true; }); exports.getSerifFonts = getSerifFonts; var getSymbolsFonts = (0, _core_utils.getLookupTableFactory)(function (t) { t.Dingbats = true; t.Symbol = true; t.ZapfDingbats = true; }); exports.getSymbolsFonts = getSymbolsFonts; var getGlyphMapForStandardFonts = (0, _core_utils.getLookupTableFactory)(function (t) { t[2] = 10; t[3] = 32; t[4] = 33; t[5] = 34; t[6] = 35; t[7] = 36; t[8] = 37; t[9] = 38; t[10] = 39; t[11] = 40; t[12] = 41; t[13] = 42; t[14] = 43; t[15] = 44; t[16] = 45; t[17] = 46; t[18] = 47; t[19] = 48; t[20] = 49; t[21] = 50; t[22] = 51; t[23] = 52; t[24] = 53; t[25] = 54; t[26] = 55; t[27] = 56; t[28] = 57; t[29] = 58; t[30] = 894; t[31] = 60; t[32] = 61; t[33] = 62; t[34] = 63; t[35] = 64; t[36] = 65; t[37] = 66; t[38] = 67; t[39] = 68; t[40] = 69; t[41] = 70; t[42] = 71; t[43] = 72; t[44] = 73; t[45] = 74; t[46] = 75; t[47] = 76; t[48] = 77; t[49] = 78; t[50] = 79; t[51] = 80; t[52] = 81; t[53] = 82; t[54] = 83; t[55] = 84; t[56] = 85; t[57] = 86; t[58] = 87; t[59] = 88; t[60] = 89; t[61] = 90; t[62] = 91; t[63] = 92; t[64] = 93; t[65] = 94; t[66] = 95; t[67] = 96; t[68] = 97; t[69] = 98; t[70] = 99; t[71] = 100; t[72] = 101; t[73] = 102; t[74] = 103; t[75] = 104; t[76] = 105; t[77] = 106; t[78] = 107; t[79] = 108; t[80] = 109; t[81] = 110; t[82] = 111; t[83] = 112; t[84] = 113; t[85] = 114; t[86] = 115; t[87] = 116; t[88] = 117; t[89] = 118; t[90] = 119; t[91] = 120; t[92] = 121; t[93] = 122; t[94] = 123; t[95] = 124; t[96] = 125; t[97] = 126; t[98] = 196; t[99] = 197; t[100] = 199; t[101] = 201; t[102] = 209; t[103] = 214; t[104] = 220; t[105] = 225; t[106] = 224; t[107] = 226; t[108] = 228; t[109] = 227; t[110] = 229; t[111] = 231; t[112] = 233; t[113] = 232; t[114] = 234; t[115] = 235; t[116] = 237; t[117] = 236; t[118] = 238; t[119] = 239; t[120] = 241; t[121] = 243; t[122] = 242; t[123] = 244; t[124] = 246; t[125] = 245; t[126] = 250; t[127] = 249; t[128] = 251; t[129] = 252; t[130] = 8224; t[131] = 176; t[132] = 162; t[133] = 163; t[134] = 167; t[135] = 8226; t[136] = 182; t[137] = 223; t[138] = 174; t[139] = 169; t[140] = 8482; t[141] = 180; t[142] = 168; t[143] = 8800; t[144] = 198; t[145] = 216; t[146] = 8734; t[147] = 177; t[148] = 8804; t[149] = 8805; t[150] = 165; t[151] = 181; t[152] = 8706; t[153] = 8721; t[154] = 8719; t[156] = 8747; t[157] = 170; t[158] = 186; t[159] = 8486; t[160] = 230; t[161] = 248; t[162] = 191; t[163] = 161; t[164] = 172; t[165] = 8730; t[166] = 402; t[167] = 8776; t[168] = 8710; t[169] = 171; t[170] = 187; t[171] = 8230; t[210] = 218; t[223] = 711; t[224] = 321; t[225] = 322; t[227] = 353; t[229] = 382; t[234] = 253; t[252] = 263; t[253] = 268; t[254] = 269; t[258] = 258; t[260] = 260; t[261] = 261; t[265] = 280; t[266] = 281; t[268] = 283; t[269] = 313; t[275] = 323; t[276] = 324; t[278] = 328; t[284] = 345; t[285] = 346; t[286] = 347; t[292] = 367; t[295] = 377; t[296] = 378; t[298] = 380; t[305] = 963; t[306] = 964; t[307] = 966; t[308] = 8215; t[309] = 8252; t[310] = 8319; t[311] = 8359; t[312] = 8592; t[313] = 8593; t[337] = 9552; t[493] = 1039; t[494] = 1040; t[705] = 1524; t[706] = 8362; t[710] = 64288; t[711] = 64298; t[759] = 1617; t[761] = 1776; t[763] = 1778; t[775] = 1652; t[777] = 1764; t[778] = 1780; t[779] = 1781; t[780] = 1782; t[782] = 771; t[783] = 64726; t[786] = 8363; t[788] = 8532; t[790] = 768; t[791] = 769; t[792] = 768; t[795] = 803; t[797] = 64336; t[798] = 64337; t[799] = 64342; t[800] = 64343; t[801] = 64344; t[802] = 64345; t[803] = 64362; t[804] = 64363; t[805] = 64364; t[2424] = 7821; t[2425] = 7822; t[2426] = 7823; t[2427] = 7824; t[2428] = 7825; t[2429] = 7826; t[2430] = 7827; t[2433] = 7682; t[2678] = 8045; t[2679] = 8046; t[2830] = 1552; t[2838] = 686; t[2840] = 751; t[2842] = 753; t[2843] = 754; t[2844] = 755; t[2846] = 757; t[2856] = 767; t[2857] = 848; t[2858] = 849; t[2862] = 853; t[2863] = 854; t[2864] = 855; t[2865] = 861; t[2866] = 862; t[2906] = 7460; t[2908] = 7462; t[2909] = 7463; t[2910] = 7464; t[2912] = 7466; t[2913] = 7467; t[2914] = 7468; t[2916] = 7470; t[2917] = 7471; t[2918] = 7472; t[2920] = 7474; t[2921] = 7475; t[2922] = 7476; t[2924] = 7478; t[2925] = 7479; t[2926] = 7480; t[2928] = 7482; t[2929] = 7483; t[2930] = 7484; t[2932] = 7486; t[2933] = 7487; t[2934] = 7488; t[2936] = 7490; t[2937] = 7491; t[2938] = 7492; t[2940] = 7494; t[2941] = 7495; t[2942] = 7496; t[2944] = 7498; t[2946] = 7500; t[2948] = 7502; t[2950] = 7504; t[2951] = 7505; t[2952] = 7506; t[2954] = 7508; t[2955] = 7509; t[2956] = 7510; t[2958] = 7512; t[2959] = 7513; t[2960] = 7514; t[2962] = 7516; t[2963] = 7517; t[2964] = 7518; t[2966] = 7520; t[2967] = 7521; t[2968] = 7522; t[2970] = 7524; t[2971] = 7525; t[2972] = 7526; t[2974] = 7528; t[2975] = 7529; t[2976] = 7530; t[2978] = 1537; t[2979] = 1538; t[2980] = 1539; t[2982] = 1549; t[2983] = 1551; t[2984] = 1552; t[2986] = 1554; t[2987] = 1555; t[2988] = 1556; t[2990] = 1623; t[2991] = 1624; t[2995] = 1775; t[2999] = 1791; t[3002] = 64290; t[3003] = 64291; t[3004] = 64292; t[3006] = 64294; t[3007] = 64295; t[3008] = 64296; t[3011] = 1900; t[3014] = 8223; t[3015] = 8244; t[3017] = 7532; t[3018] = 7533; t[3019] = 7534; t[3075] = 7590; t[3076] = 7591; t[3079] = 7594; t[3080] = 7595; t[3083] = 7598; t[3084] = 7599; t[3087] = 7602; t[3088] = 7603; t[3091] = 7606; t[3092] = 7607; t[3095] = 7610; t[3096] = 7611; t[3099] = 7614; t[3100] = 7615; t[3103] = 7618; t[3104] = 7619; t[3107] = 8337; t[3108] = 8338; t[3116] = 1884; t[3119] = 1885; t[3120] = 1885; t[3123] = 1886; t[3124] = 1886; t[3127] = 1887; t[3128] = 1887; t[3131] = 1888; t[3132] = 1888; t[3135] = 1889; t[3136] = 1889; t[3139] = 1890; t[3140] = 1890; t[3143] = 1891; t[3144] = 1891; t[3147] = 1892; t[3148] = 1892; t[3153] = 580; t[3154] = 581; t[3157] = 584; t[3158] = 585; t[3161] = 588; t[3162] = 589; t[3165] = 891; t[3166] = 892; t[3169] = 1274; t[3170] = 1275; t[3173] = 1278; t[3174] = 1279; t[3181] = 7622; t[3182] = 7623; t[3282] = 11799; t[3316] = 578; t[3379] = 42785; t[3393] = 1159; t[3416] = 8377; }); exports.getGlyphMapForStandardFonts = getGlyphMapForStandardFonts; var getSupplementalGlyphMapForArialBlack = (0, _core_utils.getLookupTableFactory)(function (t) { t[227] = 322; t[264] = 261; t[291] = 346; }); exports.getSupplementalGlyphMapForArialBlack = getSupplementalGlyphMapForArialBlack; var getSupplementalGlyphMapForCalibri = (0, _core_utils.getLookupTableFactory)(function (t) { t[1] = 32; t[4] = 65; t[17] = 66; t[18] = 67; t[24] = 68; t[28] = 69; t[38] = 70; t[39] = 71; t[44] = 72; t[47] = 73; t[58] = 74; t[60] = 75; t[62] = 76; t[68] = 77; t[69] = 78; t[75] = 79; t[87] = 80; t[89] = 81; t[90] = 82; t[94] = 83; t[100] = 84; t[104] = 85; t[115] = 86; t[116] = 87; t[121] = 88; t[122] = 89; t[127] = 90; t[258] = 97; t[268] = 261; t[271] = 98; t[272] = 99; t[273] = 263; t[282] = 100; t[286] = 101; t[295] = 281; t[296] = 102; t[336] = 103; t[346] = 104; t[349] = 105; t[361] = 106; t[364] = 107; t[367] = 108; t[371] = 322; t[373] = 109; t[374] = 110; t[381] = 111; t[383] = 243; t[393] = 112; t[395] = 113; t[396] = 114; t[400] = 115; t[401] = 347; t[410] = 116; t[437] = 117; t[448] = 118; t[449] = 119; t[454] = 120; t[455] = 121; t[460] = 122; t[463] = 380; t[853] = 44; t[855] = 58; t[856] = 46; t[876] = 47; t[878] = 45; t[882] = 45; t[894] = 40; t[895] = 41; t[896] = 91; t[897] = 93; t[923] = 64; t[1004] = 48; t[1005] = 49; t[1006] = 50; t[1007] = 51; t[1008] = 52; t[1009] = 53; t[1010] = 54; t[1011] = 55; t[1012] = 56; t[1013] = 57; t[1081] = 37; t[1085] = 43; t[1086] = 45; }); exports.getSupplementalGlyphMapForCalibri = getSupplementalGlyphMapForCalibri; /***/ }), /* 165 */ /***/ ((__unused_webpack_module, __webpack_exports__, __w_pdfjs_require__) => { "use strict"; __w_pdfjs_require__.r(__webpack_exports__); /* harmony export */ __w_pdfjs_require__.d(__webpack_exports__, { /* harmony export */ "getNormalizedUnicodes": () => (/* binding */ getNormalizedUnicodes), /* harmony export */ "getUnicodeForGlyph": () => (/* binding */ getUnicodeForGlyph), /* harmony export */ "getUnicodeRangeFor": () => (/* binding */ getUnicodeRangeFor), /* harmony export */ "mapSpecialUnicodeValues": () => (/* binding */ mapSpecialUnicodeValues), /* harmony export */ "reverseIfRtl": () => (/* binding */ reverseIfRtl) /* harmony export */ }); /* harmony import */ var _core_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __w_pdfjs_require__(138); var getSpecialPUASymbols = (0,_core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getLookupTableFactory)(function (t) { t[63721] = 0x00a9; t[63193] = 0x00a9; t[63720] = 0x00ae; t[63194] = 0x00ae; t[63722] = 0x2122; t[63195] = 0x2122; t[63729] = 0x23a7; t[63730] = 0x23a8; t[63731] = 0x23a9; t[63740] = 0x23ab; t[63741] = 0x23ac; t[63742] = 0x23ad; t[63726] = 0x23a1; t[63727] = 0x23a2; t[63728] = 0x23a3; t[63737] = 0x23a4; t[63738] = 0x23a5; t[63739] = 0x23a6; t[63723] = 0x239b; t[63724] = 0x239c; t[63725] = 0x239d; t[63734] = 0x239e; t[63735] = 0x239f; t[63736] = 0x23a0; }); function mapSpecialUnicodeValues(code) { if (code >= 0xfff0 && code <= 0xffff) { return 0; } else if (code >= 0xf600 && code <= 0xf8ff) { return getSpecialPUASymbols()[code] || code; } else if (code === 0x00ad) { return 0x002d; } return code; } function getUnicodeForGlyph(name, glyphsUnicodeMap) { var unicode = glyphsUnicodeMap[name]; if (unicode !== undefined) { return unicode; } if (!name) { return -1; } if (name[0] === "u") { var nameLen = name.length, hexStr; if (nameLen === 7 && name[1] === "n" && name[2] === "i") { hexStr = name.substring(3); } else if (nameLen >= 5 && nameLen <= 7) { hexStr = name.substring(1); } else { return -1; } if (hexStr === hexStr.toUpperCase()) { unicode = parseInt(hexStr, 16); if (unicode >= 0) { return unicode; } } } return -1; } var UnicodeRanges = [ { begin: 0x0000, end: 0x007f }, { begin: 0x0080, end: 0x00ff }, { begin: 0x0100, end: 0x017f }, { begin: 0x0180, end: 0x024f }, { begin: 0x0250, end: 0x02af }, { begin: 0x02b0, end: 0x02ff }, { begin: 0x0300, end: 0x036f }, { begin: 0x0370, end: 0x03ff }, { begin: 0x2c80, end: 0x2cff }, { begin: 0x0400, end: 0x04ff }, { begin: 0x0530, end: 0x058f }, { begin: 0x0590, end: 0x05ff }, { begin: 0xa500, end: 0xa63f }, { begin: 0x0600, end: 0x06ff }, { begin: 0x07c0, end: 0x07ff }, { begin: 0x0900, end: 0x097f }, { begin: 0x0980, end: 0x09ff }, { begin: 0x0a00, end: 0x0a7f }, { begin: 0x0a80, end: 0x0aff }, { begin: 0x0b00, end: 0x0b7f }, { begin: 0x0b80, end: 0x0bff }, { begin: 0x0c00, end: 0x0c7f }, { begin: 0x0c80, end: 0x0cff }, { begin: 0x0d00, end: 0x0d7f }, { begin: 0x0e00, end: 0x0e7f }, { begin: 0x0e80, end: 0x0eff }, { begin: 0x10a0, end: 0x10ff }, { begin: 0x1b00, end: 0x1b7f }, { begin: 0x1100, end: 0x11ff }, { begin: 0x1e00, end: 0x1eff }, { begin: 0x1f00, end: 0x1fff }, { begin: 0x2000, end: 0x206f }, { begin: 0x2070, end: 0x209f }, { begin: 0x20a0, end: 0x20cf }, { begin: 0x20d0, end: 0x20ff }, { begin: 0x2100, end: 0x214f }, { begin: 0x2150, end: 0x218f }, { begin: 0x2190, end: 0x21ff }, { begin: 0x2200, end: 0x22ff }, { begin: 0x2300, end: 0x23ff }, { begin: 0x2400, end: 0x243f }, { begin: 0x2440, end: 0x245f }, { begin: 0x2460, end: 0x24ff }, { begin: 0x2500, end: 0x257f }, { begin: 0x2580, end: 0x259f }, { begin: 0x25a0, end: 0x25ff }, { begin: 0x2600, end: 0x26ff }, { begin: 0x2700, end: 0x27bf }, { begin: 0x3000, end: 0x303f }, { begin: 0x3040, end: 0x309f }, { begin: 0x30a0, end: 0x30ff }, { begin: 0x3100, end: 0x312f }, { begin: 0x3130, end: 0x318f }, { begin: 0xa840, end: 0xa87f }, { begin: 0x3200, end: 0x32ff }, { begin: 0x3300, end: 0x33ff }, { begin: 0xac00, end: 0xd7af }, { begin: 0xd800, end: 0xdfff }, { begin: 0x10900, end: 0x1091f }, { begin: 0x4e00, end: 0x9fff }, { begin: 0xe000, end: 0xf8ff }, { begin: 0x31c0, end: 0x31ef }, { begin: 0xfb00, end: 0xfb4f }, { begin: 0xfb50, end: 0xfdff }, { begin: 0xfe20, end: 0xfe2f }, { begin: 0xfe10, end: 0xfe1f }, { begin: 0xfe50, end: 0xfe6f }, { begin: 0xfe70, end: 0xfeff }, { begin: 0xff00, end: 0xffef }, { begin: 0xfff0, end: 0xffff }, { begin: 0x0f00, end: 0x0fff }, { begin: 0x0700, end: 0x074f }, { begin: 0x0780, end: 0x07bf }, { begin: 0x0d80, end: 0x0dff }, { begin: 0x1000, end: 0x109f }, { begin: 0x1200, end: 0x137f }, { begin: 0x13a0, end: 0x13ff }, { begin: 0x1400, end: 0x167f }, { begin: 0x1680, end: 0x169f }, { begin: 0x16a0, end: 0x16ff }, { begin: 0x1780, end: 0x17ff }, { begin: 0x1800, end: 0x18af }, { begin: 0x2800, end: 0x28ff }, { begin: 0xa000, end: 0xa48f }, { begin: 0x1700, end: 0x171f }, { begin: 0x10300, end: 0x1032f }, { begin: 0x10330, end: 0x1034f }, { begin: 0x10400, end: 0x1044f }, { begin: 0x1d000, end: 0x1d0ff }, { begin: 0x1d400, end: 0x1d7ff }, { begin: 0xff000, end: 0xffffd }, { begin: 0xfe00, end: 0xfe0f }, { begin: 0xe0000, end: 0xe007f }, { begin: 0x1900, end: 0x194f }, { begin: 0x1950, end: 0x197f }, { begin: 0x1980, end: 0x19df }, { begin: 0x1a00, end: 0x1a1f }, { begin: 0x2c00, end: 0x2c5f }, { begin: 0x2d30, end: 0x2d7f }, { begin: 0x4dc0, end: 0x4dff }, { begin: 0xa800, end: 0xa82f }, { begin: 0x10000, end: 0x1007f }, { begin: 0x10140, end: 0x1018f }, { begin: 0x10380, end: 0x1039f }, { begin: 0x103a0, end: 0x103df }, { begin: 0x10450, end: 0x1047f }, { begin: 0x10480, end: 0x104af }, { begin: 0x10800, end: 0x1083f }, { begin: 0x10a00, end: 0x10a5f }, { begin: 0x1d300, end: 0x1d35f }, { begin: 0x12000, end: 0x123ff }, { begin: 0x1d360, end: 0x1d37f }, { begin: 0x1b80, end: 0x1bbf }, { begin: 0x1c00, end: 0x1c4f }, { begin: 0x1c50, end: 0x1c7f }, { begin: 0xa880, end: 0xa8df }, { begin: 0xa900, end: 0xa92f }, { begin: 0xa930, end: 0xa95f }, { begin: 0xaa00, end: 0xaa5f }, { begin: 0x10190, end: 0x101cf }, { begin: 0x101d0, end: 0x101ff }, { begin: 0x102a0, end: 0x102df }, { begin: 0x1f030, end: 0x1f09f } ]; function getUnicodeRangeFor(value) { for (var i = 0, ii = UnicodeRanges.length; i < ii; i++) { var range = UnicodeRanges[i]; if (value >= range.begin && value < range.end) { return i; } } return -1; } function isRTLRangeFor(value) { var range = UnicodeRanges[13]; if (value >= range.begin && value < range.end) { return true; } range = UnicodeRanges[11]; if (value >= range.begin && value < range.end) { return true; } return false; } var getNormalizedUnicodes = (0,_core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getArrayLookupTableFactory)(function () { return [ "\u00A8", "\u0020\u0308", "\u00AF", "\u0020\u0304", "\u00B4", "\u0020\u0301", "\u00B5", "\u03BC", "\u00B8", "\u0020\u0327", "\u0132", "\u0049\u004A", "\u0133", "\u0069\u006A", "\u013F", "\u004C\u00B7", "\u0140", "\u006C\u00B7", "\u0149", "\u02BC\u006E", "\u017F", "\u0073", "\u01C4", "\u0044\u017D", "\u01C5", "\u0044\u017E", "\u01C6", "\u0064\u017E", "\u01C7", "\u004C\u004A", "\u01C8", "\u004C\u006A", "\u01C9", "\u006C\u006A", "\u01CA", "\u004E\u004A", "\u01CB", "\u004E\u006A", "\u01CC", "\u006E\u006A", "\u01F1", "\u0044\u005A", "\u01F2", "\u0044\u007A", "\u01F3", "\u0064\u007A", "\u02D8", "\u0020\u0306", "\u02D9", "\u0020\u0307", "\u02DA", "\u0020\u030A", "\u02DB", "\u0020\u0328", "\u02DC", "\u0020\u0303", "\u02DD", "\u0020\u030B", "\u037A", "\u0020\u0345", "\u0384", "\u0020\u0301", "\u03D0", "\u03B2", "\u03D1", "\u03B8", "\u03D2", "\u03A5", "\u03D5", "\u03C6", "\u03D6", "\u03C0", "\u03F0", "\u03BA", "\u03F1", "\u03C1", "\u03F2", "\u03C2", "\u03F4", "\u0398", "\u03F5", "\u03B5", "\u03F9", "\u03A3", "\u0587", "\u0565\u0582", "\u0675", "\u0627\u0674", "\u0676", "\u0648\u0674", "\u0677", "\u06C7\u0674", "\u0678", "\u064A\u0674", "\u0E33", "\u0E4D\u0E32", "\u0EB3", "\u0ECD\u0EB2", "\u0EDC", "\u0EAB\u0E99", "\u0EDD", "\u0EAB\u0EA1", "\u0F77", "\u0FB2\u0F81", "\u0F79", "\u0FB3\u0F81", "\u1E9A", "\u0061\u02BE", "\u1FBD", "\u0020\u0313", "\u1FBF", "\u0020\u0313", "\u1FC0", "\u0020\u0342", "\u1FFE", "\u0020\u0314", "\u2002", "\u0020", "\u2003", "\u0020", "\u2004", "\u0020", "\u2005", "\u0020", "\u2006", "\u0020", "\u2008", "\u0020", "\u2009", "\u0020", "\u200A", "\u0020", "\u2017", "\u0020\u0333", "\u2024", "\u002E", "\u2025", "\u002E\u002E", "\u2026", "\u002E\u002E\u002E", "\u2033", "\u2032\u2032", "\u2034", "\u2032\u2032\u2032", "\u2036", "\u2035\u2035", "\u2037", "\u2035\u2035\u2035", "\u203C", "\u0021\u0021", "\u203E", "\u0020\u0305", "\u2047", "\u003F\u003F", "\u2048", "\u003F\u0021", "\u2049", "\u0021\u003F", "\u2057", "\u2032\u2032\u2032\u2032", "\u205F", "\u0020", "\u20A8", "\u0052\u0073", "\u2100", "\u0061\u002F\u0063", "\u2101", "\u0061\u002F\u0073", "\u2103", "\u00B0\u0043", "\u2105", "\u0063\u002F\u006F", "\u2106", "\u0063\u002F\u0075", "\u2107", "\u0190", "\u2109", "\u00B0\u0046", "\u2116", "\u004E\u006F", "\u2121", "\u0054\u0045\u004C", "\u2135", "\u05D0", "\u2136", "\u05D1", "\u2137", "\u05D2", "\u2138", "\u05D3", "\u213B", "\u0046\u0041\u0058", "\u2160", "\u0049", "\u2161", "\u0049\u0049", "\u2162", "\u0049\u0049\u0049", "\u2163", "\u0049\u0056", "\u2164", "\u0056", "\u2165", "\u0056\u0049", "\u2166", "\u0056\u0049\u0049", "\u2167", "\u0056\u0049\u0049\u0049", "\u2168", "\u0049\u0058", "\u2169", "\u0058", "\u216A", "\u0058\u0049", "\u216B", "\u0058\u0049\u0049", "\u216C", "\u004C", "\u216D", "\u0043", "\u216E", "\u0044", "\u216F", "\u004D", "\u2170", "\u0069", "\u2171", "\u0069\u0069", "\u2172", "\u0069\u0069\u0069", "\u2173", "\u0069\u0076", "\u2174", "\u0076", "\u2175", "\u0076\u0069", "\u2176", "\u0076\u0069\u0069", "\u2177", "\u0076\u0069\u0069\u0069", "\u2178", "\u0069\u0078", "\u2179", "\u0078", "\u217A", "\u0078\u0069", "\u217B", "\u0078\u0069\u0069", "\u217C", "\u006C", "\u217D", "\u0063", "\u217E", "\u0064", "\u217F", "\u006D", "\u222C", "\u222B\u222B", "\u222D", "\u222B\u222B\u222B", "\u222F", "\u222E\u222E", "\u2230", "\u222E\u222E\u222E", "\u2474", "\u0028\u0031\u0029", "\u2475", "\u0028\u0032\u0029", "\u2476", "\u0028\u0033\u0029", "\u2477", "\u0028\u0034\u0029", "\u2478", "\u0028\u0035\u0029", "\u2479", "\u0028\u0036\u0029", "\u247A", "\u0028\u0037\u0029", "\u247B", "\u0028\u0038\u0029", "\u247C", "\u0028\u0039\u0029", "\u247D", "\u0028\u0031\u0030\u0029", "\u247E", "\u0028\u0031\u0031\u0029", "\u247F", "\u0028\u0031\u0032\u0029", "\u2480", "\u0028\u0031\u0033\u0029", "\u2481", "\u0028\u0031\u0034\u0029", "\u2482", "\u0028\u0031\u0035\u0029", "\u2483", "\u0028\u0031\u0036\u0029", "\u2484", "\u0028\u0031\u0037\u0029", "\u2485", "\u0028\u0031\u0038\u0029", "\u2486", "\u0028\u0031\u0039\u0029", "\u2487", "\u0028\u0032\u0030\u0029", "\u2488", "\u0031\u002E", "\u2489", "\u0032\u002E", "\u248A", "\u0033\u002E", "\u248B", "\u0034\u002E", "\u248C", "\u0035\u002E", "\u248D", "\u0036\u002E", "\u248E", "\u0037\u002E", "\u248F", "\u0038\u002E", "\u2490", "\u0039\u002E", "\u2491", "\u0031\u0030\u002E", "\u2492", "\u0031\u0031\u002E", "\u2493", "\u0031\u0032\u002E", "\u2494", "\u0031\u0033\u002E", "\u2495", "\u0031\u0034\u002E", "\u2496", "\u0031\u0035\u002E", "\u2497", "\u0031\u0036\u002E", "\u2498", "\u0031\u0037\u002E", "\u2499", "\u0031\u0038\u002E", "\u249A", "\u0031\u0039\u002E", "\u249B", "\u0032\u0030\u002E", "\u249C", "\u0028\u0061\u0029", "\u249D", "\u0028\u0062\u0029", "\u249E", "\u0028\u0063\u0029", "\u249F", "\u0028\u0064\u0029", "\u24A0", "\u0028\u0065\u0029", "\u24A1", "\u0028\u0066\u0029", "\u24A2", "\u0028\u0067\u0029", "\u24A3", "\u0028\u0068\u0029", "\u24A4", "\u0028\u0069\u0029", "\u24A5", "\u0028\u006A\u0029", "\u24A6", "\u0028\u006B\u0029", "\u24A7", "\u0028\u006C\u0029", "\u24A8", "\u0028\u006D\u0029", "\u24A9", "\u0028\u006E\u0029", "\u24AA", "\u0028\u006F\u0029", "\u24AB", "\u0028\u0070\u0029", "\u24AC", "\u0028\u0071\u0029", "\u24AD", "\u0028\u0072\u0029", "\u24AE", "\u0028\u0073\u0029", "\u24AF", "\u0028\u0074\u0029", "\u24B0", "\u0028\u0075\u0029", "\u24B1", "\u0028\u0076\u0029", "\u24B2", "\u0028\u0077\u0029", "\u24B3", "\u0028\u0078\u0029", "\u24B4", "\u0028\u0079\u0029", "\u24B5", "\u0028\u007A\u0029", "\u2A0C", "\u222B\u222B\u222B\u222B", "\u2A74", "\u003A\u003A\u003D", "\u2A75", "\u003D\u003D", "\u2A76", "\u003D\u003D\u003D", "\u2E9F", "\u6BCD", "\u2EF3", "\u9F9F", "\u2F00", "\u4E00", "\u2F01", "\u4E28", "\u2F02", "\u4E36", "\u2F03", "\u4E3F", "\u2F04", "\u4E59", "\u2F05", "\u4E85", "\u2F06", "\u4E8C", "\u2F07", "\u4EA0", "\u2F08", "\u4EBA", "\u2F09", "\u513F", "\u2F0A", "\u5165", "\u2F0B", "\u516B", "\u2F0C", "\u5182", "\u2F0D", "\u5196", "\u2F0E", "\u51AB", "\u2F0F", "\u51E0", "\u2F10", "\u51F5", "\u2F11", "\u5200", "\u2F12", "\u529B", "\u2F13", "\u52F9", "\u2F14", "\u5315", "\u2F15", "\u531A", "\u2F16", "\u5338", "\u2F17", "\u5341", "\u2F18", "\u535C", "\u2F19", "\u5369", "\u2F1A", "\u5382", "\u2F1B", "\u53B6", "\u2F1C", "\u53C8", "\u2F1D", "\u53E3", "\u2F1E", "\u56D7", "\u2F1F", "\u571F", "\u2F20", "\u58EB", "\u2F21", "\u5902", "\u2F22", "\u590A", "\u2F23", "\u5915", "\u2F24", "\u5927", "\u2F25", "\u5973", "\u2F26", "\u5B50", "\u2F27", "\u5B80", "\u2F28", "\u5BF8", "\u2F29", "\u5C0F", "\u2F2A", "\u5C22", "\u2F2B", "\u5C38", "\u2F2C", "\u5C6E", "\u2F2D", "\u5C71", "\u2F2E", "\u5DDB", "\u2F2F", "\u5DE5", "\u2F30", "\u5DF1", "\u2F31", "\u5DFE", "\u2F32", "\u5E72", "\u2F33", "\u5E7A", "\u2F34", "\u5E7F", "\u2F35", "\u5EF4", "\u2F36", "\u5EFE", "\u2F37", "\u5F0B", "\u2F38", "\u5F13", "\u2F39", "\u5F50", "\u2F3A", "\u5F61", "\u2F3B", "\u5F73", "\u2F3C", "\u5FC3", "\u2F3D", "\u6208", "\u2F3E", "\u6236", "\u2F3F", "\u624B", "\u2F40", "\u652F", "\u2F41", "\u6534", "\u2F42", "\u6587", "\u2F43", "\u6597", "\u2F44", "\u65A4", "\u2F45", "\u65B9", "\u2F46", "\u65E0", "\u2F47", "\u65E5", "\u2F48", "\u66F0", "\u2F49", "\u6708", "\u2F4A", "\u6728", "\u2F4B", "\u6B20", "\u2F4C", "\u6B62", "\u2F4D", "\u6B79", "\u2F4E", "\u6BB3", "\u2F4F", "\u6BCB", "\u2F50", "\u6BD4", "\u2F51", "\u6BDB", "\u2F52", "\u6C0F", "\u2F53", "\u6C14", "\u2F54", "\u6C34", "\u2F55", "\u706B", "\u2F56", "\u722A", "\u2F57", "\u7236", "\u2F58", "\u723B", "\u2F59", "\u723F", "\u2F5A", "\u7247", "\u2F5B", "\u7259", "\u2F5C", "\u725B", "\u2F5D", "\u72AC", "\u2F5E", "\u7384", "\u2F5F", "\u7389", "\u2F60", "\u74DC", "\u2F61", "\u74E6", "\u2F62", "\u7518", "\u2F63", "\u751F", "\u2F64", "\u7528", "\u2F65", "\u7530", "\u2F66", "\u758B", "\u2F67", "\u7592", "\u2F68", "\u7676", "\u2F69", "\u767D", "\u2F6A", "\u76AE", "\u2F6B", "\u76BF", "\u2F6C", "\u76EE", "\u2F6D", "\u77DB", "\u2F6E", "\u77E2", "\u2F6F", "\u77F3", "\u2F70", "\u793A", "\u2F71", "\u79B8", "\u2F72", "\u79BE", "\u2F73", "\u7A74", "\u2F74", "\u7ACB", "\u2F75", "\u7AF9", "\u2F76", "\u7C73", "\u2F77", "\u7CF8", "\u2F78", "\u7F36", "\u2F79", "\u7F51", "\u2F7A", "\u7F8A", "\u2F7B", "\u7FBD", "\u2F7C", "\u8001", "\u2F7D", "\u800C", "\u2F7E", "\u8012", "\u2F7F", "\u8033", "\u2F80", "\u807F", "\u2F81", "\u8089", "\u2F82", "\u81E3", "\u2F83", "\u81EA", "\u2F84", "\u81F3", "\u2F85", "\u81FC", "\u2F86", "\u820C", "\u2F87", "\u821B", "\u2F88", "\u821F", "\u2F89", "\u826E", "\u2F8A", "\u8272", "\u2F8B", "\u8278", "\u2F8C", "\u864D", "\u2F8D", "\u866B", "\u2F8E", "\u8840", "\u2F8F", "\u884C", "\u2F90", "\u8863", "\u2F91", "\u897E", "\u2F92", "\u898B", "\u2F93", "\u89D2", "\u2F94", "\u8A00", "\u2F95", "\u8C37", "\u2F96", "\u8C46", "\u2F97", "\u8C55", "\u2F98", "\u8C78", "\u2F99", "\u8C9D", "\u2F9A", "\u8D64", "\u2F9B", "\u8D70", "\u2F9C", "\u8DB3", "\u2F9D", "\u8EAB", "\u2F9E", "\u8ECA", "\u2F9F", "\u8F9B", "\u2FA0", "\u8FB0", "\u2FA1", "\u8FB5", "\u2FA2", "\u9091", "\u2FA3", "\u9149", "\u2FA4", "\u91C6", "\u2FA5", "\u91CC", "\u2FA6", "\u91D1", "\u2FA7", "\u9577", "\u2FA8", "\u9580", "\u2FA9", "\u961C", "\u2FAA", "\u96B6", "\u2FAB", "\u96B9", "\u2FAC", "\u96E8", "\u2FAD", "\u9751", "\u2FAE", "\u975E", "\u2FAF", "\u9762", "\u2FB0", "\u9769", "\u2FB1", "\u97CB", "\u2FB2", "\u97ED", "\u2FB3", "\u97F3", "\u2FB4", "\u9801", "\u2FB5", "\u98A8", "\u2FB6", "\u98DB", "\u2FB7", "\u98DF", "\u2FB8", "\u9996", "\u2FB9", "\u9999", "\u2FBA", "\u99AC", "\u2FBB", "\u9AA8", "\u2FBC", "\u9AD8", "\u2FBD", "\u9ADF", "\u2FBE", "\u9B25", "\u2FBF", "\u9B2F", "\u2FC0", "\u9B32", "\u2FC1", "\u9B3C", "\u2FC2", "\u9B5A", "\u2FC3", "\u9CE5", "\u2FC4", "\u9E75", "\u2FC5", "\u9E7F", "\u2FC6", "\u9EA5", "\u2FC7", "\u9EBB", "\u2FC8", "\u9EC3", "\u2FC9", "\u9ECD", "\u2FCA", "\u9ED1", "\u2FCB", "\u9EF9", "\u2FCC", "\u9EFD", "\u2FCD", "\u9F0E", "\u2FCE", "\u9F13", "\u2FCF", "\u9F20", "\u2FD0", "\u9F3B", "\u2FD1", "\u9F4A", "\u2FD2", "\u9F52", "\u2FD3", "\u9F8D", "\u2FD4", "\u9F9C", "\u2FD5", "\u9FA0", "\u3036", "\u3012", "\u3038", "\u5341", "\u3039", "\u5344", "\u303A", "\u5345", "\u309B", "\u0020\u3099", "\u309C", "\u0020\u309A", "\u3131", "\u1100", "\u3132", "\u1101", "\u3133", "\u11AA", "\u3134", "\u1102", "\u3135", "\u11AC", "\u3136", "\u11AD", "\u3137", "\u1103", "\u3138", "\u1104", "\u3139", "\u1105", "\u313A", "\u11B0", "\u313B", "\u11B1", "\u313C", "\u11B2", "\u313D", "\u11B3", "\u313E", "\u11B4", "\u313F", "\u11B5", "\u3140", "\u111A", "\u3141", "\u1106", "\u3142", "\u1107", "\u3143", "\u1108", "\u3144", "\u1121", "\u3145", "\u1109", "\u3146", "\u110A", "\u3147", "\u110B", "\u3148", "\u110C", "\u3149", "\u110D", "\u314A", "\u110E", "\u314B", "\u110F", "\u314C", "\u1110", "\u314D", "\u1111", "\u314E", "\u1112", "\u314F", "\u1161", "\u3150", "\u1162", "\u3151", "\u1163", "\u3152", "\u1164", "\u3153", "\u1165", "\u3154", "\u1166", "\u3155", "\u1167", "\u3156", "\u1168", "\u3157", "\u1169", "\u3158", "\u116A", "\u3159", "\u116B", "\u315A", "\u116C", "\u315B", "\u116D", "\u315C", "\u116E", "\u315D", "\u116F", "\u315E", "\u1170", "\u315F", "\u1171", "\u3160", "\u1172", "\u3161", "\u1173", "\u3162", "\u1174", "\u3163", "\u1175", "\u3164", "\u1160", "\u3165", "\u1114", "\u3166", "\u1115", "\u3167", "\u11C7", "\u3168", "\u11C8", "\u3169", "\u11CC", "\u316A", "\u11CE", "\u316B", "\u11D3", "\u316C", "\u11D7", "\u316D", "\u11D9", "\u316E", "\u111C", "\u316F", "\u11DD", "\u3170", "\u11DF", "\u3171", "\u111D", "\u3172", "\u111E", "\u3173", "\u1120", "\u3174", "\u1122", "\u3175", "\u1123", "\u3176", "\u1127", "\u3177", "\u1129", "\u3178", "\u112B", "\u3179", "\u112C", "\u317A", "\u112D", "\u317B", "\u112E", "\u317C", "\u112F", "\u317D", "\u1132", "\u317E", "\u1136", "\u317F", "\u1140", "\u3180", "\u1147", "\u3181", "\u114C", "\u3182", "\u11F1", "\u3183", "\u11F2", "\u3184", "\u1157", "\u3185", "\u1158", "\u3186", "\u1159", "\u3187", "\u1184", "\u3188", "\u1185", "\u3189", "\u1188", "\u318A", "\u1191", "\u318B", "\u1192", "\u318C", "\u1194", "\u318D", "\u119E", "\u318E", "\u11A1", "\u3200", "\u0028\u1100\u0029", "\u3201", "\u0028\u1102\u0029", "\u3202", "\u0028\u1103\u0029", "\u3203", "\u0028\u1105\u0029", "\u3204", "\u0028\u1106\u0029", "\u3205", "\u0028\u1107\u0029", "\u3206", "\u0028\u1109\u0029", "\u3207", "\u0028\u110B\u0029", "\u3208", "\u0028\u110C\u0029", "\u3209", "\u0028\u110E\u0029", "\u320A", "\u0028\u110F\u0029", "\u320B", "\u0028\u1110\u0029", "\u320C", "\u0028\u1111\u0029", "\u320D", "\u0028\u1112\u0029", "\u320E", "\u0028\u1100\u1161\u0029", "\u320F", "\u0028\u1102\u1161\u0029", "\u3210", "\u0028\u1103\u1161\u0029", "\u3211", "\u0028\u1105\u1161\u0029", "\u3212", "\u0028\u1106\u1161\u0029", "\u3213", "\u0028\u1107\u1161\u0029", "\u3214", "\u0028\u1109\u1161\u0029", "\u3215", "\u0028\u110B\u1161\u0029", "\u3216", "\u0028\u110C\u1161\u0029", "\u3217", "\u0028\u110E\u1161\u0029", "\u3218", "\u0028\u110F\u1161\u0029", "\u3219", "\u0028\u1110\u1161\u0029", "\u321A", "\u0028\u1111\u1161\u0029", "\u321B", "\u0028\u1112\u1161\u0029", "\u321C", "\u0028\u110C\u116E\u0029", "\u321D", "\u0028\u110B\u1169\u110C\u1165\u11AB\u0029", "\u321E", "\u0028\u110B\u1169\u1112\u116E\u0029", "\u3220", "\u0028\u4E00\u0029", "\u3221", "\u0028\u4E8C\u0029", "\u3222", "\u0028\u4E09\u0029", "\u3223", "\u0028\u56DB\u0029", "\u3224", "\u0028\u4E94\u0029", "\u3225", "\u0028\u516D\u0029", "\u3226", "\u0028\u4E03\u0029", "\u3227", "\u0028\u516B\u0029", "\u3228", "\u0028\u4E5D\u0029", "\u3229", "\u0028\u5341\u0029", "\u322A", "\u0028\u6708\u0029", "\u322B", "\u0028\u706B\u0029", "\u322C", "\u0028\u6C34\u0029", "\u322D", "\u0028\u6728\u0029", "\u322E", "\u0028\u91D1\u0029", "\u322F", "\u0028\u571F\u0029", "\u3230", "\u0028\u65E5\u0029", "\u3231", "\u0028\u682A\u0029", "\u3232", "\u0028\u6709\u0029", "\u3233", "\u0028\u793E\u0029", "\u3234", "\u0028\u540D\u0029", "\u3235", "\u0028\u7279\u0029", "\u3236", "\u0028\u8CA1\u0029", "\u3237", "\u0028\u795D\u0029", "\u3238", "\u0028\u52B4\u0029", "\u3239", "\u0028\u4EE3\u0029", "\u323A", "\u0028\u547C\u0029", "\u323B", "\u0028\u5B66\u0029", "\u323C", "\u0028\u76E3\u0029", "\u323D", "\u0028\u4F01\u0029", "\u323E", "\u0028\u8CC7\u0029", "\u323F", "\u0028\u5354\u0029", "\u3240", "\u0028\u796D\u0029", "\u3241", "\u0028\u4F11\u0029", "\u3242", "\u0028\u81EA\u0029", "\u3243", "\u0028\u81F3\u0029", "\u32C0", "\u0031\u6708", "\u32C1", "\u0032\u6708", "\u32C2", "\u0033\u6708", "\u32C3", "\u0034\u6708", "\u32C4", "\u0035\u6708", "\u32C5", "\u0036\u6708", "\u32C6", "\u0037\u6708", "\u32C7", "\u0038\u6708", "\u32C8", "\u0039\u6708", "\u32C9", "\u0031\u0030\u6708", "\u32CA", "\u0031\u0031\u6708", "\u32CB", "\u0031\u0032\u6708", "\u3358", "\u0030\u70B9", "\u3359", "\u0031\u70B9", "\u335A", "\u0032\u70B9", "\u335B", "\u0033\u70B9", "\u335C", "\u0034\u70B9", "\u335D", "\u0035\u70B9", "\u335E", "\u0036\u70B9", "\u335F", "\u0037\u70B9", "\u3360", "\u0038\u70B9", "\u3361", "\u0039\u70B9", "\u3362", "\u0031\u0030\u70B9", "\u3363", "\u0031\u0031\u70B9", "\u3364", "\u0031\u0032\u70B9", "\u3365", "\u0031\u0033\u70B9", "\u3366", "\u0031\u0034\u70B9", "\u3367", "\u0031\u0035\u70B9", "\u3368", "\u0031\u0036\u70B9", "\u3369", "\u0031\u0037\u70B9", "\u336A", "\u0031\u0038\u70B9", "\u336B", "\u0031\u0039\u70B9", "\u336C", "\u0032\u0030\u70B9", "\u336D", "\u0032\u0031\u70B9", "\u336E", "\u0032\u0032\u70B9", "\u336F", "\u0032\u0033\u70B9", "\u3370", "\u0032\u0034\u70B9", "\u33E0", "\u0031\u65E5", "\u33E1", "\u0032\u65E5", "\u33E2", "\u0033\u65E5", "\u33E3", "\u0034\u65E5", "\u33E4", "\u0035\u65E5", "\u33E5", "\u0036\u65E5", "\u33E6", "\u0037\u65E5", "\u33E7", "\u0038\u65E5", "\u33E8", "\u0039\u65E5", "\u33E9", "\u0031\u0030\u65E5", "\u33EA", "\u0031\u0031\u65E5", "\u33EB", "\u0031\u0032\u65E5", "\u33EC", "\u0031\u0033\u65E5", "\u33ED", "\u0031\u0034\u65E5", "\u33EE", "\u0031\u0035\u65E5", "\u33EF", "\u0031\u0036\u65E5", "\u33F0", "\u0031\u0037\u65E5", "\u33F1", "\u0031\u0038\u65E5", "\u33F2", "\u0031\u0039\u65E5", "\u33F3", "\u0032\u0030\u65E5", "\u33F4", "\u0032\u0031\u65E5", "\u33F5", "\u0032\u0032\u65E5", "\u33F6", "\u0032\u0033\u65E5", "\u33F7", "\u0032\u0034\u65E5", "\u33F8", "\u0032\u0035\u65E5", "\u33F9", "\u0032\u0036\u65E5", "\u33FA", "\u0032\u0037\u65E5", "\u33FB", "\u0032\u0038\u65E5", "\u33FC", "\u0032\u0039\u65E5", "\u33FD", "\u0033\u0030\u65E5", "\u33FE", "\u0033\u0031\u65E5", "\uFB00", "\u0066\u0066", "\uFB01", "\u0066\u0069", "\uFB02", "\u0066\u006C", "\uFB03", "\u0066\u0066\u0069", "\uFB04", "\u0066\u0066\u006C", "\uFB05", "\u017F\u0074", "\uFB06", "\u0073\u0074", "\uFB13", "\u0574\u0576", "\uFB14", "\u0574\u0565", "\uFB15", "\u0574\u056B", "\uFB16", "\u057E\u0576", "\uFB17", "\u0574\u056D", "\uFB4F", "\u05D0\u05DC", "\uFB50", "\u0671", "\uFB51", "\u0671", "\uFB52", "\u067B", "\uFB53", "\u067B", "\uFB54", "\u067B", "\uFB55", "\u067B", "\uFB56", "\u067E", "\uFB57", "\u067E", "\uFB58", "\u067E", "\uFB59", "\u067E", "\uFB5A", "\u0680", "\uFB5B", "\u0680", "\uFB5C", "\u0680", "\uFB5D", "\u0680", "\uFB5E", "\u067A", "\uFB5F", "\u067A", "\uFB60", "\u067A", "\uFB61", "\u067A", "\uFB62", "\u067F", "\uFB63", "\u067F", "\uFB64", "\u067F", "\uFB65", "\u067F", "\uFB66", "\u0679", "\uFB67", "\u0679", "\uFB68", "\u0679", "\uFB69", "\u0679", "\uFB6A", "\u06A4", "\uFB6B", "\u06A4", "\uFB6C", "\u06A4", "\uFB6D", "\u06A4", "\uFB6E", "\u06A6", "\uFB6F", "\u06A6", "\uFB70", "\u06A6", "\uFB71", "\u06A6", "\uFB72", "\u0684", "\uFB73", "\u0684", "\uFB74", "\u0684", "\uFB75", "\u0684", "\uFB76", "\u0683", "\uFB77", "\u0683", "\uFB78", "\u0683", "\uFB79", "\u0683", "\uFB7A", "\u0686", "\uFB7B", "\u0686", "\uFB7C", "\u0686", "\uFB7D", "\u0686", "\uFB7E", "\u0687", "\uFB7F", "\u0687", "\uFB80", "\u0687", "\uFB81", "\u0687", "\uFB82", "\u068D", "\uFB83", "\u068D", "\uFB84", "\u068C", "\uFB85", "\u068C", "\uFB86", "\u068E", "\uFB87", "\u068E", "\uFB88", "\u0688", "\uFB89", "\u0688", "\uFB8A", "\u0698", "\uFB8B", "\u0698", "\uFB8C", "\u0691", "\uFB8D", "\u0691", "\uFB8E", "\u06A9", "\uFB8F", "\u06A9", "\uFB90", "\u06A9", "\uFB91", "\u06A9", "\uFB92", "\u06AF", "\uFB93", "\u06AF", "\uFB94", "\u06AF", "\uFB95", "\u06AF", "\uFB96", "\u06B3", "\uFB97", "\u06B3", "\uFB98", "\u06B3", "\uFB99", "\u06B3", "\uFB9A", "\u06B1", "\uFB9B", "\u06B1", "\uFB9C", "\u06B1", "\uFB9D", "\u06B1", "\uFB9E", "\u06BA", "\uFB9F", "\u06BA", "\uFBA0", "\u06BB", "\uFBA1", "\u06BB", "\uFBA2", "\u06BB", "\uFBA3", "\u06BB", "\uFBA4", "\u06C0", "\uFBA5", "\u06C0", "\uFBA6", "\u06C1", "\uFBA7", "\u06C1", "\uFBA8", "\u06C1", "\uFBA9", "\u06C1", "\uFBAA", "\u06BE", "\uFBAB", "\u06BE", "\uFBAC", "\u06BE", "\uFBAD", "\u06BE", "\uFBAE", "\u06D2", "\uFBAF", "\u06D2", "\uFBB0", "\u06D3", "\uFBB1", "\u06D3", "\uFBD3", "\u06AD", "\uFBD4", "\u06AD", "\uFBD5", "\u06AD", "\uFBD6", "\u06AD", "\uFBD7", "\u06C7", "\uFBD8", "\u06C7", "\uFBD9", "\u06C6", "\uFBDA", "\u06C6", "\uFBDB", "\u06C8", "\uFBDC", "\u06C8", "\uFBDD", "\u0677", "\uFBDE", "\u06CB", "\uFBDF", "\u06CB", "\uFBE0", "\u06C5", "\uFBE1", "\u06C5", "\uFBE2", "\u06C9", "\uFBE3", "\u06C9", "\uFBE4", "\u06D0", "\uFBE5", "\u06D0", "\uFBE6", "\u06D0", "\uFBE7", "\u06D0", "\uFBE8", "\u0649", "\uFBE9", "\u0649", "\uFBEA", "\u0626\u0627", "\uFBEB", "\u0626\u0627", "\uFBEC", "\u0626\u06D5", "\uFBED", "\u0626\u06D5", "\uFBEE", "\u0626\u0648", "\uFBEF", "\u0626\u0648", "\uFBF0", "\u0626\u06C7", "\uFBF1", "\u0626\u06C7", "\uFBF2", "\u0626\u06C6", "\uFBF3", "\u0626\u06C6", "\uFBF4", "\u0626\u06C8", "\uFBF5", "\u0626\u06C8", "\uFBF6", "\u0626\u06D0", "\uFBF7", "\u0626\u06D0", "\uFBF8", "\u0626\u06D0", "\uFBF9", "\u0626\u0649", "\uFBFA", "\u0626\u0649", "\uFBFB", "\u0626\u0649", "\uFBFC", "\u06CC", "\uFBFD", "\u06CC", "\uFBFE", "\u06CC", "\uFBFF", "\u06CC", "\uFC00", "\u0626\u062C", "\uFC01", "\u0626\u062D", "\uFC02", "\u0626\u0645", "\uFC03", "\u0626\u0649", "\uFC04", "\u0626\u064A", "\uFC05", "\u0628\u062C", "\uFC06", "\u0628\u062D", "\uFC07", "\u0628\u062E", "\uFC08", "\u0628\u0645", "\uFC09", "\u0628\u0649", "\uFC0A", "\u0628\u064A", "\uFC0B", "\u062A\u062C", "\uFC0C", "\u062A\u062D", "\uFC0D", "\u062A\u062E", "\uFC0E", "\u062A\u0645", "\uFC0F", "\u062A\u0649", "\uFC10", "\u062A\u064A", "\uFC11", "\u062B\u062C", "\uFC12", "\u062B\u0645", "\uFC13", "\u062B\u0649", "\uFC14", "\u062B\u064A", "\uFC15", "\u062C\u062D", "\uFC16", "\u062C\u0645", "\uFC17", "\u062D\u062C", "\uFC18", "\u062D\u0645", "\uFC19", "\u062E\u062C", "\uFC1A", "\u062E\u062D", "\uFC1B", "\u062E\u0645", "\uFC1C", "\u0633\u062C", "\uFC1D", "\u0633\u062D", "\uFC1E", "\u0633\u062E", "\uFC1F", "\u0633\u0645", "\uFC20", "\u0635\u062D", "\uFC21", "\u0635\u0645", "\uFC22", "\u0636\u062C", "\uFC23", "\u0636\u062D", "\uFC24", "\u0636\u062E", "\uFC25", "\u0636\u0645", "\uFC26", "\u0637\u062D", "\uFC27", "\u0637\u0645", "\uFC28", "\u0638\u0645", "\uFC29", "\u0639\u062C", "\uFC2A", "\u0639\u0645", "\uFC2B", "\u063A\u062C", "\uFC2C", "\u063A\u0645", "\uFC2D", "\u0641\u062C", "\uFC2E", "\u0641\u062D", "\uFC2F", "\u0641\u062E", "\uFC30", "\u0641\u0645", "\uFC31", "\u0641\u0649", "\uFC32", "\u0641\u064A", "\uFC33", "\u0642\u062D", "\uFC34", "\u0642\u0645", "\uFC35", "\u0642\u0649", "\uFC36", "\u0642\u064A", "\uFC37", "\u0643\u0627", "\uFC38", "\u0643\u062C", "\uFC39", "\u0643\u062D", "\uFC3A", "\u0643\u062E", "\uFC3B", "\u0643\u0644", "\uFC3C", "\u0643\u0645", "\uFC3D", "\u0643\u0649", "\uFC3E", "\u0643\u064A", "\uFC3F", "\u0644\u062C", "\uFC40", "\u0644\u062D", "\uFC41", "\u0644\u062E", "\uFC42", "\u0644\u0645", "\uFC43", "\u0644\u0649", "\uFC44", "\u0644\u064A", "\uFC45", "\u0645\u062C", "\uFC46", "\u0645\u062D", "\uFC47", "\u0645\u062E", "\uFC48", "\u0645\u0645", "\uFC49", "\u0645\u0649", "\uFC4A", "\u0645\u064A", "\uFC4B", "\u0646\u062C", "\uFC4C", "\u0646\u062D", "\uFC4D", "\u0646\u062E", "\uFC4E", "\u0646\u0645", "\uFC4F", "\u0646\u0649", "\uFC50", "\u0646\u064A", "\uFC51", "\u0647\u062C", "\uFC52", "\u0647\u0645", "\uFC53", "\u0647\u0649", "\uFC54", "\u0647\u064A", "\uFC55", "\u064A\u062C", "\uFC56", "\u064A\u062D", "\uFC57", "\u064A\u062E", "\uFC58", "\u064A\u0645", "\uFC59", "\u064A\u0649", "\uFC5A", "\u064A\u064A", "\uFC5B", "\u0630\u0670", "\uFC5C", "\u0631\u0670", "\uFC5D", "\u0649\u0670", "\uFC5E", "\u0020\u064C\u0651", "\uFC5F", "\u0020\u064D\u0651", "\uFC60", "\u0020\u064E\u0651", "\uFC61", "\u0020\u064F\u0651", "\uFC62", "\u0020\u0650\u0651", "\uFC63", "\u0020\u0651\u0670", "\uFC64", "\u0626\u0631", "\uFC65", "\u0626\u0632", "\uFC66", "\u0626\u0645", "\uFC67", "\u0626\u0646", "\uFC68", "\u0626\u0649", "\uFC69", "\u0626\u064A", "\uFC6A", "\u0628\u0631", "\uFC6B", "\u0628\u0632", "\uFC6C", "\u0628\u0645", "\uFC6D", "\u0628\u0646", "\uFC6E", "\u0628\u0649", "\uFC6F", "\u0628\u064A", "\uFC70", "\u062A\u0631", "\uFC71", "\u062A\u0632", "\uFC72", "\u062A\u0645", "\uFC73", "\u062A\u0646", "\uFC74", "\u062A\u0649", "\uFC75", "\u062A\u064A", "\uFC76", "\u062B\u0631", "\uFC77", "\u062B\u0632", "\uFC78", "\u062B\u0645", "\uFC79", "\u062B\u0646", "\uFC7A", "\u062B\u0649", "\uFC7B", "\u062B\u064A", "\uFC7C", "\u0641\u0649", "\uFC7D", "\u0641\u064A", "\uFC7E", "\u0642\u0649", "\uFC7F", "\u0642\u064A", "\uFC80", "\u0643\u0627", "\uFC81", "\u0643\u0644", "\uFC82", "\u0643\u0645", "\uFC83", "\u0643\u0649", "\uFC84", "\u0643\u064A", "\uFC85", "\u0644\u0645", "\uFC86", "\u0644\u0649", "\uFC87", "\u0644\u064A", "\uFC88", "\u0645\u0627", "\uFC89", "\u0645\u0645", "\uFC8A", "\u0646\u0631", "\uFC8B", "\u0646\u0632", "\uFC8C", "\u0646\u0645", "\uFC8D", "\u0646\u0646", "\uFC8E", "\u0646\u0649", "\uFC8F", "\u0646\u064A", "\uFC90", "\u0649\u0670", "\uFC91", "\u064A\u0631", "\uFC92", "\u064A\u0632", "\uFC93", "\u064A\u0645", "\uFC94", "\u064A\u0646", "\uFC95", "\u064A\u0649", "\uFC96", "\u064A\u064A", "\uFC97", "\u0626\u062C", "\uFC98", "\u0626\u062D", "\uFC99", "\u0626\u062E", "\uFC9A", "\u0626\u0645", "\uFC9B", "\u0626\u0647", "\uFC9C", "\u0628\u062C", "\uFC9D", "\u0628\u062D", "\uFC9E", "\u0628\u062E", "\uFC9F", "\u0628\u0645", "\uFCA0", "\u0628\u0647", "\uFCA1", "\u062A\u062C", "\uFCA2", "\u062A\u062D", "\uFCA3", "\u062A\u062E", "\uFCA4", "\u062A\u0645", "\uFCA5", "\u062A\u0647", "\uFCA6", "\u062B\u0645", "\uFCA7", "\u062C\u062D", "\uFCA8", "\u062C\u0645", "\uFCA9", "\u062D\u062C", "\uFCAA", "\u062D\u0645", "\uFCAB", "\u062E\u062C", "\uFCAC", "\u062E\u0645", "\uFCAD", "\u0633\u062C", "\uFCAE", "\u0633\u062D", "\uFCAF", "\u0633\u062E", "\uFCB0", "\u0633\u0645", "\uFCB1", "\u0635\u062D", "\uFCB2", "\u0635\u062E", "\uFCB3", "\u0635\u0645", "\uFCB4", "\u0636\u062C", "\uFCB5", "\u0636\u062D", "\uFCB6", "\u0636\u062E", "\uFCB7", "\u0636\u0645", "\uFCB8", "\u0637\u062D", "\uFCB9", "\u0638\u0645", "\uFCBA", "\u0639\u062C", "\uFCBB", "\u0639\u0645", "\uFCBC", "\u063A\u062C", "\uFCBD", "\u063A\u0645", "\uFCBE", "\u0641\u062C", "\uFCBF", "\u0641\u062D", "\uFCC0", "\u0641\u062E", "\uFCC1", "\u0641\u0645", "\uFCC2", "\u0642\u062D", "\uFCC3", "\u0642\u0645", "\uFCC4", "\u0643\u062C", "\uFCC5", "\u0643\u062D", "\uFCC6", "\u0643\u062E", "\uFCC7", "\u0643\u0644", "\uFCC8", "\u0643\u0645", "\uFCC9", "\u0644\u062C", "\uFCCA", "\u0644\u062D", "\uFCCB", "\u0644\u062E", "\uFCCC", "\u0644\u0645", "\uFCCD", "\u0644\u0647", "\uFCCE", "\u0645\u062C", "\uFCCF", "\u0645\u062D", "\uFCD0", "\u0645\u062E", "\uFCD1", "\u0645\u0645", "\uFCD2", "\u0646\u062C", "\uFCD3", "\u0646\u062D", "\uFCD4", "\u0646\u062E", "\uFCD5", "\u0646\u0645", "\uFCD6", "\u0646\u0647", "\uFCD7", "\u0647\u062C", "\uFCD8", "\u0647\u0645", "\uFCD9", "\u0647\u0670", "\uFCDA", "\u064A\u062C", "\uFCDB", "\u064A\u062D", "\uFCDC", "\u064A\u062E", "\uFCDD", "\u064A\u0645", "\uFCDE", "\u064A\u0647", "\uFCDF", "\u0626\u0645", "\uFCE0", "\u0626\u0647", "\uFCE1", "\u0628\u0645", "\uFCE2", "\u0628\u0647", "\uFCE3", "\u062A\u0645", "\uFCE4", "\u062A\u0647", "\uFCE5", "\u062B\u0645", "\uFCE6", "\u062B\u0647", "\uFCE7", "\u0633\u0645", "\uFCE8", "\u0633\u0647", "\uFCE9", "\u0634\u0645", "\uFCEA", "\u0634\u0647", "\uFCEB", "\u0643\u0644", "\uFCEC", "\u0643\u0645", "\uFCED", "\u0644\u0645", "\uFCEE", "\u0646\u0645", "\uFCEF", "\u0646\u0647", "\uFCF0", "\u064A\u0645", "\uFCF1", "\u064A\u0647", "\uFCF2", "\u0640\u064E\u0651", "\uFCF3", "\u0640\u064F\u0651", "\uFCF4", "\u0640\u0650\u0651", "\uFCF5", "\u0637\u0649", "\uFCF6", "\u0637\u064A", "\uFCF7", "\u0639\u0649", "\uFCF8", "\u0639\u064A", "\uFCF9", "\u063A\u0649", "\uFCFA", "\u063A\u064A", "\uFCFB", "\u0633\u0649", "\uFCFC", "\u0633\u064A", "\uFCFD", "\u0634\u0649", "\uFCFE", "\u0634\u064A", "\uFCFF", "\u062D\u0649", "\uFD00", "\u062D\u064A", "\uFD01", "\u062C\u0649", "\uFD02", "\u062C\u064A", "\uFD03", "\u062E\u0649", "\uFD04", "\u062E\u064A", "\uFD05", "\u0635\u0649", "\uFD06", "\u0635\u064A", "\uFD07", "\u0636\u0649", "\uFD08", "\u0636\u064A", "\uFD09", "\u0634\u062C", "\uFD0A", "\u0634\u062D", "\uFD0B", "\u0634\u062E", "\uFD0C", "\u0634\u0645", "\uFD0D", "\u0634\u0631", "\uFD0E", "\u0633\u0631", "\uFD0F", "\u0635\u0631", "\uFD10", "\u0636\u0631", "\uFD11", "\u0637\u0649", "\uFD12", "\u0637\u064A", "\uFD13", "\u0639\u0649", "\uFD14", "\u0639\u064A", "\uFD15", "\u063A\u0649", "\uFD16", "\u063A\u064A", "\uFD17", "\u0633\u0649", "\uFD18", "\u0633\u064A", "\uFD19", "\u0634\u0649", "\uFD1A", "\u0634\u064A", "\uFD1B", "\u062D\u0649", "\uFD1C", "\u062D\u064A", "\uFD1D", "\u062C\u0649", "\uFD1E", "\u062C\u064A", "\uFD1F", "\u062E\u0649", "\uFD20", "\u062E\u064A", "\uFD21", "\u0635\u0649", "\uFD22", "\u0635\u064A", "\uFD23", "\u0636\u0649", "\uFD24", "\u0636\u064A", "\uFD25", "\u0634\u062C", "\uFD26", "\u0634\u062D", "\uFD27", "\u0634\u062E", "\uFD28", "\u0634\u0645", "\uFD29", "\u0634\u0631", "\uFD2A", "\u0633\u0631", "\uFD2B", "\u0635\u0631", "\uFD2C", "\u0636\u0631", "\uFD2D", "\u0634\u062C", "\uFD2E", "\u0634\u062D", "\uFD2F", "\u0634\u062E", "\uFD30", "\u0634\u0645", "\uFD31", "\u0633\u0647", "\uFD32", "\u0634\u0647", "\uFD33", "\u0637\u0645", "\uFD34", "\u0633\u062C", "\uFD35", "\u0633\u062D", "\uFD36", "\u0633\u062E", "\uFD37", "\u0634\u062C", "\uFD38", "\u0634\u062D", "\uFD39", "\u0634\u062E", "\uFD3A", "\u0637\u0645", "\uFD3B", "\u0638\u0645", "\uFD3C", "\u0627\u064B", "\uFD3D", "\u0627\u064B", "\uFD50", "\u062A\u062C\u0645", "\uFD51", "\u062A\u062D\u062C", "\uFD52", "\u062A\u062D\u062C", "\uFD53", "\u062A\u062D\u0645", "\uFD54", "\u062A\u062E\u0645", "\uFD55", "\u062A\u0645\u062C", "\uFD56", "\u062A\u0645\u062D", "\uFD57", "\u062A\u0645\u062E", "\uFD58", "\u062C\u0645\u062D", "\uFD59", "\u062C\u0645\u062D", "\uFD5A", "\u062D\u0645\u064A", "\uFD5B", "\u062D\u0645\u0649", "\uFD5C", "\u0633\u062D\u062C", "\uFD5D", "\u0633\u062C\u062D", "\uFD5E", "\u0633\u062C\u0649", "\uFD5F", "\u0633\u0645\u062D", "\uFD60", "\u0633\u0645\u062D", "\uFD61", "\u0633\u0645\u062C", "\uFD62", "\u0633\u0645\u0645", "\uFD63", "\u0633\u0645\u0645", "\uFD64", "\u0635\u062D\u062D", "\uFD65", "\u0635\u062D\u062D", "\uFD66", "\u0635\u0645\u0645", "\uFD67", "\u0634\u062D\u0645", "\uFD68", "\u0634\u062D\u0645", "\uFD69", "\u0634\u062C\u064A", "\uFD6A", "\u0634\u0645\u062E", "\uFD6B", "\u0634\u0645\u062E", "\uFD6C", "\u0634\u0645\u0645", "\uFD6D", "\u0634\u0645\u0645", "\uFD6E", "\u0636\u062D\u0649", "\uFD6F", "\u0636\u062E\u0645", "\uFD70", "\u0636\u062E\u0645", "\uFD71", "\u0637\u0645\u062D", "\uFD72", "\u0637\u0645\u062D", "\uFD73", "\u0637\u0645\u0645", "\uFD74", "\u0637\u0645\u064A", "\uFD75", "\u0639\u062C\u0645", "\uFD76", "\u0639\u0645\u0645", "\uFD77", "\u0639\u0645\u0645", "\uFD78", "\u0639\u0645\u0649", "\uFD79", "\u063A\u0645\u0645", "\uFD7A", "\u063A\u0645\u064A", "\uFD7B", "\u063A\u0645\u0649", "\uFD7C", "\u0641\u062E\u0645", "\uFD7D", "\u0641\u062E\u0645", "\uFD7E", "\u0642\u0645\u062D", "\uFD7F", "\u0642\u0645\u0645", "\uFD80", "\u0644\u062D\u0645", "\uFD81", "\u0644\u062D\u064A", "\uFD82", "\u0644\u062D\u0649", "\uFD83", "\u0644\u062C\u062C", "\uFD84", "\u0644\u062C\u062C", "\uFD85", "\u0644\u062E\u0645", "\uFD86", "\u0644\u062E\u0645", "\uFD87", "\u0644\u0645\u062D", "\uFD88", "\u0644\u0645\u062D", "\uFD89", "\u0645\u062D\u062C", "\uFD8A", "\u0645\u062D\u0645", "\uFD8B", "\u0645\u062D\u064A", "\uFD8C", "\u0645\u062C\u062D", "\uFD8D", "\u0645\u062C\u0645", "\uFD8E", "\u0645\u062E\u062C", "\uFD8F", "\u0645\u062E\u0645", "\uFD92", "\u0645\u062C\u062E", "\uFD93", "\u0647\u0645\u062C", "\uFD94", "\u0647\u0645\u0645", "\uFD95", "\u0646\u062D\u0645", "\uFD96", "\u0646\u062D\u0649", "\uFD97", "\u0646\u062C\u0645", "\uFD98", "\u0646\u062C\u0645", "\uFD99", "\u0646\u062C\u0649", "\uFD9A", "\u0646\u0645\u064A", "\uFD9B", "\u0646\u0645\u0649", "\uFD9C", "\u064A\u0645\u0645", "\uFD9D", "\u064A\u0645\u0645", "\uFD9E", "\u0628\u062E\u064A", "\uFD9F", "\u062A\u062C\u064A", "\uFDA0", "\u062A\u062C\u0649", "\uFDA1", "\u062A\u062E\u064A", "\uFDA2", "\u062A\u062E\u0649", "\uFDA3", "\u062A\u0645\u064A", "\uFDA4", "\u062A\u0645\u0649", "\uFDA5", "\u062C\u0645\u064A", "\uFDA6", "\u062C\u062D\u0649", "\uFDA7", "\u062C\u0645\u0649", "\uFDA8", "\u0633\u062E\u0649", "\uFDA9", "\u0635\u062D\u064A", "\uFDAA", "\u0634\u062D\u064A", "\uFDAB", "\u0636\u062D\u064A", "\uFDAC", "\u0644\u062C\u064A", "\uFDAD", "\u0644\u0645\u064A", "\uFDAE", "\u064A\u062D\u064A", "\uFDAF", "\u064A\u062C\u064A", "\uFDB0", "\u064A\u0645\u064A", "\uFDB1", "\u0645\u0645\u064A", "\uFDB2", "\u0642\u0645\u064A", "\uFDB3", "\u0646\u062D\u064A", "\uFDB4", "\u0642\u0645\u062D", "\uFDB5", "\u0644\u062D\u0645", "\uFDB6", "\u0639\u0645\u064A", "\uFDB7", "\u0643\u0645\u064A", "\uFDB8", "\u0646\u062C\u062D", "\uFDB9", "\u0645\u062E\u064A", "\uFDBA", "\u0644\u062C\u0645", "\uFDBB", "\u0643\u0645\u0645", "\uFDBC", "\u0644\u062C\u0645", "\uFDBD", "\u0646\u062C\u062D", "\uFDBE", "\u062C\u062D\u064A", "\uFDBF", "\u062D\u062C\u064A", "\uFDC0", "\u0645\u062C\u064A", "\uFDC1", "\u0641\u0645\u064A", "\uFDC2", "\u0628\u062D\u064A", "\uFDC3", "\u0643\u0645\u0645", "\uFDC4", "\u0639\u062C\u0645", "\uFDC5", "\u0635\u0645\u0645", "\uFDC6", "\u0633\u062E\u064A", "\uFDC7", "\u0646\u062C\u064A", "\uFE49", "\u203E", "\uFE4A", "\u203E", "\uFE4B", "\u203E", "\uFE4C", "\u203E", "\uFE4D", "\u005F", "\uFE4E", "\u005F", "\uFE4F", "\u005F", "\uFE80", "\u0621", "\uFE81", "\u0622", "\uFE82", "\u0622", "\uFE83", "\u0623", "\uFE84", "\u0623", "\uFE85", "\u0624", "\uFE86", "\u0624", "\uFE87", "\u0625", "\uFE88", "\u0625", "\uFE89", "\u0626", "\uFE8A", "\u0626", "\uFE8B", "\u0626", "\uFE8C", "\u0626", "\uFE8D", "\u0627", "\uFE8E", "\u0627", "\uFE8F", "\u0628", "\uFE90", "\u0628", "\uFE91", "\u0628", "\uFE92", "\u0628", "\uFE93", "\u0629", "\uFE94", "\u0629", "\uFE95", "\u062A", "\uFE96", "\u062A", "\uFE97", "\u062A", "\uFE98", "\u062A", "\uFE99", "\u062B", "\uFE9A", "\u062B", "\uFE9B", "\u062B", "\uFE9C", "\u062B", "\uFE9D", "\u062C", "\uFE9E", "\u062C", "\uFE9F", "\u062C", "\uFEA0", "\u062C", "\uFEA1", "\u062D", "\uFEA2", "\u062D", "\uFEA3", "\u062D", "\uFEA4", "\u062D", "\uFEA5", "\u062E", "\uFEA6", "\u062E", "\uFEA7", "\u062E", "\uFEA8", "\u062E", "\uFEA9", "\u062F", "\uFEAA", "\u062F", "\uFEAB", "\u0630", "\uFEAC", "\u0630", "\uFEAD", "\u0631", "\uFEAE", "\u0631", "\uFEAF", "\u0632", "\uFEB0", "\u0632", "\uFEB1", "\u0633", "\uFEB2", "\u0633", "\uFEB3", "\u0633", "\uFEB4", "\u0633", "\uFEB5", "\u0634", "\uFEB6", "\u0634", "\uFEB7", "\u0634", "\uFEB8", "\u0634", "\uFEB9", "\u0635", "\uFEBA", "\u0635", "\uFEBB", "\u0635", "\uFEBC", "\u0635", "\uFEBD", "\u0636", "\uFEBE", "\u0636", "\uFEBF", "\u0636", "\uFEC0", "\u0636", "\uFEC1", "\u0637", "\uFEC2", "\u0637", "\uFEC3", "\u0637", "\uFEC4", "\u0637", "\uFEC5", "\u0638", "\uFEC6", "\u0638", "\uFEC7", "\u0638", "\uFEC8", "\u0638", "\uFEC9", "\u0639", "\uFECA", "\u0639", "\uFECB", "\u0639", "\uFECC", "\u0639", "\uFECD", "\u063A", "\uFECE", "\u063A", "\uFECF", "\u063A", "\uFED0", "\u063A", "\uFED1", "\u0641", "\uFED2", "\u0641", "\uFED3", "\u0641", "\uFED4", "\u0641", "\uFED5", "\u0642", "\uFED6", "\u0642", "\uFED7", "\u0642", "\uFED8", "\u0642", "\uFED9", "\u0643", "\uFEDA", "\u0643", "\uFEDB", "\u0643", "\uFEDC", "\u0643", "\uFEDD", "\u0644", "\uFEDE", "\u0644", "\uFEDF", "\u0644", "\uFEE0", "\u0644", "\uFEE1", "\u0645", "\uFEE2", "\u0645", "\uFEE3", "\u0645", "\uFEE4", "\u0645", "\uFEE5", "\u0646", "\uFEE6", "\u0646", "\uFEE7", "\u0646", "\uFEE8", "\u0646", "\uFEE9", "\u0647", "\uFEEA", "\u0647", "\uFEEB", "\u0647", "\uFEEC", "\u0647", "\uFEED", "\u0648", "\uFEEE", "\u0648", "\uFEEF", "\u0649", "\uFEF0", "\u0649", "\uFEF1", "\u064A", "\uFEF2", "\u064A", "\uFEF3", "\u064A", "\uFEF4", "\u064A", "\uFEF5", "\u0644\u0622", "\uFEF6", "\u0644\u0622", "\uFEF7", "\u0644\u0623", "\uFEF8", "\u0644\u0623", "\uFEF9", "\u0644\u0625", "\uFEFA", "\u0644\u0625", "\uFEFB", "\u0644\u0627", "\uFEFC", "\u0644\u0627" ]; }); function reverseIfRtl(chars) { var charsLength = chars.length; if (charsLength <= 1 || !isRTLRangeFor(chars.charCodeAt(0))) { return chars; } var s = ""; for (var ii = charsLength - 1; ii >= 0; ii--) { s += chars[ii]; } return s; } /***/ }), /* 166 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", ({ value: true })); exports.FontRendererFactory = void 0; var _util = __w_pdfjs_require__(4); var _cff_parser = __w_pdfjs_require__(160); var _glyphlist = __w_pdfjs_require__(163); var _encodings = __w_pdfjs_require__(162); var _stream = __w_pdfjs_require__(142); function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var FontRendererFactory = function FontRendererFactoryClosure() { function getLong(data, offset) { return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]; } function getUshort(data, offset) { return data[offset] << 8 | data[offset + 1]; } function getSubroutineBias(subrs) { var numSubrs = subrs.length; var bias = 32768; if (numSubrs < 1240) { bias = 107; } else if (numSubrs < 33900) { bias = 1131; } return bias; } function parseCmap(data, start, end) { var offset = getUshort(data, start + 2) === 1 ? getLong(data, start + 8) : getLong(data, start + 16); var format = getUshort(data, start + offset); var ranges, p, i; if (format === 4) { getUshort(data, start + offset + 2); var segCount = getUshort(data, start + offset + 6) >> 1; p = start + offset + 14; ranges = []; for (i = 0; i < segCount; i++, p += 2) { ranges[i] = { end: getUshort(data, p) }; } p += 2; for (i = 0; i < segCount; i++, p += 2) { ranges[i].start = getUshort(data, p); } for (i = 0; i < segCount; i++, p += 2) { ranges[i].idDelta = getUshort(data, p); } for (i = 0; i < segCount; i++, p += 2) { var idOffset = getUshort(data, p); if (idOffset === 0) { continue; } ranges[i].ids = []; for (var j = 0, jj = ranges[i].end - ranges[i].start + 1; j < jj; j++) { ranges[i].ids[j] = getUshort(data, p + idOffset); idOffset += 2; } } return ranges; } else if (format === 12) { getLong(data, start + offset + 4); var groups = getLong(data, start + offset + 12); p = start + offset + 16; ranges = []; for (i = 0; i < groups; i++) { ranges.push({ start: getLong(data, p), end: getLong(data, p + 4), idDelta: getLong(data, p + 8) - getLong(data, p) }); p += 12; } return ranges; } throw new _util.FormatError("unsupported cmap: ".concat(format)); } function parseCff(data, start, end, seacAnalysisEnabled) { var properties = {}; var parser = new _cff_parser.CFFParser(new _stream.Stream(data, start, end - start), properties, seacAnalysisEnabled); var cff = parser.parse(); return { glyphs: cff.charStrings.objects, subrs: cff.topDict.privateDict && cff.topDict.privateDict.subrsIndex && cff.topDict.privateDict.subrsIndex.objects, gsubrs: cff.globalSubrIndex && cff.globalSubrIndex.objects, isCFFCIDFont: cff.isCIDFont, fdSelect: cff.fdSelect, fdArray: cff.fdArray }; } function parseGlyfTable(glyf, loca, isGlyphLocationsLong) { var itemSize, itemDecode; if (isGlyphLocationsLong) { itemSize = 4; itemDecode = function fontItemDecodeLong(data, offset) { return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]; }; } else { itemSize = 2; itemDecode = function fontItemDecode(data, offset) { return data[offset] << 9 | data[offset + 1] << 1; }; } var glyphs = []; var startOffset = itemDecode(loca, 0); for (var j = itemSize; j < loca.length; j += itemSize) { var endOffset = itemDecode(loca, j); glyphs.push(glyf.subarray(startOffset, endOffset)); startOffset = endOffset; } return glyphs; } function lookupCmap(ranges, unicode) { var code = unicode.codePointAt(0), gid = 0; var l = 0, r = ranges.length - 1; while (l < r) { var c = l + r + 1 >> 1; if (code < ranges[c].start) { r = c - 1; } else { l = c; } } if (ranges[l].start <= code && code <= ranges[l].end) { gid = ranges[l].idDelta + (ranges[l].ids ? ranges[l].ids[code - ranges[l].start] : code) & 0xffff; } return { charCode: code, glyphId: gid }; } function compileGlyf(code, cmds, font) { function moveTo(x, y) { cmds.push({ cmd: "moveTo", args: [x, y] }); } function lineTo(x, y) { cmds.push({ cmd: "lineTo", args: [x, y] }); } function quadraticCurveTo(xa, ya, x, y) { cmds.push({ cmd: "quadraticCurveTo", args: [xa, ya, x, y] }); } var i = 0; var numberOfContours = (code[i] << 24 | code[i + 1] << 16) >> 16; var flags; var x = 0, y = 0; i += 10; if (numberOfContours < 0) { do { flags = code[i] << 8 | code[i + 1]; var glyphIndex = code[i + 2] << 8 | code[i + 3]; i += 4; var arg1, arg2; if (flags & 0x01) { arg1 = (code[i] << 24 | code[i + 1] << 16) >> 16; arg2 = (code[i + 2] << 24 | code[i + 3] << 16) >> 16; i += 4; } else { arg1 = code[i++]; arg2 = code[i++]; } if (flags & 0x02) { x = arg1; y = arg2; } else { x = 0; y = 0; } var scaleX = 1, scaleY = 1, scale01 = 0, scale10 = 0; if (flags & 0x08) { scaleX = scaleY = (code[i] << 24 | code[i + 1] << 16) / 1073741824; i += 2; } else if (flags & 0x40) { scaleX = (code[i] << 24 | code[i + 1] << 16) / 1073741824; scaleY = (code[i + 2] << 24 | code[i + 3] << 16) / 1073741824; i += 4; } else if (flags & 0x80) { scaleX = (code[i] << 24 | code[i + 1] << 16) / 1073741824; scale01 = (code[i + 2] << 24 | code[i + 3] << 16) / 1073741824; scale10 = (code[i + 4] << 24 | code[i + 5] << 16) / 1073741824; scaleY = (code[i + 6] << 24 | code[i + 7] << 16) / 1073741824; i += 8; } var subglyph = font.glyphs[glyphIndex]; if (subglyph) { cmds.push({ cmd: "save" }); cmds.push({ cmd: "transform", args: [scaleX, scale01, scale10, scaleY, x, y] }); compileGlyf(subglyph, cmds, font); cmds.push({ cmd: "restore" }); } } while (flags & 0x20); } else { var endPtsOfContours = []; var j, jj; for (j = 0; j < numberOfContours; j++) { endPtsOfContours.push(code[i] << 8 | code[i + 1]); i += 2; } var instructionLength = code[i] << 8 | code[i + 1]; i += 2 + instructionLength; var numberOfPoints = endPtsOfContours[endPtsOfContours.length - 1] + 1; var points = []; while (points.length < numberOfPoints) { flags = code[i++]; var repeat = 1; if (flags & 0x08) { repeat += code[i++]; } while (repeat-- > 0) { points.push({ flags: flags }); } } for (j = 0; j < numberOfPoints; j++) { switch (points[j].flags & 0x12) { case 0x00: x += (code[i] << 24 | code[i + 1] << 16) >> 16; i += 2; break; case 0x02: x -= code[i++]; break; case 0x12: x += code[i++]; break; } points[j].x = x; } for (j = 0; j < numberOfPoints; j++) { switch (points[j].flags & 0x24) { case 0x00: y += (code[i] << 24 | code[i + 1] << 16) >> 16; i += 2; break; case 0x04: y -= code[i++]; break; case 0x24: y += code[i++]; break; } points[j].y = y; } var startPoint = 0; for (i = 0; i < numberOfContours; i++) { var endPoint = endPtsOfContours[i]; var contour = points.slice(startPoint, endPoint + 1); if (contour[0].flags & 1) { contour.push(contour[0]); } else if (contour[contour.length - 1].flags & 1) { contour.unshift(contour[contour.length - 1]); } else { var p = { flags: 1, x: (contour[0].x + contour[contour.length - 1].x) / 2, y: (contour[0].y + contour[contour.length - 1].y) / 2 }; contour.unshift(p); contour.push(p); } moveTo(contour[0].x, contour[0].y); for (j = 1, jj = contour.length; j < jj; j++) { if (contour[j].flags & 1) { lineTo(contour[j].x, contour[j].y); } else if (contour[j + 1].flags & 1) { quadraticCurveTo(contour[j].x, contour[j].y, contour[j + 1].x, contour[j + 1].y); j++; } else { quadraticCurveTo(contour[j].x, contour[j].y, (contour[j].x + contour[j + 1].x) / 2, (contour[j].y + contour[j + 1].y) / 2); } } startPoint = endPoint + 1; } } } function compileCharString(charStringCode, cmds, font, glyphId) { function moveTo(x, y) { cmds.push({ cmd: "moveTo", args: [x, y] }); } function lineTo(x, y) { cmds.push({ cmd: "lineTo", args: [x, y] }); } function bezierCurveTo(x1, y1, x2, y2, x, y) { cmds.push({ cmd: "bezierCurveTo", args: [x1, y1, x2, y2, x, y] }); } var stack = []; var x = 0, y = 0; var stems = 0; function parse(code) { var i = 0; while (i < code.length) { var stackClean = false; var v = code[i++]; var xa, xb, ya, yb, y1, y2, y3, n, subrCode; switch (v) { case 1: stems += stack.length >> 1; stackClean = true; break; case 3: stems += stack.length >> 1; stackClean = true; break; case 4: y += stack.pop(); moveTo(x, y); stackClean = true; break; case 5: while (stack.length > 0) { x += stack.shift(); y += stack.shift(); lineTo(x, y); } break; case 6: while (stack.length > 0) { x += stack.shift(); lineTo(x, y); if (stack.length === 0) { break; } y += stack.shift(); lineTo(x, y); } break; case 7: while (stack.length > 0) { y += stack.shift(); lineTo(x, y); if (stack.length === 0) { break; } x += stack.shift(); lineTo(x, y); } break; case 8: while (stack.length > 0) { xa = x + stack.shift(); ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb + stack.shift(); y = yb + stack.shift(); bezierCurveTo(xa, ya, xb, yb, x, y); } break; case 10: n = stack.pop(); subrCode = null; if (font.isCFFCIDFont) { var fdIndex = font.fdSelect.getFDIndex(glyphId); if (fdIndex >= 0 && fdIndex < font.fdArray.length) { var fontDict = font.fdArray[fdIndex]; var subrs = void 0; if (fontDict.privateDict && fontDict.privateDict.subrsIndex) { subrs = fontDict.privateDict.subrsIndex.objects; } if (subrs) { n += getSubroutineBias(subrs); subrCode = subrs[n]; } } else { (0, _util.warn)("Invalid fd index for glyph index."); } } else { subrCode = font.subrs[n + font.subrsBias]; } if (subrCode) { parse(subrCode); } break; case 11: return; case 12: v = code[i++]; switch (v) { case 34: xa = x + stack.shift(); xb = xa + stack.shift(); y1 = y + stack.shift(); x = xb + stack.shift(); bezierCurveTo(xa, y, xb, y1, x, y1); xa = x + stack.shift(); xb = xa + stack.shift(); x = xb + stack.shift(); bezierCurveTo(xa, y1, xb, y, x, y); break; case 35: xa = x + stack.shift(); ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb + stack.shift(); y = yb + stack.shift(); bezierCurveTo(xa, ya, xb, yb, x, y); xa = x + stack.shift(); ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb + stack.shift(); y = yb + stack.shift(); bezierCurveTo(xa, ya, xb, yb, x, y); stack.pop(); break; case 36: xa = x + stack.shift(); y1 = y + stack.shift(); xb = xa + stack.shift(); y2 = y1 + stack.shift(); x = xb + stack.shift(); bezierCurveTo(xa, y1, xb, y2, x, y2); xa = x + stack.shift(); xb = xa + stack.shift(); y3 = y2 + stack.shift(); x = xb + stack.shift(); bezierCurveTo(xa, y2, xb, y3, x, y); break; case 37: var x0 = x, y0 = y; xa = x + stack.shift(); ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb + stack.shift(); y = yb + stack.shift(); bezierCurveTo(xa, ya, xb, yb, x, y); xa = x + stack.shift(); ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb; y = yb; if (Math.abs(x - x0) > Math.abs(y - y0)) { x += stack.shift(); } else { y += stack.shift(); } bezierCurveTo(xa, ya, xb, yb, x, y); break; default: throw new _util.FormatError("unknown operator: 12 ".concat(v)); } break; case 14: if (stack.length >= 4) { var achar = stack.pop(); var bchar = stack.pop(); y = stack.pop(); x = stack.pop(); cmds.push({ cmd: "save" }); cmds.push({ cmd: "translate", args: [x, y] }); var cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[achar]])); compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId); cmds.push({ cmd: "restore" }); cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[bchar]])); compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId); } return; case 18: stems += stack.length >> 1; stackClean = true; break; case 19: stems += stack.length >> 1; i += stems + 7 >> 3; stackClean = true; break; case 20: stems += stack.length >> 1; i += stems + 7 >> 3; stackClean = true; break; case 21: y += stack.pop(); x += stack.pop(); moveTo(x, y); stackClean = true; break; case 22: x += stack.pop(); moveTo(x, y); stackClean = true; break; case 23: stems += stack.length >> 1; stackClean = true; break; case 24: while (stack.length > 2) { xa = x + stack.shift(); ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb + stack.shift(); y = yb + stack.shift(); bezierCurveTo(xa, ya, xb, yb, x, y); } x += stack.shift(); y += stack.shift(); lineTo(x, y); break; case 25: while (stack.length > 6) { x += stack.shift(); y += stack.shift(); lineTo(x, y); } xa = x + stack.shift(); ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb + stack.shift(); y = yb + stack.shift(); bezierCurveTo(xa, ya, xb, yb, x, y); break; case 26: if (stack.length % 2) { x += stack.shift(); } while (stack.length > 0) { xa = x; ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb; y = yb + stack.shift(); bezierCurveTo(xa, ya, xb, yb, x, y); } break; case 27: if (stack.length % 2) { y += stack.shift(); } while (stack.length > 0) { xa = x + stack.shift(); ya = y; xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb + stack.shift(); y = yb; bezierCurveTo(xa, ya, xb, yb, x, y); } break; case 28: stack.push((code[i] << 24 | code[i + 1] << 16) >> 16); i += 2; break; case 29: n = stack.pop() + font.gsubrsBias; subrCode = font.gsubrs[n]; if (subrCode) { parse(subrCode); } break; case 30: while (stack.length > 0) { xa = x; ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb + stack.shift(); y = yb + (stack.length === 1 ? stack.shift() : 0); bezierCurveTo(xa, ya, xb, yb, x, y); if (stack.length === 0) { break; } xa = x + stack.shift(); ya = y; xb = xa + stack.shift(); yb = ya + stack.shift(); y = yb + stack.shift(); x = xb + (stack.length === 1 ? stack.shift() : 0); bezierCurveTo(xa, ya, xb, yb, x, y); } break; case 31: while (stack.length > 0) { xa = x + stack.shift(); ya = y; xb = xa + stack.shift(); yb = ya + stack.shift(); y = yb + stack.shift(); x = xb + (stack.length === 1 ? stack.shift() : 0); bezierCurveTo(xa, ya, xb, yb, x, y); if (stack.length === 0) { break; } xa = x; ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb + stack.shift(); y = yb + (stack.length === 1 ? stack.shift() : 0); bezierCurveTo(xa, ya, xb, yb, x, y); } break; default: if (v < 32) { throw new _util.FormatError("unknown operator: ".concat(v)); } if (v < 247) { stack.push(v - 139); } else if (v < 251) { stack.push((v - 247) * 256 + code[i++] + 108); } else if (v < 255) { stack.push(-(v - 251) * 256 - code[i++] - 108); } else { stack.push((code[i] << 24 | code[i + 1] << 16 | code[i + 2] << 8 | code[i + 3]) / 65536); i += 4; } break; } if (stackClean) { stack.length = 0; } } } parse(charStringCode); } var NOOP = []; var CompiledFont = /*#__PURE__*/function () { function CompiledFont(fontMatrix) { _classCallCheck(this, CompiledFont); if (this.constructor === CompiledFont) { (0, _util.unreachable)("Cannot initialize CompiledFont."); } this.fontMatrix = fontMatrix; this.compiledGlyphs = Object.create(null); this.compiledCharCodeToGlyphId = Object.create(null); } _createClass(CompiledFont, [{ key: "getPathJs", value: function getPathJs(unicode) { var cmap = lookupCmap(this.cmap, unicode); var fn = this.compiledGlyphs[cmap.glyphId]; if (!fn) { fn = this.compileGlyph(this.glyphs[cmap.glyphId], cmap.glyphId); this.compiledGlyphs[cmap.glyphId] = fn; } if (this.compiledCharCodeToGlyphId[cmap.charCode] === undefined) { this.compiledCharCodeToGlyphId[cmap.charCode] = cmap.glyphId; } return fn; } }, { key: "compileGlyph", value: function compileGlyph(code, glyphId) { if (!code || code.length === 0 || code[0] === 14) { return NOOP; } var fontMatrix = this.fontMatrix; if (this.isCFFCIDFont) { var fdIndex = this.fdSelect.getFDIndex(glyphId); if (fdIndex >= 0 && fdIndex < this.fdArray.length) { var fontDict = this.fdArray[fdIndex]; fontMatrix = fontDict.getByName("FontMatrix") || _util.FONT_IDENTITY_MATRIX; } else { (0, _util.warn)("Invalid fd index for glyph index."); } } var cmds = []; cmds.push({ cmd: "save" }); cmds.push({ cmd: "transform", args: fontMatrix.slice() }); cmds.push({ cmd: "scale", args: ["size", "-size"] }); this.compileGlyphImpl(code, cmds, glyphId); cmds.push({ cmd: "restore" }); return cmds; } }, { key: "compileGlyphImpl", value: function compileGlyphImpl() { (0, _util.unreachable)("Children classes should implement this."); } }, { key: "hasBuiltPath", value: function hasBuiltPath(unicode) { var cmap = lookupCmap(this.cmap, unicode); return this.compiledGlyphs[cmap.glyphId] !== undefined && this.compiledCharCodeToGlyphId[cmap.charCode] !== undefined; } }]); return CompiledFont; }(); var TrueTypeCompiled = /*#__PURE__*/function (_CompiledFont) { _inherits(TrueTypeCompiled, _CompiledFont); var _super = _createSuper(TrueTypeCompiled); function TrueTypeCompiled(glyphs, cmap, fontMatrix) { var _this; _classCallCheck(this, TrueTypeCompiled); _this = _super.call(this, fontMatrix || [0.000488, 0, 0, 0.000488, 0, 0]); _this.glyphs = glyphs; _this.cmap = cmap; return _this; } _createClass(TrueTypeCompiled, [{ key: "compileGlyphImpl", value: function compileGlyphImpl(code, cmds) { compileGlyf(code, cmds, this); } }]); return TrueTypeCompiled; }(CompiledFont); var Type2Compiled = /*#__PURE__*/function (_CompiledFont2) { _inherits(Type2Compiled, _CompiledFont2); var _super2 = _createSuper(Type2Compiled); function Type2Compiled(cffInfo, cmap, fontMatrix, glyphNameMap) { var _this2; _classCallCheck(this, Type2Compiled); _this2 = _super2.call(this, fontMatrix || [0.001, 0, 0, 0.001, 0, 0]); _this2.glyphs = cffInfo.glyphs; _this2.gsubrs = cffInfo.gsubrs || []; _this2.subrs = cffInfo.subrs || []; _this2.cmap = cmap; _this2.glyphNameMap = glyphNameMap || (0, _glyphlist.getGlyphsUnicode)(); _this2.gsubrsBias = getSubroutineBias(_this2.gsubrs); _this2.subrsBias = getSubroutineBias(_this2.subrs); _this2.isCFFCIDFont = cffInfo.isCFFCIDFont; _this2.fdSelect = cffInfo.fdSelect; _this2.fdArray = cffInfo.fdArray; return _this2; } _createClass(Type2Compiled, [{ key: "compileGlyphImpl", value: function compileGlyphImpl(code, cmds, glyphId) { compileCharString(code, cmds, this, glyphId); } }]); return Type2Compiled; }(CompiledFont); return { create: function FontRendererFactory_create(font, seacAnalysisEnabled) { var data = new Uint8Array(font.data); var cmap, glyf, loca, cff, indexToLocFormat, unitsPerEm; var numTables = getUshort(data, 4); for (var i = 0, p = 12; i < numTables; i++, p += 16) { var tag = (0, _util.bytesToString)(data.subarray(p, p + 4)); var offset = getLong(data, p + 8); var length = getLong(data, p + 12); switch (tag) { case "cmap": cmap = parseCmap(data, offset, offset + length); break; case "glyf": glyf = data.subarray(offset, offset + length); break; case "loca": loca = data.subarray(offset, offset + length); break; case "head": unitsPerEm = getUshort(data, offset + 18); indexToLocFormat = getUshort(data, offset + 50); break; case "CFF ": cff = parseCff(data, offset, offset + length, seacAnalysisEnabled); break; } } if (glyf) { var fontMatrix = !unitsPerEm ? font.fontMatrix : [1 / unitsPerEm, 0, 0, 1 / unitsPerEm, 0, 0]; return new TrueTypeCompiled(parseGlyfTable(glyf, loca, indexToLocFormat), cmap, fontMatrix); } return new Type2Compiled(cff, cmap, font.fontMatrix, font.glyphNameMap); } }; }(); exports.FontRendererFactory = FontRendererFactory; /***/ }), /* 167 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Type1Parser = void 0; var _encodings = __w_pdfjs_require__(162); var _core_utils = __w_pdfjs_require__(138); var _stream = __w_pdfjs_require__(142); var _util = __w_pdfjs_require__(4); var HINTING_ENABLED = false; var Type1CharString = function Type1CharStringClosure() { var COMMAND_MAP = { hstem: [1], vstem: [3], vmoveto: [4], rlineto: [5], hlineto: [6], vlineto: [7], rrcurveto: [8], callsubr: [10], flex: [12, 35], drop: [12, 18], endchar: [14], rmoveto: [21], hmoveto: [22], vhcurveto: [30], hvcurveto: [31] }; function Type1CharString() { this.width = 0; this.lsb = 0; this.flexing = false; this.output = []; this.stack = []; } Type1CharString.prototype = { convert: function Type1CharString_convert(encoded, subrs, seacAnalysisEnabled) { var count = encoded.length; var error = false; var wx, sbx, subrNumber; for (var i = 0; i < count; i++) { var value = encoded[i]; if (value < 32) { if (value === 12) { value = (value << 8) + encoded[++i]; } switch (value) { case 1: if (!HINTING_ENABLED) { this.stack = []; break; } error = this.executeCommand(2, COMMAND_MAP.hstem); break; case 3: if (!HINTING_ENABLED) { this.stack = []; break; } error = this.executeCommand(2, COMMAND_MAP.vstem); break; case 4: if (this.flexing) { if (this.stack.length < 1) { error = true; break; } var dy = this.stack.pop(); this.stack.push(0, dy); break; } error = this.executeCommand(1, COMMAND_MAP.vmoveto); break; case 5: error = this.executeCommand(2, COMMAND_MAP.rlineto); break; case 6: error = this.executeCommand(1, COMMAND_MAP.hlineto); break; case 7: error = this.executeCommand(1, COMMAND_MAP.vlineto); break; case 8: error = this.executeCommand(6, COMMAND_MAP.rrcurveto); break; case 9: this.stack = []; break; case 10: if (this.stack.length < 1) { error = true; break; } subrNumber = this.stack.pop(); if (!subrs[subrNumber]) { error = true; break; } error = this.convert(subrs[subrNumber], subrs, seacAnalysisEnabled); break; case 11: return error; case 13: if (this.stack.length < 2) { error = true; break; } wx = this.stack.pop(); sbx = this.stack.pop(); this.lsb = sbx; this.width = wx; this.stack.push(wx, sbx); error = this.executeCommand(2, COMMAND_MAP.hmoveto); break; case 14: this.output.push(COMMAND_MAP.endchar[0]); break; case 21: if (this.flexing) { break; } error = this.executeCommand(2, COMMAND_MAP.rmoveto); break; case 22: if (this.flexing) { this.stack.push(0); break; } error = this.executeCommand(1, COMMAND_MAP.hmoveto); break; case 30: error = this.executeCommand(4, COMMAND_MAP.vhcurveto); break; case 31: error = this.executeCommand(4, COMMAND_MAP.hvcurveto); break; case (12 << 8) + 0: this.stack = []; break; case (12 << 8) + 1: if (!HINTING_ENABLED) { this.stack = []; break; } error = this.executeCommand(2, COMMAND_MAP.vstem); break; case (12 << 8) + 2: if (!HINTING_ENABLED) { this.stack = []; break; } error = this.executeCommand(2, COMMAND_MAP.hstem); break; case (12 << 8) + 6: if (seacAnalysisEnabled) { var asb = this.stack[this.stack.length - 5]; this.seac = this.stack.splice(-4, 4); this.seac[0] += this.lsb - asb; error = this.executeCommand(0, COMMAND_MAP.endchar); } else { error = this.executeCommand(4, COMMAND_MAP.endchar); } break; case (12 << 8) + 7: if (this.stack.length < 4) { error = true; break; } this.stack.pop(); wx = this.stack.pop(); var sby = this.stack.pop(); sbx = this.stack.pop(); this.lsb = sbx; this.width = wx; this.stack.push(wx, sbx, sby); error = this.executeCommand(3, COMMAND_MAP.rmoveto); break; case (12 << 8) + 12: if (this.stack.length < 2) { error = true; break; } var num2 = this.stack.pop(); var num1 = this.stack.pop(); this.stack.push(num1 / num2); break; case (12 << 8) + 16: if (this.stack.length < 2) { error = true; break; } subrNumber = this.stack.pop(); var numArgs = this.stack.pop(); if (subrNumber === 0 && numArgs === 3) { var flexArgs = this.stack.splice(this.stack.length - 17, 17); this.stack.push(flexArgs[2] + flexArgs[0], flexArgs[3] + flexArgs[1], flexArgs[4], flexArgs[5], flexArgs[6], flexArgs[7], flexArgs[8], flexArgs[9], flexArgs[10], flexArgs[11], flexArgs[12], flexArgs[13], flexArgs[14]); error = this.executeCommand(13, COMMAND_MAP.flex, true); this.flexing = false; this.stack.push(flexArgs[15], flexArgs[16]); } else if (subrNumber === 1 && numArgs === 0) { this.flexing = true; } break; case (12 << 8) + 17: break; case (12 << 8) + 33: this.stack = []; break; default: (0, _util.warn)('Unknown type 1 charstring command of "' + value + '"'); break; } if (error) { break; } continue; } else if (value <= 246) { value = value - 139; } else if (value <= 250) { value = (value - 247) * 256 + encoded[++i] + 108; } else if (value <= 254) { value = -((value - 251) * 256) - encoded[++i] - 108; } else { value = (encoded[++i] & 0xff) << 24 | (encoded[++i] & 0xff) << 16 | (encoded[++i] & 0xff) << 8 | (encoded[++i] & 0xff) << 0; } this.stack.push(value); } return error; }, executeCommand: function executeCommand(howManyArgs, command, keepStack) { var stackLength = this.stack.length; if (howManyArgs > stackLength) { return true; } var start = stackLength - howManyArgs; for (var i = start; i < stackLength; i++) { var value = this.stack[i]; if (Number.isInteger(value)) { this.output.push(28, value >> 8 & 0xff, value & 0xff); } else { value = 65536 * value | 0; this.output.push(255, value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff); } } this.output.push.apply(this.output, command); if (keepStack) { this.stack.splice(start, howManyArgs); } else { this.stack.length = 0; } return false; } }; return Type1CharString; }(); var Type1Parser = function Type1ParserClosure() { var EEXEC_ENCRYPT_KEY = 55665; var CHAR_STRS_ENCRYPT_KEY = 4330; function isHexDigit(code) { return code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102; } function decrypt(data, key, discardNumber) { if (discardNumber >= data.length) { return new Uint8Array(0); } var r = key | 0, c1 = 52845, c2 = 22719, i, j; for (i = 0; i < discardNumber; i++) { r = (data[i] + r) * c1 + c2 & (1 << 16) - 1; } var count = data.length - discardNumber; var decrypted = new Uint8Array(count); for (i = discardNumber, j = 0; j < count; i++, j++) { var value = data[i]; decrypted[j] = value ^ r >> 8; r = (value + r) * c1 + c2 & (1 << 16) - 1; } return decrypted; } function decryptAscii(data, key, discardNumber) { var r = key | 0, c1 = 52845, c2 = 22719; var count = data.length, maybeLength = count >>> 1; var decrypted = new Uint8Array(maybeLength); var i, j; for (i = 0, j = 0; i < count; i++) { var digit1 = data[i]; if (!isHexDigit(digit1)) { continue; } i++; var digit2; while (i < count && !isHexDigit(digit2 = data[i])) { i++; } if (i < count) { var value = parseInt(String.fromCharCode(digit1, digit2), 16); decrypted[j++] = value ^ r >> 8; r = (value + r) * c1 + c2 & (1 << 16) - 1; } } return decrypted.slice(discardNumber, j); } function isSpecial(c) { return c === 0x2f || c === 0x5b || c === 0x5d || c === 0x7b || c === 0x7d || c === 0x28 || c === 0x29; } function Type1Parser(stream, encrypted, seacAnalysisEnabled) { if (encrypted) { var data = stream.getBytes(); var isBinary = !((isHexDigit(data[0]) || (0, _core_utils.isWhiteSpace)(data[0])) && isHexDigit(data[1]) && isHexDigit(data[2]) && isHexDigit(data[3]) && isHexDigit(data[4]) && isHexDigit(data[5]) && isHexDigit(data[6]) && isHexDigit(data[7])); stream = new _stream.Stream(isBinary ? decrypt(data, EEXEC_ENCRYPT_KEY, 4) : decryptAscii(data, EEXEC_ENCRYPT_KEY, 4)); } this.seacAnalysisEnabled = !!seacAnalysisEnabled; this.stream = stream; this.nextChar(); } Type1Parser.prototype = { readNumberArray: function Type1Parser_readNumberArray() { this.getToken(); var array = []; while (true) { var token = this.getToken(); if (token === null || token === "]" || token === "}") { break; } array.push(parseFloat(token || 0)); } return array; }, readNumber: function Type1Parser_readNumber() { var token = this.getToken(); return parseFloat(token || 0); }, readInt: function Type1Parser_readInt() { var token = this.getToken(); return parseInt(token || 0, 10) | 0; }, readBoolean: function Type1Parser_readBoolean() { var token = this.getToken(); return token === "true" ? 1 : 0; }, nextChar: function Type1_nextChar() { return this.currentChar = this.stream.getByte(); }, getToken: function Type1Parser_getToken() { var comment = false; var ch = this.currentChar; while (true) { if (ch === -1) { return null; } if (comment) { if (ch === 0x0a || ch === 0x0d) { comment = false; } } else if (ch === 0x25) { comment = true; } else if (!(0, _core_utils.isWhiteSpace)(ch)) { break; } ch = this.nextChar(); } if (isSpecial(ch)) { this.nextChar(); return String.fromCharCode(ch); } var token = ""; do { token += String.fromCharCode(ch); ch = this.nextChar(); } while (ch >= 0 && !(0, _core_utils.isWhiteSpace)(ch) && !isSpecial(ch)); return token; }, readCharStrings: function Type1Parser_readCharStrings(bytes, lenIV) { if (lenIV === -1) { return bytes; } return decrypt(bytes, CHAR_STRS_ENCRYPT_KEY, lenIV); }, extractFontProgram: function Type1Parser_extractFontProgram(properties) { var stream = this.stream; var subrs = [], charstrings = []; var privateData = Object.create(null); privateData.lenIV = 4; var program = { subrs: [], charstrings: [], properties: { privateData: privateData } }; var token, length, data, lenIV, encoded; while ((token = this.getToken()) !== null) { if (token !== "/") { continue; } token = this.getToken(); switch (token) { case "CharStrings": this.getToken(); this.getToken(); this.getToken(); this.getToken(); while (true) { token = this.getToken(); if (token === null || token === "end") { break; } if (token !== "/") { continue; } var glyph = this.getToken(); length = this.readInt(); this.getToken(); data = length > 0 ? stream.getBytes(length) : new Uint8Array(0); lenIV = program.properties.privateData.lenIV; encoded = this.readCharStrings(data, lenIV); this.nextChar(); token = this.getToken(); if (token === "noaccess") { this.getToken(); } charstrings.push({ glyph: glyph, encoded: encoded }); } break; case "Subrs": this.readInt(); this.getToken(); while (this.getToken() === "dup") { var index = this.readInt(); length = this.readInt(); this.getToken(); data = length > 0 ? stream.getBytes(length) : new Uint8Array(0); lenIV = program.properties.privateData.lenIV; encoded = this.readCharStrings(data, lenIV); this.nextChar(); token = this.getToken(); if (token === "noaccess") { this.getToken(); } subrs[index] = encoded; } break; case "BlueValues": case "OtherBlues": case "FamilyBlues": case "FamilyOtherBlues": var blueArray = this.readNumberArray(); if (blueArray.length > 0 && blueArray.length % 2 === 0 && HINTING_ENABLED) { program.properties.privateData[token] = blueArray; } break; case "StemSnapH": case "StemSnapV": program.properties.privateData[token] = this.readNumberArray(); break; case "StdHW": case "StdVW": program.properties.privateData[token] = this.readNumberArray()[0]; break; case "BlueShift": case "lenIV": case "BlueFuzz": case "BlueScale": case "LanguageGroup": case "ExpansionFactor": program.properties.privateData[token] = this.readNumber(); break; case "ForceBold": program.properties.privateData[token] = this.readBoolean(); break; } } for (var i = 0; i < charstrings.length; i++) { glyph = charstrings[i].glyph; encoded = charstrings[i].encoded; var charString = new Type1CharString(); var error = charString.convert(encoded, subrs, this.seacAnalysisEnabled); var output = charString.output; if (error) { output = [14]; } var charStringObject = { glyphName: glyph, charstring: output, width: charString.width, lsb: charString.lsb, seac: charString.seac }; if (glyph === ".notdef") { program.charstrings.unshift(charStringObject); } else { program.charstrings.push(charStringObject); } if (properties.builtInEncoding) { var _index = properties.builtInEncoding.indexOf(glyph); if (_index > -1 && properties.widths[_index] === undefined && _index >= properties.firstChar && _index <= properties.lastChar) { properties.widths[_index] = charString.width; } } } return program; }, extractFontHeader: function Type1Parser_extractFontHeader(properties) { var token; while ((token = this.getToken()) !== null) { if (token !== "/") { continue; } token = this.getToken(); switch (token) { case "FontMatrix": var matrix = this.readNumberArray(); properties.fontMatrix = matrix; break; case "Encoding": var encodingArg = this.getToken(); var encoding; if (!/^\d+$/.test(encodingArg)) { encoding = (0, _encodings.getEncoding)(encodingArg); } else { encoding = []; var size = parseInt(encodingArg, 10) | 0; this.getToken(); for (var j = 0; j < size; j++) { token = this.getToken(); while (token !== "dup" && token !== "def") { token = this.getToken(); if (token === null) { return; } } if (token === "def") { break; } var index = this.readInt(); this.getToken(); var glyph = this.getToken(); encoding[index] = glyph; this.getToken(); } } properties.builtInEncoding = encoding; break; case "FontBBox": var fontBBox = this.readNumberArray(); properties.ascent = Math.max(fontBBox[3], fontBBox[1]); properties.descent = Math.min(fontBBox[1], fontBBox[3]); properties.ascentScaled = true; break; } } } }; return Type1Parser; }(); exports.Type1Parser = Type1Parser; /***/ }), /* 168 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getTilingPatternIR = getTilingPatternIR; exports.Pattern = void 0; var _util = __w_pdfjs_require__(4); var _colorspace = __w_pdfjs_require__(153); var _primitives = __w_pdfjs_require__(135); var _core_utils = __w_pdfjs_require__(138); var ShadingType = { FUNCTION_BASED: 1, AXIAL: 2, RADIAL: 3, FREE_FORM_MESH: 4, LATTICE_FORM_MESH: 5, COONS_PATCH_MESH: 6, TENSOR_PATCH_MESH: 7 }; var Pattern = function PatternClosure() { function Pattern() { (0, _util.unreachable)("should not call Pattern constructor"); } Pattern.prototype = { getPattern: function Pattern_getPattern(ctx) { (0, _util.unreachable)("Should not call Pattern.getStyle: ".concat(ctx)); } }; Pattern.parseShading = function (shading, matrix, xref, res, handler, pdfFunctionFactory, localColorSpaceCache) { var dict = (0, _primitives.isStream)(shading) ? shading.dict : shading; var type = dict.get("ShadingType"); try { switch (type) { case ShadingType.AXIAL: case ShadingType.RADIAL: return new Shadings.RadialAxial(dict, matrix, xref, res, pdfFunctionFactory, localColorSpaceCache); case ShadingType.FREE_FORM_MESH: case ShadingType.LATTICE_FORM_MESH: case ShadingType.COONS_PATCH_MESH: case ShadingType.TENSOR_PATCH_MESH: return new Shadings.Mesh(shading, matrix, xref, res, pdfFunctionFactory, localColorSpaceCache); default: throw new _util.FormatError("Unsupported ShadingType: " + type); } } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.shadingPattern }); (0, _util.warn)(ex); return new Shadings.Dummy(); } }; return Pattern; }(); exports.Pattern = Pattern; var Shadings = {}; Shadings.SMALL_NUMBER = 1e-6; Shadings.RadialAxial = function RadialAxialClosure() { function RadialAxial(dict, matrix, xref, resources, pdfFunctionFactory, localColorSpaceCache) { this.matrix = matrix; this.coordsArr = dict.getArray("Coords"); this.shadingType = dict.get("ShadingType"); this.type = "Pattern"; var cs = _colorspace.ColorSpace.parse({ cs: dict.getRaw("ColorSpace") || dict.getRaw("CS"), xref: xref, resources: resources, pdfFunctionFactory: pdfFunctionFactory, localColorSpaceCache: localColorSpaceCache }); this.cs = cs; var bbox = dict.getArray("BBox"); if (Array.isArray(bbox) && bbox.length === 4) { this.bbox = _util.Util.normalizeRect(bbox); } else { this.bbox = null; } var t0 = 0.0, t1 = 1.0; if (dict.has("Domain")) { var domainArr = dict.getArray("Domain"); t0 = domainArr[0]; t1 = domainArr[1]; } var extendStart = false, extendEnd = false; if (dict.has("Extend")) { var extendArr = dict.getArray("Extend"); extendStart = extendArr[0]; extendEnd = extendArr[1]; } if (this.shadingType === ShadingType.RADIAL && (!extendStart || !extendEnd)) { var x1 = this.coordsArr[0]; var y1 = this.coordsArr[1]; var r1 = this.coordsArr[2]; var x2 = this.coordsArr[3]; var y2 = this.coordsArr[4]; var r2 = this.coordsArr[5]; var distance = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); if (r1 <= r2 + distance && r2 <= r1 + distance) { (0, _util.warn)("Unsupported radial gradient."); } } this.extendStart = extendStart; this.extendEnd = extendEnd; var fnObj = dict.getRaw("Function"); var fn = pdfFunctionFactory.createFromArray(fnObj); var NUMBER_OF_SAMPLES = 10; var step = (t1 - t0) / NUMBER_OF_SAMPLES; var colorStops = this.colorStops = []; if (t0 >= t1 || step <= 0) { (0, _util.info)("Bad shading domain."); return; } var color = new Float32Array(cs.numComps), ratio = new Float32Array(1); var rgbColor; for (var i = 0; i <= NUMBER_OF_SAMPLES; i++) { ratio[0] = t0 + i * step; fn(ratio, 0, color, 0); rgbColor = cs.getRgb(color, 0); var cssColor = _util.Util.makeHexColor(rgbColor[0], rgbColor[1], rgbColor[2]); colorStops.push([i / NUMBER_OF_SAMPLES, cssColor]); } var background = "transparent"; if (dict.has("Background")) { rgbColor = cs.getRgb(dict.get("Background"), 0); background = _util.Util.makeHexColor(rgbColor[0], rgbColor[1], rgbColor[2]); } if (!extendStart) { colorStops.unshift([0, background]); colorStops[1][0] += Shadings.SMALL_NUMBER; } if (!extendEnd) { colorStops[colorStops.length - 1][0] -= Shadings.SMALL_NUMBER; colorStops.push([1, background]); } this.colorStops = colorStops; } RadialAxial.prototype = { getIR: function RadialAxial_getIR() { var coordsArr = this.coordsArr; var shadingType = this.shadingType; var type, p0, p1, r0, r1; if (shadingType === ShadingType.AXIAL) { p0 = [coordsArr[0], coordsArr[1]]; p1 = [coordsArr[2], coordsArr[3]]; r0 = null; r1 = null; type = "axial"; } else if (shadingType === ShadingType.RADIAL) { p0 = [coordsArr[0], coordsArr[1]]; p1 = [coordsArr[3], coordsArr[4]]; r0 = coordsArr[2]; r1 = coordsArr[5]; type = "radial"; } else { (0, _util.unreachable)("getPattern type unknown: ".concat(shadingType)); } var matrix = this.matrix; if (matrix) { p0 = _util.Util.applyTransform(p0, matrix); p1 = _util.Util.applyTransform(p1, matrix); if (shadingType === ShadingType.RADIAL) { var scale = _util.Util.singularValueDecompose2dScale(matrix); r0 *= scale[0]; r1 *= scale[1]; } } return ["RadialAxial", type, this.bbox, this.colorStops, p0, p1, r0, r1]; } }; return RadialAxial; }(); Shadings.Mesh = function MeshClosure() { function MeshStreamReader(stream, context) { this.stream = stream; this.context = context; this.buffer = 0; this.bufferLength = 0; var numComps = context.numComps; this.tmpCompsBuf = new Float32Array(numComps); var csNumComps = context.colorSpace.numComps; this.tmpCsCompsBuf = context.colorFn ? new Float32Array(csNumComps) : this.tmpCompsBuf; } MeshStreamReader.prototype = { get hasData() { if (this.stream.end) { return this.stream.pos < this.stream.end; } if (this.bufferLength > 0) { return true; } var nextByte = this.stream.getByte(); if (nextByte < 0) { return false; } this.buffer = nextByte; this.bufferLength = 8; return true; }, readBits: function MeshStreamReader_readBits(n) { var buffer = this.buffer; var bufferLength = this.bufferLength; if (n === 32) { if (bufferLength === 0) { return (this.stream.getByte() << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte()) >>> 0; } buffer = buffer << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte(); var nextByte = this.stream.getByte(); this.buffer = nextByte & (1 << bufferLength) - 1; return (buffer << 8 - bufferLength | (nextByte & 0xff) >> bufferLength) >>> 0; } if (n === 8 && bufferLength === 0) { return this.stream.getByte(); } while (bufferLength < n) { buffer = buffer << 8 | this.stream.getByte(); bufferLength += 8; } bufferLength -= n; this.bufferLength = bufferLength; this.buffer = buffer & (1 << bufferLength) - 1; return buffer >> bufferLength; }, align: function MeshStreamReader_align() { this.buffer = 0; this.bufferLength = 0; }, readFlag: function MeshStreamReader_readFlag() { return this.readBits(this.context.bitsPerFlag); }, readCoordinate: function MeshStreamReader_readCoordinate() { var bitsPerCoordinate = this.context.bitsPerCoordinate; var xi = this.readBits(bitsPerCoordinate); var yi = this.readBits(bitsPerCoordinate); var decode = this.context.decode; var scale = bitsPerCoordinate < 32 ? 1 / ((1 << bitsPerCoordinate) - 1) : 2.3283064365386963e-10; return [xi * scale * (decode[1] - decode[0]) + decode[0], yi * scale * (decode[3] - decode[2]) + decode[2]]; }, readComponents: function MeshStreamReader_readComponents() { var numComps = this.context.numComps; var bitsPerComponent = this.context.bitsPerComponent; var scale = bitsPerComponent < 32 ? 1 / ((1 << bitsPerComponent) - 1) : 2.3283064365386963e-10; var decode = this.context.decode; var components = this.tmpCompsBuf; for (var i = 0, j = 4; i < numComps; i++, j += 2) { var ci = this.readBits(bitsPerComponent); components[i] = ci * scale * (decode[j + 1] - decode[j]) + decode[j]; } var color = this.tmpCsCompsBuf; if (this.context.colorFn) { this.context.colorFn(components, 0, color, 0); } return this.context.colorSpace.getRgb(color, 0); } }; function decodeType4Shading(mesh, reader) { var coords = mesh.coords; var colors = mesh.colors; var operators = []; var ps = []; var verticesLeft = 0; while (reader.hasData) { var f = reader.readFlag(); var coord = reader.readCoordinate(); var color = reader.readComponents(); if (verticesLeft === 0) { if (!(0 <= f && f <= 2)) { throw new _util.FormatError("Unknown type4 flag"); } switch (f) { case 0: verticesLeft = 3; break; case 1: ps.push(ps[ps.length - 2], ps[ps.length - 1]); verticesLeft = 1; break; case 2: ps.push(ps[ps.length - 3], ps[ps.length - 1]); verticesLeft = 1; break; } operators.push(f); } ps.push(coords.length); coords.push(coord); colors.push(color); verticesLeft--; reader.align(); } mesh.figures.push({ type: "triangles", coords: new Int32Array(ps), colors: new Int32Array(ps) }); } function decodeType5Shading(mesh, reader, verticesPerRow) { var coords = mesh.coords; var colors = mesh.colors; var ps = []; while (reader.hasData) { var coord = reader.readCoordinate(); var color = reader.readComponents(); ps.push(coords.length); coords.push(coord); colors.push(color); } mesh.figures.push({ type: "lattice", coords: new Int32Array(ps), colors: new Int32Array(ps), verticesPerRow: verticesPerRow }); } var MIN_SPLIT_PATCH_CHUNKS_AMOUNT = 3; var MAX_SPLIT_PATCH_CHUNKS_AMOUNT = 20; var TRIANGLE_DENSITY = 20; var getB = function getBClosure() { function buildB(count) { var lut = []; for (var i = 0; i <= count; i++) { var t = i / count, t_ = 1 - t; lut.push(new Float32Array([t_ * t_ * t_, 3 * t * t_ * t_, 3 * t * t * t_, t * t * t])); } return lut; } var cache = []; return function getB(count) { if (!cache[count]) { cache[count] = buildB(count); } return cache[count]; }; }(); function buildFigureFromPatch(mesh, index) { var figure = mesh.figures[index]; (0, _util.assert)(figure.type === "patch", "Unexpected patch mesh figure"); var coords = mesh.coords, colors = mesh.colors; var pi = figure.coords; var ci = figure.colors; var figureMinX = Math.min(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]); var figureMinY = Math.min(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]); var figureMaxX = Math.max(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]); var figureMaxY = Math.max(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]); var splitXBy = Math.ceil((figureMaxX - figureMinX) * TRIANGLE_DENSITY / (mesh.bounds[2] - mesh.bounds[0])); splitXBy = Math.max(MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitXBy)); var splitYBy = Math.ceil((figureMaxY - figureMinY) * TRIANGLE_DENSITY / (mesh.bounds[3] - mesh.bounds[1])); splitYBy = Math.max(MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitYBy)); var verticesPerRow = splitXBy + 1; var figureCoords = new Int32Array((splitYBy + 1) * verticesPerRow); var figureColors = new Int32Array((splitYBy + 1) * verticesPerRow); var k = 0; var cl = new Uint8Array(3), cr = new Uint8Array(3); var c0 = colors[ci[0]], c1 = colors[ci[1]], c2 = colors[ci[2]], c3 = colors[ci[3]]; var bRow = getB(splitYBy), bCol = getB(splitXBy); for (var row = 0; row <= splitYBy; row++) { cl[0] = (c0[0] * (splitYBy - row) + c2[0] * row) / splitYBy | 0; cl[1] = (c0[1] * (splitYBy - row) + c2[1] * row) / splitYBy | 0; cl[2] = (c0[2] * (splitYBy - row) + c2[2] * row) / splitYBy | 0; cr[0] = (c1[0] * (splitYBy - row) + c3[0] * row) / splitYBy | 0; cr[1] = (c1[1] * (splitYBy - row) + c3[1] * row) / splitYBy | 0; cr[2] = (c1[2] * (splitYBy - row) + c3[2] * row) / splitYBy | 0; for (var col = 0; col <= splitXBy; col++, k++) { if ((row === 0 || row === splitYBy) && (col === 0 || col === splitXBy)) { continue; } var x = 0, y = 0; var q = 0; for (var i = 0; i <= 3; i++) { for (var j = 0; j <= 3; j++, q++) { var m = bRow[row][i] * bCol[col][j]; x += coords[pi[q]][0] * m; y += coords[pi[q]][1] * m; } } figureCoords[k] = coords.length; coords.push([x, y]); figureColors[k] = colors.length; var newColor = new Uint8Array(3); newColor[0] = (cl[0] * (splitXBy - col) + cr[0] * col) / splitXBy | 0; newColor[1] = (cl[1] * (splitXBy - col) + cr[1] * col) / splitXBy | 0; newColor[2] = (cl[2] * (splitXBy - col) + cr[2] * col) / splitXBy | 0; colors.push(newColor); } } figureCoords[0] = pi[0]; figureColors[0] = ci[0]; figureCoords[splitXBy] = pi[3]; figureColors[splitXBy] = ci[1]; figureCoords[verticesPerRow * splitYBy] = pi[12]; figureColors[verticesPerRow * splitYBy] = ci[2]; figureCoords[verticesPerRow * splitYBy + splitXBy] = pi[15]; figureColors[verticesPerRow * splitYBy + splitXBy] = ci[3]; mesh.figures[index] = { type: "lattice", coords: figureCoords, colors: figureColors, verticesPerRow: verticesPerRow }; } function decodeType6Shading(mesh, reader) { var coords = mesh.coords; var colors = mesh.colors; var ps = new Int32Array(16); var cs = new Int32Array(4); while (reader.hasData) { var f = reader.readFlag(); if (!(0 <= f && f <= 3)) { throw new _util.FormatError("Unknown type6 flag"); } var i, ii; var pi = coords.length; for (i = 0, ii = f !== 0 ? 8 : 12; i < ii; i++) { coords.push(reader.readCoordinate()); } var ci = colors.length; for (i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) { colors.push(reader.readComponents()); } var tmp1, tmp2, tmp3, tmp4; switch (f) { case 0: ps[12] = pi + 3; ps[13] = pi + 4; ps[14] = pi + 5; ps[15] = pi + 6; ps[8] = pi + 2; ps[11] = pi + 7; ps[4] = pi + 1; ps[7] = pi + 8; ps[0] = pi; ps[1] = pi + 11; ps[2] = pi + 10; ps[3] = pi + 9; cs[2] = ci + 1; cs[3] = ci + 2; cs[0] = ci; cs[1] = ci + 3; break; case 1: tmp1 = ps[12]; tmp2 = ps[13]; tmp3 = ps[14]; tmp4 = ps[15]; ps[12] = tmp4; ps[13] = pi + 0; ps[14] = pi + 1; ps[15] = pi + 2; ps[8] = tmp3; ps[11] = pi + 3; ps[4] = tmp2; ps[7] = pi + 4; ps[0] = tmp1; ps[1] = pi + 7; ps[2] = pi + 6; ps[3] = pi + 5; tmp1 = cs[2]; tmp2 = cs[3]; cs[2] = tmp2; cs[3] = ci; cs[0] = tmp1; cs[1] = ci + 1; break; case 2: tmp1 = ps[15]; tmp2 = ps[11]; ps[12] = ps[3]; ps[13] = pi + 0; ps[14] = pi + 1; ps[15] = pi + 2; ps[8] = ps[7]; ps[11] = pi + 3; ps[4] = tmp2; ps[7] = pi + 4; ps[0] = tmp1; ps[1] = pi + 7; ps[2] = pi + 6; ps[3] = pi + 5; tmp1 = cs[3]; cs[2] = cs[1]; cs[3] = ci; cs[0] = tmp1; cs[1] = ci + 1; break; case 3: ps[12] = ps[0]; ps[13] = pi + 0; ps[14] = pi + 1; ps[15] = pi + 2; ps[8] = ps[1]; ps[11] = pi + 3; ps[4] = ps[2]; ps[7] = pi + 4; ps[0] = ps[3]; ps[1] = pi + 7; ps[2] = pi + 6; ps[3] = pi + 5; cs[2] = cs[0]; cs[3] = ci; cs[0] = cs[1]; cs[1] = ci + 1; break; } ps[5] = coords.length; coords.push([(-4 * coords[ps[0]][0] - coords[ps[15]][0] + 6 * (coords[ps[4]][0] + coords[ps[1]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[13]][0] + coords[ps[7]][0])) / 9, (-4 * coords[ps[0]][1] - coords[ps[15]][1] + 6 * (coords[ps[4]][1] + coords[ps[1]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[13]][1] + coords[ps[7]][1])) / 9]); ps[6] = coords.length; coords.push([(-4 * coords[ps[3]][0] - coords[ps[12]][0] + 6 * (coords[ps[2]][0] + coords[ps[7]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[4]][0] + coords[ps[14]][0])) / 9, (-4 * coords[ps[3]][1] - coords[ps[12]][1] + 6 * (coords[ps[2]][1] + coords[ps[7]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[4]][1] + coords[ps[14]][1])) / 9]); ps[9] = coords.length; coords.push([(-4 * coords[ps[12]][0] - coords[ps[3]][0] + 6 * (coords[ps[8]][0] + coords[ps[13]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[11]][0] + coords[ps[1]][0])) / 9, (-4 * coords[ps[12]][1] - coords[ps[3]][1] + 6 * (coords[ps[8]][1] + coords[ps[13]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[11]][1] + coords[ps[1]][1])) / 9]); ps[10] = coords.length; coords.push([(-4 * coords[ps[15]][0] - coords[ps[0]][0] + 6 * (coords[ps[11]][0] + coords[ps[14]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[2]][0] + coords[ps[8]][0])) / 9, (-4 * coords[ps[15]][1] - coords[ps[0]][1] + 6 * (coords[ps[11]][1] + coords[ps[14]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[2]][1] + coords[ps[8]][1])) / 9]); mesh.figures.push({ type: "patch", coords: new Int32Array(ps), colors: new Int32Array(cs) }); } } function decodeType7Shading(mesh, reader) { var coords = mesh.coords; var colors = mesh.colors; var ps = new Int32Array(16); var cs = new Int32Array(4); while (reader.hasData) { var f = reader.readFlag(); if (!(0 <= f && f <= 3)) { throw new _util.FormatError("Unknown type7 flag"); } var i, ii; var pi = coords.length; for (i = 0, ii = f !== 0 ? 12 : 16; i < ii; i++) { coords.push(reader.readCoordinate()); } var ci = colors.length; for (i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) { colors.push(reader.readComponents()); } var tmp1, tmp2, tmp3, tmp4; switch (f) { case 0: ps[12] = pi + 3; ps[13] = pi + 4; ps[14] = pi + 5; ps[15] = pi + 6; ps[8] = pi + 2; ps[9] = pi + 13; ps[10] = pi + 14; ps[11] = pi + 7; ps[4] = pi + 1; ps[5] = pi + 12; ps[6] = pi + 15; ps[7] = pi + 8; ps[0] = pi; ps[1] = pi + 11; ps[2] = pi + 10; ps[3] = pi + 9; cs[2] = ci + 1; cs[3] = ci + 2; cs[0] = ci; cs[1] = ci + 3; break; case 1: tmp1 = ps[12]; tmp2 = ps[13]; tmp3 = ps[14]; tmp4 = ps[15]; ps[12] = tmp4; ps[13] = pi + 0; ps[14] = pi + 1; ps[15] = pi + 2; ps[8] = tmp3; ps[9] = pi + 9; ps[10] = pi + 10; ps[11] = pi + 3; ps[4] = tmp2; ps[5] = pi + 8; ps[6] = pi + 11; ps[7] = pi + 4; ps[0] = tmp1; ps[1] = pi + 7; ps[2] = pi + 6; ps[3] = pi + 5; tmp1 = cs[2]; tmp2 = cs[3]; cs[2] = tmp2; cs[3] = ci; cs[0] = tmp1; cs[1] = ci + 1; break; case 2: tmp1 = ps[15]; tmp2 = ps[11]; ps[12] = ps[3]; ps[13] = pi + 0; ps[14] = pi + 1; ps[15] = pi + 2; ps[8] = ps[7]; ps[9] = pi + 9; ps[10] = pi + 10; ps[11] = pi + 3; ps[4] = tmp2; ps[5] = pi + 8; ps[6] = pi + 11; ps[7] = pi + 4; ps[0] = tmp1; ps[1] = pi + 7; ps[2] = pi + 6; ps[3] = pi + 5; tmp1 = cs[3]; cs[2] = cs[1]; cs[3] = ci; cs[0] = tmp1; cs[1] = ci + 1; break; case 3: ps[12] = ps[0]; ps[13] = pi + 0; ps[14] = pi + 1; ps[15] = pi + 2; ps[8] = ps[1]; ps[9] = pi + 9; ps[10] = pi + 10; ps[11] = pi + 3; ps[4] = ps[2]; ps[5] = pi + 8; ps[6] = pi + 11; ps[7] = pi + 4; ps[0] = ps[3]; ps[1] = pi + 7; ps[2] = pi + 6; ps[3] = pi + 5; cs[2] = cs[0]; cs[3] = ci; cs[0] = cs[1]; cs[1] = ci + 1; break; } mesh.figures.push({ type: "patch", coords: new Int32Array(ps), colors: new Int32Array(cs) }); } } function updateBounds(mesh) { var minX = mesh.coords[0][0], minY = mesh.coords[0][1], maxX = minX, maxY = minY; for (var i = 1, ii = mesh.coords.length; i < ii; i++) { var x = mesh.coords[i][0], y = mesh.coords[i][1]; minX = minX > x ? x : minX; minY = minY > y ? y : minY; maxX = maxX < x ? x : maxX; maxY = maxY < y ? y : maxY; } mesh.bounds = [minX, minY, maxX, maxY]; } function packData(mesh) { var i, ii, j, jj; var coords = mesh.coords; var coordsPacked = new Float32Array(coords.length * 2); for (i = 0, j = 0, ii = coords.length; i < ii; i++) { var xy = coords[i]; coordsPacked[j++] = xy[0]; coordsPacked[j++] = xy[1]; } mesh.coords = coordsPacked; var colors = mesh.colors; var colorsPacked = new Uint8Array(colors.length * 3); for (i = 0, j = 0, ii = colors.length; i < ii; i++) { var c = colors[i]; colorsPacked[j++] = c[0]; colorsPacked[j++] = c[1]; colorsPacked[j++] = c[2]; } mesh.colors = colorsPacked; var figures = mesh.figures; for (i = 0, ii = figures.length; i < ii; i++) { var figure = figures[i], ps = figure.coords, cs = figure.colors; for (j = 0, jj = ps.length; j < jj; j++) { ps[j] *= 2; cs[j] *= 3; } } } function Mesh(stream, matrix, xref, resources, pdfFunctionFactory, localColorSpaceCache) { if (!(0, _primitives.isStream)(stream)) { throw new _util.FormatError("Mesh data is not a stream"); } var dict = stream.dict; this.matrix = matrix; this.shadingType = dict.get("ShadingType"); this.type = "Pattern"; var bbox = dict.getArray("BBox"); if (Array.isArray(bbox) && bbox.length === 4) { this.bbox = _util.Util.normalizeRect(bbox); } else { this.bbox = null; } var cs = _colorspace.ColorSpace.parse({ cs: dict.getRaw("ColorSpace") || dict.getRaw("CS"), xref: xref, resources: resources, pdfFunctionFactory: pdfFunctionFactory, localColorSpaceCache: localColorSpaceCache }); this.cs = cs; this.background = dict.has("Background") ? cs.getRgb(dict.get("Background"), 0) : null; var fnObj = dict.getRaw("Function"); var fn = fnObj ? pdfFunctionFactory.createFromArray(fnObj) : null; this.coords = []; this.colors = []; this.figures = []; var decodeContext = { bitsPerCoordinate: dict.get("BitsPerCoordinate"), bitsPerComponent: dict.get("BitsPerComponent"), bitsPerFlag: dict.get("BitsPerFlag"), decode: dict.getArray("Decode"), colorFn: fn, colorSpace: cs, numComps: fn ? 1 : cs.numComps }; var reader = new MeshStreamReader(stream, decodeContext); var patchMesh = false; switch (this.shadingType) { case ShadingType.FREE_FORM_MESH: decodeType4Shading(this, reader); break; case ShadingType.LATTICE_FORM_MESH: var verticesPerRow = dict.get("VerticesPerRow") | 0; if (verticesPerRow < 2) { throw new _util.FormatError("Invalid VerticesPerRow"); } decodeType5Shading(this, reader, verticesPerRow); break; case ShadingType.COONS_PATCH_MESH: decodeType6Shading(this, reader); patchMesh = true; break; case ShadingType.TENSOR_PATCH_MESH: decodeType7Shading(this, reader); patchMesh = true; break; default: (0, _util.unreachable)("Unsupported mesh type."); break; } if (patchMesh) { updateBounds(this); for (var i = 0, ii = this.figures.length; i < ii; i++) { buildFigureFromPatch(this, i); } } updateBounds(this); packData(this); } Mesh.prototype = { getIR: function Mesh_getIR() { return ["Mesh", this.shadingType, this.coords, this.colors, this.figures, this.bounds, this.matrix, this.bbox, this.background]; } }; return Mesh; }(); Shadings.Dummy = function DummyClosure() { function Dummy() { this.type = "Pattern"; } Dummy.prototype = { getIR: function Dummy_getIR() { return ["Dummy"]; } }; return Dummy; }(); function getTilingPatternIR(operatorList, dict, color) { var matrix = dict.getArray("Matrix"); var bbox = _util.Util.normalizeRect(dict.getArray("BBox")); var xstep = dict.get("XStep"); var ystep = dict.get("YStep"); var paintType = dict.get("PaintType"); var tilingType = dict.get("TilingType"); if (bbox[2] - bbox[0] === 0 || bbox[3] - bbox[1] === 0) { throw new _util.FormatError("Invalid getTilingPatternIR /BBox array: [".concat(bbox, "].")); } return ["TilingPattern", color, operatorList, matrix, bbox, xstep, ystep, paintType, tilingType]; } /***/ }), /* 169 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.isPDFFunction = isPDFFunction; exports.PostScriptEvaluator = exports.PostScriptCompiler = exports.PDFFunctionFactory = void 0; var _primitives = __w_pdfjs_require__(135); var _util = __w_pdfjs_require__(4); var _ps_parser = __w_pdfjs_require__(170); var _image_utils = __w_pdfjs_require__(154); function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var PDFFunctionFactory = /*#__PURE__*/function () { function PDFFunctionFactory(_ref) { var xref = _ref.xref, _ref$isEvalSupported = _ref.isEvalSupported, isEvalSupported = _ref$isEvalSupported === void 0 ? true : _ref$isEvalSupported; _classCallCheck(this, PDFFunctionFactory); this.xref = xref; this.isEvalSupported = isEvalSupported !== false; } _createClass(PDFFunctionFactory, [{ key: "create", value: function create(fn) { var cachedFunction = this.getCached(fn); if (cachedFunction) { return cachedFunction; } var parsedFunction = PDFFunction.parse({ xref: this.xref, isEvalSupported: this.isEvalSupported, fn: fn instanceof _primitives.Ref ? this.xref.fetch(fn) : fn }); this._cache(fn, parsedFunction); return parsedFunction; } }, { key: "createFromArray", value: function createFromArray(fnObj) { var cachedFunction = this.getCached(fnObj); if (cachedFunction) { return cachedFunction; } var parsedFunction = PDFFunction.parseArray({ xref: this.xref, isEvalSupported: this.isEvalSupported, fnObj: fnObj instanceof _primitives.Ref ? this.xref.fetch(fnObj) : fnObj }); this._cache(fnObj, parsedFunction); return parsedFunction; } }, { key: "getCached", value: function getCached(cacheKey) { var fnRef; if (cacheKey instanceof _primitives.Ref) { fnRef = cacheKey; } else if (cacheKey instanceof _primitives.Dict) { fnRef = cacheKey.objId; } else if ((0, _primitives.isStream)(cacheKey)) { fnRef = cacheKey.dict && cacheKey.dict.objId; } if (fnRef) { var localFunction = this._localFunctionCache.getByRef(fnRef); if (localFunction) { return localFunction; } } return null; } }, { key: "_cache", value: function _cache(cacheKey, parsedFunction) { if (!parsedFunction) { throw new Error('PDFFunctionFactory._cache - expected "parsedFunction" argument.'); } var fnRef; if (cacheKey instanceof _primitives.Ref) { fnRef = cacheKey; } else if (cacheKey instanceof _primitives.Dict) { fnRef = cacheKey.objId; } else if ((0, _primitives.isStream)(cacheKey)) { fnRef = cacheKey.dict && cacheKey.dict.objId; } if (fnRef) { this._localFunctionCache.set(null, fnRef, parsedFunction); } } }, { key: "_localFunctionCache", get: function get() { return (0, _util.shadow)(this, "_localFunctionCache", new _image_utils.LocalFunctionCache()); } }]); return PDFFunctionFactory; }(); exports.PDFFunctionFactory = PDFFunctionFactory; function toNumberArray(arr) { if (!Array.isArray(arr)) { return null; } var length = arr.length; for (var i = 0; i < length; i++) { if (typeof arr[i] !== "number") { var result = new Array(length); for (var j = 0; j < length; j++) { result[j] = +arr[j]; } return result; } } return arr; } var PDFFunction = function PDFFunctionClosure() { var CONSTRUCT_SAMPLED = 0; var CONSTRUCT_INTERPOLATED = 2; var CONSTRUCT_STICHED = 3; var CONSTRUCT_POSTSCRIPT = 4; return { getSampleArray: function getSampleArray(size, outputSize, bps, stream) { var i, ii; var length = 1; for (i = 0, ii = size.length; i < ii; i++) { length *= size[i]; } length *= outputSize; var array = new Array(length); var codeSize = 0; var codeBuf = 0; var sampleMul = 1.0 / (Math.pow(2.0, bps) - 1); var strBytes = stream.getBytes((length * bps + 7) / 8); var strIdx = 0; for (i = 0; i < length; i++) { while (codeSize < bps) { codeBuf <<= 8; codeBuf |= strBytes[strIdx++]; codeSize += 8; } codeSize -= bps; array[i] = (codeBuf >> codeSize) * sampleMul; codeBuf &= (1 << codeSize) - 1; } return array; }, getIR: function getIR(_ref2) { var xref = _ref2.xref, isEvalSupported = _ref2.isEvalSupported, fn = _ref2.fn; var dict = fn.dict; if (!dict) { dict = fn; } var types = [this.constructSampled, null, this.constructInterpolated, this.constructStiched, this.constructPostScript]; var typeNum = dict.get("FunctionType"); var typeFn = types[typeNum]; if (!typeFn) { throw new _util.FormatError("Unknown type of function"); } return typeFn.call(this, { xref: xref, isEvalSupported: isEvalSupported, fn: fn, dict: dict }); }, fromIR: function fromIR(_ref3) { var xref = _ref3.xref, isEvalSupported = _ref3.isEvalSupported, IR = _ref3.IR; var type = IR[0]; switch (type) { case CONSTRUCT_SAMPLED: return this.constructSampledFromIR({ xref: xref, isEvalSupported: isEvalSupported, IR: IR }); case CONSTRUCT_INTERPOLATED: return this.constructInterpolatedFromIR({ xref: xref, isEvalSupported: isEvalSupported, IR: IR }); case CONSTRUCT_STICHED: return this.constructStichedFromIR({ xref: xref, isEvalSupported: isEvalSupported, IR: IR }); default: return this.constructPostScriptFromIR({ xref: xref, isEvalSupported: isEvalSupported, IR: IR }); } }, parse: function parse(_ref4) { var xref = _ref4.xref, isEvalSupported = _ref4.isEvalSupported, fn = _ref4.fn; var IR = this.getIR({ xref: xref, isEvalSupported: isEvalSupported, fn: fn }); return this.fromIR({ xref: xref, isEvalSupported: isEvalSupported, IR: IR }); }, parseArray: function parseArray(_ref5) { var xref = _ref5.xref, isEvalSupported = _ref5.isEvalSupported, fnObj = _ref5.fnObj; if (!Array.isArray(fnObj)) { return this.parse({ xref: xref, isEvalSupported: isEvalSupported, fn: fnObj }); } var fnArray = []; for (var j = 0, jj = fnObj.length; j < jj; j++) { fnArray.push(this.parse({ xref: xref, isEvalSupported: isEvalSupported, fn: xref.fetchIfRef(fnObj[j]) })); } return function (src, srcOffset, dest, destOffset) { for (var i = 0, ii = fnArray.length; i < ii; i++) { fnArray[i](src, srcOffset, dest, destOffset + i); } }; }, constructSampled: function constructSampled(_ref6) { var xref = _ref6.xref, isEvalSupported = _ref6.isEvalSupported, fn = _ref6.fn, dict = _ref6.dict; function toMultiArray(arr) { var inputLength = arr.length; var out = []; var index = 0; for (var i = 0; i < inputLength; i += 2) { out[index] = [arr[i], arr[i + 1]]; ++index; } return out; } var domain = toNumberArray(dict.getArray("Domain")); var range = toNumberArray(dict.getArray("Range")); if (!domain || !range) { throw new _util.FormatError("No domain or range"); } var inputSize = domain.length / 2; var outputSize = range.length / 2; domain = toMultiArray(domain); range = toMultiArray(range); var size = toNumberArray(dict.getArray("Size")); var bps = dict.get("BitsPerSample"); var order = dict.get("Order") || 1; if (order !== 1) { (0, _util.info)("No support for cubic spline interpolation: " + order); } var encode = toNumberArray(dict.getArray("Encode")); if (!encode) { encode = []; for (var i = 0; i < inputSize; ++i) { encode.push([0, size[i] - 1]); } } else { encode = toMultiArray(encode); } var decode = toNumberArray(dict.getArray("Decode")); if (!decode) { decode = range; } else { decode = toMultiArray(decode); } var samples = this.getSampleArray(size, outputSize, bps, fn); return [CONSTRUCT_SAMPLED, inputSize, domain, encode, decode, samples, size, outputSize, Math.pow(2, bps) - 1, range]; }, constructSampledFromIR: function constructSampledFromIR(_ref7) { var xref = _ref7.xref, isEvalSupported = _ref7.isEvalSupported, IR = _ref7.IR; function interpolate(x, xmin, xmax, ymin, ymax) { return ymin + (x - xmin) * ((ymax - ymin) / (xmax - xmin)); } return function constructSampledFromIRResult(src, srcOffset, dest, destOffset) { var m = IR[1]; var domain = IR[2]; var encode = IR[3]; var decode = IR[4]; var samples = IR[5]; var size = IR[6]; var n = IR[7]; var range = IR[9]; var cubeVertices = 1 << m; var cubeN = new Float64Array(cubeVertices); var cubeVertex = new Uint32Array(cubeVertices); var i, j; for (j = 0; j < cubeVertices; j++) { cubeN[j] = 1; } var k = n, pos = 1; for (i = 0; i < m; ++i) { var domain_2i = domain[i][0]; var domain_2i_1 = domain[i][1]; var xi = Math.min(Math.max(src[srcOffset + i], domain_2i), domain_2i_1); var e = interpolate(xi, domain_2i, domain_2i_1, encode[i][0], encode[i][1]); var size_i = size[i]; e = Math.min(Math.max(e, 0), size_i - 1); var e0 = e < size_i - 1 ? Math.floor(e) : e - 1; var n0 = e0 + 1 - e; var n1 = e - e0; var offset0 = e0 * k; var offset1 = offset0 + k; for (j = 0; j < cubeVertices; j++) { if (j & pos) { cubeN[j] *= n1; cubeVertex[j] += offset1; } else { cubeN[j] *= n0; cubeVertex[j] += offset0; } } k *= size_i; pos <<= 1; } for (j = 0; j < n; ++j) { var rj = 0; for (i = 0; i < cubeVertices; i++) { rj += samples[cubeVertex[i] + j] * cubeN[i]; } rj = interpolate(rj, 0, 1, decode[j][0], decode[j][1]); dest[destOffset + j] = Math.min(Math.max(rj, range[j][0]), range[j][1]); } }; }, constructInterpolated: function constructInterpolated(_ref8) { var xref = _ref8.xref, isEvalSupported = _ref8.isEvalSupported, fn = _ref8.fn, dict = _ref8.dict; var c0 = toNumberArray(dict.getArray("C0")) || [0]; var c1 = toNumberArray(dict.getArray("C1")) || [1]; var n = dict.get("N"); var length = c0.length; var diff = []; for (var i = 0; i < length; ++i) { diff.push(c1[i] - c0[i]); } return [CONSTRUCT_INTERPOLATED, c0, diff, n]; }, constructInterpolatedFromIR: function constructInterpolatedFromIR(_ref9) { var xref = _ref9.xref, isEvalSupported = _ref9.isEvalSupported, IR = _ref9.IR; var c0 = IR[1]; var diff = IR[2]; var n = IR[3]; var length = diff.length; return function constructInterpolatedFromIRResult(src, srcOffset, dest, destOffset) { var x = n === 1 ? src[srcOffset] : Math.pow(src[srcOffset], n); for (var j = 0; j < length; ++j) { dest[destOffset + j] = c0[j] + x * diff[j]; } }; }, constructStiched: function constructStiched(_ref10) { var xref = _ref10.xref, isEvalSupported = _ref10.isEvalSupported, fn = _ref10.fn, dict = _ref10.dict; var domain = toNumberArray(dict.getArray("Domain")); if (!domain) { throw new _util.FormatError("No domain"); } var inputSize = domain.length / 2; if (inputSize !== 1) { throw new _util.FormatError("Bad domain for stiched function"); } var fnRefs = dict.get("Functions"); var fns = []; for (var i = 0, ii = fnRefs.length; i < ii; ++i) { fns.push(this.parse({ xref: xref, isEvalSupported: isEvalSupported, fn: xref.fetchIfRef(fnRefs[i]) })); } var bounds = toNumberArray(dict.getArray("Bounds")); var encode = toNumberArray(dict.getArray("Encode")); return [CONSTRUCT_STICHED, domain, bounds, encode, fns]; }, constructStichedFromIR: function constructStichedFromIR(_ref11) { var xref = _ref11.xref, isEvalSupported = _ref11.isEvalSupported, IR = _ref11.IR; var domain = IR[1]; var bounds = IR[2]; var encode = IR[3]; var fns = IR[4]; var tmpBuf = new Float32Array(1); return function constructStichedFromIRResult(src, srcOffset, dest, destOffset) { var clip = function constructStichedFromIRClip(v, min, max) { if (v > max) { v = max; } else if (v < min) { v = min; } return v; }; var v = clip(src[srcOffset], domain[0], domain[1]); for (var i = 0, ii = bounds.length; i < ii; ++i) { if (v < bounds[i]) { break; } } var dmin = domain[0]; if (i > 0) { dmin = bounds[i - 1]; } var dmax = domain[1]; if (i < bounds.length) { dmax = bounds[i]; } var rmin = encode[2 * i]; var rmax = encode[2 * i + 1]; tmpBuf[0] = dmin === dmax ? rmin : rmin + (v - dmin) * (rmax - rmin) / (dmax - dmin); fns[i](tmpBuf, 0, dest, destOffset); }; }, constructPostScript: function constructPostScript(_ref12) { var xref = _ref12.xref, isEvalSupported = _ref12.isEvalSupported, fn = _ref12.fn, dict = _ref12.dict; var domain = toNumberArray(dict.getArray("Domain")); var range = toNumberArray(dict.getArray("Range")); if (!domain) { throw new _util.FormatError("No domain."); } if (!range) { throw new _util.FormatError("No range."); } var lexer = new _ps_parser.PostScriptLexer(fn); var parser = new _ps_parser.PostScriptParser(lexer); var code = parser.parse(); return [CONSTRUCT_POSTSCRIPT, domain, range, code]; }, constructPostScriptFromIR: function constructPostScriptFromIR(_ref13) { var xref = _ref13.xref, isEvalSupported = _ref13.isEvalSupported, IR = _ref13.IR; var domain = IR[1]; var range = IR[2]; var code = IR[3]; if (isEvalSupported && _util.IsEvalSupportedCached.value) { var compiled = new PostScriptCompiler().compile(code, domain, range); if (compiled) { return new Function("src", "srcOffset", "dest", "destOffset", compiled); } } (0, _util.info)("Unable to compile PS function"); var numOutputs = range.length >> 1; var numInputs = domain.length >> 1; var evaluator = new PostScriptEvaluator(code); var cache = Object.create(null); var MAX_CACHE_SIZE = 2048 * 4; var cache_available = MAX_CACHE_SIZE; var tmpBuf = new Float32Array(numInputs); return function constructPostScriptFromIRResult(src, srcOffset, dest, destOffset) { var i, value; var key = ""; var input = tmpBuf; for (i = 0; i < numInputs; i++) { value = src[srcOffset + i]; input[i] = value; key += value + "_"; } var cachedValue = cache[key]; if (cachedValue !== undefined) { dest.set(cachedValue, destOffset); return; } var output = new Float32Array(numOutputs); var stack = evaluator.execute(input); var stackIndex = stack.length - numOutputs; for (i = 0; i < numOutputs; i++) { value = stack[stackIndex + i]; var bound = range[i * 2]; if (value < bound) { value = bound; } else { bound = range[i * 2 + 1]; if (value > bound) { value = bound; } } output[i] = value; } if (cache_available > 0) { cache_available--; cache[key] = output; } dest.set(output, destOffset); }; } }; }(); function isPDFFunction(v) { var fnDict; if (_typeof(v) !== "object") { return false; } else if ((0, _primitives.isDict)(v)) { fnDict = v; } else if ((0, _primitives.isStream)(v)) { fnDict = v.dict; } else { return false; } return fnDict.has("FunctionType"); } var PostScriptStack = function PostScriptStackClosure() { var MAX_STACK_SIZE = 100; function PostScriptStack(initialStack) { this.stack = !initialStack ? [] : Array.prototype.slice.call(initialStack, 0); } PostScriptStack.prototype = { push: function PostScriptStack_push(value) { if (this.stack.length >= MAX_STACK_SIZE) { throw new Error("PostScript function stack overflow."); } this.stack.push(value); }, pop: function PostScriptStack_pop() { if (this.stack.length <= 0) { throw new Error("PostScript function stack underflow."); } return this.stack.pop(); }, copy: function PostScriptStack_copy(n) { if (this.stack.length + n >= MAX_STACK_SIZE) { throw new Error("PostScript function stack overflow."); } var stack = this.stack; for (var i = stack.length - n, j = n - 1; j >= 0; j--, i++) { stack.push(stack[i]); } }, index: function PostScriptStack_index(n) { this.push(this.stack[this.stack.length - n - 1]); }, roll: function PostScriptStack_roll(n, p) { var stack = this.stack; var l = stack.length - n; var r = stack.length - 1, c = l + (p - Math.floor(p / n) * n), i, j, t; for (i = l, j = r; i < j; i++, j--) { t = stack[i]; stack[i] = stack[j]; stack[j] = t; } for (i = l, j = c - 1; i < j; i++, j--) { t = stack[i]; stack[i] = stack[j]; stack[j] = t; } for (i = c, j = r; i < j; i++, j--) { t = stack[i]; stack[i] = stack[j]; stack[j] = t; } } }; return PostScriptStack; }(); var PostScriptEvaluator = function PostScriptEvaluatorClosure() { function PostScriptEvaluator(operators) { this.operators = operators; } PostScriptEvaluator.prototype = { execute: function PostScriptEvaluator_execute(initialStack) { var stack = new PostScriptStack(initialStack); var counter = 0; var operators = this.operators; var length = operators.length; var operator, a, b; while (counter < length) { operator = operators[counter++]; if (typeof operator === "number") { stack.push(operator); continue; } switch (operator) { case "jz": b = stack.pop(); a = stack.pop(); if (!a) { counter = b; } break; case "j": a = stack.pop(); counter = a; break; case "abs": a = stack.pop(); stack.push(Math.abs(a)); break; case "add": b = stack.pop(); a = stack.pop(); stack.push(a + b); break; case "and": b = stack.pop(); a = stack.pop(); if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) { stack.push(a && b); } else { stack.push(a & b); } break; case "atan": a = stack.pop(); stack.push(Math.atan(a)); break; case "bitshift": b = stack.pop(); a = stack.pop(); if (a > 0) { stack.push(a << b); } else { stack.push(a >> b); } break; case "ceiling": a = stack.pop(); stack.push(Math.ceil(a)); break; case "copy": a = stack.pop(); stack.copy(a); break; case "cos": a = stack.pop(); stack.push(Math.cos(a)); break; case "cvi": a = stack.pop() | 0; stack.push(a); break; case "cvr": break; case "div": b = stack.pop(); a = stack.pop(); stack.push(a / b); break; case "dup": stack.copy(1); break; case "eq": b = stack.pop(); a = stack.pop(); stack.push(a === b); break; case "exch": stack.roll(2, 1); break; case "exp": b = stack.pop(); a = stack.pop(); stack.push(Math.pow(a, b)); break; case "false": stack.push(false); break; case "floor": a = stack.pop(); stack.push(Math.floor(a)); break; case "ge": b = stack.pop(); a = stack.pop(); stack.push(a >= b); break; case "gt": b = stack.pop(); a = stack.pop(); stack.push(a > b); break; case "idiv": b = stack.pop(); a = stack.pop(); stack.push(a / b | 0); break; case "index": a = stack.pop(); stack.index(a); break; case "le": b = stack.pop(); a = stack.pop(); stack.push(a <= b); break; case "ln": a = stack.pop(); stack.push(Math.log(a)); break; case "log": a = stack.pop(); stack.push(Math.log(a) / Math.LN10); break; case "lt": b = stack.pop(); a = stack.pop(); stack.push(a < b); break; case "mod": b = stack.pop(); a = stack.pop(); stack.push(a % b); break; case "mul": b = stack.pop(); a = stack.pop(); stack.push(a * b); break; case "ne": b = stack.pop(); a = stack.pop(); stack.push(a !== b); break; case "neg": a = stack.pop(); stack.push(-a); break; case "not": a = stack.pop(); if ((0, _util.isBool)(a)) { stack.push(!a); } else { stack.push(~a); } break; case "or": b = stack.pop(); a = stack.pop(); if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) { stack.push(a || b); } else { stack.push(a | b); } break; case "pop": stack.pop(); break; case "roll": b = stack.pop(); a = stack.pop(); stack.roll(a, b); break; case "round": a = stack.pop(); stack.push(Math.round(a)); break; case "sin": a = stack.pop(); stack.push(Math.sin(a)); break; case "sqrt": a = stack.pop(); stack.push(Math.sqrt(a)); break; case "sub": b = stack.pop(); a = stack.pop(); stack.push(a - b); break; case "true": stack.push(true); break; case "truncate": a = stack.pop(); a = a < 0 ? Math.ceil(a) : Math.floor(a); stack.push(a); break; case "xor": b = stack.pop(); a = stack.pop(); if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) { stack.push(a !== b); } else { stack.push(a ^ b); } break; default: throw new _util.FormatError("Unknown operator ".concat(operator)); } } return stack.stack; } }; return PostScriptEvaluator; }(); exports.PostScriptEvaluator = PostScriptEvaluator; var PostScriptCompiler = function PostScriptCompilerClosure() { function AstNode(type) { this.type = type; } AstNode.prototype.visit = function (visitor) { (0, _util.unreachable)("abstract method"); }; function AstArgument(index, min, max) { AstNode.call(this, "args"); this.index = index; this.min = min; this.max = max; } AstArgument.prototype = Object.create(AstNode.prototype); AstArgument.prototype.visit = function (visitor) { visitor.visitArgument(this); }; function AstLiteral(number) { AstNode.call(this, "literal"); this.number = number; this.min = number; this.max = number; } AstLiteral.prototype = Object.create(AstNode.prototype); AstLiteral.prototype.visit = function (visitor) { visitor.visitLiteral(this); }; function AstBinaryOperation(op, arg1, arg2, min, max) { AstNode.call(this, "binary"); this.op = op; this.arg1 = arg1; this.arg2 = arg2; this.min = min; this.max = max; } AstBinaryOperation.prototype = Object.create(AstNode.prototype); AstBinaryOperation.prototype.visit = function (visitor) { visitor.visitBinaryOperation(this); }; function AstMin(arg, max) { AstNode.call(this, "max"); this.arg = arg; this.min = arg.min; this.max = max; } AstMin.prototype = Object.create(AstNode.prototype); AstMin.prototype.visit = function (visitor) { visitor.visitMin(this); }; function AstVariable(index, min, max) { AstNode.call(this, "var"); this.index = index; this.min = min; this.max = max; } AstVariable.prototype = Object.create(AstNode.prototype); AstVariable.prototype.visit = function (visitor) { visitor.visitVariable(this); }; function AstVariableDefinition(variable, arg) { AstNode.call(this, "definition"); this.variable = variable; this.arg = arg; } AstVariableDefinition.prototype = Object.create(AstNode.prototype); AstVariableDefinition.prototype.visit = function (visitor) { visitor.visitVariableDefinition(this); }; function ExpressionBuilderVisitor() { this.parts = []; } ExpressionBuilderVisitor.prototype = { visitArgument: function visitArgument(arg) { this.parts.push("Math.max(", arg.min, ", Math.min(", arg.max, ", src[srcOffset + ", arg.index, "]))"); }, visitVariable: function visitVariable(variable) { this.parts.push("v", variable.index); }, visitLiteral: function visitLiteral(literal) { this.parts.push(literal.number); }, visitBinaryOperation: function visitBinaryOperation(operation) { this.parts.push("("); operation.arg1.visit(this); this.parts.push(" ", operation.op, " "); operation.arg2.visit(this); this.parts.push(")"); }, visitVariableDefinition: function visitVariableDefinition(definition) { this.parts.push("var "); definition.variable.visit(this); this.parts.push(" = "); definition.arg.visit(this); this.parts.push(";"); }, visitMin: function visitMin(max) { this.parts.push("Math.min("); max.arg.visit(this); this.parts.push(", ", max.max, ")"); }, toString: function toString() { return this.parts.join(""); } }; function buildAddOperation(num1, num2) { if (num2.type === "literal" && num2.number === 0) { return num1; } if (num1.type === "literal" && num1.number === 0) { return num2; } if (num2.type === "literal" && num1.type === "literal") { return new AstLiteral(num1.number + num2.number); } return new AstBinaryOperation("+", num1, num2, num1.min + num2.min, num1.max + num2.max); } function buildMulOperation(num1, num2) { if (num2.type === "literal") { if (num2.number === 0) { return new AstLiteral(0); } else if (num2.number === 1) { return num1; } else if (num1.type === "literal") { return new AstLiteral(num1.number * num2.number); } } if (num1.type === "literal") { if (num1.number === 0) { return new AstLiteral(0); } else if (num1.number === 1) { return num2; } } var min = Math.min(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max); var max = Math.max(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max); return new AstBinaryOperation("*", num1, num2, min, max); } function buildSubOperation(num1, num2) { if (num2.type === "literal") { if (num2.number === 0) { return num1; } else if (num1.type === "literal") { return new AstLiteral(num1.number - num2.number); } } if (num2.type === "binary" && num2.op === "-" && num1.type === "literal" && num1.number === 1 && num2.arg1.type === "literal" && num2.arg1.number === 1) { return num2.arg2; } return new AstBinaryOperation("-", num1, num2, num1.min - num2.max, num1.max - num2.min); } function buildMinOperation(num1, max) { if (num1.min >= max) { return new AstLiteral(max); } else if (num1.max <= max) { return num1; } return new AstMin(num1, max); } function PostScriptCompiler() {} PostScriptCompiler.prototype = { compile: function PostScriptCompiler_compile(code, domain, range) { var stack = []; var instructions = []; var inputSize = domain.length >> 1, outputSize = range.length >> 1; var lastRegister = 0; var n, j; var num1, num2, ast1, ast2, tmpVar, item; for (var i = 0; i < inputSize; i++) { stack.push(new AstArgument(i, domain[i * 2], domain[i * 2 + 1])); } for (var _i = 0, ii = code.length; _i < ii; _i++) { item = code[_i]; if (typeof item === "number") { stack.push(new AstLiteral(item)); continue; } switch (item) { case "add": if (stack.length < 2) { return null; } num2 = stack.pop(); num1 = stack.pop(); stack.push(buildAddOperation(num1, num2)); break; case "cvr": if (stack.length < 1) { return null; } break; case "mul": if (stack.length < 2) { return null; } num2 = stack.pop(); num1 = stack.pop(); stack.push(buildMulOperation(num1, num2)); break; case "sub": if (stack.length < 2) { return null; } num2 = stack.pop(); num1 = stack.pop(); stack.push(buildSubOperation(num1, num2)); break; case "exch": if (stack.length < 2) { return null; } ast1 = stack.pop(); ast2 = stack.pop(); stack.push(ast1, ast2); break; case "pop": if (stack.length < 1) { return null; } stack.pop(); break; case "index": if (stack.length < 1) { return null; } num1 = stack.pop(); if (num1.type !== "literal") { return null; } n = num1.number; if (n < 0 || !Number.isInteger(n) || stack.length < n) { return null; } ast1 = stack[stack.length - n - 1]; if (ast1.type === "literal" || ast1.type === "var") { stack.push(ast1); break; } tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max); stack[stack.length - n - 1] = tmpVar; stack.push(tmpVar); instructions.push(new AstVariableDefinition(tmpVar, ast1)); break; case "dup": if (stack.length < 1) { return null; } if (typeof code[_i + 1] === "number" && code[_i + 2] === "gt" && code[_i + 3] === _i + 7 && code[_i + 4] === "jz" && code[_i + 5] === "pop" && code[_i + 6] === code[_i + 1]) { num1 = stack.pop(); stack.push(buildMinOperation(num1, code[_i + 1])); _i += 6; break; } ast1 = stack[stack.length - 1]; if (ast1.type === "literal" || ast1.type === "var") { stack.push(ast1); break; } tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max); stack[stack.length - 1] = tmpVar; stack.push(tmpVar); instructions.push(new AstVariableDefinition(tmpVar, ast1)); break; case "roll": if (stack.length < 2) { return null; } num2 = stack.pop(); num1 = stack.pop(); if (num2.type !== "literal" || num1.type !== "literal") { return null; } j = num2.number; n = num1.number; if (n <= 0 || !Number.isInteger(n) || !Number.isInteger(j) || stack.length < n) { return null; } j = (j % n + n) % n; if (j === 0) { break; } Array.prototype.push.apply(stack, stack.splice(stack.length - n, n - j)); break; default: return null; } } if (stack.length !== outputSize) { return null; } var result = []; instructions.forEach(function (instruction) { var statementBuilder = new ExpressionBuilderVisitor(); instruction.visit(statementBuilder); result.push(statementBuilder.toString()); }); stack.forEach(function (expr, i) { var statementBuilder = new ExpressionBuilderVisitor(); expr.visit(statementBuilder); var min = range[i * 2], max = range[i * 2 + 1]; var out = [statementBuilder.toString()]; if (min > expr.min) { out.unshift("Math.max(", min, ", "); out.push(")"); } if (max < expr.max) { out.unshift("Math.min(", max, ", "); out.push(")"); } out.unshift("dest[destOffset + ", i, "] = "); out.push(";"); result.push(out.join("")); }); return result.join("\n"); } }; return PostScriptCompiler; }(); exports.PostScriptCompiler = PostScriptCompiler; /***/ }), /* 170 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PostScriptParser = exports.PostScriptLexer = void 0; var _util = __w_pdfjs_require__(4); var _primitives = __w_pdfjs_require__(135); var _core_utils = __w_pdfjs_require__(138); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var PostScriptParser = /*#__PURE__*/function () { function PostScriptParser(lexer) { _classCallCheck(this, PostScriptParser); this.lexer = lexer; this.operators = []; this.token = null; this.prev = null; } _createClass(PostScriptParser, [{ key: "nextToken", value: function nextToken() { this.prev = this.token; this.token = this.lexer.getToken(); } }, { key: "accept", value: function accept(type) { if (this.token.type === type) { this.nextToken(); return true; } return false; } }, { key: "expect", value: function expect(type) { if (this.accept(type)) { return true; } throw new _util.FormatError("Unexpected symbol: found ".concat(this.token.type, " expected ").concat(type, ".")); } }, { key: "parse", value: function parse() { this.nextToken(); this.expect(PostScriptTokenTypes.LBRACE); this.parseBlock(); this.expect(PostScriptTokenTypes.RBRACE); return this.operators; } }, { key: "parseBlock", value: function parseBlock() { while (true) { if (this.accept(PostScriptTokenTypes.NUMBER)) { this.operators.push(this.prev.value); } else if (this.accept(PostScriptTokenTypes.OPERATOR)) { this.operators.push(this.prev.value); } else if (this.accept(PostScriptTokenTypes.LBRACE)) { this.parseCondition(); } else { return; } } } }, { key: "parseCondition", value: function parseCondition() { var conditionLocation = this.operators.length; this.operators.push(null, null); this.parseBlock(); this.expect(PostScriptTokenTypes.RBRACE); if (this.accept(PostScriptTokenTypes.IF)) { this.operators[conditionLocation] = this.operators.length; this.operators[conditionLocation + 1] = "jz"; } else if (this.accept(PostScriptTokenTypes.LBRACE)) { var jumpLocation = this.operators.length; this.operators.push(null, null); var endOfTrue = this.operators.length; this.parseBlock(); this.expect(PostScriptTokenTypes.RBRACE); this.expect(PostScriptTokenTypes.IFELSE); this.operators[jumpLocation] = this.operators.length; this.operators[jumpLocation + 1] = "j"; this.operators[conditionLocation] = endOfTrue; this.operators[conditionLocation + 1] = "jz"; } else { throw new _util.FormatError("PS Function: error parsing conditional."); } } }]); return PostScriptParser; }(); exports.PostScriptParser = PostScriptParser; var PostScriptTokenTypes = { LBRACE: 0, RBRACE: 1, NUMBER: 2, OPERATOR: 3, IF: 4, IFELSE: 5 }; var PostScriptToken = function PostScriptTokenClosure() { var opCache = Object.create(null); var PostScriptToken = /*#__PURE__*/function () { function PostScriptToken(type, value) { _classCallCheck(this, PostScriptToken); this.type = type; this.value = value; } _createClass(PostScriptToken, null, [{ key: "getOperator", value: function getOperator(op) { var opValue = opCache[op]; if (opValue) { return opValue; } return opCache[op] = new PostScriptToken(PostScriptTokenTypes.OPERATOR, op); } }, { key: "LBRACE", get: function get() { return (0, _util.shadow)(this, "LBRACE", new PostScriptToken(PostScriptTokenTypes.LBRACE, "{")); } }, { key: "RBRACE", get: function get() { return (0, _util.shadow)(this, "RBRACE", new PostScriptToken(PostScriptTokenTypes.RBRACE, "}")); } }, { key: "IF", get: function get() { return (0, _util.shadow)(this, "IF", new PostScriptToken(PostScriptTokenTypes.IF, "IF")); } }, { key: "IFELSE", get: function get() { return (0, _util.shadow)(this, "IFELSE", new PostScriptToken(PostScriptTokenTypes.IFELSE, "IFELSE")); } }]); return PostScriptToken; }(); return PostScriptToken; }(); var PostScriptLexer = /*#__PURE__*/function () { function PostScriptLexer(stream) { _classCallCheck(this, PostScriptLexer); this.stream = stream; this.nextChar(); this.strBuf = []; } _createClass(PostScriptLexer, [{ key: "nextChar", value: function nextChar() { return this.currentChar = this.stream.getByte(); } }, { key: "getToken", value: function getToken() { var comment = false; var ch = this.currentChar; while (true) { if (ch < 0) { return _primitives.EOF; } if (comment) { if (ch === 0x0a || ch === 0x0d) { comment = false; } } else if (ch === 0x25) { comment = true; } else if (!(0, _core_utils.isWhiteSpace)(ch)) { break; } ch = this.nextChar(); } switch (ch | 0) { case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: case 0x2b: case 0x2d: case 0x2e: return new PostScriptToken(PostScriptTokenTypes.NUMBER, this.getNumber()); case 0x7b: this.nextChar(); return PostScriptToken.LBRACE; case 0x7d: this.nextChar(); return PostScriptToken.RBRACE; } var strBuf = this.strBuf; strBuf.length = 0; strBuf[0] = String.fromCharCode(ch); while ((ch = this.nextChar()) >= 0 && (ch >= 0x41 && ch <= 0x5a || ch >= 0x61 && ch <= 0x7a)) { strBuf.push(String.fromCharCode(ch)); } var str = strBuf.join(""); switch (str.toLowerCase()) { case "if": return PostScriptToken.IF; case "ifelse": return PostScriptToken.IFELSE; default: return PostScriptToken.getOperator(str); } } }, { key: "getNumber", value: function getNumber() { var ch = this.currentChar; var strBuf = this.strBuf; strBuf.length = 0; strBuf[0] = String.fromCharCode(ch); while ((ch = this.nextChar()) >= 0) { if (ch >= 0x30 && ch <= 0x39 || ch === 0x2d || ch === 0x2e) { strBuf.push(String.fromCharCode(ch)); } else { break; } } var value = parseFloat(strBuf.join("")); if (isNaN(value)) { throw new _util.FormatError("Invalid floating point number: ".concat(value)); } return value; } }]); return PostScriptLexer; }(); exports.PostScriptLexer = PostScriptLexer; /***/ }), /* 171 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.bidi = bidi; var _util = __w_pdfjs_require__(4); var baseTypes = ["BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "S", "B", "S", "WS", "B", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "B", "B", "B", "S", "WS", "ON", "ON", "ET", "ET", "ET", "ON", "ON", "ON", "ON", "ON", "ES", "CS", "ES", "CS", "CS", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "CS", "ON", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "ON", "ON", "ON", "BN", "BN", "BN", "BN", "BN", "BN", "B", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "CS", "ON", "ET", "ET", "ET", "ET", "ON", "ON", "ON", "ON", "L", "ON", "ON", "BN", "ON", "ON", "ET", "ET", "EN", "EN", "ON", "L", "ON", "ON", "ON", "EN", "L", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "L", "L", "L", "L", "L", "L", "L", "L"]; var arabicTypes = ["AN", "AN", "AN", "AN", "AN", "AN", "ON", "ON", "AL", "ET", "ET", "AL", "CS", "AL", "ON", "ON", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "ET", "AN", "AN", "AL", "AL", "AL", "NSM", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AN", "ON", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "NSM", "NSM", "ON", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "AL", "AL", "AL", "AL", "AL", "AL"]; function isOdd(i) { return (i & 1) !== 0; } function isEven(i) { return (i & 1) === 0; } function findUnequal(arr, start, value) { for (var j = start, jj = arr.length; j < jj; ++j) { if (arr[j] !== value) { return j; } } return j; } function setValues(arr, start, end, value) { for (var j = start; j < end; ++j) { arr[j] = value; } } function reverseValues(arr, start, end) { for (var i = start, j = end - 1; i < j; ++i, --j) { var temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } function createBidiText(str, isLTR) { var vertical = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var dir = "ltr"; if (vertical) { dir = "ttb"; } else if (!isLTR) { dir = "rtl"; } return { str: str, dir: dir }; } var chars = []; var types = []; function bidi(str, startLevel, vertical) { var isLTR = true; var strLength = str.length; if (strLength === 0 || vertical) { return createBidiText(str, isLTR, vertical); } chars.length = strLength; types.length = strLength; var numBidi = 0; var i, ii; for (i = 0; i < strLength; ++i) { chars[i] = str.charAt(i); var charCode = str.charCodeAt(i); var charType = "L"; if (charCode <= 0x00ff) { charType = baseTypes[charCode]; } else if (0x0590 <= charCode && charCode <= 0x05f4) { charType = "R"; } else if (0x0600 <= charCode && charCode <= 0x06ff) { charType = arabicTypes[charCode & 0xff]; if (!charType) { (0, _util.warn)("Bidi: invalid Unicode character " + charCode.toString(16)); } } else if (0x0700 <= charCode && charCode <= 0x08ac) { charType = "AL"; } if (charType === "R" || charType === "AL" || charType === "AN") { numBidi++; } types[i] = charType; } if (numBidi === 0) { isLTR = true; return createBidiText(str, isLTR); } if (startLevel === -1) { if (numBidi / strLength < 0.3) { isLTR = true; startLevel = 0; } else { isLTR = false; startLevel = 1; } } var levels = []; for (i = 0; i < strLength; ++i) { levels[i] = startLevel; } var e = isOdd(startLevel) ? "R" : "L"; var sor = e; var eor = sor; var lastType = sor; for (i = 0; i < strLength; ++i) { if (types[i] === "NSM") { types[i] = lastType; } else { lastType = types[i]; } } lastType = sor; var t; for (i = 0; i < strLength; ++i) { t = types[i]; if (t === "EN") { types[i] = lastType === "AL" ? "AN" : "EN"; } else if (t === "R" || t === "L" || t === "AL") { lastType = t; } } for (i = 0; i < strLength; ++i) { t = types[i]; if (t === "AL") { types[i] = "R"; } } for (i = 1; i < strLength - 1; ++i) { if (types[i] === "ES" && types[i - 1] === "EN" && types[i + 1] === "EN") { types[i] = "EN"; } if (types[i] === "CS" && (types[i - 1] === "EN" || types[i - 1] === "AN") && types[i + 1] === types[i - 1]) { types[i] = types[i - 1]; } } for (i = 0; i < strLength; ++i) { if (types[i] === "EN") { var j; for (j = i - 1; j >= 0; --j) { if (types[j] !== "ET") { break; } types[j] = "EN"; } for (j = i + 1; j < strLength; ++j) { if (types[j] !== "ET") { break; } types[j] = "EN"; } } } for (i = 0; i < strLength; ++i) { t = types[i]; if (t === "WS" || t === "ES" || t === "ET" || t === "CS") { types[i] = "ON"; } } lastType = sor; for (i = 0; i < strLength; ++i) { t = types[i]; if (t === "EN") { types[i] = lastType === "L" ? "L" : "EN"; } else if (t === "R" || t === "L") { lastType = t; } } for (i = 0; i < strLength; ++i) { if (types[i] === "ON") { var end = findUnequal(types, i + 1, "ON"); var before = sor; if (i > 0) { before = types[i - 1]; } var after = eor; if (end + 1 < strLength) { after = types[end + 1]; } if (before !== "L") { before = "R"; } if (after !== "L") { after = "R"; } if (before === after) { setValues(types, i, end, before); } i = end - 1; } } for (i = 0; i < strLength; ++i) { if (types[i] === "ON") { types[i] = e; } } for (i = 0; i < strLength; ++i) { t = types[i]; if (isEven(levels[i])) { if (t === "R") { levels[i] += 1; } else if (t === "AN" || t === "EN") { levels[i] += 2; } } else { if (t === "L" || t === "AN" || t === "EN") { levels[i] += 1; } } } var highestLevel = -1; var lowestOddLevel = 99; var level; for (i = 0, ii = levels.length; i < ii; ++i) { level = levels[i]; if (highestLevel < level) { highestLevel = level; } if (lowestOddLevel > level && isOdd(level)) { lowestOddLevel = level; } } for (level = highestLevel; level >= lowestOddLevel; --level) { var start = -1; for (i = 0, ii = levels.length; i < ii; ++i) { if (levels[i] < level) { if (start >= 0) { reverseValues(chars, start, i); start = -1; } } else if (start < 0) { start = i; } } if (start >= 0) { reverseValues(chars, start, levels.length); } } for (i = 0, ii = chars.length; i < ii; ++i) { var ch = chars[i]; if (ch === "<" || ch === ">") { chars[i] = ""; } } return createBidiText(chars.join(""), isLTR); } /***/ }), /* 172 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getMetrics = void 0; var _core_utils = __w_pdfjs_require__(138); var getMetrics = (0, _core_utils.getLookupTableFactory)(function (t) { t.Courier = 600; t["Courier-Bold"] = 600; t["Courier-BoldOblique"] = 600; t["Courier-Oblique"] = 600; t.Helvetica = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 278; t.exclam = 278; t.quotedbl = 355; t.numbersign = 556; t.dollar = 556; t.percent = 889; t.ampersand = 667; t.quoteright = 222; t.parenleft = 333; t.parenright = 333; t.asterisk = 389; t.plus = 584; t.comma = 278; t.hyphen = 333; t.period = 278; t.slash = 278; t.zero = 556; t.one = 556; t.two = 556; t.three = 556; t.four = 556; t.five = 556; t.six = 556; t.seven = 556; t.eight = 556; t.nine = 556; t.colon = 278; t.semicolon = 278; t.less = 584; t.equal = 584; t.greater = 584; t.question = 556; t.at = 1015; t.A = 667; t.B = 667; t.C = 722; t.D = 722; t.E = 667; t.F = 611; t.G = 778; t.H = 722; t.I = 278; t.J = 500; t.K = 667; t.L = 556; t.M = 833; t.N = 722; t.O = 778; t.P = 667; t.Q = 778; t.R = 722; t.S = 667; t.T = 611; t.U = 722; t.V = 667; t.W = 944; t.X = 667; t.Y = 667; t.Z = 611; t.bracketleft = 278; t.backslash = 278; t.bracketright = 278; t.asciicircum = 469; t.underscore = 556; t.quoteleft = 222; t.a = 556; t.b = 556; t.c = 500; t.d = 556; t.e = 556; t.f = 278; t.g = 556; t.h = 556; t.i = 222; t.j = 222; t.k = 500; t.l = 222; t.m = 833; t.n = 556; t.o = 556; t.p = 556; t.q = 556; t.r = 333; t.s = 500; t.t = 278; t.u = 556; t.v = 500; t.w = 722; t.x = 500; t.y = 500; t.z = 500; t.braceleft = 334; t.bar = 260; t.braceright = 334; t.asciitilde = 584; t.exclamdown = 333; t.cent = 556; t.sterling = 556; t.fraction = 167; t.yen = 556; t.florin = 556; t.section = 556; t.currency = 556; t.quotesingle = 191; t.quotedblleft = 333; t.guillemotleft = 556; t.guilsinglleft = 333; t.guilsinglright = 333; t.fi = 500; t.fl = 500; t.endash = 556; t.dagger = 556; t.daggerdbl = 556; t.periodcentered = 278; t.paragraph = 537; t.bullet = 350; t.quotesinglbase = 222; t.quotedblbase = 333; t.quotedblright = 333; t.guillemotright = 556; t.ellipsis = 1000; t.perthousand = 1000; t.questiondown = 611; t.grave = 333; t.acute = 333; t.circumflex = 333; t.tilde = 333; t.macron = 333; t.breve = 333; t.dotaccent = 333; t.dieresis = 333; t.ring = 333; t.cedilla = 333; t.hungarumlaut = 333; t.ogonek = 333; t.caron = 333; t.emdash = 1000; t.AE = 1000; t.ordfeminine = 370; t.Lslash = 556; t.Oslash = 778; t.OE = 1000; t.ordmasculine = 365; t.ae = 889; t.dotlessi = 278; t.lslash = 222; t.oslash = 611; t.oe = 944; t.germandbls = 611; t.Idieresis = 278; t.eacute = 556; t.abreve = 556; t.uhungarumlaut = 556; t.ecaron = 556; t.Ydieresis = 667; t.divide = 584; t.Yacute = 667; t.Acircumflex = 667; t.aacute = 556; t.Ucircumflex = 722; t.yacute = 500; t.scommaaccent = 500; t.ecircumflex = 556; t.Uring = 722; t.Udieresis = 722; t.aogonek = 556; t.Uacute = 722; t.uogonek = 556; t.Edieresis = 667; t.Dcroat = 722; t.commaaccent = 250; t.copyright = 737; t.Emacron = 667; t.ccaron = 500; t.aring = 556; t.Ncommaaccent = 722; t.lacute = 222; t.agrave = 556; t.Tcommaaccent = 611; t.Cacute = 722; t.atilde = 556; t.Edotaccent = 667; t.scaron = 500; t.scedilla = 500; t.iacute = 278; t.lozenge = 471; t.Rcaron = 722; t.Gcommaaccent = 778; t.ucircumflex = 556; t.acircumflex = 556; t.Amacron = 667; t.rcaron = 333; t.ccedilla = 500; t.Zdotaccent = 611; t.Thorn = 667; t.Omacron = 778; t.Racute = 722; t.Sacute = 667; t.dcaron = 643; t.Umacron = 722; t.uring = 556; t.threesuperior = 333; t.Ograve = 778; t.Agrave = 667; t.Abreve = 667; t.multiply = 584; t.uacute = 556; t.Tcaron = 611; t.partialdiff = 476; t.ydieresis = 500; t.Nacute = 722; t.icircumflex = 278; t.Ecircumflex = 667; t.adieresis = 556; t.edieresis = 556; t.cacute = 500; t.nacute = 556; t.umacron = 556; t.Ncaron = 722; t.Iacute = 278; t.plusminus = 584; t.brokenbar = 260; t.registered = 737; t.Gbreve = 778; t.Idotaccent = 278; t.summation = 600; t.Egrave = 667; t.racute = 333; t.omacron = 556; t.Zacute = 611; t.Zcaron = 611; t.greaterequal = 549; t.Eth = 722; t.Ccedilla = 722; t.lcommaaccent = 222; t.tcaron = 317; t.eogonek = 556; t.Uogonek = 722; t.Aacute = 667; t.Adieresis = 667; t.egrave = 556; t.zacute = 500; t.iogonek = 222; t.Oacute = 778; t.oacute = 556; t.amacron = 556; t.sacute = 500; t.idieresis = 278; t.Ocircumflex = 778; t.Ugrave = 722; t.Delta = 612; t.thorn = 556; t.twosuperior = 333; t.Odieresis = 778; t.mu = 556; t.igrave = 278; t.ohungarumlaut = 556; t.Eogonek = 667; t.dcroat = 556; t.threequarters = 834; t.Scedilla = 667; t.lcaron = 299; t.Kcommaaccent = 667; t.Lacute = 556; t.trademark = 1000; t.edotaccent = 556; t.Igrave = 278; t.Imacron = 278; t.Lcaron = 556; t.onehalf = 834; t.lessequal = 549; t.ocircumflex = 556; t.ntilde = 556; t.Uhungarumlaut = 722; t.Eacute = 667; t.emacron = 556; t.gbreve = 556; t.onequarter = 834; t.Scaron = 667; t.Scommaaccent = 667; t.Ohungarumlaut = 778; t.degree = 400; t.ograve = 556; t.Ccaron = 722; t.ugrave = 556; t.radical = 453; t.Dcaron = 722; t.rcommaaccent = 333; t.Ntilde = 722; t.otilde = 556; t.Rcommaaccent = 722; t.Lcommaaccent = 556; t.Atilde = 667; t.Aogonek = 667; t.Aring = 667; t.Otilde = 778; t.zdotaccent = 500; t.Ecaron = 667; t.Iogonek = 278; t.kcommaaccent = 500; t.minus = 584; t.Icircumflex = 278; t.ncaron = 556; t.tcommaaccent = 278; t.logicalnot = 584; t.odieresis = 556; t.udieresis = 556; t.notequal = 549; t.gcommaaccent = 556; t.eth = 556; t.zcaron = 500; t.ncommaaccent = 556; t.onesuperior = 333; t.imacron = 278; t.Euro = 556; }); t["Helvetica-Bold"] = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 278; t.exclam = 333; t.quotedbl = 474; t.numbersign = 556; t.dollar = 556; t.percent = 889; t.ampersand = 722; t.quoteright = 278; t.parenleft = 333; t.parenright = 333; t.asterisk = 389; t.plus = 584; t.comma = 278; t.hyphen = 333; t.period = 278; t.slash = 278; t.zero = 556; t.one = 556; t.two = 556; t.three = 556; t.four = 556; t.five = 556; t.six = 556; t.seven = 556; t.eight = 556; t.nine = 556; t.colon = 333; t.semicolon = 333; t.less = 584; t.equal = 584; t.greater = 584; t.question = 611; t.at = 975; t.A = 722; t.B = 722; t.C = 722; t.D = 722; t.E = 667; t.F = 611; t.G = 778; t.H = 722; t.I = 278; t.J = 556; t.K = 722; t.L = 611; t.M = 833; t.N = 722; t.O = 778; t.P = 667; t.Q = 778; t.R = 722; t.S = 667; t.T = 611; t.U = 722; t.V = 667; t.W = 944; t.X = 667; t.Y = 667; t.Z = 611; t.bracketleft = 333; t.backslash = 278; t.bracketright = 333; t.asciicircum = 584; t.underscore = 556; t.quoteleft = 278; t.a = 556; t.b = 611; t.c = 556; t.d = 611; t.e = 556; t.f = 333; t.g = 611; t.h = 611; t.i = 278; t.j = 278; t.k = 556; t.l = 278; t.m = 889; t.n = 611; t.o = 611; t.p = 611; t.q = 611; t.r = 389; t.s = 556; t.t = 333; t.u = 611; t.v = 556; t.w = 778; t.x = 556; t.y = 556; t.z = 500; t.braceleft = 389; t.bar = 280; t.braceright = 389; t.asciitilde = 584; t.exclamdown = 333; t.cent = 556; t.sterling = 556; t.fraction = 167; t.yen = 556; t.florin = 556; t.section = 556; t.currency = 556; t.quotesingle = 238; t.quotedblleft = 500; t.guillemotleft = 556; t.guilsinglleft = 333; t.guilsinglright = 333; t.fi = 611; t.fl = 611; t.endash = 556; t.dagger = 556; t.daggerdbl = 556; t.periodcentered = 278; t.paragraph = 556; t.bullet = 350; t.quotesinglbase = 278; t.quotedblbase = 500; t.quotedblright = 500; t.guillemotright = 556; t.ellipsis = 1000; t.perthousand = 1000; t.questiondown = 611; t.grave = 333; t.acute = 333; t.circumflex = 333; t.tilde = 333; t.macron = 333; t.breve = 333; t.dotaccent = 333; t.dieresis = 333; t.ring = 333; t.cedilla = 333; t.hungarumlaut = 333; t.ogonek = 333; t.caron = 333; t.emdash = 1000; t.AE = 1000; t.ordfeminine = 370; t.Lslash = 611; t.Oslash = 778; t.OE = 1000; t.ordmasculine = 365; t.ae = 889; t.dotlessi = 278; t.lslash = 278; t.oslash = 611; t.oe = 944; t.germandbls = 611; t.Idieresis = 278; t.eacute = 556; t.abreve = 556; t.uhungarumlaut = 611; t.ecaron = 556; t.Ydieresis = 667; t.divide = 584; t.Yacute = 667; t.Acircumflex = 722; t.aacute = 556; t.Ucircumflex = 722; t.yacute = 556; t.scommaaccent = 556; t.ecircumflex = 556; t.Uring = 722; t.Udieresis = 722; t.aogonek = 556; t.Uacute = 722; t.uogonek = 611; t.Edieresis = 667; t.Dcroat = 722; t.commaaccent = 250; t.copyright = 737; t.Emacron = 667; t.ccaron = 556; t.aring = 556; t.Ncommaaccent = 722; t.lacute = 278; t.agrave = 556; t.Tcommaaccent = 611; t.Cacute = 722; t.atilde = 556; t.Edotaccent = 667; t.scaron = 556; t.scedilla = 556; t.iacute = 278; t.lozenge = 494; t.Rcaron = 722; t.Gcommaaccent = 778; t.ucircumflex = 611; t.acircumflex = 556; t.Amacron = 722; t.rcaron = 389; t.ccedilla = 556; t.Zdotaccent = 611; t.Thorn = 667; t.Omacron = 778; t.Racute = 722; t.Sacute = 667; t.dcaron = 743; t.Umacron = 722; t.uring = 611; t.threesuperior = 333; t.Ograve = 778; t.Agrave = 722; t.Abreve = 722; t.multiply = 584; t.uacute = 611; t.Tcaron = 611; t.partialdiff = 494; t.ydieresis = 556; t.Nacute = 722; t.icircumflex = 278; t.Ecircumflex = 667; t.adieresis = 556; t.edieresis = 556; t.cacute = 556; t.nacute = 611; t.umacron = 611; t.Ncaron = 722; t.Iacute = 278; t.plusminus = 584; t.brokenbar = 280; t.registered = 737; t.Gbreve = 778; t.Idotaccent = 278; t.summation = 600; t.Egrave = 667; t.racute = 389; t.omacron = 611; t.Zacute = 611; t.Zcaron = 611; t.greaterequal = 549; t.Eth = 722; t.Ccedilla = 722; t.lcommaaccent = 278; t.tcaron = 389; t.eogonek = 556; t.Uogonek = 722; t.Aacute = 722; t.Adieresis = 722; t.egrave = 556; t.zacute = 500; t.iogonek = 278; t.Oacute = 778; t.oacute = 611; t.amacron = 556; t.sacute = 556; t.idieresis = 278; t.Ocircumflex = 778; t.Ugrave = 722; t.Delta = 612; t.thorn = 611; t.twosuperior = 333; t.Odieresis = 778; t.mu = 611; t.igrave = 278; t.ohungarumlaut = 611; t.Eogonek = 667; t.dcroat = 611; t.threequarters = 834; t.Scedilla = 667; t.lcaron = 400; t.Kcommaaccent = 722; t.Lacute = 611; t.trademark = 1000; t.edotaccent = 556; t.Igrave = 278; t.Imacron = 278; t.Lcaron = 611; t.onehalf = 834; t.lessequal = 549; t.ocircumflex = 611; t.ntilde = 611; t.Uhungarumlaut = 722; t.Eacute = 667; t.emacron = 556; t.gbreve = 611; t.onequarter = 834; t.Scaron = 667; t.Scommaaccent = 667; t.Ohungarumlaut = 778; t.degree = 400; t.ograve = 611; t.Ccaron = 722; t.ugrave = 611; t.radical = 549; t.Dcaron = 722; t.rcommaaccent = 389; t.Ntilde = 722; t.otilde = 611; t.Rcommaaccent = 722; t.Lcommaaccent = 611; t.Atilde = 722; t.Aogonek = 722; t.Aring = 722; t.Otilde = 778; t.zdotaccent = 500; t.Ecaron = 667; t.Iogonek = 278; t.kcommaaccent = 556; t.minus = 584; t.Icircumflex = 278; t.ncaron = 611; t.tcommaaccent = 333; t.logicalnot = 584; t.odieresis = 611; t.udieresis = 611; t.notequal = 549; t.gcommaaccent = 611; t.eth = 611; t.zcaron = 500; t.ncommaaccent = 611; t.onesuperior = 333; t.imacron = 278; t.Euro = 556; }); t["Helvetica-BoldOblique"] = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 278; t.exclam = 333; t.quotedbl = 474; t.numbersign = 556; t.dollar = 556; t.percent = 889; t.ampersand = 722; t.quoteright = 278; t.parenleft = 333; t.parenright = 333; t.asterisk = 389; t.plus = 584; t.comma = 278; t.hyphen = 333; t.period = 278; t.slash = 278; t.zero = 556; t.one = 556; t.two = 556; t.three = 556; t.four = 556; t.five = 556; t.six = 556; t.seven = 556; t.eight = 556; t.nine = 556; t.colon = 333; t.semicolon = 333; t.less = 584; t.equal = 584; t.greater = 584; t.question = 611; t.at = 975; t.A = 722; t.B = 722; t.C = 722; t.D = 722; t.E = 667; t.F = 611; t.G = 778; t.H = 722; t.I = 278; t.J = 556; t.K = 722; t.L = 611; t.M = 833; t.N = 722; t.O = 778; t.P = 667; t.Q = 778; t.R = 722; t.S = 667; t.T = 611; t.U = 722; t.V = 667; t.W = 944; t.X = 667; t.Y = 667; t.Z = 611; t.bracketleft = 333; t.backslash = 278; t.bracketright = 333; t.asciicircum = 584; t.underscore = 556; t.quoteleft = 278; t.a = 556; t.b = 611; t.c = 556; t.d = 611; t.e = 556; t.f = 333; t.g = 611; t.h = 611; t.i = 278; t.j = 278; t.k = 556; t.l = 278; t.m = 889; t.n = 611; t.o = 611; t.p = 611; t.q = 611; t.r = 389; t.s = 556; t.t = 333; t.u = 611; t.v = 556; t.w = 778; t.x = 556; t.y = 556; t.z = 500; t.braceleft = 389; t.bar = 280; t.braceright = 389; t.asciitilde = 584; t.exclamdown = 333; t.cent = 556; t.sterling = 556; t.fraction = 167; t.yen = 556; t.florin = 556; t.section = 556; t.currency = 556; t.quotesingle = 238; t.quotedblleft = 500; t.guillemotleft = 556; t.guilsinglleft = 333; t.guilsinglright = 333; t.fi = 611; t.fl = 611; t.endash = 556; t.dagger = 556; t.daggerdbl = 556; t.periodcentered = 278; t.paragraph = 556; t.bullet = 350; t.quotesinglbase = 278; t.quotedblbase = 500; t.quotedblright = 500; t.guillemotright = 556; t.ellipsis = 1000; t.perthousand = 1000; t.questiondown = 611; t.grave = 333; t.acute = 333; t.circumflex = 333; t.tilde = 333; t.macron = 333; t.breve = 333; t.dotaccent = 333; t.dieresis = 333; t.ring = 333; t.cedilla = 333; t.hungarumlaut = 333; t.ogonek = 333; t.caron = 333; t.emdash = 1000; t.AE = 1000; t.ordfeminine = 370; t.Lslash = 611; t.Oslash = 778; t.OE = 1000; t.ordmasculine = 365; t.ae = 889; t.dotlessi = 278; t.lslash = 278; t.oslash = 611; t.oe = 944; t.germandbls = 611; t.Idieresis = 278; t.eacute = 556; t.abreve = 556; t.uhungarumlaut = 611; t.ecaron = 556; t.Ydieresis = 667; t.divide = 584; t.Yacute = 667; t.Acircumflex = 722; t.aacute = 556; t.Ucircumflex = 722; t.yacute = 556; t.scommaaccent = 556; t.ecircumflex = 556; t.Uring = 722; t.Udieresis = 722; t.aogonek = 556; t.Uacute = 722; t.uogonek = 611; t.Edieresis = 667; t.Dcroat = 722; t.commaaccent = 250; t.copyright = 737; t.Emacron = 667; t.ccaron = 556; t.aring = 556; t.Ncommaaccent = 722; t.lacute = 278; t.agrave = 556; t.Tcommaaccent = 611; t.Cacute = 722; t.atilde = 556; t.Edotaccent = 667; t.scaron = 556; t.scedilla = 556; t.iacute = 278; t.lozenge = 494; t.Rcaron = 722; t.Gcommaaccent = 778; t.ucircumflex = 611; t.acircumflex = 556; t.Amacron = 722; t.rcaron = 389; t.ccedilla = 556; t.Zdotaccent = 611; t.Thorn = 667; t.Omacron = 778; t.Racute = 722; t.Sacute = 667; t.dcaron = 743; t.Umacron = 722; t.uring = 611; t.threesuperior = 333; t.Ograve = 778; t.Agrave = 722; t.Abreve = 722; t.multiply = 584; t.uacute = 611; t.Tcaron = 611; t.partialdiff = 494; t.ydieresis = 556; t.Nacute = 722; t.icircumflex = 278; t.Ecircumflex = 667; t.adieresis = 556; t.edieresis = 556; t.cacute = 556; t.nacute = 611; t.umacron = 611; t.Ncaron = 722; t.Iacute = 278; t.plusminus = 584; t.brokenbar = 280; t.registered = 737; t.Gbreve = 778; t.Idotaccent = 278; t.summation = 600; t.Egrave = 667; t.racute = 389; t.omacron = 611; t.Zacute = 611; t.Zcaron = 611; t.greaterequal = 549; t.Eth = 722; t.Ccedilla = 722; t.lcommaaccent = 278; t.tcaron = 389; t.eogonek = 556; t.Uogonek = 722; t.Aacute = 722; t.Adieresis = 722; t.egrave = 556; t.zacute = 500; t.iogonek = 278; t.Oacute = 778; t.oacute = 611; t.amacron = 556; t.sacute = 556; t.idieresis = 278; t.Ocircumflex = 778; t.Ugrave = 722; t.Delta = 612; t.thorn = 611; t.twosuperior = 333; t.Odieresis = 778; t.mu = 611; t.igrave = 278; t.ohungarumlaut = 611; t.Eogonek = 667; t.dcroat = 611; t.threequarters = 834; t.Scedilla = 667; t.lcaron = 400; t.Kcommaaccent = 722; t.Lacute = 611; t.trademark = 1000; t.edotaccent = 556; t.Igrave = 278; t.Imacron = 278; t.Lcaron = 611; t.onehalf = 834; t.lessequal = 549; t.ocircumflex = 611; t.ntilde = 611; t.Uhungarumlaut = 722; t.Eacute = 667; t.emacron = 556; t.gbreve = 611; t.onequarter = 834; t.Scaron = 667; t.Scommaaccent = 667; t.Ohungarumlaut = 778; t.degree = 400; t.ograve = 611; t.Ccaron = 722; t.ugrave = 611; t.radical = 549; t.Dcaron = 722; t.rcommaaccent = 389; t.Ntilde = 722; t.otilde = 611; t.Rcommaaccent = 722; t.Lcommaaccent = 611; t.Atilde = 722; t.Aogonek = 722; t.Aring = 722; t.Otilde = 778; t.zdotaccent = 500; t.Ecaron = 667; t.Iogonek = 278; t.kcommaaccent = 556; t.minus = 584; t.Icircumflex = 278; t.ncaron = 611; t.tcommaaccent = 333; t.logicalnot = 584; t.odieresis = 611; t.udieresis = 611; t.notequal = 549; t.gcommaaccent = 611; t.eth = 611; t.zcaron = 500; t.ncommaaccent = 611; t.onesuperior = 333; t.imacron = 278; t.Euro = 556; }); t["Helvetica-Oblique"] = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 278; t.exclam = 278; t.quotedbl = 355; t.numbersign = 556; t.dollar = 556; t.percent = 889; t.ampersand = 667; t.quoteright = 222; t.parenleft = 333; t.parenright = 333; t.asterisk = 389; t.plus = 584; t.comma = 278; t.hyphen = 333; t.period = 278; t.slash = 278; t.zero = 556; t.one = 556; t.two = 556; t.three = 556; t.four = 556; t.five = 556; t.six = 556; t.seven = 556; t.eight = 556; t.nine = 556; t.colon = 278; t.semicolon = 278; t.less = 584; t.equal = 584; t.greater = 584; t.question = 556; t.at = 1015; t.A = 667; t.B = 667; t.C = 722; t.D = 722; t.E = 667; t.F = 611; t.G = 778; t.H = 722; t.I = 278; t.J = 500; t.K = 667; t.L = 556; t.M = 833; t.N = 722; t.O = 778; t.P = 667; t.Q = 778; t.R = 722; t.S = 667; t.T = 611; t.U = 722; t.V = 667; t.W = 944; t.X = 667; t.Y = 667; t.Z = 611; t.bracketleft = 278; t.backslash = 278; t.bracketright = 278; t.asciicircum = 469; t.underscore = 556; t.quoteleft = 222; t.a = 556; t.b = 556; t.c = 500; t.d = 556; t.e = 556; t.f = 278; t.g = 556; t.h = 556; t.i = 222; t.j = 222; t.k = 500; t.l = 222; t.m = 833; t.n = 556; t.o = 556; t.p = 556; t.q = 556; t.r = 333; t.s = 500; t.t = 278; t.u = 556; t.v = 500; t.w = 722; t.x = 500; t.y = 500; t.z = 500; t.braceleft = 334; t.bar = 260; t.braceright = 334; t.asciitilde = 584; t.exclamdown = 333; t.cent = 556; t.sterling = 556; t.fraction = 167; t.yen = 556; t.florin = 556; t.section = 556; t.currency = 556; t.quotesingle = 191; t.quotedblleft = 333; t.guillemotleft = 556; t.guilsinglleft = 333; t.guilsinglright = 333; t.fi = 500; t.fl = 500; t.endash = 556; t.dagger = 556; t.daggerdbl = 556; t.periodcentered = 278; t.paragraph = 537; t.bullet = 350; t.quotesinglbase = 222; t.quotedblbase = 333; t.quotedblright = 333; t.guillemotright = 556; t.ellipsis = 1000; t.perthousand = 1000; t.questiondown = 611; t.grave = 333; t.acute = 333; t.circumflex = 333; t.tilde = 333; t.macron = 333; t.breve = 333; t.dotaccent = 333; t.dieresis = 333; t.ring = 333; t.cedilla = 333; t.hungarumlaut = 333; t.ogonek = 333; t.caron = 333; t.emdash = 1000; t.AE = 1000; t.ordfeminine = 370; t.Lslash = 556; t.Oslash = 778; t.OE = 1000; t.ordmasculine = 365; t.ae = 889; t.dotlessi = 278; t.lslash = 222; t.oslash = 611; t.oe = 944; t.germandbls = 611; t.Idieresis = 278; t.eacute = 556; t.abreve = 556; t.uhungarumlaut = 556; t.ecaron = 556; t.Ydieresis = 667; t.divide = 584; t.Yacute = 667; t.Acircumflex = 667; t.aacute = 556; t.Ucircumflex = 722; t.yacute = 500; t.scommaaccent = 500; t.ecircumflex = 556; t.Uring = 722; t.Udieresis = 722; t.aogonek = 556; t.Uacute = 722; t.uogonek = 556; t.Edieresis = 667; t.Dcroat = 722; t.commaaccent = 250; t.copyright = 737; t.Emacron = 667; t.ccaron = 500; t.aring = 556; t.Ncommaaccent = 722; t.lacute = 222; t.agrave = 556; t.Tcommaaccent = 611; t.Cacute = 722; t.atilde = 556; t.Edotaccent = 667; t.scaron = 500; t.scedilla = 500; t.iacute = 278; t.lozenge = 471; t.Rcaron = 722; t.Gcommaaccent = 778; t.ucircumflex = 556; t.acircumflex = 556; t.Amacron = 667; t.rcaron = 333; t.ccedilla = 500; t.Zdotaccent = 611; t.Thorn = 667; t.Omacron = 778; t.Racute = 722; t.Sacute = 667; t.dcaron = 643; t.Umacron = 722; t.uring = 556; t.threesuperior = 333; t.Ograve = 778; t.Agrave = 667; t.Abreve = 667; t.multiply = 584; t.uacute = 556; t.Tcaron = 611; t.partialdiff = 476; t.ydieresis = 500; t.Nacute = 722; t.icircumflex = 278; t.Ecircumflex = 667; t.adieresis = 556; t.edieresis = 556; t.cacute = 500; t.nacute = 556; t.umacron = 556; t.Ncaron = 722; t.Iacute = 278; t.plusminus = 584; t.brokenbar = 260; t.registered = 737; t.Gbreve = 778; t.Idotaccent = 278; t.summation = 600; t.Egrave = 667; t.racute = 333; t.omacron = 556; t.Zacute = 611; t.Zcaron = 611; t.greaterequal = 549; t.Eth = 722; t.Ccedilla = 722; t.lcommaaccent = 222; t.tcaron = 317; t.eogonek = 556; t.Uogonek = 722; t.Aacute = 667; t.Adieresis = 667; t.egrave = 556; t.zacute = 500; t.iogonek = 222; t.Oacute = 778; t.oacute = 556; t.amacron = 556; t.sacute = 500; t.idieresis = 278; t.Ocircumflex = 778; t.Ugrave = 722; t.Delta = 612; t.thorn = 556; t.twosuperior = 333; t.Odieresis = 778; t.mu = 556; t.igrave = 278; t.ohungarumlaut = 556; t.Eogonek = 667; t.dcroat = 556; t.threequarters = 834; t.Scedilla = 667; t.lcaron = 299; t.Kcommaaccent = 667; t.Lacute = 556; t.trademark = 1000; t.edotaccent = 556; t.Igrave = 278; t.Imacron = 278; t.Lcaron = 556; t.onehalf = 834; t.lessequal = 549; t.ocircumflex = 556; t.ntilde = 556; t.Uhungarumlaut = 722; t.Eacute = 667; t.emacron = 556; t.gbreve = 556; t.onequarter = 834; t.Scaron = 667; t.Scommaaccent = 667; t.Ohungarumlaut = 778; t.degree = 400; t.ograve = 556; t.Ccaron = 722; t.ugrave = 556; t.radical = 453; t.Dcaron = 722; t.rcommaaccent = 333; t.Ntilde = 722; t.otilde = 556; t.Rcommaaccent = 722; t.Lcommaaccent = 556; t.Atilde = 667; t.Aogonek = 667; t.Aring = 667; t.Otilde = 778; t.zdotaccent = 500; t.Ecaron = 667; t.Iogonek = 278; t.kcommaaccent = 500; t.minus = 584; t.Icircumflex = 278; t.ncaron = 556; t.tcommaaccent = 278; t.logicalnot = 584; t.odieresis = 556; t.udieresis = 556; t.notequal = 549; t.gcommaaccent = 556; t.eth = 556; t.zcaron = 500; t.ncommaaccent = 556; t.onesuperior = 333; t.imacron = 278; t.Euro = 556; }); t.Symbol = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 250; t.exclam = 333; t.universal = 713; t.numbersign = 500; t.existential = 549; t.percent = 833; t.ampersand = 778; t.suchthat = 439; t.parenleft = 333; t.parenright = 333; t.asteriskmath = 500; t.plus = 549; t.comma = 250; t.minus = 549; t.period = 250; t.slash = 278; t.zero = 500; t.one = 500; t.two = 500; t.three = 500; t.four = 500; t.five = 500; t.six = 500; t.seven = 500; t.eight = 500; t.nine = 500; t.colon = 278; t.semicolon = 278; t.less = 549; t.equal = 549; t.greater = 549; t.question = 444; t.congruent = 549; t.Alpha = 722; t.Beta = 667; t.Chi = 722; t.Delta = 612; t.Epsilon = 611; t.Phi = 763; t.Gamma = 603; t.Eta = 722; t.Iota = 333; t.theta1 = 631; t.Kappa = 722; t.Lambda = 686; t.Mu = 889; t.Nu = 722; t.Omicron = 722; t.Pi = 768; t.Theta = 741; t.Rho = 556; t.Sigma = 592; t.Tau = 611; t.Upsilon = 690; t.sigma1 = 439; t.Omega = 768; t.Xi = 645; t.Psi = 795; t.Zeta = 611; t.bracketleft = 333; t.therefore = 863; t.bracketright = 333; t.perpendicular = 658; t.underscore = 500; t.radicalex = 500; t.alpha = 631; t.beta = 549; t.chi = 549; t.delta = 494; t.epsilon = 439; t.phi = 521; t.gamma = 411; t.eta = 603; t.iota = 329; t.phi1 = 603; t.kappa = 549; t.lambda = 549; t.mu = 576; t.nu = 521; t.omicron = 549; t.pi = 549; t.theta = 521; t.rho = 549; t.sigma = 603; t.tau = 439; t.upsilon = 576; t.omega1 = 713; t.omega = 686; t.xi = 493; t.psi = 686; t.zeta = 494; t.braceleft = 480; t.bar = 200; t.braceright = 480; t.similar = 549; t.Euro = 750; t.Upsilon1 = 620; t.minute = 247; t.lessequal = 549; t.fraction = 167; t.infinity = 713; t.florin = 500; t.club = 753; t.diamond = 753; t.heart = 753; t.spade = 753; t.arrowboth = 1042; t.arrowleft = 987; t.arrowup = 603; t.arrowright = 987; t.arrowdown = 603; t.degree = 400; t.plusminus = 549; t.second = 411; t.greaterequal = 549; t.multiply = 549; t.proportional = 713; t.partialdiff = 494; t.bullet = 460; t.divide = 549; t.notequal = 549; t.equivalence = 549; t.approxequal = 549; t.ellipsis = 1000; t.arrowvertex = 603; t.arrowhorizex = 1000; t.carriagereturn = 658; t.aleph = 823; t.Ifraktur = 686; t.Rfraktur = 795; t.weierstrass = 987; t.circlemultiply = 768; t.circleplus = 768; t.emptyset = 823; t.intersection = 768; t.union = 768; t.propersuperset = 713; t.reflexsuperset = 713; t.notsubset = 713; t.propersubset = 713; t.reflexsubset = 713; t.element = 713; t.notelement = 713; t.angle = 768; t.gradient = 713; t.registerserif = 790; t.copyrightserif = 790; t.trademarkserif = 890; t.product = 823; t.radical = 549; t.dotmath = 250; t.logicalnot = 713; t.logicaland = 603; t.logicalor = 603; t.arrowdblboth = 1042; t.arrowdblleft = 987; t.arrowdblup = 603; t.arrowdblright = 987; t.arrowdbldown = 603; t.lozenge = 494; t.angleleft = 329; t.registersans = 790; t.copyrightsans = 790; t.trademarksans = 786; t.summation = 713; t.parenlefttp = 384; t.parenleftex = 384; t.parenleftbt = 384; t.bracketlefttp = 384; t.bracketleftex = 384; t.bracketleftbt = 384; t.bracelefttp = 494; t.braceleftmid = 494; t.braceleftbt = 494; t.braceex = 494; t.angleright = 329; t.integral = 274; t.integraltp = 686; t.integralex = 686; t.integralbt = 686; t.parenrighttp = 384; t.parenrightex = 384; t.parenrightbt = 384; t.bracketrighttp = 384; t.bracketrightex = 384; t.bracketrightbt = 384; t.bracerighttp = 494; t.bracerightmid = 494; t.bracerightbt = 494; t.apple = 790; }); t["Times-Roman"] = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 250; t.exclam = 333; t.quotedbl = 408; t.numbersign = 500; t.dollar = 500; t.percent = 833; t.ampersand = 778; t.quoteright = 333; t.parenleft = 333; t.parenright = 333; t.asterisk = 500; t.plus = 564; t.comma = 250; t.hyphen = 333; t.period = 250; t.slash = 278; t.zero = 500; t.one = 500; t.two = 500; t.three = 500; t.four = 500; t.five = 500; t.six = 500; t.seven = 500; t.eight = 500; t.nine = 500; t.colon = 278; t.semicolon = 278; t.less = 564; t.equal = 564; t.greater = 564; t.question = 444; t.at = 921; t.A = 722; t.B = 667; t.C = 667; t.D = 722; t.E = 611; t.F = 556; t.G = 722; t.H = 722; t.I = 333; t.J = 389; t.K = 722; t.L = 611; t.M = 889; t.N = 722; t.O = 722; t.P = 556; t.Q = 722; t.R = 667; t.S = 556; t.T = 611; t.U = 722; t.V = 722; t.W = 944; t.X = 722; t.Y = 722; t.Z = 611; t.bracketleft = 333; t.backslash = 278; t.bracketright = 333; t.asciicircum = 469; t.underscore = 500; t.quoteleft = 333; t.a = 444; t.b = 500; t.c = 444; t.d = 500; t.e = 444; t.f = 333; t.g = 500; t.h = 500; t.i = 278; t.j = 278; t.k = 500; t.l = 278; t.m = 778; t.n = 500; t.o = 500; t.p = 500; t.q = 500; t.r = 333; t.s = 389; t.t = 278; t.u = 500; t.v = 500; t.w = 722; t.x = 500; t.y = 500; t.z = 444; t.braceleft = 480; t.bar = 200; t.braceright = 480; t.asciitilde = 541; t.exclamdown = 333; t.cent = 500; t.sterling = 500; t.fraction = 167; t.yen = 500; t.florin = 500; t.section = 500; t.currency = 500; t.quotesingle = 180; t.quotedblleft = 444; t.guillemotleft = 500; t.guilsinglleft = 333; t.guilsinglright = 333; t.fi = 556; t.fl = 556; t.endash = 500; t.dagger = 500; t.daggerdbl = 500; t.periodcentered = 250; t.paragraph = 453; t.bullet = 350; t.quotesinglbase = 333; t.quotedblbase = 444; t.quotedblright = 444; t.guillemotright = 500; t.ellipsis = 1000; t.perthousand = 1000; t.questiondown = 444; t.grave = 333; t.acute = 333; t.circumflex = 333; t.tilde = 333; t.macron = 333; t.breve = 333; t.dotaccent = 333; t.dieresis = 333; t.ring = 333; t.cedilla = 333; t.hungarumlaut = 333; t.ogonek = 333; t.caron = 333; t.emdash = 1000; t.AE = 889; t.ordfeminine = 276; t.Lslash = 611; t.Oslash = 722; t.OE = 889; t.ordmasculine = 310; t.ae = 667; t.dotlessi = 278; t.lslash = 278; t.oslash = 500; t.oe = 722; t.germandbls = 500; t.Idieresis = 333; t.eacute = 444; t.abreve = 444; t.uhungarumlaut = 500; t.ecaron = 444; t.Ydieresis = 722; t.divide = 564; t.Yacute = 722; t.Acircumflex = 722; t.aacute = 444; t.Ucircumflex = 722; t.yacute = 500; t.scommaaccent = 389; t.ecircumflex = 444; t.Uring = 722; t.Udieresis = 722; t.aogonek = 444; t.Uacute = 722; t.uogonek = 500; t.Edieresis = 611; t.Dcroat = 722; t.commaaccent = 250; t.copyright = 760; t.Emacron = 611; t.ccaron = 444; t.aring = 444; t.Ncommaaccent = 722; t.lacute = 278; t.agrave = 444; t.Tcommaaccent = 611; t.Cacute = 667; t.atilde = 444; t.Edotaccent = 611; t.scaron = 389; t.scedilla = 389; t.iacute = 278; t.lozenge = 471; t.Rcaron = 667; t.Gcommaaccent = 722; t.ucircumflex = 500; t.acircumflex = 444; t.Amacron = 722; t.rcaron = 333; t.ccedilla = 444; t.Zdotaccent = 611; t.Thorn = 556; t.Omacron = 722; t.Racute = 667; t.Sacute = 556; t.dcaron = 588; t.Umacron = 722; t.uring = 500; t.threesuperior = 300; t.Ograve = 722; t.Agrave = 722; t.Abreve = 722; t.multiply = 564; t.uacute = 500; t.Tcaron = 611; t.partialdiff = 476; t.ydieresis = 500; t.Nacute = 722; t.icircumflex = 278; t.Ecircumflex = 611; t.adieresis = 444; t.edieresis = 444; t.cacute = 444; t.nacute = 500; t.umacron = 500; t.Ncaron = 722; t.Iacute = 333; t.plusminus = 564; t.brokenbar = 200; t.registered = 760; t.Gbreve = 722; t.Idotaccent = 333; t.summation = 600; t.Egrave = 611; t.racute = 333; t.omacron = 500; t.Zacute = 611; t.Zcaron = 611; t.greaterequal = 549; t.Eth = 722; t.Ccedilla = 667; t.lcommaaccent = 278; t.tcaron = 326; t.eogonek = 444; t.Uogonek = 722; t.Aacute = 722; t.Adieresis = 722; t.egrave = 444; t.zacute = 444; t.iogonek = 278; t.Oacute = 722; t.oacute = 500; t.amacron = 444; t.sacute = 389; t.idieresis = 278; t.Ocircumflex = 722; t.Ugrave = 722; t.Delta = 612; t.thorn = 500; t.twosuperior = 300; t.Odieresis = 722; t.mu = 500; t.igrave = 278; t.ohungarumlaut = 500; t.Eogonek = 611; t.dcroat = 500; t.threequarters = 750; t.Scedilla = 556; t.lcaron = 344; t.Kcommaaccent = 722; t.Lacute = 611; t.trademark = 980; t.edotaccent = 444; t.Igrave = 333; t.Imacron = 333; t.Lcaron = 611; t.onehalf = 750; t.lessequal = 549; t.ocircumflex = 500; t.ntilde = 500; t.Uhungarumlaut = 722; t.Eacute = 611; t.emacron = 444; t.gbreve = 500; t.onequarter = 750; t.Scaron = 556; t.Scommaaccent = 556; t.Ohungarumlaut = 722; t.degree = 400; t.ograve = 500; t.Ccaron = 667; t.ugrave = 500; t.radical = 453; t.Dcaron = 722; t.rcommaaccent = 333; t.Ntilde = 722; t.otilde = 500; t.Rcommaaccent = 667; t.Lcommaaccent = 611; t.Atilde = 722; t.Aogonek = 722; t.Aring = 722; t.Otilde = 722; t.zdotaccent = 444; t.Ecaron = 611; t.Iogonek = 333; t.kcommaaccent = 500; t.minus = 564; t.Icircumflex = 333; t.ncaron = 500; t.tcommaaccent = 278; t.logicalnot = 564; t.odieresis = 500; t.udieresis = 500; t.notequal = 549; t.gcommaaccent = 500; t.eth = 500; t.zcaron = 444; t.ncommaaccent = 500; t.onesuperior = 300; t.imacron = 278; t.Euro = 500; }); t["Times-Bold"] = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 250; t.exclam = 333; t.quotedbl = 555; t.numbersign = 500; t.dollar = 500; t.percent = 1000; t.ampersand = 833; t.quoteright = 333; t.parenleft = 333; t.parenright = 333; t.asterisk = 500; t.plus = 570; t.comma = 250; t.hyphen = 333; t.period = 250; t.slash = 278; t.zero = 500; t.one = 500; t.two = 500; t.three = 500; t.four = 500; t.five = 500; t.six = 500; t.seven = 500; t.eight = 500; t.nine = 500; t.colon = 333; t.semicolon = 333; t.less = 570; t.equal = 570; t.greater = 570; t.question = 500; t.at = 930; t.A = 722; t.B = 667; t.C = 722; t.D = 722; t.E = 667; t.F = 611; t.G = 778; t.H = 778; t.I = 389; t.J = 500; t.K = 778; t.L = 667; t.M = 944; t.N = 722; t.O = 778; t.P = 611; t.Q = 778; t.R = 722; t.S = 556; t.T = 667; t.U = 722; t.V = 722; t.W = 1000; t.X = 722; t.Y = 722; t.Z = 667; t.bracketleft = 333; t.backslash = 278; t.bracketright = 333; t.asciicircum = 581; t.underscore = 500; t.quoteleft = 333; t.a = 500; t.b = 556; t.c = 444; t.d = 556; t.e = 444; t.f = 333; t.g = 500; t.h = 556; t.i = 278; t.j = 333; t.k = 556; t.l = 278; t.m = 833; t.n = 556; t.o = 500; t.p = 556; t.q = 556; t.r = 444; t.s = 389; t.t = 333; t.u = 556; t.v = 500; t.w = 722; t.x = 500; t.y = 500; t.z = 444; t.braceleft = 394; t.bar = 220; t.braceright = 394; t.asciitilde = 520; t.exclamdown = 333; t.cent = 500; t.sterling = 500; t.fraction = 167; t.yen = 500; t.florin = 500; t.section = 500; t.currency = 500; t.quotesingle = 278; t.quotedblleft = 500; t.guillemotleft = 500; t.guilsinglleft = 333; t.guilsinglright = 333; t.fi = 556; t.fl = 556; t.endash = 500; t.dagger = 500; t.daggerdbl = 500; t.periodcentered = 250; t.paragraph = 540; t.bullet = 350; t.quotesinglbase = 333; t.quotedblbase = 500; t.quotedblright = 500; t.guillemotright = 500; t.ellipsis = 1000; t.perthousand = 1000; t.questiondown = 500; t.grave = 333; t.acute = 333; t.circumflex = 333; t.tilde = 333; t.macron = 333; t.breve = 333; t.dotaccent = 333; t.dieresis = 333; t.ring = 333; t.cedilla = 333; t.hungarumlaut = 333; t.ogonek = 333; t.caron = 333; t.emdash = 1000; t.AE = 1000; t.ordfeminine = 300; t.Lslash = 667; t.Oslash = 778; t.OE = 1000; t.ordmasculine = 330; t.ae = 722; t.dotlessi = 278; t.lslash = 278; t.oslash = 500; t.oe = 722; t.germandbls = 556; t.Idieresis = 389; t.eacute = 444; t.abreve = 500; t.uhungarumlaut = 556; t.ecaron = 444; t.Ydieresis = 722; t.divide = 570; t.Yacute = 722; t.Acircumflex = 722; t.aacute = 500; t.Ucircumflex = 722; t.yacute = 500; t.scommaaccent = 389; t.ecircumflex = 444; t.Uring = 722; t.Udieresis = 722; t.aogonek = 500; t.Uacute = 722; t.uogonek = 556; t.Edieresis = 667; t.Dcroat = 722; t.commaaccent = 250; t.copyright = 747; t.Emacron = 667; t.ccaron = 444; t.aring = 500; t.Ncommaaccent = 722; t.lacute = 278; t.agrave = 500; t.Tcommaaccent = 667; t.Cacute = 722; t.atilde = 500; t.Edotaccent = 667; t.scaron = 389; t.scedilla = 389; t.iacute = 278; t.lozenge = 494; t.Rcaron = 722; t.Gcommaaccent = 778; t.ucircumflex = 556; t.acircumflex = 500; t.Amacron = 722; t.rcaron = 444; t.ccedilla = 444; t.Zdotaccent = 667; t.Thorn = 611; t.Omacron = 778; t.Racute = 722; t.Sacute = 556; t.dcaron = 672; t.Umacron = 722; t.uring = 556; t.threesuperior = 300; t.Ograve = 778; t.Agrave = 722; t.Abreve = 722; t.multiply = 570; t.uacute = 556; t.Tcaron = 667; t.partialdiff = 494; t.ydieresis = 500; t.Nacute = 722; t.icircumflex = 278; t.Ecircumflex = 667; t.adieresis = 500; t.edieresis = 444; t.cacute = 444; t.nacute = 556; t.umacron = 556; t.Ncaron = 722; t.Iacute = 389; t.plusminus = 570; t.brokenbar = 220; t.registered = 747; t.Gbreve = 778; t.Idotaccent = 389; t.summation = 600; t.Egrave = 667; t.racute = 444; t.omacron = 500; t.Zacute = 667; t.Zcaron = 667; t.greaterequal = 549; t.Eth = 722; t.Ccedilla = 722; t.lcommaaccent = 278; t.tcaron = 416; t.eogonek = 444; t.Uogonek = 722; t.Aacute = 722; t.Adieresis = 722; t.egrave = 444; t.zacute = 444; t.iogonek = 278; t.Oacute = 778; t.oacute = 500; t.amacron = 500; t.sacute = 389; t.idieresis = 278; t.Ocircumflex = 778; t.Ugrave = 722; t.Delta = 612; t.thorn = 556; t.twosuperior = 300; t.Odieresis = 778; t.mu = 556; t.igrave = 278; t.ohungarumlaut = 500; t.Eogonek = 667; t.dcroat = 556; t.threequarters = 750; t.Scedilla = 556; t.lcaron = 394; t.Kcommaaccent = 778; t.Lacute = 667; t.trademark = 1000; t.edotaccent = 444; t.Igrave = 389; t.Imacron = 389; t.Lcaron = 667; t.onehalf = 750; t.lessequal = 549; t.ocircumflex = 500; t.ntilde = 556; t.Uhungarumlaut = 722; t.Eacute = 667; t.emacron = 444; t.gbreve = 500; t.onequarter = 750; t.Scaron = 556; t.Scommaaccent = 556; t.Ohungarumlaut = 778; t.degree = 400; t.ograve = 500; t.Ccaron = 722; t.ugrave = 556; t.radical = 549; t.Dcaron = 722; t.rcommaaccent = 444; t.Ntilde = 722; t.otilde = 500; t.Rcommaaccent = 722; t.Lcommaaccent = 667; t.Atilde = 722; t.Aogonek = 722; t.Aring = 722; t.Otilde = 778; t.zdotaccent = 444; t.Ecaron = 667; t.Iogonek = 389; t.kcommaaccent = 556; t.minus = 570; t.Icircumflex = 389; t.ncaron = 556; t.tcommaaccent = 333; t.logicalnot = 570; t.odieresis = 500; t.udieresis = 556; t.notequal = 549; t.gcommaaccent = 500; t.eth = 500; t.zcaron = 444; t.ncommaaccent = 556; t.onesuperior = 300; t.imacron = 278; t.Euro = 500; }); t["Times-BoldItalic"] = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 250; t.exclam = 389; t.quotedbl = 555; t.numbersign = 500; t.dollar = 500; t.percent = 833; t.ampersand = 778; t.quoteright = 333; t.parenleft = 333; t.parenright = 333; t.asterisk = 500; t.plus = 570; t.comma = 250; t.hyphen = 333; t.period = 250; t.slash = 278; t.zero = 500; t.one = 500; t.two = 500; t.three = 500; t.four = 500; t.five = 500; t.six = 500; t.seven = 500; t.eight = 500; t.nine = 500; t.colon = 333; t.semicolon = 333; t.less = 570; t.equal = 570; t.greater = 570; t.question = 500; t.at = 832; t.A = 667; t.B = 667; t.C = 667; t.D = 722; t.E = 667; t.F = 667; t.G = 722; t.H = 778; t.I = 389; t.J = 500; t.K = 667; t.L = 611; t.M = 889; t.N = 722; t.O = 722; t.P = 611; t.Q = 722; t.R = 667; t.S = 556; t.T = 611; t.U = 722; t.V = 667; t.W = 889; t.X = 667; t.Y = 611; t.Z = 611; t.bracketleft = 333; t.backslash = 278; t.bracketright = 333; t.asciicircum = 570; t.underscore = 500; t.quoteleft = 333; t.a = 500; t.b = 500; t.c = 444; t.d = 500; t.e = 444; t.f = 333; t.g = 500; t.h = 556; t.i = 278; t.j = 278; t.k = 500; t.l = 278; t.m = 778; t.n = 556; t.o = 500; t.p = 500; t.q = 500; t.r = 389; t.s = 389; t.t = 278; t.u = 556; t.v = 444; t.w = 667; t.x = 500; t.y = 444; t.z = 389; t.braceleft = 348; t.bar = 220; t.braceright = 348; t.asciitilde = 570; t.exclamdown = 389; t.cent = 500; t.sterling = 500; t.fraction = 167; t.yen = 500; t.florin = 500; t.section = 500; t.currency = 500; t.quotesingle = 278; t.quotedblleft = 500; t.guillemotleft = 500; t.guilsinglleft = 333; t.guilsinglright = 333; t.fi = 556; t.fl = 556; t.endash = 500; t.dagger = 500; t.daggerdbl = 500; t.periodcentered = 250; t.paragraph = 500; t.bullet = 350; t.quotesinglbase = 333; t.quotedblbase = 500; t.quotedblright = 500; t.guillemotright = 500; t.ellipsis = 1000; t.perthousand = 1000; t.questiondown = 500; t.grave = 333; t.acute = 333; t.circumflex = 333; t.tilde = 333; t.macron = 333; t.breve = 333; t.dotaccent = 333; t.dieresis = 333; t.ring = 333; t.cedilla = 333; t.hungarumlaut = 333; t.ogonek = 333; t.caron = 333; t.emdash = 1000; t.AE = 944; t.ordfeminine = 266; t.Lslash = 611; t.Oslash = 722; t.OE = 944; t.ordmasculine = 300; t.ae = 722; t.dotlessi = 278; t.lslash = 278; t.oslash = 500; t.oe = 722; t.germandbls = 500; t.Idieresis = 389; t.eacute = 444; t.abreve = 500; t.uhungarumlaut = 556; t.ecaron = 444; t.Ydieresis = 611; t.divide = 570; t.Yacute = 611; t.Acircumflex = 667; t.aacute = 500; t.Ucircumflex = 722; t.yacute = 444; t.scommaaccent = 389; t.ecircumflex = 444; t.Uring = 722; t.Udieresis = 722; t.aogonek = 500; t.Uacute = 722; t.uogonek = 556; t.Edieresis = 667; t.Dcroat = 722; t.commaaccent = 250; t.copyright = 747; t.Emacron = 667; t.ccaron = 444; t.aring = 500; t.Ncommaaccent = 722; t.lacute = 278; t.agrave = 500; t.Tcommaaccent = 611; t.Cacute = 667; t.atilde = 500; t.Edotaccent = 667; t.scaron = 389; t.scedilla = 389; t.iacute = 278; t.lozenge = 494; t.Rcaron = 667; t.Gcommaaccent = 722; t.ucircumflex = 556; t.acircumflex = 500; t.Amacron = 667; t.rcaron = 389; t.ccedilla = 444; t.Zdotaccent = 611; t.Thorn = 611; t.Omacron = 722; t.Racute = 667; t.Sacute = 556; t.dcaron = 608; t.Umacron = 722; t.uring = 556; t.threesuperior = 300; t.Ograve = 722; t.Agrave = 667; t.Abreve = 667; t.multiply = 570; t.uacute = 556; t.Tcaron = 611; t.partialdiff = 494; t.ydieresis = 444; t.Nacute = 722; t.icircumflex = 278; t.Ecircumflex = 667; t.adieresis = 500; t.edieresis = 444; t.cacute = 444; t.nacute = 556; t.umacron = 556; t.Ncaron = 722; t.Iacute = 389; t.plusminus = 570; t.brokenbar = 220; t.registered = 747; t.Gbreve = 722; t.Idotaccent = 389; t.summation = 600; t.Egrave = 667; t.racute = 389; t.omacron = 500; t.Zacute = 611; t.Zcaron = 611; t.greaterequal = 549; t.Eth = 722; t.Ccedilla = 667; t.lcommaaccent = 278; t.tcaron = 366; t.eogonek = 444; t.Uogonek = 722; t.Aacute = 667; t.Adieresis = 667; t.egrave = 444; t.zacute = 389; t.iogonek = 278; t.Oacute = 722; t.oacute = 500; t.amacron = 500; t.sacute = 389; t.idieresis = 278; t.Ocircumflex = 722; t.Ugrave = 722; t.Delta = 612; t.thorn = 500; t.twosuperior = 300; t.Odieresis = 722; t.mu = 576; t.igrave = 278; t.ohungarumlaut = 500; t.Eogonek = 667; t.dcroat = 500; t.threequarters = 750; t.Scedilla = 556; t.lcaron = 382; t.Kcommaaccent = 667; t.Lacute = 611; t.trademark = 1000; t.edotaccent = 444; t.Igrave = 389; t.Imacron = 389; t.Lcaron = 611; t.onehalf = 750; t.lessequal = 549; t.ocircumflex = 500; t.ntilde = 556; t.Uhungarumlaut = 722; t.Eacute = 667; t.emacron = 444; t.gbreve = 500; t.onequarter = 750; t.Scaron = 556; t.Scommaaccent = 556; t.Ohungarumlaut = 722; t.degree = 400; t.ograve = 500; t.Ccaron = 667; t.ugrave = 556; t.radical = 549; t.Dcaron = 722; t.rcommaaccent = 389; t.Ntilde = 722; t.otilde = 500; t.Rcommaaccent = 667; t.Lcommaaccent = 611; t.Atilde = 667; t.Aogonek = 667; t.Aring = 667; t.Otilde = 722; t.zdotaccent = 389; t.Ecaron = 667; t.Iogonek = 389; t.kcommaaccent = 500; t.minus = 606; t.Icircumflex = 389; t.ncaron = 556; t.tcommaaccent = 278; t.logicalnot = 606; t.odieresis = 500; t.udieresis = 556; t.notequal = 549; t.gcommaaccent = 500; t.eth = 500; t.zcaron = 389; t.ncommaaccent = 556; t.onesuperior = 300; t.imacron = 278; t.Euro = 500; }); t["Times-Italic"] = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 250; t.exclam = 333; t.quotedbl = 420; t.numbersign = 500; t.dollar = 500; t.percent = 833; t.ampersand = 778; t.quoteright = 333; t.parenleft = 333; t.parenright = 333; t.asterisk = 500; t.plus = 675; t.comma = 250; t.hyphen = 333; t.period = 250; t.slash = 278; t.zero = 500; t.one = 500; t.two = 500; t.three = 500; t.four = 500; t.five = 500; t.six = 500; t.seven = 500; t.eight = 500; t.nine = 500; t.colon = 333; t.semicolon = 333; t.less = 675; t.equal = 675; t.greater = 675; t.question = 500; t.at = 920; t.A = 611; t.B = 611; t.C = 667; t.D = 722; t.E = 611; t.F = 611; t.G = 722; t.H = 722; t.I = 333; t.J = 444; t.K = 667; t.L = 556; t.M = 833; t.N = 667; t.O = 722; t.P = 611; t.Q = 722; t.R = 611; t.S = 500; t.T = 556; t.U = 722; t.V = 611; t.W = 833; t.X = 611; t.Y = 556; t.Z = 556; t.bracketleft = 389; t.backslash = 278; t.bracketright = 389; t.asciicircum = 422; t.underscore = 500; t.quoteleft = 333; t.a = 500; t.b = 500; t.c = 444; t.d = 500; t.e = 444; t.f = 278; t.g = 500; t.h = 500; t.i = 278; t.j = 278; t.k = 444; t.l = 278; t.m = 722; t.n = 500; t.o = 500; t.p = 500; t.q = 500; t.r = 389; t.s = 389; t.t = 278; t.u = 500; t.v = 444; t.w = 667; t.x = 444; t.y = 444; t.z = 389; t.braceleft = 400; t.bar = 275; t.braceright = 400; t.asciitilde = 541; t.exclamdown = 389; t.cent = 500; t.sterling = 500; t.fraction = 167; t.yen = 500; t.florin = 500; t.section = 500; t.currency = 500; t.quotesingle = 214; t.quotedblleft = 556; t.guillemotleft = 500; t.guilsinglleft = 333; t.guilsinglright = 333; t.fi = 500; t.fl = 500; t.endash = 500; t.dagger = 500; t.daggerdbl = 500; t.periodcentered = 250; t.paragraph = 523; t.bullet = 350; t.quotesinglbase = 333; t.quotedblbase = 556; t.quotedblright = 556; t.guillemotright = 500; t.ellipsis = 889; t.perthousand = 1000; t.questiondown = 500; t.grave = 333; t.acute = 333; t.circumflex = 333; t.tilde = 333; t.macron = 333; t.breve = 333; t.dotaccent = 333; t.dieresis = 333; t.ring = 333; t.cedilla = 333; t.hungarumlaut = 333; t.ogonek = 333; t.caron = 333; t.emdash = 889; t.AE = 889; t.ordfeminine = 276; t.Lslash = 556; t.Oslash = 722; t.OE = 944; t.ordmasculine = 310; t.ae = 667; t.dotlessi = 278; t.lslash = 278; t.oslash = 500; t.oe = 667; t.germandbls = 500; t.Idieresis = 333; t.eacute = 444; t.abreve = 500; t.uhungarumlaut = 500; t.ecaron = 444; t.Ydieresis = 556; t.divide = 675; t.Yacute = 556; t.Acircumflex = 611; t.aacute = 500; t.Ucircumflex = 722; t.yacute = 444; t.scommaaccent = 389; t.ecircumflex = 444; t.Uring = 722; t.Udieresis = 722; t.aogonek = 500; t.Uacute = 722; t.uogonek = 500; t.Edieresis = 611; t.Dcroat = 722; t.commaaccent = 250; t.copyright = 760; t.Emacron = 611; t.ccaron = 444; t.aring = 500; t.Ncommaaccent = 667; t.lacute = 278; t.agrave = 500; t.Tcommaaccent = 556; t.Cacute = 667; t.atilde = 500; t.Edotaccent = 611; t.scaron = 389; t.scedilla = 389; t.iacute = 278; t.lozenge = 471; t.Rcaron = 611; t.Gcommaaccent = 722; t.ucircumflex = 500; t.acircumflex = 500; t.Amacron = 611; t.rcaron = 389; t.ccedilla = 444; t.Zdotaccent = 556; t.Thorn = 611; t.Omacron = 722; t.Racute = 611; t.Sacute = 500; t.dcaron = 544; t.Umacron = 722; t.uring = 500; t.threesuperior = 300; t.Ograve = 722; t.Agrave = 611; t.Abreve = 611; t.multiply = 675; t.uacute = 500; t.Tcaron = 556; t.partialdiff = 476; t.ydieresis = 444; t.Nacute = 667; t.icircumflex = 278; t.Ecircumflex = 611; t.adieresis = 500; t.edieresis = 444; t.cacute = 444; t.nacute = 500; t.umacron = 500; t.Ncaron = 667; t.Iacute = 333; t.plusminus = 675; t.brokenbar = 275; t.registered = 760; t.Gbreve = 722; t.Idotaccent = 333; t.summation = 600; t.Egrave = 611; t.racute = 389; t.omacron = 500; t.Zacute = 556; t.Zcaron = 556; t.greaterequal = 549; t.Eth = 722; t.Ccedilla = 667; t.lcommaaccent = 278; t.tcaron = 300; t.eogonek = 444; t.Uogonek = 722; t.Aacute = 611; t.Adieresis = 611; t.egrave = 444; t.zacute = 389; t.iogonek = 278; t.Oacute = 722; t.oacute = 500; t.amacron = 500; t.sacute = 389; t.idieresis = 278; t.Ocircumflex = 722; t.Ugrave = 722; t.Delta = 612; t.thorn = 500; t.twosuperior = 300; t.Odieresis = 722; t.mu = 500; t.igrave = 278; t.ohungarumlaut = 500; t.Eogonek = 611; t.dcroat = 500; t.threequarters = 750; t.Scedilla = 500; t.lcaron = 300; t.Kcommaaccent = 667; t.Lacute = 556; t.trademark = 980; t.edotaccent = 444; t.Igrave = 333; t.Imacron = 333; t.Lcaron = 611; t.onehalf = 750; t.lessequal = 549; t.ocircumflex = 500; t.ntilde = 500; t.Uhungarumlaut = 722; t.Eacute = 611; t.emacron = 444; t.gbreve = 500; t.onequarter = 750; t.Scaron = 500; t.Scommaaccent = 500; t.Ohungarumlaut = 722; t.degree = 400; t.ograve = 500; t.Ccaron = 667; t.ugrave = 500; t.radical = 453; t.Dcaron = 722; t.rcommaaccent = 389; t.Ntilde = 667; t.otilde = 500; t.Rcommaaccent = 611; t.Lcommaaccent = 556; t.Atilde = 611; t.Aogonek = 611; t.Aring = 611; t.Otilde = 722; t.zdotaccent = 389; t.Ecaron = 611; t.Iogonek = 333; t.kcommaaccent = 444; t.minus = 675; t.Icircumflex = 333; t.ncaron = 500; t.tcommaaccent = 278; t.logicalnot = 675; t.odieresis = 500; t.udieresis = 500; t.notequal = 549; t.gcommaaccent = 500; t.eth = 500; t.zcaron = 389; t.ncommaaccent = 500; t.onesuperior = 300; t.imacron = 278; t.Euro = 500; }); t.ZapfDingbats = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 278; t.a1 = 974; t.a2 = 961; t.a202 = 974; t.a3 = 980; t.a4 = 719; t.a5 = 789; t.a119 = 790; t.a118 = 791; t.a117 = 690; t.a11 = 960; t.a12 = 939; t.a13 = 549; t.a14 = 855; t.a15 = 911; t.a16 = 933; t.a105 = 911; t.a17 = 945; t.a18 = 974; t.a19 = 755; t.a20 = 846; t.a21 = 762; t.a22 = 761; t.a23 = 571; t.a24 = 677; t.a25 = 763; t.a26 = 760; t.a27 = 759; t.a28 = 754; t.a6 = 494; t.a7 = 552; t.a8 = 537; t.a9 = 577; t.a10 = 692; t.a29 = 786; t.a30 = 788; t.a31 = 788; t.a32 = 790; t.a33 = 793; t.a34 = 794; t.a35 = 816; t.a36 = 823; t.a37 = 789; t.a38 = 841; t.a39 = 823; t.a40 = 833; t.a41 = 816; t.a42 = 831; t.a43 = 923; t.a44 = 744; t.a45 = 723; t.a46 = 749; t.a47 = 790; t.a48 = 792; t.a49 = 695; t.a50 = 776; t.a51 = 768; t.a52 = 792; t.a53 = 759; t.a54 = 707; t.a55 = 708; t.a56 = 682; t.a57 = 701; t.a58 = 826; t.a59 = 815; t.a60 = 789; t.a61 = 789; t.a62 = 707; t.a63 = 687; t.a64 = 696; t.a65 = 689; t.a66 = 786; t.a67 = 787; t.a68 = 713; t.a69 = 791; t.a70 = 785; t.a71 = 791; t.a72 = 873; t.a73 = 761; t.a74 = 762; t.a203 = 762; t.a75 = 759; t.a204 = 759; t.a76 = 892; t.a77 = 892; t.a78 = 788; t.a79 = 784; t.a81 = 438; t.a82 = 138; t.a83 = 277; t.a84 = 415; t.a97 = 392; t.a98 = 392; t.a99 = 668; t.a100 = 668; t.a89 = 390; t.a90 = 390; t.a93 = 317; t.a94 = 317; t.a91 = 276; t.a92 = 276; t.a205 = 509; t.a85 = 509; t.a206 = 410; t.a86 = 410; t.a87 = 234; t.a88 = 234; t.a95 = 334; t.a96 = 334; t.a101 = 732; t.a102 = 544; t.a103 = 544; t.a104 = 910; t.a106 = 667; t.a107 = 760; t.a108 = 760; t.a112 = 776; t.a111 = 595; t.a110 = 694; t.a109 = 626; t.a120 = 788; t.a121 = 788; t.a122 = 788; t.a123 = 788; t.a124 = 788; t.a125 = 788; t.a126 = 788; t.a127 = 788; t.a128 = 788; t.a129 = 788; t.a130 = 788; t.a131 = 788; t.a132 = 788; t.a133 = 788; t.a134 = 788; t.a135 = 788; t.a136 = 788; t.a137 = 788; t.a138 = 788; t.a139 = 788; t.a140 = 788; t.a141 = 788; t.a142 = 788; t.a143 = 788; t.a144 = 788; t.a145 = 788; t.a146 = 788; t.a147 = 788; t.a148 = 788; t.a149 = 788; t.a150 = 788; t.a151 = 788; t.a152 = 788; t.a153 = 788; t.a154 = 788; t.a155 = 788; t.a156 = 788; t.a157 = 788; t.a158 = 788; t.a159 = 788; t.a160 = 894; t.a161 = 838; t.a163 = 1016; t.a164 = 458; t.a196 = 748; t.a165 = 924; t.a192 = 748; t.a166 = 918; t.a167 = 927; t.a168 = 928; t.a169 = 928; t.a170 = 834; t.a171 = 873; t.a172 = 828; t.a173 = 924; t.a162 = 924; t.a174 = 917; t.a175 = 930; t.a176 = 931; t.a177 = 463; t.a178 = 883; t.a179 = 836; t.a193 = 836; t.a180 = 867; t.a199 = 867; t.a181 = 696; t.a200 = 696; t.a182 = 874; t.a201 = 874; t.a183 = 760; t.a184 = 946; t.a197 = 771; t.a185 = 865; t.a194 = 771; t.a198 = 888; t.a186 = 967; t.a195 = 888; t.a187 = 831; t.a188 = 873; t.a189 = 927; t.a190 = 970; t.a191 = 918; }); }); exports.getMetrics = getMetrics; /***/ }), /* 173 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.MurmurHash3_64 = void 0; var _util = __w_pdfjs_require__(4); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var SEED = 0xc3d2e1f0; var MASK_HIGH = 0xffff0000; var MASK_LOW = 0xffff; var MurmurHash3_64 = /*#__PURE__*/function () { function MurmurHash3_64(seed) { _classCallCheck(this, MurmurHash3_64); this.h1 = seed ? seed & 0xffffffff : SEED; this.h2 = seed ? seed & 0xffffffff : SEED; } _createClass(MurmurHash3_64, [{ key: "update", value: function update(input) { var data, length; if ((0, _util.isString)(input)) { data = new Uint8Array(input.length * 2); length = 0; for (var i = 0, ii = input.length; i < ii; i++) { var code = input.charCodeAt(i); if (code <= 0xff) { data[length++] = code; } else { data[length++] = code >>> 8; data[length++] = code & 0xff; } } } else if ((0, _util.isArrayBuffer)(input)) { data = input.slice(); length = data.byteLength; } else { throw new Error("Wrong data format in MurmurHash3_64_update. " + "Input must be a string or array."); } var blockCounts = length >> 2; var tailLength = length - blockCounts * 4; var dataUint32 = new Uint32Array(data.buffer, 0, blockCounts); var k1 = 0, k2 = 0; var h1 = this.h1, h2 = this.h2; var C1 = 0xcc9e2d51, C2 = 0x1b873593; var C1_LOW = C1 & MASK_LOW, C2_LOW = C2 & MASK_LOW; for (var _i = 0; _i < blockCounts; _i++) { if (_i & 1) { k1 = dataUint32[_i]; k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; k1 = k1 << 15 | k1 >>> 17; k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; h1 ^= k1; h1 = h1 << 13 | h1 >>> 19; h1 = h1 * 5 + 0xe6546b64; } else { k2 = dataUint32[_i]; k2 = k2 * C1 & MASK_HIGH | k2 * C1_LOW & MASK_LOW; k2 = k2 << 15 | k2 >>> 17; k2 = k2 * C2 & MASK_HIGH | k2 * C2_LOW & MASK_LOW; h2 ^= k2; h2 = h2 << 13 | h2 >>> 19; h2 = h2 * 5 + 0xe6546b64; } } k1 = 0; switch (tailLength) { case 3: k1 ^= data[blockCounts * 4 + 2] << 16; case 2: k1 ^= data[blockCounts * 4 + 1] << 8; case 1: k1 ^= data[blockCounts * 4]; k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; k1 = k1 << 15 | k1 >>> 17; k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; if (blockCounts & 1) { h1 ^= k1; } else { h2 ^= k1; } } this.h1 = h1; this.h2 = h2; } }, { key: "hexdigest", value: function hexdigest() { var h1 = this.h1, h2 = this.h2; h1 ^= h2 >>> 1; h1 = h1 * 0xed558ccd & MASK_HIGH | h1 * 0x8ccd & MASK_LOW; h2 = h2 * 0xff51afd7 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16; h1 ^= h2 >>> 1; h1 = h1 * 0x1a85ec53 & MASK_HIGH | h1 * 0xec53 & MASK_LOW; h2 = h2 * 0xc4ceb9fe & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16; h1 ^= h2 >>> 1; var hex1 = (h1 >>> 0).toString(16), hex2 = (h2 >>> 0).toString(16); return hex1.padStart(8, "0") + hex2.padStart(8, "0"); } }]); return MurmurHash3_64; }(); exports.MurmurHash3_64 = MurmurHash3_64; /***/ }), /* 174 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.OperatorList = void 0; var _util = __w_pdfjs_require__(4); function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } var QueueOptimizer = function QueueOptimizerClosure() { function addState(parentState, pattern, checkFn, iterateFn, processFn) { var state = parentState; for (var i = 0, ii = pattern.length - 1; i < ii; i++) { var item = pattern[i]; state = state[item] || (state[item] = []); } state[pattern[pattern.length - 1]] = { checkFn: checkFn, iterateFn: iterateFn, processFn: processFn }; } function handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray) { var iFirstPIMXO = iFirstSave + 2; for (var i = 0; i < count; i++) { var arg = argsArray[iFirstPIMXO + 4 * i]; var imageMask = arg.length === 1 && arg[0]; if (imageMask && imageMask.width === 1 && imageMask.height === 1 && (!imageMask.data.length || imageMask.data.length === 1 && imageMask.data[0] === 0)) { fnArray[iFirstPIMXO + 4 * i] = _util.OPS.paintSolidColorImageMask; continue; } break; } return count - i; } var InitialState = []; addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintInlineImageXObject, _util.OPS.restore], null, function iterateInlineImageGroup(context, i) { var fnArray = context.fnArray; var iFirstSave = context.iCurr - 3; var pos = (i - iFirstSave) % 4; switch (pos) { case 0: return fnArray[i] === _util.OPS.save; case 1: return fnArray[i] === _util.OPS.transform; case 2: return fnArray[i] === _util.OPS.paintInlineImageXObject; case 3: return fnArray[i] === _util.OPS.restore; } throw new Error("iterateInlineImageGroup - invalid pos: ".concat(pos)); }, function foundInlineImageGroup(context, i) { var MIN_IMAGES_IN_INLINE_IMAGES_BLOCK = 10; var MAX_IMAGES_IN_INLINE_IMAGES_BLOCK = 200; var MAX_WIDTH = 1000; var IMAGE_PADDING = 1; var fnArray = context.fnArray, argsArray = context.argsArray; var curr = context.iCurr; var iFirstSave = curr - 3; var iFirstTransform = curr - 2; var iFirstPIIXO = curr - 1; var count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_INLINE_IMAGES_BLOCK); if (count < MIN_IMAGES_IN_INLINE_IMAGES_BLOCK) { return i - (i - iFirstSave) % 4; } var maxX = 0; var map = [], maxLineHeight = 0; var currentX = IMAGE_PADDING, currentY = IMAGE_PADDING; var q; for (q = 0; q < count; q++) { var transform = argsArray[iFirstTransform + (q << 2)]; var img = argsArray[iFirstPIIXO + (q << 2)][0]; if (currentX + img.width > MAX_WIDTH) { maxX = Math.max(maxX, currentX); currentY += maxLineHeight + 2 * IMAGE_PADDING; currentX = 0; maxLineHeight = 0; } map.push({ transform: transform, x: currentX, y: currentY, w: img.width, h: img.height }); currentX += img.width + 2 * IMAGE_PADDING; maxLineHeight = Math.max(maxLineHeight, img.height); } var imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING; var imgHeight = currentY + maxLineHeight + IMAGE_PADDING; var imgData = new Uint8ClampedArray(imgWidth * imgHeight * 4); var imgRowSize = imgWidth << 2; for (q = 0; q < count; q++) { var data = argsArray[iFirstPIIXO + (q << 2)][0].data; var rowSize = map[q].w << 2; var dataOffset = 0; var offset = map[q].x + map[q].y * imgWidth << 2; imgData.set(data.subarray(0, rowSize), offset - imgRowSize); for (var k = 0, kk = map[q].h; k < kk; k++) { imgData.set(data.subarray(dataOffset, dataOffset + rowSize), offset); dataOffset += rowSize; offset += imgRowSize; } imgData.set(data.subarray(dataOffset - rowSize, dataOffset), offset); while (offset >= 0) { data[offset - 4] = data[offset]; data[offset - 3] = data[offset + 1]; data[offset - 2] = data[offset + 2]; data[offset - 1] = data[offset + 3]; data[offset + rowSize] = data[offset + rowSize - 4]; data[offset + rowSize + 1] = data[offset + rowSize - 3]; data[offset + rowSize + 2] = data[offset + rowSize - 2]; data[offset + rowSize + 3] = data[offset + rowSize - 1]; offset -= imgRowSize; } } fnArray.splice(iFirstSave, count * 4, _util.OPS.paintInlineImageXObjectGroup); argsArray.splice(iFirstSave, count * 4, [{ width: imgWidth, height: imgHeight, kind: _util.ImageKind.RGBA_32BPP, data: imgData }, map]); return iFirstSave + 1; }); addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageMaskXObject, _util.OPS.restore], null, function iterateImageMaskGroup(context, i) { var fnArray = context.fnArray; var iFirstSave = context.iCurr - 3; var pos = (i - iFirstSave) % 4; switch (pos) { case 0: return fnArray[i] === _util.OPS.save; case 1: return fnArray[i] === _util.OPS.transform; case 2: return fnArray[i] === _util.OPS.paintImageMaskXObject; case 3: return fnArray[i] === _util.OPS.restore; } throw new Error("iterateImageMaskGroup - invalid pos: ".concat(pos)); }, function foundImageMaskGroup(context, i) { var MIN_IMAGES_IN_MASKS_BLOCK = 10; var MAX_IMAGES_IN_MASKS_BLOCK = 100; var MAX_SAME_IMAGES_IN_MASKS_BLOCK = 1000; var fnArray = context.fnArray, argsArray = context.argsArray; var curr = context.iCurr; var iFirstSave = curr - 3; var iFirstTransform = curr - 2; var iFirstPIMXO = curr - 1; var count = Math.floor((i - iFirstSave) / 4); count = handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray); if (count < MIN_IMAGES_IN_MASKS_BLOCK) { return i - (i - iFirstSave) % 4; } var q; var isSameImage = false; var iTransform, transformArgs; var firstPIMXOArg0 = argsArray[iFirstPIMXO][0]; var firstTransformArg0 = argsArray[iFirstTransform][0], firstTransformArg1 = argsArray[iFirstTransform][1], firstTransformArg2 = argsArray[iFirstTransform][2], firstTransformArg3 = argsArray[iFirstTransform][3]; if (firstTransformArg1 === firstTransformArg2) { isSameImage = true; iTransform = iFirstTransform + 4; var iPIMXO = iFirstPIMXO + 4; for (q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) { transformArgs = argsArray[iTransform]; if (argsArray[iPIMXO][0] !== firstPIMXOArg0 || transformArgs[0] !== firstTransformArg0 || transformArgs[1] !== firstTransformArg1 || transformArgs[2] !== firstTransformArg2 || transformArgs[3] !== firstTransformArg3) { if (q < MIN_IMAGES_IN_MASKS_BLOCK) { isSameImage = false; } else { count = q; } break; } } } if (isSameImage) { count = Math.min(count, MAX_SAME_IMAGES_IN_MASKS_BLOCK); var positions = new Float32Array(count * 2); iTransform = iFirstTransform; for (q = 0; q < count; q++, iTransform += 4) { transformArgs = argsArray[iTransform]; positions[q << 1] = transformArgs[4]; positions[(q << 1) + 1] = transformArgs[5]; } fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectRepeat); argsArray.splice(iFirstSave, count * 4, [firstPIMXOArg0, firstTransformArg0, firstTransformArg1, firstTransformArg2, firstTransformArg3, positions]); } else { count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK); var images = []; for (q = 0; q < count; q++) { transformArgs = argsArray[iFirstTransform + (q << 2)]; var maskParams = argsArray[iFirstPIMXO + (q << 2)][0]; images.push({ data: maskParams.data, width: maskParams.width, height: maskParams.height, transform: transformArgs }); } fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectGroup); argsArray.splice(iFirstSave, count * 4, [images]); } return iFirstSave + 1; }); addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageXObject, _util.OPS.restore], function (context) { var argsArray = context.argsArray; var iFirstTransform = context.iCurr - 2; return argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0; }, function iterateImageGroup(context, i) { var fnArray = context.fnArray, argsArray = context.argsArray; var iFirstSave = context.iCurr - 3; var pos = (i - iFirstSave) % 4; switch (pos) { case 0: return fnArray[i] === _util.OPS.save; case 1: if (fnArray[i] !== _util.OPS.transform) { return false; } var iFirstTransform = context.iCurr - 2; var firstTransformArg0 = argsArray[iFirstTransform][0]; var firstTransformArg3 = argsArray[iFirstTransform][3]; if (argsArray[i][0] !== firstTransformArg0 || argsArray[i][1] !== 0 || argsArray[i][2] !== 0 || argsArray[i][3] !== firstTransformArg3) { return false; } return true; case 2: if (fnArray[i] !== _util.OPS.paintImageXObject) { return false; } var iFirstPIXO = context.iCurr - 1; var firstPIXOArg0 = argsArray[iFirstPIXO][0]; if (argsArray[i][0] !== firstPIXOArg0) { return false; } return true; case 3: return fnArray[i] === _util.OPS.restore; } throw new Error("iterateImageGroup - invalid pos: ".concat(pos)); }, function (context, i) { var MIN_IMAGES_IN_BLOCK = 3; var MAX_IMAGES_IN_BLOCK = 1000; var fnArray = context.fnArray, argsArray = context.argsArray; var curr = context.iCurr; var iFirstSave = curr - 3; var iFirstTransform = curr - 2; var iFirstPIXO = curr - 1; var firstPIXOArg0 = argsArray[iFirstPIXO][0]; var firstTransformArg0 = argsArray[iFirstTransform][0]; var firstTransformArg3 = argsArray[iFirstTransform][3]; var count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_BLOCK); if (count < MIN_IMAGES_IN_BLOCK) { return i - (i - iFirstSave) % 4; } var positions = new Float32Array(count * 2); var iTransform = iFirstTransform; for (var q = 0; q < count; q++, iTransform += 4) { var transformArgs = argsArray[iTransform]; positions[q << 1] = transformArgs[4]; positions[(q << 1) + 1] = transformArgs[5]; } var args = [firstPIXOArg0, firstTransformArg0, firstTransformArg3, positions]; fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageXObjectRepeat); argsArray.splice(iFirstSave, count * 4, args); return iFirstSave + 1; }); addState(InitialState, [_util.OPS.beginText, _util.OPS.setFont, _util.OPS.setTextMatrix, _util.OPS.showText, _util.OPS.endText], null, function iterateShowTextGroup(context, i) { var fnArray = context.fnArray, argsArray = context.argsArray; var iFirstSave = context.iCurr - 4; var pos = (i - iFirstSave) % 5; switch (pos) { case 0: return fnArray[i] === _util.OPS.beginText; case 1: return fnArray[i] === _util.OPS.setFont; case 2: return fnArray[i] === _util.OPS.setTextMatrix; case 3: if (fnArray[i] !== _util.OPS.showText) { return false; } var iFirstSetFont = context.iCurr - 3; var firstSetFontArg0 = argsArray[iFirstSetFont][0]; var firstSetFontArg1 = argsArray[iFirstSetFont][1]; if (argsArray[i][0] !== firstSetFontArg0 || argsArray[i][1] !== firstSetFontArg1) { return false; } return true; case 4: return fnArray[i] === _util.OPS.endText; } throw new Error("iterateShowTextGroup - invalid pos: ".concat(pos)); }, function (context, i) { var MIN_CHARS_IN_BLOCK = 3; var MAX_CHARS_IN_BLOCK = 1000; var fnArray = context.fnArray, argsArray = context.argsArray; var curr = context.iCurr; var iFirstBeginText = curr - 4; var iFirstSetFont = curr - 3; var iFirstSetTextMatrix = curr - 2; var iFirstShowText = curr - 1; var iFirstEndText = curr; var firstSetFontArg0 = argsArray[iFirstSetFont][0]; var firstSetFontArg1 = argsArray[iFirstSetFont][1]; var count = Math.min(Math.floor((i - iFirstBeginText) / 5), MAX_CHARS_IN_BLOCK); if (count < MIN_CHARS_IN_BLOCK) { return i - (i - iFirstBeginText) % 5; } var iFirst = iFirstBeginText; if (iFirstBeginText >= 4 && fnArray[iFirstBeginText - 4] === fnArray[iFirstSetFont] && fnArray[iFirstBeginText - 3] === fnArray[iFirstSetTextMatrix] && fnArray[iFirstBeginText - 2] === fnArray[iFirstShowText] && fnArray[iFirstBeginText - 1] === fnArray[iFirstEndText] && argsArray[iFirstBeginText - 4][0] === firstSetFontArg0 && argsArray[iFirstBeginText - 4][1] === firstSetFontArg1) { count++; iFirst -= 5; } var iEndText = iFirst + 4; for (var q = 1; q < count; q++) { fnArray.splice(iEndText, 3); argsArray.splice(iEndText, 3); iEndText += 2; } return iEndText + 1; }); function QueueOptimizer(queue) { this.queue = queue; this.state = null; this.context = { iCurr: 0, fnArray: queue.fnArray, argsArray: queue.argsArray }; this.match = null; this.lastProcessed = 0; } QueueOptimizer.prototype = { _optimize: function _optimize() { var fnArray = this.queue.fnArray; var i = this.lastProcessed, ii = fnArray.length; var state = this.state; var match = this.match; if (!state && !match && i + 1 === ii && !InitialState[fnArray[i]]) { this.lastProcessed = ii; return; } var context = this.context; while (i < ii) { if (match) { var iterate = (0, match.iterateFn)(context, i); if (iterate) { i++; continue; } i = (0, match.processFn)(context, i + 1); ii = fnArray.length; match = null; state = null; if (i >= ii) { break; } } state = (state || InitialState)[fnArray[i]]; if (!state || Array.isArray(state)) { i++; continue; } context.iCurr = i; i++; if (state.checkFn && !(0, state.checkFn)(context)) { state = null; continue; } match = state; state = null; } this.state = state; this.match = match; this.lastProcessed = i; }, push: function push(fn, args) { this.queue.fnArray.push(fn); this.queue.argsArray.push(args); this._optimize(); }, flush: function flush() { while (this.match) { var length = this.queue.fnArray.length; this.lastProcessed = (0, this.match.processFn)(this.context, length); this.match = null; this.state = null; this._optimize(); } }, reset: function reset() { this.state = null; this.match = null; this.lastProcessed = 0; } }; return QueueOptimizer; }(); var NullOptimizer = function NullOptimizerClosure() { function NullOptimizer(queue) { this.queue = queue; } NullOptimizer.prototype = { push: function push(fn, args) { this.queue.fnArray.push(fn); this.queue.argsArray.push(args); }, flush: function flush() {}, reset: function reset() {} }; return NullOptimizer; }(); var OperatorList = function OperatorListClosure() { var CHUNK_SIZE = 1000; var CHUNK_SIZE_ABOUT = CHUNK_SIZE - 5; function OperatorList(intent, streamSink) { this._streamSink = streamSink; this.fnArray = []; this.argsArray = []; if (streamSink && intent !== "oplist") { this.optimizer = new QueueOptimizer(this); } else { this.optimizer = new NullOptimizer(this); } this.dependencies = new Set(); this._totalLength = 0; this.weight = 0; this._resolved = streamSink ? null : Promise.resolve(); } OperatorList.prototype = { get length() { return this.argsArray.length; }, get ready() { return this._resolved || this._streamSink.ready; }, get totalLength() { return this._totalLength + this.length; }, addOp: function addOp(fn, args) { this.optimizer.push(fn, args); this.weight++; if (this._streamSink) { if (this.weight >= CHUNK_SIZE) { this.flush(); } else if (this.weight >= CHUNK_SIZE_ABOUT && (fn === _util.OPS.restore || fn === _util.OPS.endText)) { this.flush(); } } }, addDependency: function addDependency(dependency) { if (this.dependencies.has(dependency)) { return; } this.dependencies.add(dependency); this.addOp(_util.OPS.dependency, [dependency]); }, addDependencies: function addDependencies(dependencies) { var _iterator = _createForOfIteratorHelper(dependencies), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var dependency = _step.value; this.addDependency(dependency); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } }, addOpList: function addOpList(opList) { if (!(opList instanceof OperatorList)) { (0, _util.warn)('addOpList - ignoring invalid "opList" parameter.'); return; } var _iterator2 = _createForOfIteratorHelper(opList.dependencies), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var dependency = _step2.value; this.dependencies.add(dependency); } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } for (var i = 0, ii = opList.length; i < ii; i++) { this.addOp(opList.fnArray[i], opList.argsArray[i]); } }, getIR: function getIR() { return { fnArray: this.fnArray, argsArray: this.argsArray, length: this.length }; }, get _transfers() { var transfers = []; var fnArray = this.fnArray, argsArray = this.argsArray, length = this.length; for (var i = 0; i < length; i++) { switch (fnArray[i]) { case _util.OPS.paintInlineImageXObject: case _util.OPS.paintInlineImageXObjectGroup: case _util.OPS.paintImageMaskXObject: var arg = argsArray[i][0]; ; if (!arg.cached) { transfers.push(arg.data.buffer); } break; } } return transfers; }, flush: function flush() { var lastChunk = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; this.optimizer.flush(); var length = this.length; this._totalLength += length; this._streamSink.enqueue({ fnArray: this.fnArray, argsArray: this.argsArray, lastChunk: lastChunk, length: length }, 1, this._transfers); this.dependencies.clear(); this.fnArray.length = 0; this.argsArray.length = 0; this.weight = 0; this.optimizer.reset(); } }; return OperatorList; }(); exports.OperatorList = OperatorList; /***/ }), /* 175 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFImage = void 0; var _regenerator = _interopRequireDefault(__w_pdfjs_require__(2)); var _util = __w_pdfjs_require__(4); var _primitives = __w_pdfjs_require__(135); var _colorspace = __w_pdfjs_require__(153); var _stream = __w_pdfjs_require__(142); var _jpeg_stream = __w_pdfjs_require__(148); var _jpx = __w_pdfjs_require__(151); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function decodeAndClamp(value, addend, coefficient, max) { value = addend + value * coefficient; if (value < 0) { value = 0; } else if (value > max) { value = max; } return value; } function resizeImageMask(src, bpc, w1, h1, w2, h2) { var length = w2 * h2; var dest; if (bpc <= 8) { dest = new Uint8Array(length); } else if (bpc <= 16) { dest = new Uint16Array(length); } else { dest = new Uint32Array(length); } var xRatio = w1 / w2; var yRatio = h1 / h2; var i, j, py, newIndex = 0, oldIndex; var xScaled = new Uint16Array(w2); var w1Scanline = w1; for (i = 0; i < w2; i++) { xScaled[i] = Math.floor(i * xRatio); } for (i = 0; i < h2; i++) { py = Math.floor(i * yRatio) * w1Scanline; for (j = 0; j < w2; j++) { oldIndex = py + xScaled[j]; dest[newIndex++] = src[oldIndex]; } } return dest; } var PDFImage = /*#__PURE__*/function () { function PDFImage(_ref) { var xref = _ref.xref, res = _ref.res, image = _ref.image, _ref$isInline = _ref.isInline, isInline = _ref$isInline === void 0 ? false : _ref$isInline, _ref$smask = _ref.smask, smask = _ref$smask === void 0 ? null : _ref$smask, _ref$mask = _ref.mask, mask = _ref$mask === void 0 ? null : _ref$mask, _ref$isMask = _ref.isMask, isMask = _ref$isMask === void 0 ? false : _ref$isMask, pdfFunctionFactory = _ref.pdfFunctionFactory, localColorSpaceCache = _ref.localColorSpaceCache; _classCallCheck(this, PDFImage); this.image = image; var dict = image.dict; var filter = dict.get("Filter"); if ((0, _primitives.isName)(filter)) { switch (filter.name) { case "JPXDecode": var jpxImage = new _jpx.JpxImage(); jpxImage.parseImageProperties(image.stream); image.stream.reset(); image.width = jpxImage.width; image.height = jpxImage.height; image.bitsPerComponent = jpxImage.bitsPerComponent; image.numComps = jpxImage.componentsCount; break; case "JBIG2Decode": image.bitsPerComponent = 1; image.numComps = 1; break; } } var width = dict.get("Width", "W"); var height = dict.get("Height", "H"); if (Number.isInteger(image.width) && image.width > 0 && Number.isInteger(image.height) && image.height > 0 && (image.width !== width || image.height !== height)) { (0, _util.warn)("PDFImage - using the Width/Height of the image data, " + "rather than the image dictionary."); width = image.width; height = image.height; } if (width < 1 || height < 1) { throw new _util.FormatError("Invalid image width: ".concat(width, " or height: ").concat(height)); } this.width = width; this.height = height; this.interpolate = dict.get("Interpolate", "I") || false; this.imageMask = dict.get("ImageMask", "IM") || false; this.matte = dict.get("Matte") || false; var bitsPerComponent = image.bitsPerComponent; if (!bitsPerComponent) { bitsPerComponent = dict.get("BitsPerComponent", "BPC"); if (!bitsPerComponent) { if (this.imageMask) { bitsPerComponent = 1; } else { throw new _util.FormatError("Bits per component missing in image: ".concat(this.imageMask)); } } } this.bpc = bitsPerComponent; if (!this.imageMask) { var colorSpace = dict.getRaw("ColorSpace") || dict.getRaw("CS"); if (!colorSpace) { (0, _util.info)("JPX images (which do not require color spaces)"); switch (image.numComps) { case 1: colorSpace = _primitives.Name.get("DeviceGray"); break; case 3: colorSpace = _primitives.Name.get("DeviceRGB"); break; case 4: colorSpace = _primitives.Name.get("DeviceCMYK"); break; default: throw new Error("JPX images with ".concat(image.numComps, " ") + "color components not supported."); } } this.colorSpace = _colorspace.ColorSpace.parse({ cs: colorSpace, xref: xref, resources: isInline ? res : null, pdfFunctionFactory: pdfFunctionFactory, localColorSpaceCache: localColorSpaceCache }); this.numComps = this.colorSpace.numComps; } this.decode = dict.getArray("Decode", "D"); this.needsDecode = false; if (this.decode && (this.colorSpace && !this.colorSpace.isDefaultDecode(this.decode, bitsPerComponent) || isMask && !_colorspace.ColorSpace.isDefaultDecode(this.decode, 1))) { this.needsDecode = true; var max = (1 << bitsPerComponent) - 1; this.decodeCoefficients = []; this.decodeAddends = []; var isIndexed = this.colorSpace && this.colorSpace.name === "Indexed"; for (var i = 0, j = 0; i < this.decode.length; i += 2, ++j) { var dmin = this.decode[i]; var dmax = this.decode[i + 1]; this.decodeCoefficients[j] = isIndexed ? (dmax - dmin) / max : dmax - dmin; this.decodeAddends[j] = isIndexed ? dmin : max * dmin; } } if (smask) { this.smask = new PDFImage({ xref: xref, res: res, image: smask, isInline: isInline, pdfFunctionFactory: pdfFunctionFactory, localColorSpaceCache: localColorSpaceCache }); } else if (mask) { if ((0, _primitives.isStream)(mask)) { var maskDict = mask.dict, imageMask = maskDict.get("ImageMask", "IM"); if (!imageMask) { (0, _util.warn)("Ignoring /Mask in image without /ImageMask."); } else { this.mask = new PDFImage({ xref: xref, res: res, image: mask, isInline: isInline, isMask: true, pdfFunctionFactory: pdfFunctionFactory, localColorSpaceCache: localColorSpaceCache }); } } else { this.mask = mask; } } } _createClass(PDFImage, [{ key: "drawWidth", get: function get() { return Math.max(this.width, this.smask && this.smask.width || 0, this.mask && this.mask.width || 0); } }, { key: "drawHeight", get: function get() { return Math.max(this.height, this.smask && this.smask.height || 0, this.mask && this.mask.height || 0); } }, { key: "decodeBuffer", value: function decodeBuffer(buffer) { var bpc = this.bpc; var numComps = this.numComps; var decodeAddends = this.decodeAddends; var decodeCoefficients = this.decodeCoefficients; var max = (1 << bpc) - 1; var i, ii; if (bpc === 1) { for (i = 0, ii = buffer.length; i < ii; i++) { buffer[i] = +!buffer[i]; } return; } var index = 0; for (i = 0, ii = this.width * this.height; i < ii; i++) { for (var j = 0; j < numComps; j++) { buffer[index] = decodeAndClamp(buffer[index], decodeAddends[j], decodeCoefficients[j], max); index++; } } } }, { key: "getComponents", value: function getComponents(buffer) { var bpc = this.bpc; if (bpc === 8) { return buffer; } var width = this.width; var height = this.height; var numComps = this.numComps; var length = width * height * numComps; var bufferPos = 0; var output; if (bpc <= 8) { output = new Uint8Array(length); } else if (bpc <= 16) { output = new Uint16Array(length); } else { output = new Uint32Array(length); } var rowComps = width * numComps; var max = (1 << bpc) - 1; var i = 0, ii, buf; if (bpc === 1) { var mask, loop1End, loop2End; for (var j = 0; j < height; j++) { loop1End = i + (rowComps & ~7); loop2End = i + rowComps; while (i < loop1End) { buf = buffer[bufferPos++]; output[i] = buf >> 7 & 1; output[i + 1] = buf >> 6 & 1; output[i + 2] = buf >> 5 & 1; output[i + 3] = buf >> 4 & 1; output[i + 4] = buf >> 3 & 1; output[i + 5] = buf >> 2 & 1; output[i + 6] = buf >> 1 & 1; output[i + 7] = buf & 1; i += 8; } if (i < loop2End) { buf = buffer[bufferPos++]; mask = 128; while (i < loop2End) { output[i++] = +!!(buf & mask); mask >>= 1; } } } } else { var bits = 0; buf = 0; for (i = 0, ii = length; i < ii; ++i) { if (i % rowComps === 0) { buf = 0; bits = 0; } while (bits < bpc) { buf = buf << 8 | buffer[bufferPos++]; bits += 8; } var remainingBits = bits - bpc; var value = buf >> remainingBits; if (value < 0) { value = 0; } else if (value > max) { value = max; } output[i] = value; buf = buf & (1 << remainingBits) - 1; bits = remainingBits; } } return output; } }, { key: "fillOpacity", value: function fillOpacity(rgbaBuf, width, height, actualHeight, image) { var smask = this.smask; var mask = this.mask; var alphaBuf, sw, sh, i, ii, j; if (smask) { sw = smask.width; sh = smask.height; alphaBuf = new Uint8ClampedArray(sw * sh); smask.fillGrayBuffer(alphaBuf); if (sw !== width || sh !== height) { alphaBuf = resizeImageMask(alphaBuf, smask.bpc, sw, sh, width, height); } } else if (mask) { if (mask instanceof PDFImage) { sw = mask.width; sh = mask.height; alphaBuf = new Uint8ClampedArray(sw * sh); mask.numComps = 1; mask.fillGrayBuffer(alphaBuf); for (i = 0, ii = sw * sh; i < ii; ++i) { alphaBuf[i] = 255 - alphaBuf[i]; } if (sw !== width || sh !== height) { alphaBuf = resizeImageMask(alphaBuf, mask.bpc, sw, sh, width, height); } } else if (Array.isArray(mask)) { alphaBuf = new Uint8ClampedArray(width * height); var numComps = this.numComps; for (i = 0, ii = width * height; i < ii; ++i) { var opacity = 0; var imageOffset = i * numComps; for (j = 0; j < numComps; ++j) { var color = image[imageOffset + j]; var maskOffset = j * 2; if (color < mask[maskOffset] || color > mask[maskOffset + 1]) { opacity = 255; break; } } alphaBuf[i] = opacity; } } else { throw new _util.FormatError("Unknown mask format."); } } if (alphaBuf) { for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) { rgbaBuf[j] = alphaBuf[i]; } } else { for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) { rgbaBuf[j] = 255; } } } }, { key: "undoPreblend", value: function undoPreblend(buffer, width, height) { var matte = this.smask && this.smask.matte; if (!matte) { return; } var matteRgb = this.colorSpace.getRgb(matte, 0); var matteR = matteRgb[0]; var matteG = matteRgb[1]; var matteB = matteRgb[2]; var length = width * height * 4; for (var i = 0; i < length; i += 4) { var alpha = buffer[i + 3]; if (alpha === 0) { buffer[i] = 255; buffer[i + 1] = 255; buffer[i + 2] = 255; continue; } var k = 255 / alpha; buffer[i] = (buffer[i] - matteR) * k + matteR; buffer[i + 1] = (buffer[i + 1] - matteG) * k + matteG; buffer[i + 2] = (buffer[i + 2] - matteB) * k + matteB; } } }, { key: "createImageData", value: function createImageData() { var forceRGBA = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var drawWidth = this.drawWidth; var drawHeight = this.drawHeight; var imgData = { width: drawWidth, height: drawHeight, kind: 0, data: null }; var numComps = this.numComps; var originalWidth = this.width; var originalHeight = this.height; var bpc = this.bpc; var rowBytes = originalWidth * numComps * bpc + 7 >> 3; var imgArray; if (!forceRGBA) { var kind; if (this.colorSpace.name === "DeviceGray" && bpc === 1) { kind = _util.ImageKind.GRAYSCALE_1BPP; } else if (this.colorSpace.name === "DeviceRGB" && bpc === 8 && !this.needsDecode) { kind = _util.ImageKind.RGB_24BPP; } if (kind && !this.smask && !this.mask && drawWidth === originalWidth && drawHeight === originalHeight) { imgData.kind = kind; imgArray = this.getImageBytes(originalHeight * rowBytes); if (this.image instanceof _stream.DecodeStream) { imgData.data = imgArray; } else { var newArray = new Uint8ClampedArray(imgArray.length); newArray.set(imgArray); imgData.data = newArray; } if (this.needsDecode) { (0, _util.assert)(kind === _util.ImageKind.GRAYSCALE_1BPP, "PDFImage.createImageData: The image must be grayscale."); var buffer = imgData.data; for (var i = 0, ii = buffer.length; i < ii; i++) { buffer[i] ^= 0xff; } } return imgData; } if (this.image instanceof _jpeg_stream.JpegStream && !this.smask && !this.mask) { var imageLength = originalHeight * rowBytes; switch (this.colorSpace.name) { case "DeviceGray": imageLength *= 3; case "DeviceRGB": case "DeviceCMYK": imgData.kind = _util.ImageKind.RGB_24BPP; imgData.data = this.getImageBytes(imageLength, drawWidth, drawHeight, true); return imgData; } } } imgArray = this.getImageBytes(originalHeight * rowBytes); var actualHeight = 0 | imgArray.length / rowBytes * drawHeight / originalHeight; var comps = this.getComponents(imgArray); var alpha01, maybeUndoPreblend; if (!forceRGBA && !this.smask && !this.mask) { imgData.kind = _util.ImageKind.RGB_24BPP; imgData.data = new Uint8ClampedArray(drawWidth * drawHeight * 3); alpha01 = 0; maybeUndoPreblend = false; } else { imgData.kind = _util.ImageKind.RGBA_32BPP; imgData.data = new Uint8ClampedArray(drawWidth * drawHeight * 4); alpha01 = 1; maybeUndoPreblend = true; this.fillOpacity(imgData.data, drawWidth, drawHeight, actualHeight, comps); } if (this.needsDecode) { this.decodeBuffer(comps); } this.colorSpace.fillRgb(imgData.data, originalWidth, originalHeight, drawWidth, drawHeight, actualHeight, bpc, comps, alpha01); if (maybeUndoPreblend) { this.undoPreblend(imgData.data, drawWidth, actualHeight); } return imgData; } }, { key: "fillGrayBuffer", value: function fillGrayBuffer(buffer) { var numComps = this.numComps; if (numComps !== 1) { throw new _util.FormatError("Reading gray scale from a color image: ".concat(numComps)); } var width = this.width; var height = this.height; var bpc = this.bpc; var rowBytes = width * numComps * bpc + 7 >> 3; var imgArray = this.getImageBytes(height * rowBytes); var comps = this.getComponents(imgArray); var i, length; if (bpc === 1) { length = width * height; if (this.needsDecode) { for (i = 0; i < length; ++i) { buffer[i] = comps[i] - 1 & 255; } } else { for (i = 0; i < length; ++i) { buffer[i] = -comps[i] & 255; } } return; } if (this.needsDecode) { this.decodeBuffer(comps); } length = width * height; var scale = 255 / ((1 << bpc) - 1); for (i = 0; i < length; ++i) { buffer[i] = scale * comps[i]; } } }, { key: "getImageBytes", value: function getImageBytes(length, drawWidth, drawHeight) { var forceRGB = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; this.image.reset(); this.image.drawWidth = drawWidth || this.width; this.image.drawHeight = drawHeight || this.height; this.image.forceRGB = !!forceRGB; return this.image.getBytes(length, true); } }], [{ key: "buildImage", value: function () { var _buildImage = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(_ref2) { var xref, res, image, _ref2$isInline, isInline, pdfFunctionFactory, localColorSpaceCache, imageData, smaskData, maskData, smask, mask; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: xref = _ref2.xref, res = _ref2.res, image = _ref2.image, _ref2$isInline = _ref2.isInline, isInline = _ref2$isInline === void 0 ? false : _ref2$isInline, pdfFunctionFactory = _ref2.pdfFunctionFactory, localColorSpaceCache = _ref2.localColorSpaceCache; imageData = image; smaskData = null; maskData = null; smask = image.dict.get("SMask"); mask = image.dict.get("Mask"); if (smask) { smaskData = smask; } else if (mask) { if ((0, _primitives.isStream)(mask) || Array.isArray(mask)) { maskData = mask; } else { (0, _util.warn)("Unsupported mask format."); } } return _context.abrupt("return", new PDFImage({ xref: xref, res: res, image: imageData, isInline: isInline, smask: smaskData, mask: maskData, pdfFunctionFactory: pdfFunctionFactory, localColorSpaceCache: localColorSpaceCache })); case 8: case "end": return _context.stop(); } } }, _callee); })); function buildImage(_x) { return _buildImage.apply(this, arguments); } return buildImage; }() }, { key: "createMask", value: function createMask(_ref3) { var imgArray = _ref3.imgArray, width = _ref3.width, height = _ref3.height, imageIsFromDecodeStream = _ref3.imageIsFromDecodeStream, inverseDecode = _ref3.inverseDecode; var computedLength = (width + 7 >> 3) * height; var actualLength = imgArray.byteLength; var haveFullData = computedLength === actualLength; var data, i; if (imageIsFromDecodeStream && (!inverseDecode || haveFullData)) { data = imgArray; } else if (!inverseDecode) { data = new Uint8ClampedArray(actualLength); data.set(imgArray); } else { data = new Uint8ClampedArray(computedLength); data.set(imgArray); for (i = actualLength; i < computedLength; i++) { data[i] = 0xff; } } if (inverseDecode) { for (i = 0; i < actualLength; i++) { data[i] ^= 0xff; } } return { data: data, width: width, height: height }; } }]); return PDFImage; }(); exports.PDFImage = PDFImage; /***/ }), /* 176 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.incrementalUpdate = incrementalUpdate; exports.writeDict = writeDict; var _util = __w_pdfjs_require__(4); var _primitives = __w_pdfjs_require__(135); var _core_utils = __w_pdfjs_require__(138); var _xml_parser = __w_pdfjs_require__(177); var _crypto = __w_pdfjs_require__(152); function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function writeDict(dict, buffer, transform) { buffer.push("<<"); var _iterator = _createForOfIteratorHelper(dict.getKeys()), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var key = _step.value; buffer.push(" /".concat((0, _core_utils.escapePDFName)(key), " ")); writeValue(dict.getRaw(key), buffer, transform); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } buffer.push(">>"); } function writeStream(stream, buffer, transform) { writeDict(stream.dict, buffer, transform); buffer.push(" stream\n"); var string = (0, _util.bytesToString)(stream.getBytes()); if (transform !== null) { string = transform.encryptString(string); } buffer.push(string); buffer.push("\nendstream\n"); } function writeArray(array, buffer, transform) { buffer.push("["); var first = true; var _iterator2 = _createForOfIteratorHelper(array), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var val = _step2.value; if (!first) { buffer.push(" "); } else { first = false; } writeValue(val, buffer, transform); } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } buffer.push("]"); } function numberToString(value) { if (Number.isInteger(value)) { return value.toString(); } var roundedValue = Math.round(value * 100); if (roundedValue % 100 === 0) { return (roundedValue / 100).toString(); } if (roundedValue % 10 === 0) { return value.toFixed(1); } return value.toFixed(2); } function writeValue(value, buffer, transform) { if ((0, _primitives.isName)(value)) { buffer.push("/".concat((0, _core_utils.escapePDFName)(value.name))); } else if ((0, _primitives.isRef)(value)) { buffer.push("".concat(value.num, " ").concat(value.gen, " R")); } else if (Array.isArray(value)) { writeArray(value, buffer, transform); } else if (typeof value === "string") { if (transform !== null) { value = transform.encryptString(value); } buffer.push("(".concat((0, _util.escapeString)(value), ")")); } else if (typeof value === "number") { buffer.push(numberToString(value)); } else if ((0, _primitives.isDict)(value)) { writeDict(value, buffer, transform); } else if ((0, _primitives.isStream)(value)) { writeStream(value, buffer, transform); } } function writeInt(number, size, offset, buffer) { for (var i = size + offset - 1; i > offset - 1; i--) { buffer[i] = number & 0xff; number >>= 8; } return offset + size; } function writeString(string, offset, buffer) { for (var i = 0, len = string.length; i < len; i++) { buffer[offset + i] = string.charCodeAt(i) & 0xff; } } function computeMD5(filesize, xrefInfo) { var time = Math.floor(Date.now() / 1000); var filename = xrefInfo.filename || ""; var md5Buffer = [time.toString(), filename, filesize.toString()]; var md5BufferLen = md5Buffer.reduce(function (a, str) { return a + str.length; }, 0); for (var _i = 0, _Object$values = Object.values(xrefInfo.info); _i < _Object$values.length; _i++) { var value = _Object$values[_i]; md5Buffer.push(value); md5BufferLen += value.length; } var array = new Uint8Array(md5BufferLen); var offset = 0; for (var _i2 = 0, _md5Buffer = md5Buffer; _i2 < _md5Buffer.length; _i2++) { var str = _md5Buffer[_i2]; writeString(str, offset, array); offset += str.length; } return (0, _util.bytesToString)((0, _crypto.calculateMD5)(array)); } function updateXFA(datasetsRef, newRefs, xref) { if (datasetsRef === null || xref === null) { return; } var datasets = xref.fetchIfRef(datasetsRef); var str = (0, _util.bytesToString)(datasets.getBytes()); var xml = new _xml_parser.SimpleXMLParser({ hasAttributes: true }).parseFromString(str); var _iterator3 = _createForOfIteratorHelper(newRefs), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var xfa = _step3.value.xfa; if (!xfa) { continue; } var path = xfa.path, value = xfa.value; if (!path) { continue; } var node = xml.documentElement.searchNode((0, _core_utils.parseXFAPath)(path), 0); if (node) { node.childNodes = [new _xml_parser.SimpleDOMNode("#text", value)]; } else { (0, _util.warn)("Node not found for path: ".concat(path)); } } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } var buffer = []; xml.documentElement.dump(buffer); var updatedXml = buffer.join(""); var encrypt = xref.encrypt; if (encrypt) { var transform = encrypt.createCipherTransform(datasetsRef.num, datasetsRef.gen); updatedXml = transform.encryptString(updatedXml); } var data = "".concat(datasetsRef.num, " ").concat(datasetsRef.gen, " obj\n") + "<< /Type /EmbeddedFile /Length ".concat(updatedXml.length, ">>\nstream\n") + updatedXml + "\nendstream\nendobj\n"; newRefs.push({ ref: datasetsRef, data: data }); } function incrementalUpdate(_ref) { var originalData = _ref.originalData, xrefInfo = _ref.xrefInfo, newRefs = _ref.newRefs, _ref$xref = _ref.xref, xref = _ref$xref === void 0 ? null : _ref$xref, _ref$datasetsRef = _ref.datasetsRef, datasetsRef = _ref$datasetsRef === void 0 ? null : _ref$datasetsRef; updateXFA(datasetsRef, newRefs, xref); var newXref = new _primitives.Dict(null); var refForXrefTable = xrefInfo.newRef; var buffer, baseOffset; var lastByte = originalData[originalData.length - 1]; if (lastByte === 0x0a || lastByte === 0x0d) { buffer = []; baseOffset = originalData.length; } else { buffer = ["\n"]; baseOffset = originalData.length + 1; } newXref.set("Size", refForXrefTable.num + 1); newXref.set("Prev", xrefInfo.startXRef); newXref.set("Type", _primitives.Name.get("XRef")); if (xrefInfo.rootRef !== null) { newXref.set("Root", xrefInfo.rootRef); } if (xrefInfo.infoRef !== null) { newXref.set("Info", xrefInfo.infoRef); } if (xrefInfo.encrypt !== null) { newXref.set("Encrypt", xrefInfo.encrypt); } newRefs.push({ ref: refForXrefTable, data: "" }); newRefs = newRefs.sort(function (a, b) { return a.ref.num - b.ref.num; }); var xrefTableData = [[0, 1, 0xffff]]; var indexes = [0, 1]; var maxOffset = 0; var _iterator4 = _createForOfIteratorHelper(newRefs), _step4; try { for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { var _step4$value = _step4.value, ref = _step4$value.ref, data = _step4$value.data; maxOffset = Math.max(maxOffset, baseOffset); xrefTableData.push([1, baseOffset, Math.min(ref.gen, 0xffff)]); baseOffset += data.length; indexes.push(ref.num); indexes.push(1); buffer.push(data); } } catch (err) { _iterator4.e(err); } finally { _iterator4.f(); } newXref.set("Index", indexes); if (xrefInfo.fileIds.length !== 0) { var md5 = computeMD5(baseOffset, xrefInfo); newXref.set("ID", [xrefInfo.fileIds[0], md5]); } var offsetSize = Math.ceil(Math.log2(maxOffset) / 8); var sizes = [1, offsetSize, 2]; var structSize = sizes[0] + sizes[1] + sizes[2]; var tableLength = structSize * xrefTableData.length; newXref.set("W", sizes); newXref.set("Length", tableLength); buffer.push("".concat(refForXrefTable.num, " ").concat(refForXrefTable.gen, " obj\n")); writeDict(newXref, buffer, null); buffer.push(" stream\n"); var bufferLen = buffer.reduce(function (a, str) { return a + str.length; }, 0); var footer = "\nendstream\nendobj\nstartxref\n".concat(baseOffset, "\n%%EOF\n"); var array = new Uint8Array(originalData.length + bufferLen + tableLength + footer.length); array.set(originalData); var offset = originalData.length; var _iterator5 = _createForOfIteratorHelper(buffer), _step5; try { for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { var str = _step5.value; writeString(str, offset, array); offset += str.length; } } catch (err) { _iterator5.e(err); } finally { _iterator5.f(); } for (var _i3 = 0, _xrefTableData = xrefTableData; _i3 < _xrefTableData.length; _i3++) { var _xrefTableData$_i = _slicedToArray(_xrefTableData[_i3], 3), type = _xrefTableData$_i[0], objOffset = _xrefTableData$_i[1], gen = _xrefTableData$_i[2]; offset = writeInt(type, sizes[0], offset, array); offset = writeInt(objOffset, sizes[1], offset, array); offset = writeInt(gen, sizes[2], offset, array); } writeString(footer, offset, array); return array; } /***/ }), /* 177 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", ({ value: true })); exports.XMLParserErrorCode = exports.XMLParserBase = exports.SimpleXMLParser = exports.SimpleDOMNode = void 0; var _util = __w_pdfjs_require__(4); function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var XMLParserErrorCode = { NoError: 0, EndOfDocument: -1, UnterminatedCdat: -2, UnterminatedXmlDeclaration: -3, UnterminatedDoctypeDeclaration: -4, UnterminatedComment: -5, MalformedElement: -6, OutOfMemory: -7, UnterminatedAttributeValue: -8, UnterminatedElement: -9, ElementNeverBegun: -10 }; exports.XMLParserErrorCode = XMLParserErrorCode; function isWhitespace(s, index) { var ch = s[index]; return ch === " " || ch === "\n" || ch === "\r" || ch === "\t"; } function isWhitespaceString(s) { for (var i = 0, ii = s.length; i < ii; i++) { if (!isWhitespace(s, i)) { return false; } } return true; } var XMLParserBase = /*#__PURE__*/function () { function XMLParserBase() { _classCallCheck(this, XMLParserBase); } _createClass(XMLParserBase, [{ key: "_resolveEntities", value: function _resolveEntities(s) { var _this = this; return s.replace(/&([^;]+);/g, function (all, entity) { if (entity.substring(0, 2) === "#x") { return String.fromCodePoint(parseInt(entity.substring(2), 16)); } else if (entity.substring(0, 1) === "#") { return String.fromCodePoint(parseInt(entity.substring(1), 10)); } switch (entity) { case "lt": return "<"; case "gt": return ">"; case "amp": return "&"; case "quot": return '"'; case "apos": return "'"; } return _this.onResolveEntity(entity); }); } }, { key: "_parseContent", value: function _parseContent(s, start) { var attributes = []; var pos = start; function skipWs() { while (pos < s.length && isWhitespace(s, pos)) { ++pos; } } while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "/") { ++pos; } var name = s.substring(start, pos); skipWs(); while (pos < s.length && s[pos] !== ">" && s[pos] !== "/" && s[pos] !== "?") { skipWs(); var attrName = "", attrValue = ""; while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== "=") { attrName += s[pos]; ++pos; } skipWs(); if (s[pos] !== "=") { return null; } ++pos; skipWs(); var attrEndChar = s[pos]; if (attrEndChar !== '"' && attrEndChar !== "'") { return null; } var attrEndIndex = s.indexOf(attrEndChar, ++pos); if (attrEndIndex < 0) { return null; } attrValue = s.substring(pos, attrEndIndex); attributes.push({ name: attrName, value: this._resolveEntities(attrValue) }); pos = attrEndIndex + 1; skipWs(); } return { name: name, attributes: attributes, parsed: pos - start }; } }, { key: "_parseProcessingInstruction", value: function _parseProcessingInstruction(s, start) { var pos = start; function skipWs() { while (pos < s.length && isWhitespace(s, pos)) { ++pos; } } while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "/") { ++pos; } var name = s.substring(start, pos); skipWs(); var attrStart = pos; while (pos < s.length && (s[pos] !== "?" || s[pos + 1] !== ">")) { ++pos; } var value = s.substring(attrStart, pos); return { name: name, value: value, parsed: pos - start }; } }, { key: "parseXml", value: function parseXml(s) { var i = 0; while (i < s.length) { var ch = s[i]; var j = i; if (ch === "<") { ++j; var ch2 = s[j]; var q = void 0; switch (ch2) { case "/": ++j; q = s.indexOf(">", j); if (q < 0) { this.onError(XMLParserErrorCode.UnterminatedElement); return; } this.onEndElement(s.substring(j, q)); j = q + 1; break; case "?": ++j; var pi = this._parseProcessingInstruction(s, j); if (s.substring(j + pi.parsed, j + pi.parsed + 2) !== "?>") { this.onError(XMLParserErrorCode.UnterminatedXmlDeclaration); return; } this.onPi(pi.name, pi.value); j += pi.parsed + 2; break; case "!": if (s.substring(j + 1, j + 3) === "--") { q = s.indexOf("-->", j + 3); if (q < 0) { this.onError(XMLParserErrorCode.UnterminatedComment); return; } this.onComment(s.substring(j + 3, q)); j = q + 3; } else if (s.substring(j + 1, j + 8) === "[CDATA[") { q = s.indexOf("]]>", j + 8); if (q < 0) { this.onError(XMLParserErrorCode.UnterminatedCdat); return; } this.onCdata(s.substring(j + 8, q)); j = q + 3; } else if (s.substring(j + 1, j + 8) === "DOCTYPE") { var q2 = s.indexOf("[", j + 8); var complexDoctype = false; q = s.indexOf(">", j + 8); if (q < 0) { this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration); return; } if (q2 > 0 && q > q2) { q = s.indexOf("]>", j + 8); if (q < 0) { this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration); return; } complexDoctype = true; } var doctypeContent = s.substring(j + 8, q + (complexDoctype ? 1 : 0)); this.onDoctype(doctypeContent); j = q + (complexDoctype ? 2 : 1); } else { this.onError(XMLParserErrorCode.MalformedElement); return; } break; default: var content = this._parseContent(s, j); if (content === null) { this.onError(XMLParserErrorCode.MalformedElement); return; } var isClosed = false; if (s.substring(j + content.parsed, j + content.parsed + 2) === "/>") { isClosed = true; } else if (s.substring(j + content.parsed, j + content.parsed + 1) !== ">") { this.onError(XMLParserErrorCode.UnterminatedElement); return; } this.onBeginElement(content.name, content.attributes, isClosed); j += content.parsed + (isClosed ? 2 : 1); break; } } else { while (j < s.length && s[j] !== "<") { j++; } var text = s.substring(i, j); this.onText(this._resolveEntities(text)); } i = j; } } }, { key: "onResolveEntity", value: function onResolveEntity(name) { return "&".concat(name, ";"); } }, { key: "onPi", value: function onPi(name, value) {} }, { key: "onComment", value: function onComment(text) {} }, { key: "onCdata", value: function onCdata(text) {} }, { key: "onDoctype", value: function onDoctype(doctypeContent) {} }, { key: "onText", value: function onText(text) {} }, { key: "onBeginElement", value: function onBeginElement(name, attributes, isEmpty) {} }, { key: "onEndElement", value: function onEndElement(name) {} }, { key: "onError", value: function onError(code) {} }]); return XMLParserBase; }(); exports.XMLParserBase = XMLParserBase; var SimpleDOMNode = /*#__PURE__*/function () { function SimpleDOMNode(nodeName, nodeValue) { _classCallCheck(this, SimpleDOMNode); this.nodeName = nodeName; this.nodeValue = nodeValue; Object.defineProperty(this, "parentNode", { value: null, writable: true }); } _createClass(SimpleDOMNode, [{ key: "firstChild", get: function get() { return this.childNodes && this.childNodes[0]; } }, { key: "nextSibling", get: function get() { var childNodes = this.parentNode.childNodes; if (!childNodes) { return undefined; } var index = childNodes.indexOf(this); if (index === -1) { return undefined; } return childNodes[index + 1]; } }, { key: "textContent", get: function get() { if (!this.childNodes) { return this.nodeValue || ""; } return this.childNodes.map(function (child) { return child.textContent; }).join(""); } }, { key: "hasChildNodes", value: function hasChildNodes() { return this.childNodes && this.childNodes.length > 0; } }, { key: "searchNode", value: function searchNode(paths, pos) { if (pos >= paths.length) { return this; } var component = paths[pos]; var stack = []; var node = this; while (true) { if (component.name === node.nodeName) { if (component.pos === 0) { var res = node.searchNode(paths, pos + 1); if (res !== null) { return res; } } else if (stack.length === 0) { return null; } else { var _stack$pop = stack.pop(), _stack$pop2 = _slicedToArray(_stack$pop, 1), parent = _stack$pop2[0]; var siblingPos = 0; var _iterator = _createForOfIteratorHelper(parent.childNodes), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var child = _step.value; if (component.name === child.nodeName) { if (siblingPos === component.pos) { return child.searchNode(paths, pos + 1); } siblingPos++; } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } return node.searchNode(paths, pos + 1); } } if (node.childNodes && node.childNodes.length !== 0) { stack.push([node, 0]); node = node.childNodes[0]; } else if (stack.length === 0) { return null; } else { while (stack.length !== 0) { var _stack$pop3 = stack.pop(), _stack$pop4 = _slicedToArray(_stack$pop3, 2), _parent = _stack$pop4[0], currentPos = _stack$pop4[1]; var newPos = currentPos + 1; if (newPos < _parent.childNodes.length) { stack.push([_parent, newPos]); node = _parent.childNodes[newPos]; break; } } if (stack.length === 0) { return null; } } } } }, { key: "dump", value: function dump(buffer) { if (this.nodeName === "#text") { buffer.push((0, _util.encodeToXmlString)(this.nodeValue)); return; } buffer.push("<".concat(this.nodeName)); if (this.attributes) { var _iterator2 = _createForOfIteratorHelper(this.attributes), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var attribute = _step2.value; buffer.push(" ".concat(attribute.name, "=\"").concat((0, _util.encodeToXmlString)(attribute.value), "\"")); } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } } if (this.hasChildNodes()) { buffer.push(">"); var _iterator3 = _createForOfIteratorHelper(this.childNodes), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var child = _step3.value; child.dump(buffer); } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } buffer.push("")); } else if (this.nodeValue) { buffer.push(">".concat((0, _util.encodeToXmlString)(this.nodeValue), "")); } else { buffer.push("/>"); } } }]); return SimpleDOMNode; }(); exports.SimpleDOMNode = SimpleDOMNode; var SimpleXMLParser = /*#__PURE__*/function (_XMLParserBase) { _inherits(SimpleXMLParser, _XMLParserBase); var _super = _createSuper(SimpleXMLParser); function SimpleXMLParser(_ref) { var _this2; var _ref$hasAttributes = _ref.hasAttributes, hasAttributes = _ref$hasAttributes === void 0 ? false : _ref$hasAttributes, _ref$lowerCaseName = _ref.lowerCaseName, lowerCaseName = _ref$lowerCaseName === void 0 ? false : _ref$lowerCaseName; _classCallCheck(this, SimpleXMLParser); _this2 = _super.call(this); _this2._currentFragment = null; _this2._stack = null; _this2._errorCode = XMLParserErrorCode.NoError; _this2._hasAttributes = hasAttributes; _this2._lowerCaseName = lowerCaseName; return _this2; } _createClass(SimpleXMLParser, [{ key: "parseFromString", value: function parseFromString(data) { this._currentFragment = []; this._stack = []; this._errorCode = XMLParserErrorCode.NoError; this.parseXml(data); if (this._errorCode !== XMLParserErrorCode.NoError) { return undefined; } var _this$_currentFragmen = _slicedToArray(this._currentFragment, 1), documentElement = _this$_currentFragmen[0]; if (!documentElement) { return undefined; } return { documentElement: documentElement }; } }, { key: "onText", value: function onText(text) { if (isWhitespaceString(text)) { return; } var node = new SimpleDOMNode("#text", text); this._currentFragment.push(node); } }, { key: "onCdata", value: function onCdata(text) { var node = new SimpleDOMNode("#text", text); this._currentFragment.push(node); } }, { key: "onBeginElement", value: function onBeginElement(name, attributes, isEmpty) { if (this._lowerCaseName) { name = name.toLowerCase(); } var node = new SimpleDOMNode(name); node.childNodes = []; if (this._hasAttributes) { node.attributes = attributes; } this._currentFragment.push(node); if (isEmpty) { return; } this._stack.push(this._currentFragment); this._currentFragment = node.childNodes; } }, { key: "onEndElement", value: function onEndElement(name) { this._currentFragment = this._stack.pop() || []; var lastElement = this._currentFragment[this._currentFragment.length - 1]; if (!lastElement) { return; } for (var i = 0, ii = lastElement.childNodes.length; i < ii; i++) { lastElement.childNodes[i].parentNode = lastElement; } } }, { key: "onError", value: function onError(code) { this._errorCode = code; } }]); return SimpleXMLParser; }(XMLParserBase); exports.SimpleXMLParser = SimpleXMLParser; /***/ }), /* 178 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.MessageHandler = void 0; var _regenerator = _interopRequireDefault(__w_pdfjs_require__(2)); var _util = __w_pdfjs_require__(4); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var CallbackKind = { UNKNOWN: 0, DATA: 1, ERROR: 2 }; var StreamKind = { UNKNOWN: 0, CANCEL: 1, CANCEL_COMPLETE: 2, CLOSE: 3, ENQUEUE: 4, ERROR: 5, PULL: 6, PULL_COMPLETE: 7, START_COMPLETE: 8 }; function wrapReason(reason) { if (_typeof(reason) !== "object" || reason === null) { return reason; } switch (reason.name) { case "AbortException": return new _util.AbortException(reason.message); case "MissingPDFException": return new _util.MissingPDFException(reason.message); case "UnexpectedResponseException": return new _util.UnexpectedResponseException(reason.message, reason.status); case "UnknownErrorException": return new _util.UnknownErrorException(reason.message, reason.details); default: return new _util.UnknownErrorException(reason.message, reason.toString()); } } var MessageHandler = /*#__PURE__*/function () { function MessageHandler(sourceName, targetName, comObj) { var _this = this; _classCallCheck(this, MessageHandler); this.sourceName = sourceName; this.targetName = targetName; this.comObj = comObj; this.callbackId = 1; this.streamId = 1; this.postMessageTransfers = true; this.streamSinks = Object.create(null); this.streamControllers = Object.create(null); this.callbackCapabilities = Object.create(null); this.actionHandler = Object.create(null); this._onComObjOnMessage = function (event) { var data = event.data; if (data.targetName !== _this.sourceName) { return; } if (data.stream) { _this._processStreamMessage(data); return; } if (data.callback) { var callbackId = data.callbackId; var capability = _this.callbackCapabilities[callbackId]; if (!capability) { throw new Error("Cannot resolve callback ".concat(callbackId)); } delete _this.callbackCapabilities[callbackId]; if (data.callback === CallbackKind.DATA) { capability.resolve(data.data); } else if (data.callback === CallbackKind.ERROR) { capability.reject(wrapReason(data.reason)); } else { throw new Error("Unexpected callback case"); } return; } var action = _this.actionHandler[data.action]; if (!action) { throw new Error("Unknown action from worker: ".concat(data.action)); } if (data.callbackId) { var cbSourceName = _this.sourceName; var cbTargetName = data.sourceName; new Promise(function (resolve) { resolve(action(data.data)); }).then(function (result) { comObj.postMessage({ sourceName: cbSourceName, targetName: cbTargetName, callback: CallbackKind.DATA, callbackId: data.callbackId, data: result }); }, function (reason) { comObj.postMessage({ sourceName: cbSourceName, targetName: cbTargetName, callback: CallbackKind.ERROR, callbackId: data.callbackId, reason: wrapReason(reason) }); }); return; } if (data.streamId) { _this._createStreamSink(data); return; } action(data.data); }; comObj.addEventListener("message", this._onComObjOnMessage); } _createClass(MessageHandler, [{ key: "on", value: function on(actionName, handler) { var ah = this.actionHandler; if (ah[actionName]) { throw new Error("There is already an actionName called \"".concat(actionName, "\"")); } ah[actionName] = handler; } }, { key: "send", value: function send(actionName, data, transfers) { this._postMessage({ sourceName: this.sourceName, targetName: this.targetName, action: actionName, data: data }, transfers); } }, { key: "sendWithPromise", value: function sendWithPromise(actionName, data, transfers) { var callbackId = this.callbackId++; var capability = (0, _util.createPromiseCapability)(); this.callbackCapabilities[callbackId] = capability; try { this._postMessage({ sourceName: this.sourceName, targetName: this.targetName, action: actionName, callbackId: callbackId, data: data }, transfers); } catch (ex) { capability.reject(ex); } return capability.promise; } }, { key: "sendWithStream", value: function sendWithStream(actionName, data, queueingStrategy, transfers) { var _this2 = this; var streamId = this.streamId++; var sourceName = this.sourceName; var targetName = this.targetName; var comObj = this.comObj; return new ReadableStream({ start: function start(controller) { var startCapability = (0, _util.createPromiseCapability)(); _this2.streamControllers[streamId] = { controller: controller, startCall: startCapability, pullCall: null, cancelCall: null, isClosed: false }; _this2._postMessage({ sourceName: sourceName, targetName: targetName, action: actionName, streamId: streamId, data: data, desiredSize: controller.desiredSize }, transfers); return startCapability.promise; }, pull: function pull(controller) { var pullCapability = (0, _util.createPromiseCapability)(); _this2.streamControllers[streamId].pullCall = pullCapability; comObj.postMessage({ sourceName: sourceName, targetName: targetName, stream: StreamKind.PULL, streamId: streamId, desiredSize: controller.desiredSize }); return pullCapability.promise; }, cancel: function cancel(reason) { (0, _util.assert)(reason instanceof Error, "cancel must have a valid reason"); var cancelCapability = (0, _util.createPromiseCapability)(); _this2.streamControllers[streamId].cancelCall = cancelCapability; _this2.streamControllers[streamId].isClosed = true; comObj.postMessage({ sourceName: sourceName, targetName: targetName, stream: StreamKind.CANCEL, streamId: streamId, reason: wrapReason(reason) }); return cancelCapability.promise; } }, queueingStrategy); } }, { key: "_createStreamSink", value: function _createStreamSink(data) { var self = this; var action = this.actionHandler[data.action]; var streamId = data.streamId; var sourceName = this.sourceName; var targetName = data.sourceName; var comObj = this.comObj; var streamSink = { enqueue: function enqueue(chunk) { var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; var transfers = arguments.length > 2 ? arguments[2] : undefined; if (this.isCancelled) { return; } var lastDesiredSize = this.desiredSize; this.desiredSize -= size; if (lastDesiredSize > 0 && this.desiredSize <= 0) { this.sinkCapability = (0, _util.createPromiseCapability)(); this.ready = this.sinkCapability.promise; } self._postMessage({ sourceName: sourceName, targetName: targetName, stream: StreamKind.ENQUEUE, streamId: streamId, chunk: chunk }, transfers); }, close: function close() { if (this.isCancelled) { return; } this.isCancelled = true; comObj.postMessage({ sourceName: sourceName, targetName: targetName, stream: StreamKind.CLOSE, streamId: streamId }); delete self.streamSinks[streamId]; }, error: function error(reason) { (0, _util.assert)(reason instanceof Error, "error must have a valid reason"); if (this.isCancelled) { return; } this.isCancelled = true; comObj.postMessage({ sourceName: sourceName, targetName: targetName, stream: StreamKind.ERROR, streamId: streamId, reason: wrapReason(reason) }); }, sinkCapability: (0, _util.createPromiseCapability)(), onPull: null, onCancel: null, isCancelled: false, desiredSize: data.desiredSize, ready: null }; streamSink.sinkCapability.resolve(); streamSink.ready = streamSink.sinkCapability.promise; this.streamSinks[streamId] = streamSink; new Promise(function (resolve) { resolve(action(data.data, streamSink)); }).then(function () { comObj.postMessage({ sourceName: sourceName, targetName: targetName, stream: StreamKind.START_COMPLETE, streamId: streamId, success: true }); }, function (reason) { comObj.postMessage({ sourceName: sourceName, targetName: targetName, stream: StreamKind.START_COMPLETE, streamId: streamId, reason: wrapReason(reason) }); }); } }, { key: "_processStreamMessage", value: function _processStreamMessage(data) { var streamId = data.streamId; var sourceName = this.sourceName; var targetName = data.sourceName; var comObj = this.comObj; switch (data.stream) { case StreamKind.START_COMPLETE: if (data.success) { this.streamControllers[streamId].startCall.resolve(); } else { this.streamControllers[streamId].startCall.reject(wrapReason(data.reason)); } break; case StreamKind.PULL_COMPLETE: if (data.success) { this.streamControllers[streamId].pullCall.resolve(); } else { this.streamControllers[streamId].pullCall.reject(wrapReason(data.reason)); } break; case StreamKind.PULL: if (!this.streamSinks[streamId]) { comObj.postMessage({ sourceName: sourceName, targetName: targetName, stream: StreamKind.PULL_COMPLETE, streamId: streamId, success: true }); break; } if (this.streamSinks[streamId].desiredSize <= 0 && data.desiredSize > 0) { this.streamSinks[streamId].sinkCapability.resolve(); } this.streamSinks[streamId].desiredSize = data.desiredSize; var onPull = this.streamSinks[data.streamId].onPull; new Promise(function (resolve) { resolve(onPull && onPull()); }).then(function () { comObj.postMessage({ sourceName: sourceName, targetName: targetName, stream: StreamKind.PULL_COMPLETE, streamId: streamId, success: true }); }, function (reason) { comObj.postMessage({ sourceName: sourceName, targetName: targetName, stream: StreamKind.PULL_COMPLETE, streamId: streamId, reason: wrapReason(reason) }); }); break; case StreamKind.ENQUEUE: (0, _util.assert)(this.streamControllers[streamId], "enqueue should have stream controller"); if (this.streamControllers[streamId].isClosed) { break; } this.streamControllers[streamId].controller.enqueue(data.chunk); break; case StreamKind.CLOSE: (0, _util.assert)(this.streamControllers[streamId], "close should have stream controller"); if (this.streamControllers[streamId].isClosed) { break; } this.streamControllers[streamId].isClosed = true; this.streamControllers[streamId].controller.close(); this._deleteStreamController(streamId); break; case StreamKind.ERROR: (0, _util.assert)(this.streamControllers[streamId], "error should have stream controller"); this.streamControllers[streamId].controller.error(wrapReason(data.reason)); this._deleteStreamController(streamId); break; case StreamKind.CANCEL_COMPLETE: if (data.success) { this.streamControllers[streamId].cancelCall.resolve(); } else { this.streamControllers[streamId].cancelCall.reject(wrapReason(data.reason)); } this._deleteStreamController(streamId); break; case StreamKind.CANCEL: if (!this.streamSinks[streamId]) { break; } var onCancel = this.streamSinks[data.streamId].onCancel; new Promise(function (resolve) { resolve(onCancel && onCancel(wrapReason(data.reason))); }).then(function () { comObj.postMessage({ sourceName: sourceName, targetName: targetName, stream: StreamKind.CANCEL_COMPLETE, streamId: streamId, success: true }); }, function (reason) { comObj.postMessage({ sourceName: sourceName, targetName: targetName, stream: StreamKind.CANCEL_COMPLETE, streamId: streamId, reason: wrapReason(reason) }); }); this.streamSinks[streamId].sinkCapability.reject(wrapReason(data.reason)); this.streamSinks[streamId].isCancelled = true; delete this.streamSinks[streamId]; break; default: throw new Error("Unexpected stream case"); } } }, { key: "_deleteStreamController", value: function () { var _deleteStreamController2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(streamId) { return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return Promise.allSettled([this.streamControllers[streamId].startCall, this.streamControllers[streamId].pullCall, this.streamControllers[streamId].cancelCall].map(function (capability) { return capability && capability.promise; })); case 2: delete this.streamControllers[streamId]; case 3: case "end": return _context.stop(); } } }, _callee, this); })); function _deleteStreamController(_x) { return _deleteStreamController2.apply(this, arguments); } return _deleteStreamController; }() }, { key: "_postMessage", value: function _postMessage(message, transfers) { if (transfers && this.postMessageTransfers) { this.comObj.postMessage(message, transfers); } else { this.comObj.postMessage(message); } } }, { key: "destroy", value: function destroy() { this.comObj.removeEventListener("message", this._onComObjOnMessage); } }]); return MessageHandler; }(); exports.MessageHandler = MessageHandler; /***/ }), /* 179 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFWorkerStream = void 0; var _regenerator = _interopRequireDefault(__w_pdfjs_require__(2)); var _util = __w_pdfjs_require__(4); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var PDFWorkerStream = /*#__PURE__*/function () { function PDFWorkerStream(msgHandler) { _classCallCheck(this, PDFWorkerStream); this._msgHandler = msgHandler; this._contentLength = null; this._fullRequestReader = null; this._rangeRequestReaders = []; } _createClass(PDFWorkerStream, [{ key: "getFullReader", value: function getFullReader() { (0, _util.assert)(!this._fullRequestReader, "PDFWorkerStream.getFullReader can only be called once."); this._fullRequestReader = new PDFWorkerStreamReader(this._msgHandler); return this._fullRequestReader; } }, { key: "getRangeReader", value: function getRangeReader(begin, end) { var reader = new PDFWorkerStreamRangeReader(begin, end, this._msgHandler); this._rangeRequestReaders.push(reader); return reader; } }, { key: "cancelAllRequests", value: function cancelAllRequests(reason) { if (this._fullRequestReader) { this._fullRequestReader.cancel(reason); } var readers = this._rangeRequestReaders.slice(0); readers.forEach(function (reader) { reader.cancel(reason); }); } }]); return PDFWorkerStream; }(); exports.PDFWorkerStream = PDFWorkerStream; var PDFWorkerStreamReader = /*#__PURE__*/function () { function PDFWorkerStreamReader(msgHandler) { var _this = this; _classCallCheck(this, PDFWorkerStreamReader); this._msgHandler = msgHandler; this.onProgress = null; this._contentLength = null; this._isRangeSupported = false; this._isStreamingSupported = false; var readableStream = this._msgHandler.sendWithStream("GetReader"); this._reader = readableStream.getReader(); this._headersReady = this._msgHandler.sendWithPromise("ReaderHeadersReady").then(function (data) { _this._isStreamingSupported = data.isStreamingSupported; _this._isRangeSupported = data.isRangeSupported; _this._contentLength = data.contentLength; }); } _createClass(PDFWorkerStreamReader, [{ key: "headersReady", get: function get() { return this._headersReady; } }, { key: "contentLength", get: function get() { return this._contentLength; } }, { key: "isStreamingSupported", get: function get() { return this._isStreamingSupported; } }, { key: "isRangeSupported", get: function get() { return this._isRangeSupported; } }, { key: "read", value: function () { var _read = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() { var _yield$this$_reader$r, value, done; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return this._reader.read(); case 2: _yield$this$_reader$r = _context.sent; value = _yield$this$_reader$r.value; done = _yield$this$_reader$r.done; if (!done) { _context.next = 7; break; } return _context.abrupt("return", { value: undefined, done: true }); case 7: return _context.abrupt("return", { value: value.buffer, done: false }); case 8: case "end": return _context.stop(); } } }, _callee, this); })); function read() { return _read.apply(this, arguments); } return read; }() }, { key: "cancel", value: function cancel(reason) { this._reader.cancel(reason); } }]); return PDFWorkerStreamReader; }(); var PDFWorkerStreamRangeReader = /*#__PURE__*/function () { function PDFWorkerStreamRangeReader(begin, end, msgHandler) { _classCallCheck(this, PDFWorkerStreamRangeReader); this._msgHandler = msgHandler; this.onProgress = null; var readableStream = this._msgHandler.sendWithStream("GetRangeReader", { begin: begin, end: end }); this._reader = readableStream.getReader(); } _createClass(PDFWorkerStreamRangeReader, [{ key: "isStreamingSupported", get: function get() { return false; } }, { key: "read", value: function () { var _read2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { var _yield$this$_reader$r2, value, done; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return this._reader.read(); case 2: _yield$this$_reader$r2 = _context2.sent; value = _yield$this$_reader$r2.value; done = _yield$this$_reader$r2.done; if (!done) { _context2.next = 7; break; } return _context2.abrupt("return", { value: undefined, done: true }); case 7: return _context2.abrupt("return", { value: value.buffer, done: false }); case 8: case "end": return _context2.stop(); } } }, _callee2, this); })); function read() { return _read2.apply(this, arguments); } return read; }() }, { key: "cancel", value: function cancel(reason) { this._reader.cancel(reason); } }]); return PDFWorkerStreamRangeReader; }(); /***/ }) /******/ ]); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __w_pdfjs_require__(moduleId) { /******/ // Check if module is in cache /******/ if(__webpack_module_cache__[moduleId]) { /******/ return __webpack_module_cache__[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ id: moduleId, /******/ loaded: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __w_pdfjs_require__); /******/ /******/ // Flag the module as loaded /******/ module.loaded = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/define property getters */ /******/ (() => { /******/ // define getter functions for harmony exports /******/ __w_pdfjs_require__.d = (exports, definition) => { /******/ for(var key in definition) { /******/ if(__w_pdfjs_require__.o(definition, key) && !__w_pdfjs_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ (() => { /******/ __w_pdfjs_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) /******/ })(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ (() => { /******/ // define __esModule on exports /******/ __w_pdfjs_require__.r = (exports) => { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/node module decorator */ /******/ (() => { /******/ __w_pdfjs_require__.nmd = (module) => { /******/ module.paths = []; /******/ if (!module.children) module.children = []; /******/ return module; /******/ }; /******/ })(); /******/ /************************************************************************/ /******/ // module exports must be returned from runtime so entry inlining is disabled /******/ // startup /******/ // Load entry module and return exports /******/ return __w_pdfjs_require__(0); /******/ })() ; }); //# sourceMappingURL=pdf.worker.js.map ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/viewer.css ================================================ /* Copyright 2014 Mozilla Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ .textLayer { position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: hidden; opacity: 0.2; line-height: 1; } .textLayer > span { color: transparent; position: absolute; white-space: pre; cursor: text; transform-origin: 0% 0%; } .textLayer .highlight { margin: -1px; padding: 1px; background-color: rgba(180, 0, 170, 1); border-radius: 4px; } .textLayer .highlight.begin { border-radius: 4px 0 0 4px; } .textLayer .highlight.end { border-radius: 0 4px 4px 0; } .textLayer .highlight.middle { border-radius: 0; } .textLayer .highlight.selected { background-color: rgba(0, 100, 0, 1); } .textLayer ::-moz-selection { background: rgba(0, 0, 255, 1); } .textLayer ::selection { background: rgba(0, 0, 255, 1); } .textLayer .endOfContent { display: block; position: absolute; left: 0; top: 100%; right: 0; bottom: 0; z-index: -1; cursor: default; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .textLayer .endOfContent.active { top: 0; } .annotationLayer section { position: absolute; text-align: initial; } .annotationLayer .linkAnnotation > a, .annotationLayer .buttonWidgetAnnotation.pushButton > a { position: absolute; font-size: 1em; top: 0; left: 0; width: 100%; height: 100%; } .annotationLayer .linkAnnotation > a:hover, .annotationLayer .buttonWidgetAnnotation.pushButton > a:hover { opacity: 0.2; background: rgba(255, 255, 0, 1); box-shadow: 0 2px 10px rgba(255, 255, 0, 1); } .annotationLayer .textAnnotation img { position: absolute; cursor: pointer; } .annotationLayer .textWidgetAnnotation input, .annotationLayer .textWidgetAnnotation textarea, .annotationLayer .choiceWidgetAnnotation select, .annotationLayer .buttonWidgetAnnotation.checkBox input, .annotationLayer .buttonWidgetAnnotation.radioButton input { background-color: rgba(0, 54, 255, 0.13); border: 1px solid transparent; box-sizing: border-box; font-size: 9px; height: 100%; margin: 0; padding: 0 3px; vertical-align: top; width: 100%; } .annotationLayer .choiceWidgetAnnotation select option { padding: 0; } .annotationLayer .buttonWidgetAnnotation.radioButton input { border-radius: 50%; } .annotationLayer .textWidgetAnnotation textarea { font: message-box; font-size: 9px; resize: none; } .annotationLayer .textWidgetAnnotation input[disabled], .annotationLayer .textWidgetAnnotation textarea[disabled], .annotationLayer .choiceWidgetAnnotation select[disabled], .annotationLayer .buttonWidgetAnnotation.checkBox input[disabled], .annotationLayer .buttonWidgetAnnotation.radioButton input[disabled] { background: none; border: 1px solid transparent; cursor: not-allowed; } .annotationLayer .textWidgetAnnotation input:hover, .annotationLayer .textWidgetAnnotation textarea:hover, .annotationLayer .choiceWidgetAnnotation select:hover, .annotationLayer .buttonWidgetAnnotation.checkBox input:hover, .annotationLayer .buttonWidgetAnnotation.radioButton input:hover { border: 1px solid rgba(0, 0, 0, 1); } .annotationLayer .textWidgetAnnotation input:focus, .annotationLayer .textWidgetAnnotation textarea:focus, .annotationLayer .choiceWidgetAnnotation select:focus { background: none; border: 1px solid transparent; } .annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before, .annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after, .annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before { background-color: rgba(0, 0, 0, 1); content: ""; display: block; position: absolute; } .annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before, .annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after { height: 80%; left: 45%; width: 1px; } .annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before { transform: rotate(45deg); } .annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after { transform: rotate(-45deg); } .annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before { border-radius: 50%; height: 50%; left: 30%; top: 20%; width: 50%; } .annotationLayer .textWidgetAnnotation input.comb { font-family: monospace; padding-left: 2px; padding-right: 0; } .annotationLayer .textWidgetAnnotation input.comb:focus { /* * Letter spacing is placed on the right side of each character. Hence, the * letter spacing of the last character may be placed outside the visible * area, causing horizontal scrolling. We avoid this by extending the width * when the element has focus and revert this when it loses focus. */ width: 115%; } .annotationLayer .buttonWidgetAnnotation.checkBox input, .annotationLayer .buttonWidgetAnnotation.radioButton input { -webkit-appearance: none; -moz-appearance: none; appearance: none; padding: 0; } .annotationLayer .popupWrapper { position: absolute; width: 20em; } .annotationLayer .popup { position: absolute; z-index: 200; max-width: 20em; background-color: rgba(255, 255, 153, 1); box-shadow: 0 2px 5px rgba(136, 136, 136, 1); border-radius: 2px; padding: 6px; margin-left: 5px; cursor: pointer; font: message-box; font-size: 9px; white-space: normal; word-wrap: break-word; } .annotationLayer .popup > * { font-size: 9px; } .annotationLayer .popup h1 { display: inline-block; } .annotationLayer .popup span { display: inline-block; margin-left: 5px; } .annotationLayer .popup p { border-top: 1px solid rgba(51, 51, 51, 1); margin-top: 2px; padding-top: 2px; } .annotationLayer .highlightAnnotation, .annotationLayer .underlineAnnotation, .annotationLayer .squigglyAnnotation, .annotationLayer .strikeoutAnnotation, .annotationLayer .freeTextAnnotation, .annotationLayer .lineAnnotation svg line, .annotationLayer .squareAnnotation svg rect, .annotationLayer .circleAnnotation svg ellipse, .annotationLayer .polylineAnnotation svg polyline, .annotationLayer .polygonAnnotation svg polygon, .annotationLayer .caretAnnotation, .annotationLayer .inkAnnotation svg polyline, .annotationLayer .stampAnnotation, .annotationLayer .fileAttachmentAnnotation { cursor: pointer; } .pdfViewer .canvasWrapper { overflow: hidden; } .pdfViewer .page { direction: ltr; width: 816px; height: 1056px; margin: 1px auto -8px; position: relative; overflow: visible; border: 9px solid transparent; background-clip: content-box; -o-border-image: url(images/shadow.png) 9 9 repeat; border-image: url(images/shadow.png) 9 9 repeat; background-color: rgba(255, 255, 255, 1); } .pdfViewer.removePageBorders .page { margin: 0 auto 10px; border: none; } .pdfViewer.singlePageView { display: inline-block; } .pdfViewer.singlePageView .page { margin: 0; border: none; } .pdfViewer.scrollHorizontal, .pdfViewer.scrollWrapped, .spread { margin-left: 3.5px; margin-right: 3.5px; text-align: center; } .pdfViewer.scrollHorizontal, .spread { white-space: nowrap; } .pdfViewer.removePageBorders, .pdfViewer.scrollHorizontal .spread, .pdfViewer.scrollWrapped .spread { margin-left: 0; margin-right: 0; } .spread .page, .pdfViewer.scrollHorizontal .page, .pdfViewer.scrollWrapped .page, .pdfViewer.scrollHorizontal .spread, .pdfViewer.scrollWrapped .spread { display: inline-block; vertical-align: middle; } .spread .page, .pdfViewer.scrollHorizontal .page, .pdfViewer.scrollWrapped .page { margin-left: -3.5px; margin-right: -3.5px; } .pdfViewer.removePageBorders .spread .page, .pdfViewer.removePageBorders.scrollHorizontal .page, .pdfViewer.removePageBorders.scrollWrapped .page { margin-left: 5px; margin-right: 5px; } .pdfViewer .page canvas { margin: 0; display: block; } .pdfViewer .page canvas[hidden] { display: none; } .pdfViewer .page .loadingIcon { position: absolute; display: block; left: 0; top: 0; right: 0; bottom: 0; background: url("images/loading-icon.gif") center no-repeat; } .pdfPresentationMode .pdfViewer { margin-left: 0; margin-right: 0; } .pdfPresentationMode .pdfViewer .page, .pdfPresentationMode .pdfViewer .spread { display: block; } .pdfPresentationMode .pdfViewer .page, .pdfPresentationMode .pdfViewer.removePageBorders .page { margin-left: auto; margin-right: auto; } .pdfPresentationMode:-webkit-full-screen .pdfViewer .page { margin-bottom: 100%; border: 0; } .pdfPresentationMode:-moz-full-screen .pdfViewer .page { margin-bottom: 100%; border: 0; } .pdfPresentationMode:fullscreen .pdfViewer .page { margin-bottom: 100%; border: 0; } :root { --sidebar-width: 200px; --sidebar-transition-duration: 200ms; --sidebar-transition-timing-function: ease; --loadingBar-end-offset: 0; --toolbar-icon-opacity: 0.7; --doorhanger-icon-opacity: 0.9; --main-color: rgba(12, 12, 13, 1); --body-bg-color: rgba(237, 237, 240, 1); --errorWrapper-bg-color: rgba(255, 74, 74, 1); --progressBar-color: rgba(10, 132, 255, 1); --progressBar-indeterminate-bg-color: rgba(221, 221, 222, 1); --progressBar-indeterminate-blend-color: rgba(116, 177, 239, 1); --scrollbar-color: auto; --scrollbar-bg-color: auto; --toolbar-icon-bg-color: rgba(0, 0, 0, 1); --sidebar-bg-color: rgba(245, 246, 247, 1); --toolbar-bg-color: rgba(249, 249, 250, 1); --toolbar-border-color: rgba(204, 204, 204, 1); --button-hover-color: rgba(221, 222, 223, 1); --toggled-btn-bg-color: rgba(0, 0, 0, 0.3); --toggled-hover-active-btn-color: rgba(0, 0, 0, 0.4); --dropdown-btn-bg-color: rgba(215, 215, 219, 1); --separator-color: rgba(0, 0, 0, 0.3); --field-color: rgba(6, 6, 6, 1); --field-bg-color: rgba(255, 255, 255, 1); --field-border-color: rgba(187, 187, 188, 1); --findbar-nextprevious-btn-bg-color: rgba(227, 228, 230, 1); --treeitem-color: rgba(0, 0, 0, 0.8); --treeitem-hover-color: rgba(0, 0, 0, 0.9); --treeitem-selected-color: rgba(0, 0, 0, 0.9); --treeitem-selected-bg-color: rgba(0, 0, 0, 0.25); --sidebaritem-bg-color: rgba(0, 0, 0, 0.15); --doorhanger-bg-color: rgba(255, 255, 255, 1); --doorhanger-border-color: rgba(12, 12, 13, 0.2); --doorhanger-hover-color: rgba(237, 237, 237, 1); --doorhanger-separator-color: rgba(222, 222, 222, 1); --overlay-button-bg-color: rgba(12, 12, 13, 0.1); --overlay-button-hover-color: rgba(12, 12, 13, 0.3); --loading-icon: url(images/loading.svg); --treeitem-expanded-icon: url(images/treeitem-expanded.svg); --treeitem-collapsed-icon: url(images/treeitem-collapsed.svg); --toolbarButton-menuArrow-icon: url(images/toolbarButton-menuArrow.svg); --toolbarButton-sidebarToggle-icon: url(images/toolbarButton-sidebarToggle.svg); --toolbarButton-secondaryToolbarToggle-icon: url(images/toolbarButton-secondaryToolbarToggle.svg); --toolbarButton-pageUp-icon: url(images/toolbarButton-pageUp.svg); --toolbarButton-pageDown-icon: url(images/toolbarButton-pageDown.svg); --toolbarButton-zoomOut-icon: url(images/toolbarButton-zoomOut.svg); --toolbarButton-zoomIn-icon: url(images/toolbarButton-zoomIn.svg); --toolbarButton-presentationMode-icon: url(images/toolbarButton-presentationMode.svg); --toolbarButton-print-icon: url(images/toolbarButton-print.svg); --toolbarButton-openFile-icon: url(images/toolbarButton-openFile.svg); --toolbarButton-download-icon: url(images/toolbarButton-download.svg); --toolbarButton-bookmark-icon: url(images/toolbarButton-bookmark.svg); --toolbarButton-viewThumbnail-icon: url(images/toolbarButton-viewThumbnail.svg); --toolbarButton-viewOutline-icon: url(images/toolbarButton-viewOutline.svg); --toolbarButton-viewAttachments-icon: url(images/toolbarButton-viewAttachments.svg); --toolbarButton-viewLayers-icon: url(images/toolbarButton-viewLayers.svg); --toolbarButton-currentOutlineItem-icon: url(images/toolbarButton-currentOutlineItem.svg); --toolbarButton-search-icon: url(images/toolbarButton-search.svg); --findbarButton-previous-icon: url(images/findbarButton-previous.svg); --findbarButton-next-icon: url(images/findbarButton-next.svg); --secondaryToolbarButton-firstPage-icon: url(images/secondaryToolbarButton-firstPage.svg); --secondaryToolbarButton-lastPage-icon: url(images/secondaryToolbarButton-lastPage.svg); --secondaryToolbarButton-rotateCcw-icon: url(images/secondaryToolbarButton-rotateCcw.svg); --secondaryToolbarButton-rotateCw-icon: url(images/secondaryToolbarButton-rotateCw.svg); --secondaryToolbarButton-selectTool-icon: url(images/secondaryToolbarButton-selectTool.svg); --secondaryToolbarButton-handTool-icon: url(images/secondaryToolbarButton-handTool.svg); --secondaryToolbarButton-scrollVertical-icon: url(images/secondaryToolbarButton-scrollVertical.svg); --secondaryToolbarButton-scrollHorizontal-icon: url(images/secondaryToolbarButton-scrollHorizontal.svg); --secondaryToolbarButton-scrollWrapped-icon: url(images/secondaryToolbarButton-scrollWrapped.svg); --secondaryToolbarButton-spreadNone-icon: url(images/secondaryToolbarButton-spreadNone.svg); --secondaryToolbarButton-spreadOdd-icon: url(images/secondaryToolbarButton-spreadOdd.svg); --secondaryToolbarButton-spreadEven-icon: url(images/secondaryToolbarButton-spreadEven.svg); --secondaryToolbarButton-documentProperties-icon: url(images/secondaryToolbarButton-documentProperties.svg); } @media (prefers-color-scheme: dark) { :root { --main-color: rgba(249, 249, 250, 1); --body-bg-color: rgba(42, 42, 46, 1); --errorWrapper-bg-color: rgba(199, 17, 17, 1); --progressBar-color: rgba(0, 96, 223, 1); --progressBar-indeterminate-bg-color: rgba(40, 40, 43, 1); --progressBar-indeterminate-blend-color: rgba(20, 68, 133, 1); --scrollbar-color: rgba(121, 121, 123, 1); --scrollbar-bg-color: rgba(35, 35, 39, 1); --toolbar-icon-bg-color: rgba(255, 255, 255, 1); --sidebar-bg-color: rgba(50, 50, 52, 1); --toolbar-bg-color: rgba(56, 56, 61, 1); --toolbar-border-color: rgba(12, 12, 13, 1); --button-hover-color: rgba(102, 102, 103, 1); --toggled-btn-bg-color: rgba(0, 0, 0, 0.3); --toggled-hover-active-btn-color: rgba(0, 0, 0, 0.4); --dropdown-btn-bg-color: rgba(74, 74, 79, 1); --separator-color: rgba(0, 0, 0, 0.3); --field-color: rgba(250, 250, 250, 1); --field-bg-color: rgba(64, 64, 68, 1); --field-border-color: rgba(115, 115, 115, 1); --findbar-nextprevious-btn-bg-color: rgba(89, 89, 89, 1); --treeitem-color: rgba(255, 255, 255, 0.8); --treeitem-hover-color: rgba(255, 255, 255, 0.9); --treeitem-selected-color: rgba(255, 255, 255, 0.9); --treeitem-selected-bg-color: rgba(255, 255, 255, 0.25); --sidebaritem-bg-color: rgba(255, 255, 255, 0.15); --doorhanger-bg-color: rgba(74, 74, 79, 1); --doorhanger-border-color: rgba(39, 39, 43, 1); --doorhanger-hover-color: rgba(93, 94, 98, 1); --doorhanger-separator-color: rgba(92, 92, 97, 1); --overlay-button-bg-color: rgba(92, 92, 97, 1); --overlay-button-hover-color: rgba(115, 115, 115, 1); /* This image is used in elements, which unfortunately means that * the `mask-image` approach used with all of the other images doesn't work * here; hence why we still have two versions of this particular image. */ --loading-icon: url(images/loading-dark.svg); } } * { padding: 0; margin: 0; } html { height: 100%; width: 100%; /* Font size is needed to make the activity bar the correct size. */ font-size: 10px; } body { height: 100%; width: 100%; background-color: var(--body-bg-color); } body, input, button, select { font: message-box; outline: none; scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color); } .hidden { display: none !important; } [hidden] { display: none !important; } .pdfViewer.enablePermissions .textLayer > span { -webkit-user-select: none !important; -moz-user-select: none !important; user-select: none !important; cursor: not-allowed; } #viewerContainer.pdfPresentationMode:-webkit-full-screen { top: 0; border-top: 2px solid rgba(0, 0, 0, 0); background-color: rgba(0, 0, 0, 1); width: 100%; height: 100%; overflow: hidden; cursor: none; -webkit-user-select: none; user-select: none; } #viewerContainer.pdfPresentationMode:-moz-full-screen { top: 0; border-top: 2px solid rgba(0, 0, 0, 0); background-color: rgba(0, 0, 0, 1); width: 100%; height: 100%; overflow: hidden; cursor: none; -moz-user-select: none; user-select: none; } #viewerContainer.pdfPresentationMode:fullscreen { top: 0; border-top: 2px solid rgba(0, 0, 0, 0); background-color: rgba(0, 0, 0, 1); width: 100%; height: 100%; overflow: hidden; cursor: none; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .pdfPresentationMode:-webkit-full-screen a:not(.internalLink) { display: none; } .pdfPresentationMode:-moz-full-screen a:not(.internalLink) { display: none; } .pdfPresentationMode:fullscreen a:not(.internalLink) { display: none; } .pdfPresentationMode:-webkit-full-screen .textLayer > span { cursor: none; } .pdfPresentationMode:-moz-full-screen .textLayer > span { cursor: none; } .pdfPresentationMode:fullscreen .textLayer > span { cursor: none; } .pdfPresentationMode.pdfPresentationModeControls > *, .pdfPresentationMode.pdfPresentationModeControls .textLayer > span { cursor: default; } #outerContainer { width: 100%; height: 100%; position: relative; } #sidebarContainer { position: absolute; top: 32px; bottom: 0; width: var(--sidebar-width); visibility: hidden; z-index: 100; border-top: 1px solid rgba(51, 51, 51, 1); transition-duration: var(--sidebar-transition-duration); transition-timing-function: var(--sidebar-transition-timing-function); } html[dir="ltr"] #sidebarContainer { transition-property: left; left: calc(0px - var(--sidebar-width)); } html[dir="rtl"] #sidebarContainer { transition-property: right; right: calc(0px - var(--sidebar-width)); } #outerContainer.sidebarResizing #sidebarContainer { /* Improve responsiveness and avoid visual glitches when the sidebar is resized. */ transition-duration: 0s; /* Prevent e.g. the thumbnails being selected when the sidebar is resized. */ -webkit-user-select: none; -moz-user-select: none; user-select: none; } #outerContainer.sidebarMoving #sidebarContainer, #outerContainer.sidebarOpen #sidebarContainer { visibility: visible; } html[dir="ltr"] #outerContainer.sidebarOpen #sidebarContainer { left: 0; } html[dir="rtl"] #outerContainer.sidebarOpen #sidebarContainer { right: 0; } #mainContainer { position: absolute; top: 0; right: 0; bottom: 0; left: 0; min-width: 320px; } #sidebarContent { top: 32px; bottom: 0; overflow: auto; -webkit-overflow-scrolling: touch; position: absolute; width: 100%; background-color: rgba(0, 0, 0, 0.1); } html[dir="ltr"] #sidebarContent { left: 0; box-shadow: inset -1px 0 0 rgba(0, 0, 0, 0.25); } html[dir="rtl"] #sidebarContent { right: 0; box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.25); } #viewerContainer { overflow: auto; -webkit-overflow-scrolling: touch; position: absolute; top: 32px; right: 0; bottom: 0; left: 0; outline: none; } #viewerContainer:not(.pdfPresentationMode) { transition-duration: var(--sidebar-transition-duration); transition-timing-function: var(--sidebar-transition-timing-function); } #outerContainer.sidebarResizing #viewerContainer { /* Improve responsiveness and avoid visual glitches when the sidebar is resized. */ transition-duration: 0s; } html[dir="ltr"] #outerContainer.sidebarOpen #viewerContainer:not(.pdfPresentationMode) { transition-property: left; left: var(--sidebar-width); } html[dir="rtl"] #outerContainer.sidebarOpen #viewerContainer:not(.pdfPresentationMode) { transition-property: right; right: var(--sidebar-width); } .toolbar { position: relative; left: 0; right: 0; z-index: 9999; cursor: default; } #toolbarContainer { width: 100%; } #toolbarSidebar { width: 100%; height: 32px; background-color: var(--sidebar-bg-color); } html[dir="ltr"] #toolbarSidebar { box-shadow: inset -1px 0 0 rgba(0, 0, 0, 0.25), 0 1px 0 rgba(0, 0, 0, 0.15), 0 0 1px rgba(0, 0, 0, 0.1); } html[dir="rtl"] #toolbarSidebar { box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.25), 0 1px 0 rgba(0, 0, 0, 0.15), 0 0 1px rgba(0, 0, 0, 0.1); } html[dir="ltr"] #toolbarSidebar .toolbarButton { margin-right: 2px !important; } html[dir="rtl"] #toolbarSidebar .toolbarButton { margin-left: 2px !important; } html[dir="ltr"] #toolbarSidebarRight .toolbarButton { margin-right: 3px !important; } html[dir="rtl"] #toolbarSidebarRight .toolbarButton { margin-left: 3px !important; } #sidebarResizer { position: absolute; top: 0; bottom: 0; width: 6px; z-index: 200; cursor: ew-resize; } html[dir="ltr"] #sidebarResizer { right: -6px; } html[dir="rtl"] #sidebarResizer { left: -6px; } #toolbarContainer, .findbar, .secondaryToolbar { position: relative; height: 32px; background-color: var(--toolbar-bg-color); box-shadow: 0 1px 0 var(--toolbar-border-color); } #toolbarViewer { height: 32px; } #loadingBar { position: absolute; height: 4px; background-color: var(--body-bg-color); border-bottom: 1px solid var(--toolbar-border-color); transition-duration: var(--sidebar-transition-duration); transition-timing-function: var(--sidebar-transition-timing-function); } html[dir="ltr"] #loadingBar { transition-property: left; left: 0; right: var(--loadingBar-end-offset); } html[dir="rtl"] #loadingBar { transition-property: right; left: var(--loadingBar-end-offset); right: 0; } html[dir="ltr"] #outerContainer.sidebarOpen #loadingBar { left: var(--sidebar-width); } html[dir="rtl"] #outerContainer.sidebarOpen #loadingBar { right: var(--sidebar-width); } #outerContainer.sidebarResizing #loadingBar { /* Improve responsiveness and avoid visual glitches when the sidebar is resized. */ transition-duration: 0s; } #loadingBar .progress { position: absolute; top: 0; left: 0; width: 0%; height: 100%; background-color: var(--progressBar-color); overflow: hidden; transition: width 200ms; } @-webkit-keyframes progressIndeterminate { 0% { left: -142px; } 100% { left: 0; } } @keyframes progressIndeterminate { 0% { left: -142px; } 100% { left: 0; } } #loadingBar .progress.indeterminate { background-color: var(--progressBar-indeterminate-bg-color); transition: none; } #loadingBar .progress.indeterminate .glimmer { position: absolute; top: 0; left: 0; height: 100%; width: calc(100% + 150px); background: repeating-linear-gradient( 135deg, var(--progressBar-indeterminate-blend-color) 0, var(--progressBar-indeterminate-bg-color) 5px, var(--progressBar-indeterminate-bg-color) 45px, var(--progressBar-color) 55px, var(--progressBar-color) 95px, var(--progressBar-indeterminate-blend-color) 100px ); -webkit-animation: progressIndeterminate 1s linear infinite; animation: progressIndeterminate 1s linear infinite; } .findbar, .secondaryToolbar { top: 32px; position: absolute; z-index: 10000; height: auto; min-width: 16px; padding: 0 4px; margin: 4px 2px; color: rgba(217, 217, 217, 1); font-size: 12px; line-height: 14px; text-align: left; cursor: default; } .findbar { min-width: 300px; background-color: var(--toolbar-bg-color); } .findbar > div { height: 32px; } .findbar.wrapContainers > div { clear: both; } .findbar.wrapContainers > div#findbarMessageContainer { height: auto; } html[dir="ltr"] .findbar { left: 64px; } html[dir="rtl"] .findbar { right: 64px; } .findbar .splitToolbarButton { margin-top: 3px; } html[dir="ltr"] .findbar .splitToolbarButton { margin-left: 0; margin-right: 5px; } html[dir="rtl"] .findbar .splitToolbarButton { margin-left: 5px; margin-right: 0; } .findbar .splitToolbarButton > .toolbarButton { background-color: var(--findbar-nextprevious-btn-bg-color); border-radius: 0; height: 26px; border-top: 1px solid var(--field-border-color); border-bottom: 1px solid var(--field-border-color); } .findbar .splitToolbarButton > .toolbarButton::before { top: 5px; } .findbar .splitToolbarButton > .findNext { width: 29px; } html[dir="ltr"] .findbar .splitToolbarButton > .findNext { border-bottom-right-radius: 2px; border-top-right-radius: 2px; border-right: 1px solid var(--field-border-color); } html[dir="rtl"] .findbar .splitToolbarButton > .findNext { border-bottom-left-radius: 2px; border-top-left-radius: 2px; border-left: 1px solid var(--field-border-color); } .findbar input[type="checkbox"] { pointer-events: none; } .findbar label { -webkit-user-select: none; -moz-user-select: none; user-select: none; } .findbar label:hover, .findbar input:focus + label { background-color: var(--button-hover-color); } html[dir="ltr"] #findInput { border-top-right-radius: 0; border-bottom-right-radius: 0; } html[dir="rtl"] #findInput { border-top-left-radius: 0; border-bottom-left-radius: 0; } .findbar .toolbarField[type="checkbox"]:checked + .toolbarLabel { background-color: var(--toggled-btn-bg-color) !important; } #findInput { width: 200px; } #findInput::-webkit-input-placeholder { color: rgba(191, 191, 191, 1); } #findInput::-moz-placeholder { font-style: normal; } #findInput::placeholder { font-style: normal; } #findInput[data-status="pending"] { background-image: var(--loading-icon); background-repeat: no-repeat; background-position: 98%; } html[dir="rtl"] #findInput[data-status="pending"] { background-position: 3px; } #findInput[data-status="notFound"] { background-color: rgba(255, 102, 102, 1); } .secondaryToolbar { padding: 6px 0 10px; height: auto; z-index: 30000; background-color: var(--doorhanger-bg-color); } html[dir="ltr"] .secondaryToolbar { right: 4px; } html[dir="rtl"] .secondaryToolbar { left: 4px; } #secondaryToolbarButtonContainer { max-width: 220px; max-height: 400px; overflow-y: auto; -webkit-overflow-scrolling: touch; margin-bottom: -4px; } #secondaryToolbarButtonContainer.hiddenScrollModeButtons > .scrollModeButtons, #secondaryToolbarButtonContainer.hiddenSpreadModeButtons > .spreadModeButtons { display: none !important; } .doorHanger, .doorHangerRight { border-radius: 2px; box-shadow: 0 1px 5px var(--doorhanger-border-color), 0 0 0 1px var(--doorhanger-border-color); } .doorHanger:after, .doorHanger:before, .doorHangerRight:after, .doorHangerRight:before { bottom: 100%; border: solid rgba(0, 0, 0, 0); content: " "; height: 0; width: 0; position: absolute; pointer-events: none; } .doorHanger:after, .doorHangerRight:after { border-width: 8px; } .doorHanger:after { border-bottom-color: var(--toolbar-bg-color); } .doorHangerRight:after { border-bottom-color: var(--doorhanger-bg-color); } .doorHanger:before, .doorHangerRight:before { border-bottom-color: var(--doorhanger-border-color); border-width: 9px; } html[dir="ltr"] .doorHanger:after, html[dir="rtl"] .doorHangerRight:after { left: 10px; margin-left: -8px; } html[dir="ltr"] .doorHanger:before, html[dir="rtl"] .doorHangerRight:before { left: 10px; margin-left: -9px; } html[dir="rtl"] .doorHanger:after, html[dir="ltr"] .doorHangerRight:after { right: 10px; margin-right: -8px; } html[dir="rtl"] .doorHanger:before, html[dir="ltr"] .doorHangerRight:before { right: 10px; margin-right: -9px; } #findResultsCount { background-color: rgba(217, 217, 217, 1); color: rgba(82, 82, 82, 1); text-align: center; padding: 3px 4px; margin: 5px; } #findMsg { color: rgba(251, 0, 0, 1); } #findMsg:empty { display: none; } #toolbarViewerMiddle { position: absolute; left: 50%; transform: translateX(-50%); } html[dir="ltr"] #toolbarViewerLeft, html[dir="rtl"] #toolbarViewerRight, html[dir="ltr"] #toolbarSidebarLeft, html[dir="rtl"] #toolbarSidebarRight { float: left; } html[dir="ltr"] #toolbarViewerRight, html[dir="rtl"] #toolbarViewerLeft, html[dir="ltr"] #toolbarSidebarRight, html[dir="rtl"] #toolbarSidebarLeft { float: right; } html[dir="ltr"] #toolbarViewerLeft > *, html[dir="ltr"] #toolbarViewerMiddle > *, html[dir="ltr"] #toolbarViewerRight > *, html[dir="ltr"] #toolbarSidebarLeft *, html[dir="ltr"] #toolbarSidebarRight *, html[dir="ltr"] .findbar * { position: relative; float: left; } html[dir="rtl"] #toolbarViewerLeft > *, html[dir="rtl"] #toolbarViewerMiddle > *, html[dir="rtl"] #toolbarViewerRight > *, html[dir="rtl"] #toolbarSidebarLeft *, html[dir="rtl"] #toolbarSidebarRight *, html[dir="rtl"] .findbar * { position: relative; float: right; } .splitToolbarButton { margin: 2px 2px 0; display: inline-block; } html[dir="ltr"] .splitToolbarButton > .toolbarButton { float: left; } html[dir="rtl"] .splitToolbarButton > .toolbarButton { float: right; } .toolbarButton, .secondaryToolbarButton, .overlayButton { border: 0 none; background: none; width: 28px; height: 28px; } .overlayButton { background-color: var(--overlay-button-bg-color); } .overlayButton:hover, .overlayButton:focus { background-color: var(--overlay-button-hover-color); } .toolbarButton > span { display: inline-block; width: 0; height: 0; overflow: hidden; } .toolbarButton[disabled], .secondaryToolbarButton[disabled], .overlayButton[disabled] { opacity: 0.5; } .splitToolbarButton.toggled .toolbarButton { margin: 0; } .splitToolbarButton > .toolbarButton:hover, .splitToolbarButton > .toolbarButton:focus, .dropdownToolbarButton:hover, .toolbarButton.textButton:hover, .toolbarButton.textButton:focus { background-color: var(--button-hover-color); z-index: 199; } .splitToolbarButton > .toolbarButton { position: relative; } html[dir="ltr"] .splitToolbarButton > .toolbarButton:first-child, html[dir="rtl"] .splitToolbarButton > .toolbarButton:last-child { margin: 0; } html[dir="ltr"] .splitToolbarButton > .toolbarButton:last-child, html[dir="rtl"] .splitToolbarButton > .toolbarButton:first-child { margin: 0; } .splitToolbarButtonSeparator { padding: 10px 0; width: 1px; background-color: var(--separator-color); z-index: 99; display: inline-block; margin: 4px 0; } .findbar .splitToolbarButtonSeparator { background-color: var(--field-border-color); margin: 0; padding: 13px 0; } html[dir="ltr"] .splitToolbarButtonSeparator { float: left; } html[dir="rtl"] .splitToolbarButtonSeparator { float: right; } .toolbarButton, .dropdownToolbarButton, .secondaryToolbarButton, .overlayButton { min-width: 16px; margin: 2px 1px; padding: 2px 6px 0; border: none; border-radius: 2px; color: var(--main-color); font-size: 12px; line-height: 14px; -webkit-user-select: none; -moz-user-select: none; user-select: none; cursor: default; box-sizing: border-box; } html[dir="ltr"] #toolbarViewerLeft > .toolbarButton:first-child, html[dir="rtl"] #toolbarViewerRight > .toolbarButton:last-child { margin-left: 2px; } html[dir="ltr"] #toolbarViewerRight > .toolbarButton:last-child, html[dir="rtl"] #toolbarViewerLeft > .toolbarButton:first-child { margin-right: 2px; } .toolbarButton:hover, .toolbarButton:focus { background-color: var(--button-hover-color); } .secondaryToolbarButton:hover, .secondaryToolbarButton:focus { background-color: var(--doorhanger-hover-color); } .toolbarButton.toggled, .splitToolbarButton.toggled > .toolbarButton.toggled, .secondaryToolbarButton.toggled { background-color: var(--toggled-btn-bg-color); } .toolbarButton.toggled:hover:active, .splitToolbarButton.toggled > .toolbarButton.toggled:hover:active, .secondaryToolbarButton.toggled:hover:active { background-color: var(--toggled-hover-active-btn-color); } .dropdownToolbarButton { width: 140px; padding: 0; overflow: hidden; background-color: var(--dropdown-btn-bg-color); margin-top: 2px !important; } .dropdownToolbarButton::after { top: 6px; pointer-events: none; -webkit-mask-image: var(--toolbarButton-menuArrow-icon); mask-image: var(--toolbarButton-menuArrow-icon); } html[dir="ltr"] .dropdownToolbarButton::after { right: 7px; } html[dir="rtl"] .dropdownToolbarButton::after { left: 7px; } .dropdownToolbarButton > select { width: 162px; height: 28px; font-size: 12px; color: var(--main-color); margin: 0; padding: 1px 0 2px; border: none; background-color: var(--dropdown-btn-bg-color); } html[dir="ltr"] .dropdownToolbarButton > select { padding-left: 4px; } html[dir="rtl"] .dropdownToolbarButton > select { padding-right: 4px; } .dropdownToolbarButton > select:hover { background-color: var(--button-hover-color); } .dropdownToolbarButton > select:focus { background-color: var(--button-hover-color); } .dropdownToolbarButton > select > option { background: var(--doorhanger-bg-color); } #customScaleOption { display: none; } #pageWidthOption { border-bottom: 1px rgba(255, 255, 255, 0.5) solid; } .toolbarButtonSpacer { width: 30px; display: inline-block; height: 1px; } .toolbarButton::before, .secondaryToolbarButton::before, .dropdownToolbarButton::after, .treeItemToggler::before { /* All matching images have a size of 16x16 * All relevant containers have a size of 28x28 */ position: absolute; display: inline-block; width: 16px; height: 16px; content: ""; background-color: var(--toolbar-icon-bg-color); -webkit-mask-size: cover; mask-size: cover; } .toolbarButton::before { opacity: var(--toolbar-icon-opacity); top: 6px; left: 6px; } .secondaryToolbarButton::before { opacity: var(--doorhanger-icon-opacity); top: 5px; } html[dir="ltr"] .secondaryToolbarButton::before { left: 12px; } html[dir="rtl"] .secondaryToolbarButton::before { right: 12px; } .toolbarButton#sidebarToggle::before { -webkit-mask-image: var(--toolbarButton-sidebarToggle-icon); mask-image: var(--toolbarButton-sidebarToggle-icon); } html[dir="rtl"] .toolbarButton#sidebarToggle::before { transform: scaleX(-1); } .toolbarButton#secondaryToolbarToggle::before { -webkit-mask-image: var(--toolbarButton-secondaryToolbarToggle-icon); mask-image: var(--toolbarButton-secondaryToolbarToggle-icon); } html[dir="rtl"] .toolbarButton#secondaryToolbarToggle::before { transform: scaleX(-1); } .toolbarButton.findPrevious::before { -webkit-mask-image: var(--findbarButton-previous-icon); mask-image: var(--findbarButton-previous-icon); } .toolbarButton.findNext::before { -webkit-mask-image: var(--findbarButton-next-icon); mask-image: var(--findbarButton-next-icon); } .toolbarButton.pageUp::before { -webkit-mask-image: var(--toolbarButton-pageUp-icon); mask-image: var(--toolbarButton-pageUp-icon); } .toolbarButton.pageDown::before { -webkit-mask-image: var(--toolbarButton-pageDown-icon); mask-image: var(--toolbarButton-pageDown-icon); } .toolbarButton.zoomOut::before { -webkit-mask-image: var(--toolbarButton-zoomOut-icon); mask-image: var(--toolbarButton-zoomOut-icon); } .toolbarButton.zoomIn::before { -webkit-mask-image: var(--toolbarButton-zoomIn-icon); mask-image: var(--toolbarButton-zoomIn-icon); } .toolbarButton.presentationMode::before, .secondaryToolbarButton.presentationMode::before { -webkit-mask-image: var(--toolbarButton-presentationMode-icon); mask-image: var(--toolbarButton-presentationMode-icon); } .toolbarButton.print::before, .secondaryToolbarButton.print::before { -webkit-mask-image: var(--toolbarButton-print-icon); mask-image: var(--toolbarButton-print-icon); } .toolbarButton.openFile::before, .secondaryToolbarButton.openFile::before { -webkit-mask-image: var(--toolbarButton-openFile-icon); mask-image: var(--toolbarButton-openFile-icon); } .toolbarButton.download::before, .secondaryToolbarButton.download::before { -webkit-mask-image: var(--toolbarButton-download-icon); mask-image: var(--toolbarButton-download-icon); } .secondaryToolbarButton.bookmark { padding-top: 6px; text-decoration: none; } .bookmark[href="#"] { opacity: 0.5; pointer-events: none; } .toolbarButton.bookmark::before, .secondaryToolbarButton.bookmark::before { -webkit-mask-image: var(--toolbarButton-bookmark-icon); mask-image: var(--toolbarButton-bookmark-icon); } #viewThumbnail.toolbarButton::before { -webkit-mask-image: var(--toolbarButton-viewThumbnail-icon); mask-image: var(--toolbarButton-viewThumbnail-icon); } #viewOutline.toolbarButton::before { -webkit-mask-image: var(--toolbarButton-viewOutline-icon); mask-image: var(--toolbarButton-viewOutline-icon); } html[dir="rtl"] #viewOutline.toolbarButton::before { transform: scaleX(-1); } #viewAttachments.toolbarButton::before { -webkit-mask-image: var(--toolbarButton-viewAttachments-icon); mask-image: var(--toolbarButton-viewAttachments-icon); } #viewLayers.toolbarButton::before { -webkit-mask-image: var(--toolbarButton-viewLayers-icon); mask-image: var(--toolbarButton-viewLayers-icon); } #currentOutlineItem.toolbarButton::before { -webkit-mask-image: var(--toolbarButton-currentOutlineItem-icon); mask-image: var(--toolbarButton-currentOutlineItem-icon); } html[dir="rtl"] #currentOutlineItem.toolbarButton::before { transform: scaleX(-1); } #viewFind.toolbarButton::before { -webkit-mask-image: var(--toolbarButton-search-icon); mask-image: var(--toolbarButton-search-icon); } .toolbarButton.pdfSidebarNotification::after { position: absolute; display: inline-block; top: 1px; /* Create a filled circle, with a diameter of 9 pixels, using only CSS: */ content: ""; background-color: rgba(112, 219, 85, 1); height: 9px; width: 9px; border-radius: 50%; } html[dir="ltr"] .toolbarButton.pdfSidebarNotification::after { left: 17px; } html[dir="rtl"] .toolbarButton.pdfSidebarNotification::after { right: 17px; } .secondaryToolbarButton { position: relative; margin: 0; padding: 0 0 1px; height: auto; min-height: 26px; width: auto; min-width: 100%; white-space: normal; border-radius: 0; box-sizing: border-box; } html[dir="ltr"] .secondaryToolbarButton { padding-left: 36px; text-align: left; } html[dir="rtl"] .secondaryToolbarButton { padding-right: 36px; text-align: right; } html[dir="ltr"] .secondaryToolbarButton > span { padding-right: 4px; } html[dir="rtl"] .secondaryToolbarButton > span { padding-left: 4px; } .secondaryToolbarButton.firstPage::before { -webkit-mask-image: var(--secondaryToolbarButton-firstPage-icon); mask-image: var(--secondaryToolbarButton-firstPage-icon); } .secondaryToolbarButton.lastPage::before { -webkit-mask-image: var(--secondaryToolbarButton-lastPage-icon); mask-image: var(--secondaryToolbarButton-lastPage-icon); } .secondaryToolbarButton.rotateCcw::before { -webkit-mask-image: var(--secondaryToolbarButton-rotateCcw-icon); mask-image: var(--secondaryToolbarButton-rotateCcw-icon); } .secondaryToolbarButton.rotateCw::before { -webkit-mask-image: var(--secondaryToolbarButton-rotateCw-icon); mask-image: var(--secondaryToolbarButton-rotateCw-icon); } .secondaryToolbarButton.selectTool::before { -webkit-mask-image: var(--secondaryToolbarButton-selectTool-icon); mask-image: var(--secondaryToolbarButton-selectTool-icon); } .secondaryToolbarButton.handTool::before { -webkit-mask-image: var(--secondaryToolbarButton-handTool-icon); mask-image: var(--secondaryToolbarButton-handTool-icon); } .secondaryToolbarButton.scrollVertical::before { -webkit-mask-image: var(--secondaryToolbarButton-scrollVertical-icon); mask-image: var(--secondaryToolbarButton-scrollVertical-icon); } .secondaryToolbarButton.scrollHorizontal::before { -webkit-mask-image: var(--secondaryToolbarButton-scrollHorizontal-icon); mask-image: var(--secondaryToolbarButton-scrollHorizontal-icon); } .secondaryToolbarButton.scrollWrapped::before { -webkit-mask-image: var(--secondaryToolbarButton-scrollWrapped-icon); mask-image: var(--secondaryToolbarButton-scrollWrapped-icon); } .secondaryToolbarButton.spreadNone::before { -webkit-mask-image: var(--secondaryToolbarButton-spreadNone-icon); mask-image: var(--secondaryToolbarButton-spreadNone-icon); } .secondaryToolbarButton.spreadOdd::before { -webkit-mask-image: var(--secondaryToolbarButton-spreadOdd-icon); mask-image: var(--secondaryToolbarButton-spreadOdd-icon); } .secondaryToolbarButton.spreadEven::before { -webkit-mask-image: var(--secondaryToolbarButton-spreadEven-icon); mask-image: var(--secondaryToolbarButton-spreadEven-icon); } .secondaryToolbarButton.documentProperties::before { -webkit-mask-image: var(--secondaryToolbarButton-documentProperties-icon); mask-image: var(--secondaryToolbarButton-documentProperties-icon); } .verticalToolbarSeparator { display: block; padding: 11px 0; margin: 5px 2px; width: 1px; background-color: var(--separator-color); } html[dir="ltr"] .verticalToolbarSeparator { margin-left: 2px; } html[dir="rtl"] .verticalToolbarSeparator { margin-right: 2px; } .horizontalToolbarSeparator { display: block; margin: 6px 0 5px; height: 1px; width: 100%; border-top: 1px solid var(--doorhanger-separator-color); } .toolbarField { padding: 4px 7px; margin: 3px 0; border-radius: 2px; background-color: var(--field-bg-color); background-clip: padding-box; border-width: 1px; border-style: solid; border-color: var(--field-border-color); box-shadow: none; color: var(--field-color); font-size: 12px; line-height: 16px; outline-style: none; } .toolbarField[type="checkbox"] { opacity: 0; position: absolute !important; left: 0; } html[dir="ltr"] .toolbarField[type="checkbox"] { margin: 10px 0 3px 7px; } html[dir="rtl"] .toolbarField[type="checkbox"] { margin: 10px 7px 3px 0; } .toolbarField.pageNumber { -moz-appearance: textfield; /* hides the spinner in moz */ min-width: 16px; text-align: right; width: 40px; } .toolbarField.pageNumber.visiblePageIsLoading { background-image: var(--loading-icon); background-repeat: no-repeat; background-position: 3px; } .toolbarField.pageNumber::-webkit-inner-spin-button, .toolbarField.pageNumber::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; } .toolbarField:focus { border-color: #0a84ff; } .toolbarLabel { min-width: 16px; padding: 6px; margin: 2px; border: 1px solid rgba(0, 0, 0, 0); border-radius: 2px; color: var(--main-color); font-size: 12px; line-height: 14px; text-align: left; -webkit-user-select: none; -moz-user-select: none; user-select: none; cursor: default; } html[dir="ltr"] #numPages.toolbarLabel { padding-left: 2px; } html[dir="rtl"] #numPages.toolbarLabel { padding-right: 2px; } #thumbnailView { position: absolute; width: calc(100% - 60px); top: 0; bottom: 0; padding: 10px 30px 0; overflow: auto; -webkit-overflow-scrolling: touch; } #thumbnailView > a:active, #thumbnailView > a:focus { outline: 0; } .thumbnail { margin: 0 10px 5px; } html[dir="ltr"] .thumbnail { float: left; } html[dir="rtl"] .thumbnail { float: right; } #thumbnailView > a:last-of-type > .thumbnail { margin-bottom: 10px; } #thumbnailView > a:last-of-type > .thumbnail:not([data-loaded]) { margin-bottom: 9px; } .thumbnail:not([data-loaded]) { border: 1px dashed rgba(132, 132, 132, 1); margin: -1px 9px 4px; } .thumbnailImage { border: 1px solid rgba(0, 0, 0, 0); box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.5), 0 2px 8px rgba(0, 0, 0, 0.3); opacity: 0.8; z-index: 99; background-color: rgba(255, 255, 255, 1); background-clip: content-box; } .thumbnailSelectionRing { border-radius: 2px; padding: 7px; } a:focus > .thumbnail > .thumbnailSelectionRing > .thumbnailImage, .thumbnail:hover > .thumbnailSelectionRing > .thumbnailImage { opacity: 0.9; } a:focus > .thumbnail > .thumbnailSelectionRing, .thumbnail:hover > .thumbnailSelectionRing { background-color: var(--sidebaritem-bg-color); background-clip: padding-box; color: rgba(255, 255, 255, 0.9); } .thumbnail.selected > .thumbnailSelectionRing > .thumbnailImage { opacity: 1; } .thumbnail.selected > .thumbnailSelectionRing { background-color: var(--sidebaritem-bg-color); background-clip: padding-box; color: rgba(255, 255, 255, 1); } #outlineView, #attachmentsView, #layersView { position: absolute; width: calc(100% - 8px); top: 0; bottom: 0; padding: 4px 4px 0; overflow: auto; -webkit-overflow-scrolling: touch; -webkit-user-select: none; -moz-user-select: none; user-select: none; } html[dir="ltr"] .treeWithDeepNesting > .treeItem, html[dir="ltr"] .treeItem > .treeItems { margin-left: 20px; } html[dir="rtl"] .treeWithDeepNesting > .treeItem, html[dir="rtl"] .treeItem > .treeItems { margin-right: 20px; } .treeItem > a { text-decoration: none; display: inline-block; min-width: 95%; /* Subtract the right padding (left, in RTL mode) of the container: */ min-width: calc(100% - 4px); height: auto; margin-bottom: 1px; border-radius: 2px; color: var(--treeitem-color); font-size: 13px; line-height: 15px; -webkit-user-select: none; -moz-user-select: none; user-select: none; white-space: normal; cursor: pointer; } html[dir="ltr"] .treeItem > a { padding: 2px 0 5px 4px; } html[dir="rtl"] .treeItem > a { padding: 2px 4px 5px 0; } #layersView .treeItem > a > * { cursor: pointer; } html[dir="ltr"] #layersView .treeItem > a > label { padding-left: 4px; } html[dir="rtl"] #layersView .treesItem > a > label { padding-right: 4px; } .treeItemToggler { position: relative; height: 0; width: 0; color: rgba(255, 255, 255, 0.5); } .treeItemToggler::before { -webkit-mask-image: var(--treeitem-expanded-icon); mask-image: var(--treeitem-expanded-icon); } .treeItemToggler.treeItemsHidden::before { -webkit-mask-image: var(--treeitem-collapsed-icon); mask-image: var(--treeitem-collapsed-icon); } html[dir="rtl"] .treeItemToggler.treeItemsHidden::before { transform: scaleX(-1); } .treeItemToggler.treeItemsHidden ~ .treeItems { display: none; } html[dir="ltr"] .treeItemToggler { float: left; } html[dir="rtl"] .treeItemToggler { float: right; } html[dir="ltr"] .treeItemToggler::before { right: 4px; } html[dir="rtl"] .treeItemToggler::before { left: 4px; } .treeItem.selected > a { background-color: var(--treeitem-selected-bg-color); color: var(--treeitem-selected-color); } .treeItemToggler:hover, .treeItemToggler:hover + a, .treeItemToggler:hover ~ .treeItems, .treeItem > a:hover { background-color: var(--sidebaritem-bg-color); background-clip: padding-box; border-radius: 2px; color: var(--treeitem-hover-color); } /* TODO: file FF bug to support ::-moz-selection:window-inactive so we can override the opaque grey background when the window is inactive; see https://bugzilla.mozilla.org/show_bug.cgi?id=706209 */ ::-moz-selection { background: rgba(0, 0, 255, 0.3); } ::selection { background: rgba(0, 0, 255, 0.3); } #errorWrapper { background: none repeat scroll 0 0 var(--errorWrapper-bg-color); color: var(--main-color); left: 0; position: absolute; right: 0; z-index: 1000; padding: 3px 6px; } #errorMessageLeft { float: left; } #errorMessageRight { float: right; } #errorMoreInfo { background-color: var(--field-bg-color); color: var(--field-color); border: 1px solid var(--field-border-color); padding: 3px; margin: 3px; width: 98%; } .overlayButton { width: auto; margin: 3px 4px 2px !important; padding: 2px 11px; } #overlayContainer { display: table; position: absolute; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.2); z-index: 40000; } #overlayContainer > * { overflow: auto; -webkit-overflow-scrolling: touch; } #overlayContainer > .container { display: table-cell; vertical-align: middle; text-align: center; } #overlayContainer > .container > .dialog { display: inline-block; padding: 15px; border-spacing: 4px; color: var(--main-color); font-size: 12px; line-height: 14px; background-color: var(--doorhanger-bg-color); border: 1px solid rgba(0, 0, 0, 0.5); border-radius: 4px; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); } .dialog > .row { display: table-row; } .dialog > .row > * { display: table-cell; } .dialog .toolbarField { margin: 5px 0; } .dialog .separator { display: block; margin: 4px 0; height: 1px; width: 100%; background-color: var(--separator-color); } .dialog .buttonRow { text-align: center; vertical-align: middle; } .dialog :link { color: rgba(255, 255, 255, 1); } #passwordOverlay > .dialog { text-align: center; } #passwordOverlay .toolbarField { width: 200px; } #documentPropertiesOverlay > .dialog { text-align: left; } #documentPropertiesOverlay .row > * { min-width: 100px; } html[dir="ltr"] #documentPropertiesOverlay .row > * { text-align: left; } html[dir="rtl"] #documentPropertiesOverlay .row > * { text-align: right; } #documentPropertiesOverlay .row > span { width: 125px; word-wrap: break-word; } #documentPropertiesOverlay .row > p { max-width: 225px; word-wrap: break-word; } #documentPropertiesOverlay .buttonRow { margin-top: 10px; } .clearBoth { clear: both; } .fileInput { background: rgba(255, 255, 255, 1); color: rgba(0, 0, 0, 1); margin-top: 5px; visibility: hidden; position: fixed; right: 0; top: 0; } #PDFBug { background: none repeat scroll 0 0 rgba(255, 255, 255, 1); border: 1px solid rgba(102, 102, 102, 1); position: fixed; top: 32px; right: 0; bottom: 0; font-size: 10px; padding: 0; width: 300px; } #PDFBug .controls { background: rgba(238, 238, 238, 1); border-bottom: 1px solid rgba(102, 102, 102, 1); padding: 3px; } #PDFBug .panels { bottom: 0; left: 0; overflow: auto; -webkit-overflow-scrolling: touch; position: absolute; right: 0; top: 27px; } #PDFBug .panels > div { padding: 5px; } #PDFBug button.active { font-weight: bold; } .debuggerShowText { background: none repeat scroll 0 0 rgba(255, 255, 0, 1); color: rgba(0, 0, 255, 1); } .debuggerHideText:hover { background: none repeat scroll 0 0 rgba(255, 255, 0, 1); } #PDFBug .stats { font-family: courier; font-size: 10px; white-space: pre; } #PDFBug .stats .title { font-weight: bold; } #PDFBug table { font-size: 10px; } #viewer.textLayer-visible .textLayer { opacity: 1; } #viewer.textLayer-visible .canvasWrapper { background-color: rgba(128, 255, 128, 1); } #viewer.textLayer-visible .canvasWrapper canvas { mix-blend-mode: screen; } #viewer.textLayer-visible .textLayer > span { background-color: rgba(255, 255, 0, 0.1); color: rgba(0, 0, 0, 1); border: solid 1px rgba(255, 0, 0, 0.5); box-sizing: border-box; } #viewer.textLayer-hover .textLayer > span:hover { background-color: rgba(255, 255, 255, 1); color: rgba(0, 0, 0, 1); } #viewer.textLayer-shadow .textLayer > span { background-color: rgba(255, 255, 255, 0.6); color: rgba(0, 0, 0, 1); } .grab-to-pan-grab { cursor: url("images/grab.cur"), move !important; cursor: -webkit-grab !important; cursor: grab !important; } .grab-to-pan-grab *:not(input):not(textarea):not(button):not(select):not(:link) { cursor: inherit !important; } .grab-to-pan-grab:active, .grab-to-pan-grabbing { cursor: url("images/grabbing.cur"), move !important; cursor: -webkit-grabbing !important; cursor: grabbing !important; position: fixed; background: rgba(0, 0, 0, 0); display: block; top: 0; left: 0; right: 0; bottom: 0; overflow: hidden; z-index: 50000; /* should be higher than anything else in PDF.js! */ } @page { margin: 0; } #printContainer { display: none; } @media print { /* General rules for printing. */ body { background: rgba(0, 0, 0, 0) none; } /* Rules for browsers that don't support mozPrintCallback. */ #sidebarContainer, #secondaryToolbar, .toolbar, #loadingBox, #errorWrapper, .textLayer { display: none; } #viewerContainer { overflow: visible; } #mainContainer, #viewerContainer, .page, .page canvas { position: static; padding: 0; margin: 0; } .page { float: left; display: none; border: none; box-shadow: none; background-clip: content-box; background-color: rgba(255, 255, 255, 1); } .page[data-loaded] { display: block; } .fileInput { display: none; } /* Rules for browsers that support PDF.js printing */ body[data-pdfjsprinting] #outerContainer { display: none; } body[data-pdfjsprinting] #printContainer { display: block; } #printContainer { height: 100%; } /* wrapper around (scaled) print canvas elements */ #printContainer > div { position: relative; top: 0; left: 0; width: 1px; height: 1px; overflow: visible; page-break-after: always; page-break-inside: avoid; } #printContainer canvas, #printContainer img { direction: ltr; display: block; } } .visibleLargeView, .visibleMediumView, .visibleSmallView { display: none; } @media all and (max-width: 900px) { #toolbarViewerMiddle { display: table; margin: auto; left: auto; position: inherit; transform: none; } } @media all and (max-width: 840px) { #sidebarContent { background-color: rgba(0, 0, 0, 0.7); } html[dir="ltr"] #outerContainer.sidebarOpen #viewerContainer { left: 0 !important; } html[dir="rtl"] #outerContainer.sidebarOpen #viewerContainer { right: 0 !important; } #outerContainer .hiddenLargeView, #outerContainer .hiddenMediumView { display: inherit; } #outerContainer .visibleLargeView, #outerContainer .visibleMediumView { display: none; } } @media all and (max-width: 770px) { #outerContainer .hiddenLargeView { display: none; } #outerContainer .visibleLargeView { display: inherit; } } @media all and (max-width: 700px) { #outerContainer .hiddenMediumView { display: none; } #outerContainer .visibleMediumView { display: inherit; } } @media all and (max-width: 640px) { .hiddenSmallView, .hiddenSmallView * { display: none; } .visibleSmallView { display: inherit; } .toolbarButtonSpacer { width: 0; } html[dir="ltr"] .findbar { left: 34px; } html[dir="rtl"] .findbar { right: 34px; } } @media all and (max-width: 535px) { #scaleSelectContainer { display: none; } } ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/viewer.html ================================================ PDF.js viewer
    Current View
    ================================================ FILE: projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/viewer.js ================================================ /** * @licstart The following is the entire license notice for the * Javascript code in this page * * Copyright 2020 Mozilla Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * @licend The above is the entire license notice for the * Javascript code in this page */ /******/ (() => { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ([ /* 0 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "PDFViewerApplicationOptions", ({ enumerable: true, get: function get() { return _app_options.AppOptions; } })); Object.defineProperty(exports, "PDFViewerApplication", ({ enumerable: true, get: function get() { return _app.PDFViewerApplication; } })); var _app_options = __webpack_require__(1); var _app = __webpack_require__(3); var pdfjsVersion = '2.8.57'; var pdfjsBuild = '3d33313e4'; window.PDFViewerApplication = _app.PDFViewerApplication; window.PDFViewerApplicationOptions = _app_options.AppOptions; ; ; { __webpack_require__(37); } ; { __webpack_require__(43); } function getViewerConfiguration() { return { appContainer: document.body, mainContainer: document.getElementById("viewerContainer"), viewerContainer: document.getElementById("viewer"), eventBus: null, toolbar: { container: document.getElementById("toolbarViewer"), numPages: document.getElementById("numPages"), pageNumber: document.getElementById("pageNumber"), scaleSelectContainer: document.getElementById("scaleSelectContainer"), scaleSelect: document.getElementById("scaleSelect"), customScaleOption: document.getElementById("customScaleOption"), previous: document.getElementById("previous"), next: document.getElementById("next"), zoomIn: document.getElementById("zoomIn"), zoomOut: document.getElementById("zoomOut"), viewFind: document.getElementById("viewFind"), openFile: document.getElementById("openFile"), print: document.getElementById("print"), presentationModeButton: document.getElementById("presentationMode"), download: document.getElementById("download"), viewBookmark: document.getElementById("viewBookmark") }, secondaryToolbar: { toolbar: document.getElementById("secondaryToolbar"), toggleButton: document.getElementById("secondaryToolbarToggle"), toolbarButtonContainer: document.getElementById("secondaryToolbarButtonContainer"), presentationModeButton: document.getElementById("secondaryPresentationMode"), openFileButton: document.getElementById("secondaryOpenFile"), printButton: document.getElementById("secondaryPrint"), downloadButton: document.getElementById("secondaryDownload"), viewBookmarkButton: document.getElementById("secondaryViewBookmark"), firstPageButton: document.getElementById("firstPage"), lastPageButton: document.getElementById("lastPage"), pageRotateCwButton: document.getElementById("pageRotateCw"), pageRotateCcwButton: document.getElementById("pageRotateCcw"), cursorSelectToolButton: document.getElementById("cursorSelectTool"), cursorHandToolButton: document.getElementById("cursorHandTool"), scrollVerticalButton: document.getElementById("scrollVertical"), scrollHorizontalButton: document.getElementById("scrollHorizontal"), scrollWrappedButton: document.getElementById("scrollWrapped"), spreadNoneButton: document.getElementById("spreadNone"), spreadOddButton: document.getElementById("spreadOdd"), spreadEvenButton: document.getElementById("spreadEven"), documentPropertiesButton: document.getElementById("documentProperties") }, fullscreen: { contextFirstPage: document.getElementById("contextFirstPage"), contextLastPage: document.getElementById("contextLastPage"), contextPageRotateCw: document.getElementById("contextPageRotateCw"), contextPageRotateCcw: document.getElementById("contextPageRotateCcw") }, sidebar: { outerContainer: document.getElementById("outerContainer"), viewerContainer: document.getElementById("viewerContainer"), toggleButton: document.getElementById("sidebarToggle"), thumbnailButton: document.getElementById("viewThumbnail"), outlineButton: document.getElementById("viewOutline"), attachmentsButton: document.getElementById("viewAttachments"), layersButton: document.getElementById("viewLayers"), thumbnailView: document.getElementById("thumbnailView"), outlineView: document.getElementById("outlineView"), attachmentsView: document.getElementById("attachmentsView"), layersView: document.getElementById("layersView"), outlineOptionsContainer: document.getElementById("outlineOptionsContainer"), currentOutlineItemButton: document.getElementById("currentOutlineItem") }, sidebarResizer: { outerContainer: document.getElementById("outerContainer"), resizer: document.getElementById("sidebarResizer") }, findBar: { bar: document.getElementById("findbar"), toggleButton: document.getElementById("viewFind"), findField: document.getElementById("findInput"), highlightAllCheckbox: document.getElementById("findHighlightAll"), caseSensitiveCheckbox: document.getElementById("findMatchCase"), entireWordCheckbox: document.getElementById("findEntireWord"), findMsg: document.getElementById("findMsg"), findResultsCount: document.getElementById("findResultsCount"), findPreviousButton: document.getElementById("findPrevious"), findNextButton: document.getElementById("findNext") }, passwordOverlay: { overlayName: "passwordOverlay", container: document.getElementById("passwordOverlay"), label: document.getElementById("passwordText"), input: document.getElementById("password"), submitButton: document.getElementById("passwordSubmit"), cancelButton: document.getElementById("passwordCancel") }, documentProperties: { overlayName: "documentPropertiesOverlay", container: document.getElementById("documentPropertiesOverlay"), closeButton: document.getElementById("documentPropertiesClose"), fields: { fileName: document.getElementById("fileNameField"), fileSize: document.getElementById("fileSizeField"), title: document.getElementById("titleField"), author: document.getElementById("authorField"), subject: document.getElementById("subjectField"), keywords: document.getElementById("keywordsField"), creationDate: document.getElementById("creationDateField"), modificationDate: document.getElementById("modificationDateField"), creator: document.getElementById("creatorField"), producer: document.getElementById("producerField"), version: document.getElementById("versionField"), pageCount: document.getElementById("pageCountField"), pageSize: document.getElementById("pageSizeField"), linearized: document.getElementById("linearizedField") } }, errorWrapper: { container: document.getElementById("errorWrapper"), errorMessage: document.getElementById("errorMessage"), closeButton: document.getElementById("errorClose"), errorMoreInfo: document.getElementById("errorMoreInfo"), moreInfoButton: document.getElementById("errorShowMore"), lessInfoButton: document.getElementById("errorShowLess") }, printContainer: document.getElementById("printContainer"), openFileInputName: "fileInput", debuggerScriptPath: "./debugger.js" }; } function webViewerLoad() { var config = getViewerConfiguration(); var event = document.createEvent("CustomEvent"); event.initCustomEvent("webviewerloaded", true, true, { source: window }); try { parent.document.dispatchEvent(event); } catch (ex) { console.error("webviewerloaded: ".concat(ex)); document.dispatchEvent(event); } _app.PDFViewerApplication.run(config); } if (document.blockUnblockOnload) { document.blockUnblockOnload(true); } if (document.readyState === "interactive" || document.readyState === "complete") { webViewerLoad(); } else { document.addEventListener("DOMContentLoaded", webViewerLoad, true); } /***/ }), /* 1 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.OptionKind = exports.AppOptions = void 0; var _viewer_compatibility = __webpack_require__(2); function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var OptionKind = { VIEWER: 0x02, API: 0x04, WORKER: 0x08, PREFERENCE: 0x80 }; exports.OptionKind = OptionKind; var defaultOptions = { cursorToolOnLoad: { value: 0, kind: OptionKind.VIEWER + OptionKind.PREFERENCE }, defaultUrl: { value: "compressed.tracemonkey-pldi-09.pdf", kind: OptionKind.VIEWER }, defaultZoomValue: { value: "", kind: OptionKind.VIEWER + OptionKind.PREFERENCE }, disableHistory: { value: false, kind: OptionKind.VIEWER }, disablePageLabels: { value: false, kind: OptionKind.VIEWER + OptionKind.PREFERENCE }, enablePermissions: { value: false, kind: OptionKind.VIEWER + OptionKind.PREFERENCE }, enablePrintAutoRotate: { value: false, kind: OptionKind.VIEWER + OptionKind.PREFERENCE }, enableScripting: { value: false, kind: OptionKind.VIEWER + OptionKind.PREFERENCE }, enableWebGL: { value: false, kind: OptionKind.VIEWER + OptionKind.PREFERENCE }, externalLinkRel: { value: "noopener noreferrer nofollow", kind: OptionKind.VIEWER }, externalLinkTarget: { value: 0, kind: OptionKind.VIEWER + OptionKind.PREFERENCE }, historyUpdateUrl: { value: false, kind: OptionKind.VIEWER + OptionKind.PREFERENCE }, ignoreDestinationZoom: { value: false, kind: OptionKind.VIEWER + OptionKind.PREFERENCE }, imageResourcesPath: { value: "./images/", kind: OptionKind.VIEWER }, maxCanvasPixels: { value: 16777216, compatibility: _viewer_compatibility.viewerCompatibilityParams.maxCanvasPixels, kind: OptionKind.VIEWER }, pdfBugEnabled: { value: false, kind: OptionKind.VIEWER + OptionKind.PREFERENCE }, printResolution: { value: 150, kind: OptionKind.VIEWER }, renderer: { value: "canvas", kind: OptionKind.VIEWER + OptionKind.PREFERENCE }, renderInteractiveForms: { value: true, kind: OptionKind.VIEWER + OptionKind.PREFERENCE }, sidebarViewOnLoad: { value: -1, kind: OptionKind.VIEWER + OptionKind.PREFERENCE }, scrollModeOnLoad: { value: -1, kind: OptionKind.VIEWER + OptionKind.PREFERENCE }, spreadModeOnLoad: { value: -1, kind: OptionKind.VIEWER + OptionKind.PREFERENCE }, textLayerMode: { value: 1, kind: OptionKind.VIEWER + OptionKind.PREFERENCE }, useOnlyCssZoom: { value: false, kind: OptionKind.VIEWER + OptionKind.PREFERENCE }, viewerCssTheme: { value: 0, kind: OptionKind.VIEWER + OptionKind.PREFERENCE }, viewOnLoad: { value: 0, kind: OptionKind.VIEWER + OptionKind.PREFERENCE }, cMapPacked: { value: true, kind: OptionKind.API }, cMapUrl: { value: "../web/cmaps/", kind: OptionKind.API }, disableAutoFetch: { value: false, kind: OptionKind.API + OptionKind.PREFERENCE }, disableFontFace: { value: false, kind: OptionKind.API + OptionKind.PREFERENCE }, disableRange: { value: false, kind: OptionKind.API + OptionKind.PREFERENCE }, disableStream: { value: false, kind: OptionKind.API + OptionKind.PREFERENCE }, docBaseUrl: { value: "", kind: OptionKind.API }, fontExtraProperties: { value: false, kind: OptionKind.API }, isEvalSupported: { value: true, kind: OptionKind.API }, maxImageSize: { value: -1, kind: OptionKind.API }, pdfBug: { value: false, kind: OptionKind.API }, verbosity: { value: 1, kind: OptionKind.API }, workerPort: { value: null, kind: OptionKind.WORKER }, workerSrc: { value: "../build/pdf.worker.js", kind: OptionKind.WORKER } }; { defaultOptions.disablePreferences = { value: false, kind: OptionKind.VIEWER }; defaultOptions.locale = { value: typeof navigator !== "undefined" ? navigator.language : "en-US", kind: OptionKind.VIEWER }; defaultOptions.sandboxBundleSrc = { value: "../build/pdf.sandbox.js", kind: OptionKind.VIEWER }; } var userOptions = Object.create(null); var AppOptions = /*#__PURE__*/function () { function AppOptions() { _classCallCheck(this, AppOptions); throw new Error("Cannot initialize AppOptions."); } _createClass(AppOptions, null, [{ key: "get", value: function get(name) { var userOption = userOptions[name]; if (userOption !== undefined) { return userOption; } var defaultOption = defaultOptions[name]; if (defaultOption !== undefined) { return defaultOption.compatibility || defaultOption.value; } return undefined; } }, { key: "getAll", value: function getAll() { var kind = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var options = Object.create(null); for (var name in defaultOptions) { var defaultOption = defaultOptions[name]; if (kind) { if ((kind & defaultOption.kind) === 0) { continue; } if (kind === OptionKind.PREFERENCE) { var value = defaultOption.value, valueType = _typeof(value); if (valueType === "boolean" || valueType === "string" || valueType === "number" && Number.isInteger(value)) { options[name] = value; continue; } throw new Error("Invalid type for preference: ".concat(name)); } } var userOption = userOptions[name]; options[name] = userOption !== undefined ? userOption : defaultOption.compatibility || defaultOption.value; } return options; } }, { key: "set", value: function set(name, value) { userOptions[name] = value; } }, { key: "setAll", value: function setAll(options) { for (var name in options) { userOptions[name] = options[name]; } } }, { key: "remove", value: function remove(name) { delete userOptions[name]; } }]); return AppOptions; }(); exports.AppOptions = AppOptions; /***/ }), /* 2 */ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.viewerCompatibilityParams = void 0; var compatibilityParams = Object.create(null); { var userAgent = typeof navigator !== "undefined" && navigator.userAgent || ""; var platform = typeof navigator !== "undefined" && navigator.platform || ""; var maxTouchPoints = typeof navigator !== "undefined" && navigator.maxTouchPoints || 1; var isAndroid = /Android/.test(userAgent); var isIOS = /\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) || platform === "MacIntel" && maxTouchPoints > 1; var isIOSChrome = /CriOS/.test(userAgent); (function checkOnBlobSupport() { if (isIOSChrome) { compatibilityParams.disableCreateObjectURL = true; } })(); (function checkCanvasSizeLimitation() { if (isIOS || isAndroid) { compatibilityParams.maxCanvasPixels = 5242880; } })(); } var viewerCompatibilityParams = Object.freeze(compatibilityParams); exports.viewerCompatibilityParams = viewerCompatibilityParams; /***/ }), /* 3 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFViewerApplication = exports.PDFPrintServiceFactory = exports.DefaultExternalServices = void 0; var _regenerator = _interopRequireDefault(__webpack_require__(4)); var _ui_utils = __webpack_require__(6); var _app_options = __webpack_require__(1); var _pdfjsLib = __webpack_require__(7); var _pdf_cursor_tools = __webpack_require__(8); var _pdf_rendering_queue = __webpack_require__(10); var _overlay_manager = __webpack_require__(11); var _password_prompt = __webpack_require__(12); var _pdf_attachment_viewer = __webpack_require__(13); var _pdf_document_properties = __webpack_require__(15); var _pdf_find_bar = __webpack_require__(16); var _pdf_find_controller = __webpack_require__(17); var _pdf_history = __webpack_require__(19); var _pdf_layer_viewer = __webpack_require__(20); var _pdf_link_service = __webpack_require__(21); var _pdf_outline_viewer = __webpack_require__(22); var _pdf_presentation_mode = __webpack_require__(23); var _pdf_sidebar = __webpack_require__(24); var _pdf_sidebar_resizer = __webpack_require__(25); var _pdf_thumbnail_viewer = __webpack_require__(26); var _pdf_viewer = __webpack_require__(28); var _secondary_toolbar = __webpack_require__(33); var _toolbar = __webpack_require__(35); var _viewer_compatibility = __webpack_require__(2); var _view_history = __webpack_require__(36); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var DEFAULT_SCALE_DELTA = 1.1; var DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT = 5000; var FORCE_PAGES_LOADED_TIMEOUT = 10000; var WHEEL_ZOOM_DISABLED_TIMEOUT = 1000; var ENABLE_PERMISSIONS_CLASS = "enablePermissions"; var ViewOnLoad = { UNKNOWN: -1, PREVIOUS: 0, INITIAL: 1 }; var ViewerCssTheme = { AUTOMATIC: 0, LIGHT: 1, DARK: 2 }; var KNOWN_VERSIONS = ["1.0", "1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "2.0", "2.1", "2.2", "2.3"]; var KNOWN_GENERATORS = ["acrobat distiller", "acrobat pdfwriter", "adobe livecycle", "adobe pdf library", "adobe photoshop", "ghostscript", "tcpdf", "cairo", "dvipdfm", "dvips", "pdftex", "pdfkit", "itext", "prince", "quarkxpress", "mac os x", "microsoft", "openoffice", "oracle", "luradocument", "pdf-xchange", "antenna house", "aspose.cells", "fpdf"]; var DefaultExternalServices = /*#__PURE__*/function () { function DefaultExternalServices() { _classCallCheck(this, DefaultExternalServices); throw new Error("Cannot initialize DefaultExternalServices."); } _createClass(DefaultExternalServices, null, [{ key: "updateFindControlState", value: function updateFindControlState(data) {} }, { key: "updateFindMatchesCount", value: function updateFindMatchesCount(data) {} }, { key: "initPassiveLoading", value: function initPassiveLoading(callbacks) {} }, { key: "fallback", value: function () { var _fallback = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(data) { return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: case "end": return _context.stop(); } } }, _callee); })); function fallback(_x) { return _fallback.apply(this, arguments); } return fallback; }() }, { key: "reportTelemetry", value: function reportTelemetry(data) {} }, { key: "createDownloadManager", value: function createDownloadManager(options) { throw new Error("Not implemented: createDownloadManager"); } }, { key: "createPreferences", value: function createPreferences() { throw new Error("Not implemented: createPreferences"); } }, { key: "createL10n", value: function createL10n(options) { throw new Error("Not implemented: createL10n"); } }, { key: "createScripting", value: function createScripting(options) { throw new Error("Not implemented: createScripting"); } }, { key: "supportsIntegratedFind", get: function get() { return (0, _pdfjsLib.shadow)(this, "supportsIntegratedFind", false); } }, { key: "supportsDocumentFonts", get: function get() { return (0, _pdfjsLib.shadow)(this, "supportsDocumentFonts", true); } }, { key: "supportedMouseWheelZoomModifierKeys", get: function get() { return (0, _pdfjsLib.shadow)(this, "supportedMouseWheelZoomModifierKeys", { ctrlKey: true, metaKey: true }); } }, { key: "isInAutomation", get: function get() { return (0, _pdfjsLib.shadow)(this, "isInAutomation", false); } }]); return DefaultExternalServices; }(); exports.DefaultExternalServices = DefaultExternalServices; var PDFViewerApplication = { initialBookmark: document.location.hash.substring(1), _initializedCapability: (0, _pdfjsLib.createPromiseCapability)(), fellback: false, appConfig: null, pdfDocument: null, pdfLoadingTask: null, printService: null, pdfViewer: null, pdfThumbnailViewer: null, pdfRenderingQueue: null, pdfPresentationMode: null, pdfDocumentProperties: null, pdfLinkService: null, pdfHistory: null, pdfSidebar: null, pdfSidebarResizer: null, pdfOutlineViewer: null, pdfAttachmentViewer: null, pdfLayerViewer: null, pdfCursorTools: null, store: null, downloadManager: null, overlayManager: null, preferences: null, toolbar: null, secondaryToolbar: null, eventBus: null, l10n: null, isInitialViewSet: false, downloadComplete: false, isViewerEmbedded: window.parent !== window, url: "", baseUrl: "", externalServices: DefaultExternalServices, _boundEvents: Object.create(null), documentInfo: null, metadata: null, _contentDispositionFilename: null, _contentLength: null, triggerDelayedFallback: null, _saveInProgress: false, _wheelUnusedTicks: 0, _idleCallbacks: new Set(), _scriptingInstance: null, _mouseState: Object.create(null), initialize: function initialize(appConfig) { var _this = this; return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { var appContainer; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _this.preferences = _this.externalServices.createPreferences(); _this.appConfig = appConfig; _context2.next = 4; return _this._readPreferences(); case 4: _context2.next = 6; return _this._parseHashParameters(); case 6: _this._forceCssTheme(); _context2.next = 9; return _this._initializeL10n(); case 9: if (_this.isViewerEmbedded && _app_options.AppOptions.get("externalLinkTarget") === _pdfjsLib.LinkTarget.NONE) { _app_options.AppOptions.set("externalLinkTarget", _pdfjsLib.LinkTarget.TOP); } _context2.next = 12; return _this._initializeViewerComponents(); case 12: _this.bindEvents(); _this.bindWindowEvents(); appContainer = appConfig.appContainer || document.documentElement; _this.l10n.translate(appContainer).then(function () { _this.eventBus.dispatch("localized", { source: _this }); }); _this._initializedCapability.resolve(); case 17: case "end": return _context2.stop(); } } }, _callee2); }))(); }, _readPreferences: function _readPreferences() { var _this2 = this; return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee3() { return _regenerator["default"].wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: if (!_app_options.AppOptions.get("disablePreferences")) { _context3.next = 2; break; } return _context3.abrupt("return"); case 2: _context3.prev = 2; _context3.t0 = _app_options.AppOptions; _context3.next = 6; return _this2.preferences.getAll(); case 6: _context3.t1 = _context3.sent; _context3.t0.setAll.call(_context3.t0, _context3.t1); _context3.next = 13; break; case 10: _context3.prev = 10; _context3.t2 = _context3["catch"](2); console.error("_readPreferences: \"".concat(_context3.t2 === null || _context3.t2 === void 0 ? void 0 : _context3.t2.message, "\".")); case 13: case "end": return _context3.stop(); } } }, _callee3, null, [[2, 10]]); }))(); }, _parseHashParameters: function _parseHashParameters() { var _this3 = this; return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee4() { var hash, hashParams, waitOn, viewer, enabled; return _regenerator["default"].wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: if (_app_options.AppOptions.get("pdfBugEnabled")) { _context4.next = 2; break; } return _context4.abrupt("return", undefined); case 2: hash = document.location.hash.substring(1); if (hash) { _context4.next = 5; break; } return _context4.abrupt("return", undefined); case 5: hashParams = (0, _ui_utils.parseQueryString)(hash), waitOn = []; if ("disableworker" in hashParams && hashParams.disableworker === "true") { waitOn.push(loadFakeWorker()); } if ("disablerange" in hashParams) { _app_options.AppOptions.set("disableRange", hashParams.disablerange === "true"); } if ("disablestream" in hashParams) { _app_options.AppOptions.set("disableStream", hashParams.disablestream === "true"); } if ("disableautofetch" in hashParams) { _app_options.AppOptions.set("disableAutoFetch", hashParams.disableautofetch === "true"); } if ("disablefontface" in hashParams) { _app_options.AppOptions.set("disableFontFace", hashParams.disablefontface === "true"); } if ("disablehistory" in hashParams) { _app_options.AppOptions.set("disableHistory", hashParams.disablehistory === "true"); } if ("webgl" in hashParams) { _app_options.AppOptions.set("enableWebGL", hashParams.webgl === "true"); } if ("verbosity" in hashParams) { _app_options.AppOptions.set("verbosity", hashParams.verbosity | 0); } if (!("textlayer" in hashParams)) { _context4.next = 23; break; } _context4.t0 = hashParams.textlayer; _context4.next = _context4.t0 === "off" ? 18 : _context4.t0 === "visible" ? 20 : _context4.t0 === "shadow" ? 20 : _context4.t0 === "hover" ? 20 : 23; break; case 18: _app_options.AppOptions.set("textLayerMode", _ui_utils.TextLayerMode.DISABLE); return _context4.abrupt("break", 23); case 20: viewer = _this3.appConfig.viewerContainer; viewer.classList.add("textLayer-" + hashParams.textlayer); return _context4.abrupt("break", 23); case 23: if ("pdfbug" in hashParams) { _app_options.AppOptions.set("pdfBug", true); _app_options.AppOptions.set("fontExtraProperties", true); enabled = hashParams.pdfbug.split(","); waitOn.push(loadAndEnablePDFBug(enabled)); } if ("locale" in hashParams) { _app_options.AppOptions.set("locale", hashParams.locale); } if (!(waitOn.length === 0)) { _context4.next = 27; break; } return _context4.abrupt("return", undefined); case 27: return _context4.abrupt("return", Promise.all(waitOn)["catch"](function (reason) { console.error("_parseHashParameters: \"".concat(reason.message, "\".")); })); case 28: case "end": return _context4.stop(); } } }, _callee4); }))(); }, _initializeL10n: function _initializeL10n() { var _this4 = this; return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee5() { var dir; return _regenerator["default"].wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: _this4.l10n = _this4.externalServices.createL10n({ locale: _app_options.AppOptions.get("locale") }); _context5.next = 3; return _this4.l10n.getDirection(); case 3: dir = _context5.sent; document.getElementsByTagName("html")[0].dir = dir; case 5: case "end": return _context5.stop(); } } }, _callee5); }))(); }, _forceCssTheme: function _forceCssTheme() { var cssTheme = _app_options.AppOptions.get("viewerCssTheme"); if (cssTheme === ViewerCssTheme.AUTOMATIC || !Object.values(ViewerCssTheme).includes(cssTheme)) { return; } try { var styleSheet = document.styleSheets[0]; var cssRules = (styleSheet === null || styleSheet === void 0 ? void 0 : styleSheet.cssRules) || []; for (var i = 0, ii = cssRules.length; i < ii; i++) { var _rule$media; var rule = cssRules[i]; if (rule instanceof CSSMediaRule && ((_rule$media = rule.media) === null || _rule$media === void 0 ? void 0 : _rule$media[0]) === "(prefers-color-scheme: dark)") { if (cssTheme === ViewerCssTheme.LIGHT) { styleSheet.deleteRule(i); return; } var darkRules = /^@media \(prefers-color-scheme: dark\) {\n\s*([\w\s-.,:;/\\{}()]+)\n}$/.exec(rule.cssText); if (darkRules !== null && darkRules !== void 0 && darkRules[1]) { styleSheet.deleteRule(i); styleSheet.insertRule(darkRules[1], i); } return; } } } catch (reason) { console.error("_forceCssTheme: \"".concat(reason === null || reason === void 0 ? void 0 : reason.message, "\".")); } }, _initializeViewerComponents: function _initializeViewerComponents() { var _this5 = this; return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee6() { var appConfig, eventBus, pdfRenderingQueue, pdfLinkService, downloadManager, findController, container, viewer; return _regenerator["default"].wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: appConfig = _this5.appConfig; eventBus = appConfig.eventBus || new _ui_utils.EventBus({ isInAutomation: _this5.externalServices.isInAutomation }); _this5.eventBus = eventBus; _this5.overlayManager = new _overlay_manager.OverlayManager(); pdfRenderingQueue = new _pdf_rendering_queue.PDFRenderingQueue(); pdfRenderingQueue.onIdle = _this5.cleanup.bind(_this5); _this5.pdfRenderingQueue = pdfRenderingQueue; pdfLinkService = new _pdf_link_service.PDFLinkService({ eventBus: eventBus, externalLinkTarget: _app_options.AppOptions.get("externalLinkTarget"), externalLinkRel: _app_options.AppOptions.get("externalLinkRel"), ignoreDestinationZoom: _app_options.AppOptions.get("ignoreDestinationZoom") }); _this5.pdfLinkService = pdfLinkService; downloadManager = _this5.externalServices.createDownloadManager(); _this5.downloadManager = downloadManager; findController = new _pdf_find_controller.PDFFindController({ linkService: pdfLinkService, eventBus: eventBus }); _this5.findController = findController; container = appConfig.mainContainer; viewer = appConfig.viewerContainer; _this5.pdfViewer = new _pdf_viewer.PDFViewer({ container: container, viewer: viewer, eventBus: eventBus, renderingQueue: pdfRenderingQueue, linkService: pdfLinkService, downloadManager: downloadManager, findController: findController, renderer: _app_options.AppOptions.get("renderer"), enableWebGL: _app_options.AppOptions.get("enableWebGL"), l10n: _this5.l10n, textLayerMode: _app_options.AppOptions.get("textLayerMode"), imageResourcesPath: _app_options.AppOptions.get("imageResourcesPath"), renderInteractiveForms: _app_options.AppOptions.get("renderInteractiveForms"), enablePrintAutoRotate: _app_options.AppOptions.get("enablePrintAutoRotate"), useOnlyCssZoom: _app_options.AppOptions.get("useOnlyCssZoom"), maxCanvasPixels: _app_options.AppOptions.get("maxCanvasPixels"), enableScripting: _app_options.AppOptions.get("enableScripting"), mouseState: _this5._mouseState }); pdfRenderingQueue.setViewer(_this5.pdfViewer); pdfLinkService.setViewer(_this5.pdfViewer); _this5.pdfThumbnailViewer = new _pdf_thumbnail_viewer.PDFThumbnailViewer({ container: appConfig.sidebar.thumbnailView, eventBus: eventBus, renderingQueue: pdfRenderingQueue, linkService: pdfLinkService, l10n: _this5.l10n }); pdfRenderingQueue.setThumbnailViewer(_this5.pdfThumbnailViewer); _this5.pdfHistory = new _pdf_history.PDFHistory({ linkService: pdfLinkService, eventBus: eventBus }); pdfLinkService.setHistory(_this5.pdfHistory); if (!_this5.supportsIntegratedFind) { _this5.findBar = new _pdf_find_bar.PDFFindBar(appConfig.findBar, eventBus, _this5.l10n); } _this5.pdfDocumentProperties = new _pdf_document_properties.PDFDocumentProperties(appConfig.documentProperties, _this5.overlayManager, eventBus, _this5.l10n); _this5.pdfCursorTools = new _pdf_cursor_tools.PDFCursorTools({ container: container, eventBus: eventBus, cursorToolOnLoad: _app_options.AppOptions.get("cursorToolOnLoad") }); _this5.toolbar = new _toolbar.Toolbar(appConfig.toolbar, eventBus, _this5.l10n); _this5.secondaryToolbar = new _secondary_toolbar.SecondaryToolbar(appConfig.secondaryToolbar, container, eventBus); if (_this5.supportsFullscreen) { _this5.pdfPresentationMode = new _pdf_presentation_mode.PDFPresentationMode({ container: container, pdfViewer: _this5.pdfViewer, eventBus: eventBus, contextMenuItems: appConfig.fullscreen }); } _this5.passwordPrompt = new _password_prompt.PasswordPrompt(appConfig.passwordOverlay, _this5.overlayManager, _this5.l10n, _this5.isViewerEmbedded); _this5.pdfOutlineViewer = new _pdf_outline_viewer.PDFOutlineViewer({ container: appConfig.sidebar.outlineView, eventBus: eventBus, linkService: pdfLinkService }); _this5.pdfAttachmentViewer = new _pdf_attachment_viewer.PDFAttachmentViewer({ container: appConfig.sidebar.attachmentsView, eventBus: eventBus, downloadManager: downloadManager }); _this5.pdfLayerViewer = new _pdf_layer_viewer.PDFLayerViewer({ container: appConfig.sidebar.layersView, eventBus: eventBus, l10n: _this5.l10n }); _this5.pdfSidebar = new _pdf_sidebar.PDFSidebar({ elements: appConfig.sidebar, pdfViewer: _this5.pdfViewer, pdfThumbnailViewer: _this5.pdfThumbnailViewer, eventBus: eventBus, l10n: _this5.l10n }); _this5.pdfSidebar.onToggled = _this5.forceRendering.bind(_this5); _this5.pdfSidebarResizer = new _pdf_sidebar_resizer.PDFSidebarResizer(appConfig.sidebarResizer, eventBus, _this5.l10n); case 35: case "end": return _context6.stop(); } } }, _callee6); }))(); }, run: function run(config) { this.initialize(config).then(webViewerInitialized); }, get initialized() { return this._initializedCapability.settled; }, get initializedPromise() { return this._initializedCapability.promise; }, zoomIn: function zoomIn(ticks) { if (this.pdfViewer.isInPresentationMode) { return; } var newScale = this.pdfViewer.currentScale; do { newScale = (newScale * DEFAULT_SCALE_DELTA).toFixed(2); newScale = Math.ceil(newScale * 10) / 10; newScale = Math.min(_ui_utils.MAX_SCALE, newScale); } while (--ticks > 0 && newScale < _ui_utils.MAX_SCALE); this.pdfViewer.currentScaleValue = newScale; }, zoomOut: function zoomOut(ticks) { if (this.pdfViewer.isInPresentationMode) { return; } var newScale = this.pdfViewer.currentScale; do { newScale = (newScale / DEFAULT_SCALE_DELTA).toFixed(2); newScale = Math.floor(newScale * 10) / 10; newScale = Math.max(_ui_utils.MIN_SCALE, newScale); } while (--ticks > 0 && newScale > _ui_utils.MIN_SCALE); this.pdfViewer.currentScaleValue = newScale; }, zoomReset: function zoomReset() { if (this.pdfViewer.isInPresentationMode) { return; } this.pdfViewer.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE; }, get pagesCount() { return this.pdfDocument ? this.pdfDocument.numPages : 0; }, get page() { return this.pdfViewer.currentPageNumber; }, set page(val) { this.pdfViewer.currentPageNumber = val; }, get supportsPrinting() { return PDFPrintServiceFactory.instance.supportsPrinting; }, get supportsFullscreen() { var doc = document.documentElement; var support = !!(doc.requestFullscreen || doc.mozRequestFullScreen || doc.webkitRequestFullScreen); if (document.fullscreenEnabled === false || document.mozFullScreenEnabled === false || document.webkitFullscreenEnabled === false) { support = false; } return (0, _pdfjsLib.shadow)(this, "supportsFullscreen", support); }, get supportsIntegratedFind() { return this.externalServices.supportsIntegratedFind; }, get supportsDocumentFonts() { return this.externalServices.supportsDocumentFonts; }, get loadingBar() { var bar = new _ui_utils.ProgressBar("#loadingBar"); return (0, _pdfjsLib.shadow)(this, "loadingBar", bar); }, get supportedMouseWheelZoomModifierKeys() { return this.externalServices.supportedMouseWheelZoomModifierKeys; }, initPassiveLoading: function initPassiveLoading() { throw new Error("Not implemented: initPassiveLoading"); }, setTitleUsingUrl: function setTitleUsingUrl() { var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ""; this.url = url; this.baseUrl = url.split("#")[0]; var title = (0, _ui_utils.getPDFFileNameFromURL)(url, ""); if (!title) { try { title = decodeURIComponent((0, _pdfjsLib.getFilenameFromUrl)(url)) || url; } catch (ex) { title = url; } } this.setTitle(title); }, setTitle: function setTitle(title) { if (this.isViewerEmbedded) { return; } document.title = title; }, get _docFilename() { return this._contentDispositionFilename || (0, _ui_utils.getPDFFileNameFromURL)(this.url); }, _cancelIdleCallbacks: function _cancelIdleCallbacks() { if (!this._idleCallbacks.size) { return; } var _iterator = _createForOfIteratorHelper(this._idleCallbacks), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var callback = _step.value; window.cancelIdleCallback(callback); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } this._idleCallbacks.clear(); }, _destroyScriptingInstance: function _destroyScriptingInstance() { var _this6 = this; return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee7() { var _this6$_scriptingInst, scripting, internalEvents, domEvents, _iterator2, _step2, _step2$value, name, listener, _iterator3, _step3, _step3$value, _name, _listener; return _regenerator["default"].wrap(function _callee7$(_context7) { while (1) { switch (_context7.prev = _context7.next) { case 0: if (_this6._scriptingInstance) { _context7.next = 2; break; } return _context7.abrupt("return"); case 2: _this6$_scriptingInst = _this6._scriptingInstance, scripting = _this6$_scriptingInst.scripting, internalEvents = _this6$_scriptingInst.internalEvents, domEvents = _this6$_scriptingInst.domEvents; _context7.prev = 3; _context7.next = 6; return scripting.destroySandbox(); case 6: _context7.next = 10; break; case 8: _context7.prev = 8; _context7.t0 = _context7["catch"](3); case 10: _iterator2 = _createForOfIteratorHelper(internalEvents); try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { _step2$value = _slicedToArray(_step2.value, 2), name = _step2$value[0], listener = _step2$value[1]; _this6.eventBus._off(name, listener); } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } internalEvents.clear(); _iterator3 = _createForOfIteratorHelper(domEvents); try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { _step3$value = _slicedToArray(_step3.value, 2), _name = _step3$value[0], _listener = _step3$value[1]; window.removeEventListener(_name, _listener); } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } domEvents.clear(); delete _this6._mouseState.isDown; _this6._scriptingInstance = null; case 18: case "end": return _context7.stop(); } } }, _callee7, null, [[3, 8]]); }))(); }, close: function close() { var _this7 = this; return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee8() { var errorWrapper, promises; return _regenerator["default"].wrap(function _callee8$(_context8) { while (1) { switch (_context8.prev = _context8.next) { case 0: errorWrapper = _this7.appConfig.errorWrapper.container; errorWrapper.setAttribute("hidden", "true"); if (_this7.pdfLoadingTask) { _context8.next = 4; break; } return _context8.abrupt("return", undefined); case 4: promises = []; promises.push(_this7.pdfLoadingTask.destroy()); _this7.pdfLoadingTask = null; if (_this7.pdfDocument) { _this7.pdfDocument = null; _this7.pdfThumbnailViewer.setDocument(null); _this7.pdfViewer.setDocument(null); _this7.pdfLinkService.setDocument(null); _this7.pdfDocumentProperties.setDocument(null); } webViewerResetPermissions(); _this7.store = null; _this7.isInitialViewSet = false; _this7.downloadComplete = false; _this7.url = ""; _this7.baseUrl = ""; _this7.documentInfo = null; _this7.metadata = null; _this7._contentDispositionFilename = null; _this7._contentLength = null; _this7.triggerDelayedFallback = null; _this7._saveInProgress = false; _this7._cancelIdleCallbacks(); promises.push(_this7._destroyScriptingInstance()); _this7.pdfSidebar.reset(); _this7.pdfOutlineViewer.reset(); _this7.pdfAttachmentViewer.reset(); _this7.pdfLayerViewer.reset(); if (_this7.pdfHistory) { _this7.pdfHistory.reset(); } if (_this7.findBar) { _this7.findBar.reset(); } _this7.toolbar.reset(); _this7.secondaryToolbar.reset(); if (typeof PDFBug !== "undefined") { PDFBug.cleanup(); } _context8.next = 33; return Promise.all(promises); case 33: return _context8.abrupt("return", undefined); case 34: case "end": return _context8.stop(); } } }, _callee8); }))(); }, open: function open(file, args) { var _this8 = this; return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee9() { var workerParameters, key, parameters, apiParameters, _key, value, _key2, loadingTask; return _regenerator["default"].wrap(function _callee9$(_context9) { while (1) { switch (_context9.prev = _context9.next) { case 0: if (!_this8.pdfLoadingTask) { _context9.next = 3; break; } _context9.next = 3; return _this8.close(); case 3: workerParameters = _app_options.AppOptions.getAll(_app_options.OptionKind.WORKER); for (key in workerParameters) { _pdfjsLib.GlobalWorkerOptions[key] = workerParameters[key]; } parameters = Object.create(null); if (typeof file === "string") { _this8.setTitleUsingUrl(file); parameters.url = file; } else if (file && "byteLength" in file) { parameters.data = file; } else if (file.url && file.originalUrl) { _this8.setTitleUsingUrl(file.originalUrl); parameters.url = file.url; } apiParameters = _app_options.AppOptions.getAll(_app_options.OptionKind.API); for (_key in apiParameters) { value = apiParameters[_key]; if (_key === "docBaseUrl" && !value) {} parameters[_key] = value; } if (args) { for (_key2 in args) { parameters[_key2] = args[_key2]; } } loadingTask = (0, _pdfjsLib.getDocument)(parameters); _this8.pdfLoadingTask = loadingTask; loadingTask.onPassword = function (updateCallback, reason) { _this8.pdfLinkService.externalLinkEnabled = false; _this8.passwordPrompt.setUpdateCallback(updateCallback, reason); _this8.passwordPrompt.open(); }; loadingTask.onProgress = function (_ref) { var loaded = _ref.loaded, total = _ref.total; _this8.progress(loaded / total); }; loadingTask.onUnsupportedFeature = _this8.fallback.bind(_this8); return _context9.abrupt("return", loadingTask.promise.then(function (pdfDocument) { _this8.load(pdfDocument); }, function (exception) { _this8._unblockDocumentLoadEvent(); if (loadingTask !== _this8.pdfLoadingTask) { return undefined; } var message = exception === null || exception === void 0 ? void 0 : exception.message; var loadingErrorMessage; if (exception instanceof _pdfjsLib.InvalidPDFException) { loadingErrorMessage = _this8.l10n.get("invalid_file_error", null, "Invalid or corrupted PDF file."); } else if (exception instanceof _pdfjsLib.MissingPDFException) { loadingErrorMessage = _this8.l10n.get("missing_file_error", null, "Missing PDF file."); } else if (exception instanceof _pdfjsLib.UnexpectedResponseException) { loadingErrorMessage = _this8.l10n.get("unexpected_response_error", null, "Unexpected server response."); } else { loadingErrorMessage = _this8.l10n.get("loading_error", null, "An error occurred while loading the PDF."); } return loadingErrorMessage.then(function (msg) { _this8.error(msg, { message: message }); throw exception; }); })); case 16: case "end": return _context9.stop(); } } }, _callee9); }))(); }, download: function download() { var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref2$sourceEventType = _ref2.sourceEventType, sourceEventType = _ref2$sourceEventType === void 0 ? "download" : _ref2$sourceEventType; function downloadByUrl() { downloadManager.downloadUrl(url, filename); } var downloadManager = this.downloadManager, url = this.baseUrl, filename = this._docFilename; if (!this.pdfDocument || !this.downloadComplete) { downloadByUrl(); return; } this.pdfDocument.getData().then(function (data) { var blob = new Blob([data], { type: "application/pdf" }); downloadManager.download(blob, url, filename, sourceEventType); })["catch"](downloadByUrl); }, save: function save() { var _arguments = arguments, _this9 = this; return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee11() { var _this9$_scriptingInst; var _ref3, _ref3$sourceEventType, sourceEventType, downloadManager, url, filename; return _regenerator["default"].wrap(function _callee11$(_context11) { while (1) { switch (_context11.prev = _context11.next) { case 0: _ref3 = _arguments.length > 0 && _arguments[0] !== undefined ? _arguments[0] : {}, _ref3$sourceEventType = _ref3.sourceEventType, sourceEventType = _ref3$sourceEventType === void 0 ? "download" : _ref3$sourceEventType; if (!_this9._saveInProgress) { _context11.next = 3; break; } return _context11.abrupt("return"); case 3: downloadManager = _this9.downloadManager, url = _this9.baseUrl, filename = _this9._docFilename; if (!(!_this9.pdfDocument || !_this9.downloadComplete)) { _context11.next = 7; break; } _this9.download({ sourceEventType: sourceEventType }); return _context11.abrupt("return"); case 7: _this9._saveInProgress = true; _context11.next = 10; return (_this9$_scriptingInst = _this9._scriptingInstance) === null || _this9$_scriptingInst === void 0 ? void 0 : _this9$_scriptingInst.scripting.dispatchEventInSandbox({ id: "doc", name: "WillSave" }); case 10: _this9.pdfDocument.saveDocument(_this9.pdfDocument.annotationStorage).then(function (data) { var blob = new Blob([data], { type: "application/pdf" }); downloadManager.download(blob, url, filename, sourceEventType); })["catch"](function () { _this9.download({ sourceEventType: sourceEventType }); })["finally"]( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee10() { var _this9$_scriptingInst2; return _regenerator["default"].wrap(function _callee10$(_context10) { while (1) { switch (_context10.prev = _context10.next) { case 0: _context10.next = 2; return (_this9$_scriptingInst2 = _this9._scriptingInstance) === null || _this9$_scriptingInst2 === void 0 ? void 0 : _this9$_scriptingInst2.scripting.dispatchEventInSandbox({ id: "doc", name: "DidSave" }); case 2: _this9._saveInProgress = false; case 3: case "end": return _context10.stop(); } } }, _callee10); }))); case 11: case "end": return _context11.stop(); } } }, _callee11); }))(); }, downloadOrSave: function downloadOrSave(options) { var _this$pdfDocument; if (((_this$pdfDocument = this.pdfDocument) === null || _this$pdfDocument === void 0 ? void 0 : _this$pdfDocument.annotationStorage.size) > 0) { this.save(options); } else { this.download(options); } }, _delayedFallback: function _delayedFallback(featureId) { var _this10 = this; this.externalServices.reportTelemetry({ type: "unsupportedFeature", featureId: featureId }); if (!this.triggerDelayedFallback) { this.triggerDelayedFallback = function () { _this10.fallback(featureId); _this10.triggerDelayedFallback = null; }; } }, fallback: function fallback(featureId) { var _this11 = this; this.externalServices.reportTelemetry({ type: "unsupportedFeature", featureId: featureId }); switch (featureId) { case _pdfjsLib.UNSUPPORTED_FEATURES.errorFontLoadNative: return; } if (this.fellback) { return; } this.fellback = true; this.externalServices.fallback({ featureId: featureId, url: this.baseUrl }).then(function (download) { if (!download) { return; } _this11.download({ sourceEventType: "download" }); }); }, error: function error(message, moreInfo) { var moreInfoText = [this.l10n.get("error_version_info", { version: _pdfjsLib.version || "?", build: _pdfjsLib.build || "?" }, "PDF.js v{{version}} (build: {{build}})")]; if (moreInfo) { moreInfoText.push(this.l10n.get("error_message", { message: moreInfo.message }, "Message: {{message}}")); if (moreInfo.stack) { moreInfoText.push(this.l10n.get("error_stack", { stack: moreInfo.stack }, "Stack: {{stack}}")); } else { if (moreInfo.filename) { moreInfoText.push(this.l10n.get("error_file", { file: moreInfo.filename }, "File: {{file}}")); } if (moreInfo.lineNumber) { moreInfoText.push(this.l10n.get("error_line", { line: moreInfo.lineNumber }, "Line: {{line}}")); } } } var errorWrapperConfig = this.appConfig.errorWrapper; var errorWrapper = errorWrapperConfig.container; errorWrapper.removeAttribute("hidden"); var errorMessage = errorWrapperConfig.errorMessage; errorMessage.textContent = message; var closeButton = errorWrapperConfig.closeButton; closeButton.onclick = function () { errorWrapper.setAttribute("hidden", "true"); }; var errorMoreInfo = errorWrapperConfig.errorMoreInfo; var moreInfoButton = errorWrapperConfig.moreInfoButton; var lessInfoButton = errorWrapperConfig.lessInfoButton; moreInfoButton.onclick = function () { errorMoreInfo.removeAttribute("hidden"); moreInfoButton.setAttribute("hidden", "true"); lessInfoButton.removeAttribute("hidden"); errorMoreInfo.style.height = errorMoreInfo.scrollHeight + "px"; }; lessInfoButton.onclick = function () { errorMoreInfo.setAttribute("hidden", "true"); moreInfoButton.removeAttribute("hidden"); lessInfoButton.setAttribute("hidden", "true"); }; moreInfoButton.oncontextmenu = _ui_utils.noContextMenuHandler; lessInfoButton.oncontextmenu = _ui_utils.noContextMenuHandler; closeButton.oncontextmenu = _ui_utils.noContextMenuHandler; moreInfoButton.removeAttribute("hidden"); lessInfoButton.setAttribute("hidden", "true"); Promise.all(moreInfoText).then(function (parts) { errorMoreInfo.value = parts.join("\n"); }); }, progress: function progress(level) { var _this12 = this; if (this.downloadComplete) { return; } var percent = Math.round(level * 100); if (percent > this.loadingBar.percent || isNaN(percent)) { this.loadingBar.percent = percent; var disableAutoFetch = this.pdfDocument ? this.pdfDocument.loadingParams.disableAutoFetch : _app_options.AppOptions.get("disableAutoFetch"); if (disableAutoFetch && percent) { if (this.disableAutoFetchLoadingBarTimeout) { clearTimeout(this.disableAutoFetchLoadingBarTimeout); this.disableAutoFetchLoadingBarTimeout = null; } this.loadingBar.show(); this.disableAutoFetchLoadingBarTimeout = setTimeout(function () { _this12.loadingBar.hide(); _this12.disableAutoFetchLoadingBarTimeout = null; }, DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT); } } }, load: function load(pdfDocument) { var _this13 = this; this.pdfDocument = pdfDocument; pdfDocument.getDownloadInfo().then(function (_ref5) { var length = _ref5.length; _this13._contentLength = length; _this13.downloadComplete = true; _this13.loadingBar.hide(); firstPagePromise.then(function () { _this13.eventBus.dispatch("documentloaded", { source: _this13 }); }); }); var pageLayoutPromise = pdfDocument.getPageLayout()["catch"](function () {}); var pageModePromise = pdfDocument.getPageMode()["catch"](function () {}); var openActionPromise = pdfDocument.getOpenAction()["catch"](function () {}); this.toolbar.setPagesCount(pdfDocument.numPages, false); this.secondaryToolbar.setPagesCount(pdfDocument.numPages); var baseDocumentUrl; baseDocumentUrl = null; this.pdfLinkService.setDocument(pdfDocument, baseDocumentUrl); this.pdfDocumentProperties.setDocument(pdfDocument, this.url); var pdfViewer = this.pdfViewer; pdfViewer.setDocument(pdfDocument); var firstPagePromise = pdfViewer.firstPagePromise, onePageRendered = pdfViewer.onePageRendered, pagesPromise = pdfViewer.pagesPromise; var pdfThumbnailViewer = this.pdfThumbnailViewer; pdfThumbnailViewer.setDocument(pdfDocument); var storedPromise = (this.store = new _view_history.ViewHistory(pdfDocument.fingerprint)).getMultiple({ page: null, zoom: _ui_utils.DEFAULT_SCALE_VALUE, scrollLeft: "0", scrollTop: "0", rotation: null, sidebarView: _ui_utils.SidebarView.UNKNOWN, scrollMode: _ui_utils.ScrollMode.UNKNOWN, spreadMode: _ui_utils.SpreadMode.UNKNOWN })["catch"](function () { return Object.create(null); }); firstPagePromise.then(function (pdfPage) { _this13.loadingBar.setWidth(_this13.appConfig.viewerContainer); _this13._initializeAnnotationStorageCallbacks(pdfDocument); Promise.all([_ui_utils.animationStarted, storedPromise, pageLayoutPromise, pageModePromise, openActionPromise]).then( /*#__PURE__*/function () { var _ref7 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee12(_ref6) { var _ref8, timeStamp, stored, pageLayout, pageMode, openAction, viewOnLoad, initialBookmark, zoom, hash, rotation, sidebarView, scrollMode, spreadMode; return _regenerator["default"].wrap(function _callee12$(_context12) { while (1) { switch (_context12.prev = _context12.next) { case 0: _ref8 = _slicedToArray(_ref6, 5), timeStamp = _ref8[0], stored = _ref8[1], pageLayout = _ref8[2], pageMode = _ref8[3], openAction = _ref8[4]; viewOnLoad = _app_options.AppOptions.get("viewOnLoad"); _this13._initializePdfHistory({ fingerprint: pdfDocument.fingerprint, viewOnLoad: viewOnLoad, initialDest: openAction === null || openAction === void 0 ? void 0 : openAction.dest }); initialBookmark = _this13.initialBookmark; zoom = _app_options.AppOptions.get("defaultZoomValue"); hash = zoom ? "zoom=".concat(zoom) : null; rotation = null; sidebarView = _app_options.AppOptions.get("sidebarViewOnLoad"); scrollMode = _app_options.AppOptions.get("scrollModeOnLoad"); spreadMode = _app_options.AppOptions.get("spreadModeOnLoad"); if (stored.page && viewOnLoad !== ViewOnLoad.INITIAL) { hash = "page=".concat(stored.page, "&zoom=").concat(zoom || stored.zoom, ",") + "".concat(stored.scrollLeft, ",").concat(stored.scrollTop); rotation = parseInt(stored.rotation, 10); if (sidebarView === _ui_utils.SidebarView.UNKNOWN) { sidebarView = stored.sidebarView | 0; } if (scrollMode === _ui_utils.ScrollMode.UNKNOWN) { scrollMode = stored.scrollMode | 0; } if (spreadMode === _ui_utils.SpreadMode.UNKNOWN) { spreadMode = stored.spreadMode | 0; } } if (pageMode && sidebarView === _ui_utils.SidebarView.UNKNOWN) { sidebarView = apiPageModeToSidebarView(pageMode); } if (pageLayout && spreadMode === _ui_utils.SpreadMode.UNKNOWN) { spreadMode = apiPageLayoutToSpreadMode(pageLayout); } _this13.setInitialView(hash, { rotation: rotation, sidebarView: sidebarView, scrollMode: scrollMode, spreadMode: spreadMode }); _this13.eventBus.dispatch("documentinit", { source: _this13 }); if (!_this13.isViewerEmbedded) { pdfViewer.focus(); } _this13._initializePermissions(pdfDocument); _context12.next = 19; return Promise.race([pagesPromise, new Promise(function (resolve) { setTimeout(resolve, FORCE_PAGES_LOADED_TIMEOUT); })]); case 19: if (!(!initialBookmark && !hash)) { _context12.next = 21; break; } return _context12.abrupt("return"); case 21: if (!pdfViewer.hasEqualPageSizes) { _context12.next = 23; break; } return _context12.abrupt("return"); case 23: _this13.initialBookmark = initialBookmark; pdfViewer.currentScaleValue = pdfViewer.currentScaleValue; _this13.setInitialView(hash); case 26: case "end": return _context12.stop(); } } }, _callee12); })); return function (_x2) { return _ref7.apply(this, arguments); }; }())["catch"](function () { _this13.setInitialView(); }).then(function () { pdfViewer.update(); }); }); pagesPromise.then(function () { _this13._unblockDocumentLoadEvent(); _this13._initializeAutoPrint(pdfDocument, openActionPromise); }); onePageRendered.then(function () { pdfDocument.getOutline().then(function (outline) { _this13.pdfOutlineViewer.render({ outline: outline, pdfDocument: pdfDocument }); }); pdfDocument.getAttachments().then(function (attachments) { _this13.pdfAttachmentViewer.render({ attachments: attachments }); }); pdfViewer.optionalContentConfigPromise.then(function (optionalContentConfig) { _this13.pdfLayerViewer.render({ optionalContentConfig: optionalContentConfig, pdfDocument: pdfDocument }); }); if ("requestIdleCallback" in window) { var callback = window.requestIdleCallback(function () { _this13._collectTelemetry(pdfDocument); _this13._idleCallbacks["delete"](callback); }, { timeout: 1000 }); _this13._idleCallbacks.add(callback); } _this13._initializeJavaScript(pdfDocument); }); this._initializePageLabels(pdfDocument); this._initializeMetadata(pdfDocument); }, _initializeJavaScript: function _initializeJavaScript(pdfDocument) { var _this14 = this; return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee15() { var _yield$Promise$all, _yield$Promise$all2, objects, calculationOrder, docActions, scripting, internalEvents, domEvents, updateFromSandbox, visitedPages, pageOpen, pageClose, dispatchEventInSandbox, mouseDown, mouseUp, _iterator4, _step4, _step4$value, name, listener, _iterator5, _step5, _step5$value, _name2, _listener2, _this14$metadata, _this14$metadata2; return _regenerator["default"].wrap(function _callee15$(_context15) { while (1) { switch (_context15.prev = _context15.next) { case 0: if (_app_options.AppOptions.get("enableScripting")) { _context15.next = 2; break; } return _context15.abrupt("return"); case 2: _context15.next = 4; return Promise.all([pdfDocument.getFieldObjects(), pdfDocument.getCalculationOrderIds(), pdfDocument.getJSActions()]); case 4: _yield$Promise$all = _context15.sent; _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 3); objects = _yield$Promise$all2[0]; calculationOrder = _yield$Promise$all2[1]; docActions = _yield$Promise$all2[2]; if (!(!objects && !docActions)) { _context15.next = 11; break; } return _context15.abrupt("return"); case 11: if (!(pdfDocument !== _this14.pdfDocument)) { _context15.next = 13; break; } return _context15.abrupt("return"); case 13: scripting = _this14.externalServices.createScripting({ sandboxBundleSrc: _app_options.AppOptions.get("sandboxBundleSrc") }); internalEvents = new Map(), domEvents = new Map(); _this14._scriptingInstance = { scripting: scripting, ready: false, internalEvents: internalEvents, domEvents: domEvents }; if (_this14.documentInfo) { _context15.next = 21; break; } _context15.next = 19; return new Promise(function (resolve) { _this14.eventBus._on("metadataloaded", function (evt) { resolve(); }, { once: true }); }); case 19: if (!(pdfDocument !== _this14.pdfDocument)) { _context15.next = 21; break; } return _context15.abrupt("return"); case 21: if (_this14._contentLength) { _context15.next = 26; break; } _context15.next = 24; return new Promise(function (resolve) { _this14.eventBus._on("documentloaded", function (evt) { resolve(); }, { once: true }); }); case 24: if (!(pdfDocument !== _this14.pdfDocument)) { _context15.next = 26; break; } return _context15.abrupt("return"); case 26: updateFromSandbox = function updateFromSandbox(_ref9) { var detail = _ref9.detail; var id = detail.id, command = detail.command, value = detail.value; if (!id) { switch (command) { case "clear": console.clear(); break; case "error": console.error(value); break; case "layout": _this14.pdfViewer.spreadMode = apiPageLayoutToSpreadMode(value); break; case "page-num": _this14.pdfViewer.currentPageNumber = value + 1; break; case "print": _this14.pdfViewer.pagesPromise.then(function () { _this14.triggerPrinting(); }); break; case "println": console.log(value); break; case "zoom": _this14.pdfViewer.currentScaleValue = value; break; } return; } var element = document.getElementById(id); if (element) { element.dispatchEvent(new CustomEvent("updatefromsandbox", { detail: detail })); } else { if (value !== undefined && value !== null) { pdfDocument.annotationStorage.setValue(id, value); } } }; internalEvents.set("updatefromsandbox", updateFromSandbox); visitedPages = new Map(); pageOpen = function pageOpen(_ref10) { var pageNumber = _ref10.pageNumber, actionsPromise = _ref10.actionsPromise; visitedPages.set(pageNumber, _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee13() { var _this14$_scriptingIns; var actions; return _regenerator["default"].wrap(function _callee13$(_context13) { while (1) { switch (_context13.prev = _context13.next) { case 0: actions = null; if (visitedPages.has(pageNumber)) { _context13.next = 7; break; } _context13.next = 4; return actionsPromise; case 4: actions = _context13.sent; if (!(pdfDocument !== _this14.pdfDocument)) { _context13.next = 7; break; } return _context13.abrupt("return"); case 7: _context13.next = 9; return (_this14$_scriptingIns = _this14._scriptingInstance) === null || _this14$_scriptingIns === void 0 ? void 0 : _this14$_scriptingIns.scripting.dispatchEventInSandbox({ id: "page", name: "PageOpen", pageNumber: pageNumber, actions: actions }); case 9: case "end": return _context13.stop(); } } }, _callee13); }))()); }; pageClose = /*#__PURE__*/function () { var _ref13 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee14(_ref12) { var _this14$_scriptingIns2; var pageNumber, actionsPromise; return _regenerator["default"].wrap(function _callee14$(_context14) { while (1) { switch (_context14.prev = _context14.next) { case 0: pageNumber = _ref12.pageNumber; actionsPromise = visitedPages.get(pageNumber); if (actionsPromise) { _context14.next = 4; break; } return _context14.abrupt("return"); case 4: visitedPages.set(pageNumber, null); _context14.next = 7; return actionsPromise; case 7: if (!(pdfDocument !== _this14.pdfDocument)) { _context14.next = 9; break; } return _context14.abrupt("return"); case 9: _context14.next = 11; return (_this14$_scriptingIns2 = _this14._scriptingInstance) === null || _this14$_scriptingIns2 === void 0 ? void 0 : _this14$_scriptingIns2.scripting.dispatchEventInSandbox({ id: "page", name: "PageClose", pageNumber: pageNumber }); case 11: case "end": return _context14.stop(); } } }, _callee14); })); return function pageClose(_x3) { return _ref13.apply(this, arguments); }; }(); internalEvents.set("pageopen", pageOpen); internalEvents.set("pageclose", pageClose); dispatchEventInSandbox = function dispatchEventInSandbox(_ref14) { var detail = _ref14.detail; scripting.dispatchEventInSandbox(detail); }; internalEvents.set("dispatcheventinsandbox", dispatchEventInSandbox); mouseDown = function mouseDown(event) { _this14._mouseState.isDown = true; }; domEvents.set("mousedown", mouseDown); mouseUp = function mouseUp(event) { _this14._mouseState.isDown = false; }; domEvents.set("mouseup", mouseUp); _iterator4 = _createForOfIteratorHelper(internalEvents); try { for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { _step4$value = _slicedToArray(_step4.value, 2), name = _step4$value[0], listener = _step4$value[1]; _this14.eventBus._on(name, listener); } } catch (err) { _iterator4.e(err); } finally { _iterator4.f(); } _iterator5 = _createForOfIteratorHelper(domEvents); try { for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { _step5$value = _slicedToArray(_step5.value, 2), _name2 = _step5$value[0], _listener2 = _step5$value[1]; window.addEventListener(_name2, _listener2); } } catch (err) { _iterator5.e(err); } finally { _iterator5.f(); } _context15.prev = 43; _context15.next = 46; return scripting.createSandbox({ objects: objects, calculationOrder: calculationOrder, appInfo: { platform: navigator.platform, language: navigator.language }, docInfo: _objectSpread(_objectSpread({}, _this14.documentInfo), {}, { baseURL: _this14.baseUrl, filesize: _this14._contentLength, filename: _this14._docFilename, metadata: (_this14$metadata = _this14.metadata) === null || _this14$metadata === void 0 ? void 0 : _this14$metadata.getRaw(), authors: (_this14$metadata2 = _this14.metadata) === null || _this14$metadata2 === void 0 ? void 0 : _this14$metadata2.get("dc:creator"), numPages: pdfDocument.numPages, URL: _this14.url, actions: docActions }) }); case 46: if (_this14.externalServices.isInAutomation) { _this14.eventBus.dispatch("sandboxcreated", { source: _this14 }); } _context15.next = 54; break; case 49: _context15.prev = 49; _context15.t0 = _context15["catch"](43); console.error("_initializeJavaScript: \"".concat(_context15.t0 === null || _context15.t0 === void 0 ? void 0 : _context15.t0.message, "\".")); _this14._destroyScriptingInstance(); return _context15.abrupt("return"); case 54: _context15.next = 56; return scripting.dispatchEventInSandbox({ id: "doc", name: "Open" }); case 56: _context15.next = 58; return _this14.pdfViewer.initializeScriptingEvents(); case 58: Promise.resolve().then(function () { if (_this14._scriptingInstance) { _this14._scriptingInstance.ready = true; } }); case 59: case "end": return _context15.stop(); } } }, _callee15, null, [[43, 49]]); }))(); }, _collectTelemetry: function _collectTelemetry(pdfDocument) { var _this15 = this; return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee16() { var markInfo, tagged; return _regenerator["default"].wrap(function _callee16$(_context16) { while (1) { switch (_context16.prev = _context16.next) { case 0: _context16.next = 2; return _this15.pdfDocument.getMarkInfo(); case 2: markInfo = _context16.sent; if (!(pdfDocument !== _this15.pdfDocument)) { _context16.next = 5; break; } return _context16.abrupt("return"); case 5: tagged = (markInfo === null || markInfo === void 0 ? void 0 : markInfo.Marked) || false; _this15.externalServices.reportTelemetry({ type: "tagged", tagged: tagged }); case 7: case "end": return _context16.stop(); } } }, _callee16); }))(); }, _initializeAutoPrint: function _initializeAutoPrint(pdfDocument, openActionPromise) { var _this16 = this; return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee17() { var _yield$Promise$all3, _yield$Promise$all4, openAction, javaScript, triggerAutoPrint, _iterator6, _step6, js; return _regenerator["default"].wrap(function _callee17$(_context17) { while (1) { switch (_context17.prev = _context17.next) { case 0: _context17.next = 2; return Promise.all([openActionPromise, !_app_options.AppOptions.get("enableScripting") ? pdfDocument.getJavaScript() : null]); case 2: _yield$Promise$all3 = _context17.sent; _yield$Promise$all4 = _slicedToArray(_yield$Promise$all3, 2); openAction = _yield$Promise$all4[0]; javaScript = _yield$Promise$all4[1]; if (!(pdfDocument !== _this16.pdfDocument)) { _context17.next = 8; break; } return _context17.abrupt("return"); case 8: triggerAutoPrint = false; if ((openAction === null || openAction === void 0 ? void 0 : openAction.action) === "Print") { triggerAutoPrint = true; } if (!javaScript) { _context17.next = 31; break; } javaScript.some(function (js) { if (!js) { return false; } console.warn("Warning: JavaScript is not supported"); _this16._delayedFallback(_pdfjsLib.UNSUPPORTED_FEATURES.javaScript); return true; }); if (triggerAutoPrint) { _context17.next = 31; break; } _iterator6 = _createForOfIteratorHelper(javaScript); _context17.prev = 14; _iterator6.s(); case 16: if ((_step6 = _iterator6.n()).done) { _context17.next = 23; break; } js = _step6.value; if (!(js && _ui_utils.AutoPrintRegExp.test(js))) { _context17.next = 21; break; } triggerAutoPrint = true; return _context17.abrupt("break", 23); case 21: _context17.next = 16; break; case 23: _context17.next = 28; break; case 25: _context17.prev = 25; _context17.t0 = _context17["catch"](14); _iterator6.e(_context17.t0); case 28: _context17.prev = 28; _iterator6.f(); return _context17.finish(28); case 31: if (triggerAutoPrint) { _this16.triggerPrinting(); } case 32: case "end": return _context17.stop(); } } }, _callee17, null, [[14, 25, 28, 31]]); }))(); }, _initializeMetadata: function _initializeMetadata(pdfDocument) { var _this17 = this; return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee18() { var _this17$_contentLengt; var _yield$pdfDocument$ge, info, metadata, contentDispositionFilename, contentLength, pdfTitle, infoTitle, metadataTitle, versionId, generatorId, producer, formType; return _regenerator["default"].wrap(function _callee18$(_context18) { while (1) { switch (_context18.prev = _context18.next) { case 0: _context18.next = 2; return pdfDocument.getMetadata(); case 2: _yield$pdfDocument$ge = _context18.sent; info = _yield$pdfDocument$ge.info; metadata = _yield$pdfDocument$ge.metadata; contentDispositionFilename = _yield$pdfDocument$ge.contentDispositionFilename; contentLength = _yield$pdfDocument$ge.contentLength; if (!(pdfDocument !== _this17.pdfDocument)) { _context18.next = 9; break; } return _context18.abrupt("return"); case 9: _this17.documentInfo = info; _this17.metadata = metadata; _this17._contentDispositionFilename = contentDispositionFilename; (_this17$_contentLengt = _this17._contentLength) !== null && _this17$_contentLengt !== void 0 ? _this17$_contentLengt : _this17._contentLength = contentLength; console.log("PDF ".concat(pdfDocument.fingerprint, " [").concat(info.PDFFormatVersion, " ") + "".concat((info.Producer || "-").trim(), " / ").concat((info.Creator || "-").trim(), "] ") + "(PDF.js: ".concat(_pdfjsLib.version || "-") + "".concat(_this17.pdfViewer.enableWebGL ? " [WebGL]" : "", ")")); infoTitle = info === null || info === void 0 ? void 0 : info.Title; if (infoTitle) { pdfTitle = infoTitle; } metadataTitle = metadata === null || metadata === void 0 ? void 0 : metadata.get("dc:title"); if (metadataTitle) { if (metadataTitle !== "Untitled" && !/[\uFFF0-\uFFFF]/g.test(metadataTitle)) { pdfTitle = metadataTitle; } } if (pdfTitle) { _this17.setTitle("".concat(pdfTitle, " - ").concat(contentDispositionFilename || document.title)); } else if (contentDispositionFilename) { _this17.setTitle(contentDispositionFilename); } if (info.IsXFAPresent && !info.IsAcroFormPresent) { console.warn("Warning: XFA is not supported"); _this17._delayedFallback(_pdfjsLib.UNSUPPORTED_FEATURES.forms); } else if ((info.IsAcroFormPresent || info.IsXFAPresent) && !_this17.pdfViewer.renderInteractiveForms) { console.warn("Warning: Interactive form support is not enabled"); _this17._delayedFallback(_pdfjsLib.UNSUPPORTED_FEATURES.forms); } versionId = "other"; if (KNOWN_VERSIONS.includes(info.PDFFormatVersion)) { versionId = "v".concat(info.PDFFormatVersion.replace(".", "_")); } generatorId = "other"; if (info.Producer) { producer = info.Producer.toLowerCase(); KNOWN_GENERATORS.some(function (generator) { if (!producer.includes(generator)) { return false; } generatorId = generator.replace(/[ .-]/g, "_"); return true; }); } formType = null; if (info.IsXFAPresent) { formType = "xfa"; } else if (info.IsAcroFormPresent) { formType = "acroform"; } _this17.externalServices.reportTelemetry({ type: "documentInfo", version: versionId, generator: generatorId, formType: formType }); _this17.eventBus.dispatch("metadataloaded", { source: _this17 }); case 28: case "end": return _context18.stop(); } } }, _callee18); }))(); }, _initializePageLabels: function _initializePageLabels(pdfDocument) { var _this18 = this; return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee19() { var labels, numLabels, i, pdfViewer, pdfThumbnailViewer, toolbar; return _regenerator["default"].wrap(function _callee19$(_context19) { while (1) { switch (_context19.prev = _context19.next) { case 0: _context19.next = 2; return pdfDocument.getPageLabels(); case 2: labels = _context19.sent; if (!(pdfDocument !== _this18.pdfDocument)) { _context19.next = 5; break; } return _context19.abrupt("return"); case 5: if (!(!labels || _app_options.AppOptions.get("disablePageLabels"))) { _context19.next = 7; break; } return _context19.abrupt("return"); case 7: numLabels = labels.length; if (!(numLabels !== _this18.pagesCount)) { _context19.next = 11; break; } console.error("The number of Page Labels does not match the number of pages in the document."); return _context19.abrupt("return"); case 11: i = 0; while (i < numLabels && labels[i] === (i + 1).toString()) { i++; } if (!(i === numLabels)) { _context19.next = 15; break; } return _context19.abrupt("return"); case 15: pdfViewer = _this18.pdfViewer, pdfThumbnailViewer = _this18.pdfThumbnailViewer, toolbar = _this18.toolbar; pdfViewer.setPageLabels(labels); pdfThumbnailViewer.setPageLabels(labels); toolbar.setPagesCount(numLabels, true); toolbar.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel); case 20: case "end": return _context19.stop(); } } }, _callee19); }))(); }, _initializePdfHistory: function _initializePdfHistory(_ref15) { var fingerprint = _ref15.fingerprint, viewOnLoad = _ref15.viewOnLoad, _ref15$initialDest = _ref15.initialDest, initialDest = _ref15$initialDest === void 0 ? null : _ref15$initialDest; if (this.isViewerEmbedded || _app_options.AppOptions.get("disableHistory")) { return; } this.pdfHistory.initialize({ fingerprint: fingerprint, resetHistory: viewOnLoad === ViewOnLoad.INITIAL, updateUrl: _app_options.AppOptions.get("historyUpdateUrl") }); if (this.pdfHistory.initialBookmark) { this.initialBookmark = this.pdfHistory.initialBookmark; this.initialRotation = this.pdfHistory.initialRotation; } if (initialDest && !this.initialBookmark && viewOnLoad === ViewOnLoad.UNKNOWN) { this.initialBookmark = JSON.stringify(initialDest); this.pdfHistory.push({ explicitDest: initialDest, pageNumber: null }); } }, _initializePermissions: function _initializePermissions(pdfDocument) { var _this19 = this; return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee20() { var permissions; return _regenerator["default"].wrap(function _callee20$(_context20) { while (1) { switch (_context20.prev = _context20.next) { case 0: _context20.next = 2; return pdfDocument.getPermissions(); case 2: permissions = _context20.sent; if (!(pdfDocument !== _this19.pdfDocument)) { _context20.next = 5; break; } return _context20.abrupt("return"); case 5: if (!(!permissions || !_app_options.AppOptions.get("enablePermissions"))) { _context20.next = 7; break; } return _context20.abrupt("return"); case 7: if (!permissions.includes(_pdfjsLib.PermissionFlag.COPY)) { _this19.appConfig.viewerContainer.classList.add(ENABLE_PERMISSIONS_CLASS); } case 8: case "end": return _context20.stop(); } } }, _callee20); }))(); }, _initializeAnnotationStorageCallbacks: function _initializeAnnotationStorageCallbacks(pdfDocument) { if (pdfDocument !== this.pdfDocument) { return; } var annotationStorage = pdfDocument.annotationStorage; annotationStorage.onSetModified = function () { window.addEventListener("beforeunload", beforeUnload); }; annotationStorage.onResetModified = function () { window.removeEventListener("beforeunload", beforeUnload); }; }, setInitialView: function setInitialView(storedHash) { var _this20 = this; var _ref16 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, rotation = _ref16.rotation, sidebarView = _ref16.sidebarView, scrollMode = _ref16.scrollMode, spreadMode = _ref16.spreadMode; var setRotation = function setRotation(angle) { if ((0, _ui_utils.isValidRotation)(angle)) { _this20.pdfViewer.pagesRotation = angle; } }; var setViewerModes = function setViewerModes(scroll, spread) { if ((0, _ui_utils.isValidScrollMode)(scroll)) { _this20.pdfViewer.scrollMode = scroll; } if ((0, _ui_utils.isValidSpreadMode)(spread)) { _this20.pdfViewer.spreadMode = spread; } }; this.isInitialViewSet = true; this.pdfSidebar.setInitialView(sidebarView); setViewerModes(scrollMode, spreadMode); if (this.initialBookmark) { setRotation(this.initialRotation); delete this.initialRotation; this.pdfLinkService.setHash(this.initialBookmark); this.initialBookmark = null; } else if (storedHash) { setRotation(rotation); this.pdfLinkService.setHash(storedHash); } this.toolbar.setPageNumber(this.pdfViewer.currentPageNumber, this.pdfViewer.currentPageLabel); this.secondaryToolbar.setPageNumber(this.pdfViewer.currentPageNumber); if (!this.pdfViewer.currentScaleValue) { this.pdfViewer.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE; } }, cleanup: function cleanup() { if (!this.pdfDocument) { return; } this.pdfViewer.cleanup(); this.pdfThumbnailViewer.cleanup(); if (this.pdfViewer.renderer !== _ui_utils.RendererType.SVG) { this.pdfDocument.cleanup(); } }, forceRendering: function forceRendering() { this.pdfRenderingQueue.printing = !!this.printService; this.pdfRenderingQueue.isThumbnailViewEnabled = this.pdfSidebar.isThumbnailViewVisible; this.pdfRenderingQueue.renderHighestPriority(); }, beforePrint: function beforePrint() { var _this$_scriptingInsta, _this21 = this; (_this$_scriptingInsta = this._scriptingInstance) === null || _this$_scriptingInsta === void 0 ? void 0 : _this$_scriptingInsta.scripting.dispatchEventInSandbox({ id: "doc", name: "WillPrint" }); if (this.printService) { return; } if (!this.supportsPrinting) { this.l10n.get("printing_not_supported", null, "Warning: Printing is not fully supported by this browser.").then(function (printMessage) { _this21.error(printMessage); }); return; } if (!this.pdfViewer.pageViewsReady) { this.l10n.get("printing_not_ready", null, "Warning: The PDF is not fully loaded for printing.").then(function (notReadyMessage) { window.alert(notReadyMessage); }); return; } var pagesOverview = this.pdfViewer.getPagesOverview(); var printContainer = this.appConfig.printContainer; var printResolution = _app_options.AppOptions.get("printResolution"); var optionalContentConfigPromise = this.pdfViewer.optionalContentConfigPromise; var printService = PDFPrintServiceFactory.instance.createPrintService(this.pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise, this.l10n); this.printService = printService; this.forceRendering(); printService.layout(); this.externalServices.reportTelemetry({ type: "print" }); }, afterPrint: function afterPrint() { var _this$_scriptingInsta2; (_this$_scriptingInsta2 = this._scriptingInstance) === null || _this$_scriptingInsta2 === void 0 ? void 0 : _this$_scriptingInsta2.scripting.dispatchEventInSandbox({ id: "doc", name: "DidPrint" }); if (this.printService) { this.printService.destroy(); this.printService = null; if (this.pdfDocument) { this.pdfDocument.annotationStorage.resetModified(); } } this.forceRendering(); }, rotatePages: function rotatePages(delta) { if (!this.pdfDocument) { return; } var newRotation = (this.pdfViewer.pagesRotation + 360 + delta) % 360; this.pdfViewer.pagesRotation = newRotation; }, requestPresentationMode: function requestPresentationMode() { if (!this.pdfPresentationMode) { return; } this.pdfPresentationMode.request(); }, triggerPrinting: function triggerPrinting() { if (!this.supportsPrinting) { return; } window.print(); }, bindEvents: function bindEvents() { var eventBus = this.eventBus, _boundEvents = this._boundEvents; _boundEvents.beforePrint = this.beforePrint.bind(this); _boundEvents.afterPrint = this.afterPrint.bind(this); eventBus._on("resize", webViewerResize); eventBus._on("hashchange", webViewerHashchange); eventBus._on("beforeprint", _boundEvents.beforePrint); eventBus._on("afterprint", _boundEvents.afterPrint); eventBus._on("pagerendered", webViewerPageRendered); eventBus._on("updateviewarea", webViewerUpdateViewarea); eventBus._on("pagechanging", webViewerPageChanging); eventBus._on("scalechanging", webViewerScaleChanging); eventBus._on("rotationchanging", webViewerRotationChanging); eventBus._on("sidebarviewchanged", webViewerSidebarViewChanged); eventBus._on("pagemode", webViewerPageMode); eventBus._on("namedaction", webViewerNamedAction); eventBus._on("presentationmodechanged", webViewerPresentationModeChanged); eventBus._on("presentationmode", webViewerPresentationMode); eventBus._on("print", webViewerPrint); eventBus._on("download", webViewerDownload); eventBus._on("save", webViewerSave); eventBus._on("firstpage", webViewerFirstPage); eventBus._on("lastpage", webViewerLastPage); eventBus._on("nextpage", webViewerNextPage); eventBus._on("previouspage", webViewerPreviousPage); eventBus._on("zoomin", webViewerZoomIn); eventBus._on("zoomout", webViewerZoomOut); eventBus._on("zoomreset", webViewerZoomReset); eventBus._on("pagenumberchanged", webViewerPageNumberChanged); eventBus._on("scalechanged", webViewerScaleChanged); eventBus._on("rotatecw", webViewerRotateCw); eventBus._on("rotateccw", webViewerRotateCcw); eventBus._on("optionalcontentconfig", webViewerOptionalContentConfig); eventBus._on("switchscrollmode", webViewerSwitchScrollMode); eventBus._on("scrollmodechanged", webViewerScrollModeChanged); eventBus._on("switchspreadmode", webViewerSwitchSpreadMode); eventBus._on("spreadmodechanged", webViewerSpreadModeChanged); eventBus._on("documentproperties", webViewerDocumentProperties); eventBus._on("find", webViewerFind); eventBus._on("findfromurlhash", webViewerFindFromUrlHash); eventBus._on("updatefindmatchescount", webViewerUpdateFindMatchesCount); eventBus._on("updatefindcontrolstate", webViewerUpdateFindControlState); if (_app_options.AppOptions.get("pdfBug")) { _boundEvents.reportPageStatsPDFBug = reportPageStatsPDFBug; eventBus._on("pagerendered", _boundEvents.reportPageStatsPDFBug); eventBus._on("pagechanging", _boundEvents.reportPageStatsPDFBug); } eventBus._on("fileinputchange", webViewerFileInputChange); eventBus._on("openfile", webViewerOpenFile); }, bindWindowEvents: function bindWindowEvents() { var eventBus = this.eventBus, _boundEvents = this._boundEvents; _boundEvents.windowResize = function () { eventBus.dispatch("resize", { source: window }); }; _boundEvents.windowHashChange = function () { eventBus.dispatch("hashchange", { source: window, hash: document.location.hash.substring(1) }); }; _boundEvents.windowBeforePrint = function () { eventBus.dispatch("beforeprint", { source: window }); }; _boundEvents.windowAfterPrint = function () { eventBus.dispatch("afterprint", { source: window }); }; _boundEvents.windowUpdateFromSandbox = function (event) { eventBus.dispatch("updatefromsandbox", { source: window, detail: event.detail }); }; window.addEventListener("visibilitychange", webViewerVisibilityChange); window.addEventListener("wheel", webViewerWheel, { passive: false }); window.addEventListener("touchstart", webViewerTouchStart, { passive: false }); window.addEventListener("click", webViewerClick); window.addEventListener("keydown", webViewerKeyDown); window.addEventListener("keyup", webViewerKeyUp); window.addEventListener("resize", _boundEvents.windowResize); window.addEventListener("hashchange", _boundEvents.windowHashChange); window.addEventListener("beforeprint", _boundEvents.windowBeforePrint); window.addEventListener("afterprint", _boundEvents.windowAfterPrint); window.addEventListener("updatefromsandbox", _boundEvents.windowUpdateFromSandbox); }, unbindEvents: function unbindEvents() { var eventBus = this.eventBus, _boundEvents = this._boundEvents; eventBus._off("resize", webViewerResize); eventBus._off("hashchange", webViewerHashchange); eventBus._off("beforeprint", _boundEvents.beforePrint); eventBus._off("afterprint", _boundEvents.afterPrint); eventBus._off("pagerendered", webViewerPageRendered); eventBus._off("updateviewarea", webViewerUpdateViewarea); eventBus._off("pagechanging", webViewerPageChanging); eventBus._off("scalechanging", webViewerScaleChanging); eventBus._off("rotationchanging", webViewerRotationChanging); eventBus._off("sidebarviewchanged", webViewerSidebarViewChanged); eventBus._off("pagemode", webViewerPageMode); eventBus._off("namedaction", webViewerNamedAction); eventBus._off("presentationmodechanged", webViewerPresentationModeChanged); eventBus._off("presentationmode", webViewerPresentationMode); eventBus._off("print", webViewerPrint); eventBus._off("download", webViewerDownload); eventBus._off("save", webViewerSave); eventBus._off("firstpage", webViewerFirstPage); eventBus._off("lastpage", webViewerLastPage); eventBus._off("nextpage", webViewerNextPage); eventBus._off("previouspage", webViewerPreviousPage); eventBus._off("zoomin", webViewerZoomIn); eventBus._off("zoomout", webViewerZoomOut); eventBus._off("zoomreset", webViewerZoomReset); eventBus._off("pagenumberchanged", webViewerPageNumberChanged); eventBus._off("scalechanged", webViewerScaleChanged); eventBus._off("rotatecw", webViewerRotateCw); eventBus._off("rotateccw", webViewerRotateCcw); eventBus._off("optionalcontentconfig", webViewerOptionalContentConfig); eventBus._off("switchscrollmode", webViewerSwitchScrollMode); eventBus._off("scrollmodechanged", webViewerScrollModeChanged); eventBus._off("switchspreadmode", webViewerSwitchSpreadMode); eventBus._off("spreadmodechanged", webViewerSpreadModeChanged); eventBus._off("documentproperties", webViewerDocumentProperties); eventBus._off("find", webViewerFind); eventBus._off("findfromurlhash", webViewerFindFromUrlHash); eventBus._off("updatefindmatchescount", webViewerUpdateFindMatchesCount); eventBus._off("updatefindcontrolstate", webViewerUpdateFindControlState); if (_boundEvents.reportPageStatsPDFBug) { eventBus._off("pagerendered", _boundEvents.reportPageStatsPDFBug); eventBus._off("pagechanging", _boundEvents.reportPageStatsPDFBug); _boundEvents.reportPageStatsPDFBug = null; } eventBus._off("fileinputchange", webViewerFileInputChange); eventBus._off("openfile", webViewerOpenFile); _boundEvents.beforePrint = null; _boundEvents.afterPrint = null; }, unbindWindowEvents: function unbindWindowEvents() { var _boundEvents = this._boundEvents; window.removeEventListener("visibilitychange", webViewerVisibilityChange); window.removeEventListener("wheel", webViewerWheel, { passive: false }); window.removeEventListener("touchstart", webViewerTouchStart, { passive: false }); window.removeEventListener("click", webViewerClick); window.removeEventListener("keydown", webViewerKeyDown); window.removeEventListener("keyup", webViewerKeyUp); window.removeEventListener("resize", _boundEvents.windowResize); window.removeEventListener("hashchange", _boundEvents.windowHashChange); window.removeEventListener("beforeprint", _boundEvents.windowBeforePrint); window.removeEventListener("afterprint", _boundEvents.windowAfterPrint); window.removeEventListener("updatefromsandbox", _boundEvents.windowUpdateFromSandbox); _boundEvents.windowResize = null; _boundEvents.windowHashChange = null; _boundEvents.windowBeforePrint = null; _boundEvents.windowAfterPrint = null; _boundEvents.windowUpdateFromSandbox = null; }, accumulateWheelTicks: function accumulateWheelTicks(ticks) { if (this._wheelUnusedTicks > 0 && ticks < 0 || this._wheelUnusedTicks < 0 && ticks > 0) { this._wheelUnusedTicks = 0; } this._wheelUnusedTicks += ticks; var wholeTicks = Math.sign(this._wheelUnusedTicks) * Math.floor(Math.abs(this._wheelUnusedTicks)); this._wheelUnusedTicks -= wholeTicks; return wholeTicks; }, _unblockDocumentLoadEvent: function _unblockDocumentLoadEvent() { if (document.blockUnblockOnload) { document.blockUnblockOnload(false); } this._unblockDocumentLoadEvent = function () {}; }, get scriptingReady() { var _this$_scriptingInsta3; return ((_this$_scriptingInsta3 = this._scriptingInstance) === null || _this$_scriptingInsta3 === void 0 ? void 0 : _this$_scriptingInsta3.ready) || false; } }; exports.PDFViewerApplication = PDFViewerApplication; var validateFileURL; { var HOSTED_VIEWER_ORIGINS = ["null", "http://mozilla.github.io", "https://mozilla.github.io"]; validateFileURL = function validateFileURL(file) { if (file === undefined) { return; } try { var viewerOrigin = new URL(window.location.href).origin || "null"; if (HOSTED_VIEWER_ORIGINS.includes(viewerOrigin)) { return; } var _URL = new URL(file, window.location.href), origin = _URL.origin, protocol = _URL.protocol; if (origin !== viewerOrigin && protocol !== "blob:") { throw new Error("file origin does not match viewer's"); } } catch (ex) { PDFViewerApplication.l10n.get("loading_error", null, "An error occurred while loading the PDF.").then(function (loadingErrorMessage) { PDFViewerApplication.error(loadingErrorMessage, { message: ex === null || ex === void 0 ? void 0 : ex.message }); }); throw ex; } }; } function loadFakeWorker() { return _loadFakeWorker.apply(this, arguments); } function _loadFakeWorker() { _loadFakeWorker = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee21() { return _regenerator["default"].wrap(function _callee21$(_context21) { while (1) { switch (_context21.prev = _context21.next) { case 0: if (!_pdfjsLib.GlobalWorkerOptions.workerSrc) { _pdfjsLib.GlobalWorkerOptions.workerSrc = _app_options.AppOptions.get("workerSrc"); } return _context21.abrupt("return", (0, _pdfjsLib.loadScript)(_pdfjsLib.PDFWorker.getWorkerSrc())); case 2: case "end": return _context21.stop(); } } }, _callee21); })); return _loadFakeWorker.apply(this, arguments); } function loadAndEnablePDFBug(enabledTabs) { var appConfig = PDFViewerApplication.appConfig; return (0, _pdfjsLib.loadScript)(appConfig.debuggerScriptPath).then(function () { PDFBug.enable(enabledTabs); PDFBug.init({ OPS: _pdfjsLib.OPS }, appConfig.mainContainer); }); } function reportPageStatsPDFBug(_ref17) { var _pageView$pdfPage; var pageNumber = _ref17.pageNumber; if (typeof Stats === "undefined" || !Stats.enabled) { return; } var pageView = PDFViewerApplication.pdfViewer.getPageView(pageNumber - 1); var pageStats = pageView === null || pageView === void 0 ? void 0 : (_pageView$pdfPage = pageView.pdfPage) === null || _pageView$pdfPage === void 0 ? void 0 : _pageView$pdfPage.stats; if (!pageStats) { return; } Stats.add(pageNumber, pageStats); } function webViewerInitialized() { var appConfig = PDFViewerApplication.appConfig; var file; var queryString = document.location.search.substring(1); var params = (0, _ui_utils.parseQueryString)(queryString); file = "file" in params ? params.file : _app_options.AppOptions.get("defaultUrl"); validateFileURL(file); var fileInput = document.createElement("input"); fileInput.id = appConfig.openFileInputName; fileInput.className = "fileInput"; fileInput.setAttribute("type", "file"); fileInput.oncontextmenu = _ui_utils.noContextMenuHandler; document.body.appendChild(fileInput); if (!window.File || !window.FileReader || !window.FileList || !window.Blob) { appConfig.toolbar.openFile.setAttribute("hidden", "true"); appConfig.secondaryToolbar.openFileButton.setAttribute("hidden", "true"); } else { fileInput.value = null; } fileInput.addEventListener("change", function (evt) { var files = evt.target.files; if (!files || files.length === 0) { return; } PDFViewerApplication.eventBus.dispatch("fileinputchange", { source: this, fileInput: evt.target }); }); appConfig.mainContainer.addEventListener("dragover", function (evt) { evt.preventDefault(); evt.dataTransfer.dropEffect = "move"; }); appConfig.mainContainer.addEventListener("drop", function (evt) { evt.preventDefault(); var files = evt.dataTransfer.files; if (!files || files.length === 0) { return; } PDFViewerApplication.eventBus.dispatch("fileinputchange", { source: this, fileInput: evt.dataTransfer }); }); if (!PDFViewerApplication.supportsDocumentFonts) { _app_options.AppOptions.set("disableFontFace", true); PDFViewerApplication.l10n.get("web_fonts_disabled", null, "Web fonts are disabled: unable to use embedded PDF fonts.").then(function (msg) { console.warn(msg); }); } if (!PDFViewerApplication.supportsPrinting) { appConfig.toolbar.print.classList.add("hidden"); appConfig.secondaryToolbar.printButton.classList.add("hidden"); } if (!PDFViewerApplication.supportsFullscreen) { appConfig.toolbar.presentationModeButton.classList.add("hidden"); appConfig.secondaryToolbar.presentationModeButton.classList.add("hidden"); } if (PDFViewerApplication.supportsIntegratedFind) { appConfig.toolbar.viewFind.classList.add("hidden"); } appConfig.mainContainer.addEventListener("transitionend", function (evt) { if (evt.target === this) { PDFViewerApplication.eventBus.dispatch("resize", { source: this }); } }, true); try { webViewerOpenFileViaURL(file); } catch (reason) { PDFViewerApplication.l10n.get("loading_error", null, "An error occurred while loading the PDF.").then(function (msg) { PDFViewerApplication.error(msg, reason); }); } } var webViewerOpenFileViaURL; { webViewerOpenFileViaURL = function webViewerOpenFileViaURL(file) { if (file && file.lastIndexOf("file:", 0) === 0) { PDFViewerApplication.setTitleUsingUrl(file); var xhr = new XMLHttpRequest(); xhr.onload = function () { PDFViewerApplication.open(new Uint8Array(xhr.response)); }; xhr.open("GET", file); xhr.responseType = "arraybuffer"; xhr.send(); return; } if (file) { PDFViewerApplication.open(file); } }; } function webViewerResetPermissions() { var appConfig = PDFViewerApplication.appConfig; if (!appConfig) { return; } appConfig.viewerContainer.classList.remove(ENABLE_PERMISSIONS_CLASS); } function webViewerPageRendered(_ref18) { var pageNumber = _ref18.pageNumber, timestamp = _ref18.timestamp, error = _ref18.error; if (pageNumber === PDFViewerApplication.page) { PDFViewerApplication.toolbar.updateLoadingIndicatorState(false); } if (PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) { var pageView = PDFViewerApplication.pdfViewer.getPageView(pageNumber - 1); var thumbnailView = PDFViewerApplication.pdfThumbnailViewer.getThumbnail(pageNumber - 1); if (pageView && thumbnailView) { thumbnailView.setImage(pageView); } } if (error) { PDFViewerApplication.l10n.get("rendering_error", null, "An error occurred while rendering the page.").then(function (msg) { PDFViewerApplication.error(msg, error); }); } PDFViewerApplication.externalServices.reportTelemetry({ type: "pageInfo", timestamp: timestamp }); PDFViewerApplication.pdfDocument.getStats().then(function (stats) { PDFViewerApplication.externalServices.reportTelemetry({ type: "documentStats", stats: stats }); }); } function webViewerPageMode(_ref19) { var mode = _ref19.mode; var view; switch (mode) { case "thumbs": view = _ui_utils.SidebarView.THUMBS; break; case "bookmarks": case "outline": view = _ui_utils.SidebarView.OUTLINE; break; case "attachments": view = _ui_utils.SidebarView.ATTACHMENTS; break; case "layers": view = _ui_utils.SidebarView.LAYERS; break; case "none": view = _ui_utils.SidebarView.NONE; break; default: console.error('Invalid "pagemode" hash parameter: ' + mode); return; } PDFViewerApplication.pdfSidebar.switchView(view, true); } function webViewerNamedAction(evt) { switch (evt.action) { case "GoToPage": PDFViewerApplication.appConfig.toolbar.pageNumber.select(); break; case "Find": if (!PDFViewerApplication.supportsIntegratedFind) { PDFViewerApplication.findBar.toggle(); } break; case "Print": PDFViewerApplication.triggerPrinting(); break; case "SaveAs": webViewerSave(); break; } } function webViewerPresentationModeChanged(evt) { PDFViewerApplication.pdfViewer.presentationModeState = evt.state; } function webViewerSidebarViewChanged(evt) { PDFViewerApplication.pdfRenderingQueue.isThumbnailViewEnabled = PDFViewerApplication.pdfSidebar.isThumbnailViewVisible; var store = PDFViewerApplication.store; if (store && PDFViewerApplication.isInitialViewSet) { store.set("sidebarView", evt.view)["catch"](function () {}); } } function webViewerUpdateViewarea(evt) { var location = evt.location, store = PDFViewerApplication.store; if (store && PDFViewerApplication.isInitialViewSet) { store.setMultiple({ page: location.pageNumber, zoom: location.scale, scrollLeft: location.left, scrollTop: location.top, rotation: location.rotation })["catch"](function () {}); } var href = PDFViewerApplication.pdfLinkService.getAnchorUrl(location.pdfOpenParams); PDFViewerApplication.appConfig.toolbar.viewBookmark.href = href; PDFViewerApplication.appConfig.secondaryToolbar.viewBookmarkButton.href = href; var currentPage = PDFViewerApplication.pdfViewer.getPageView(PDFViewerApplication.page - 1); var loading = (currentPage === null || currentPage === void 0 ? void 0 : currentPage.renderingState) !== _pdf_rendering_queue.RenderingStates.FINISHED; PDFViewerApplication.toolbar.updateLoadingIndicatorState(loading); } function webViewerScrollModeChanged(evt) { var store = PDFViewerApplication.store; if (store && PDFViewerApplication.isInitialViewSet) { store.set("scrollMode", evt.mode)["catch"](function () {}); } } function webViewerSpreadModeChanged(evt) { var store = PDFViewerApplication.store; if (store && PDFViewerApplication.isInitialViewSet) { store.set("spreadMode", evt.mode)["catch"](function () {}); } } function webViewerResize() { var pdfDocument = PDFViewerApplication.pdfDocument, pdfViewer = PDFViewerApplication.pdfViewer; if (!pdfDocument) { return; } var currentScaleValue = pdfViewer.currentScaleValue; if (currentScaleValue === "auto" || currentScaleValue === "page-fit" || currentScaleValue === "page-width") { pdfViewer.currentScaleValue = currentScaleValue; } pdfViewer.update(); } function webViewerHashchange(evt) { var hash = evt.hash; if (!hash) { return; } if (!PDFViewerApplication.isInitialViewSet) { PDFViewerApplication.initialBookmark = hash; } else if (!PDFViewerApplication.pdfHistory.popStateInProgress) { PDFViewerApplication.pdfLinkService.setHash(hash); } } var webViewerFileInputChange, webViewerOpenFile; { webViewerFileInputChange = function webViewerFileInputChange(evt) { var _PDFViewerApplication; if ((_PDFViewerApplication = PDFViewerApplication.pdfViewer) !== null && _PDFViewerApplication !== void 0 && _PDFViewerApplication.isInPresentationMode) { return; } var file = evt.fileInput.files[0]; if (!_viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL) { var url = URL.createObjectURL(file); if (file.name) { url = { url: url, originalUrl: file.name }; } PDFViewerApplication.open(url); } else { PDFViewerApplication.setTitleUsingUrl(file.name); var fileReader = new FileReader(); fileReader.onload = function webViewerChangeFileReaderOnload(event) { var buffer = event.target.result; PDFViewerApplication.open(new Uint8Array(buffer)); }; fileReader.readAsArrayBuffer(file); } var appConfig = PDFViewerApplication.appConfig; appConfig.toolbar.viewBookmark.setAttribute("hidden", "true"); appConfig.secondaryToolbar.viewBookmarkButton.setAttribute("hidden", "true"); appConfig.toolbar.download.setAttribute("hidden", "true"); appConfig.secondaryToolbar.downloadButton.setAttribute("hidden", "true"); }; webViewerOpenFile = function webViewerOpenFile(evt) { var openFileInputName = PDFViewerApplication.appConfig.openFileInputName; document.getElementById(openFileInputName).click(); }; } function webViewerPresentationMode() { PDFViewerApplication.requestPresentationMode(); } function webViewerPrint() { PDFViewerApplication.triggerPrinting(); } function webViewerDownload() { PDFViewerApplication.downloadOrSave({ sourceEventType: "download" }); } function webViewerSave() { PDFViewerApplication.downloadOrSave({ sourceEventType: "save" }); } function webViewerFirstPage() { if (PDFViewerApplication.pdfDocument) { PDFViewerApplication.page = 1; } } function webViewerLastPage() { if (PDFViewerApplication.pdfDocument) { PDFViewerApplication.page = PDFViewerApplication.pagesCount; } } function webViewerNextPage() { PDFViewerApplication.pdfViewer.nextPage(); } function webViewerPreviousPage() { PDFViewerApplication.pdfViewer.previousPage(); } function webViewerZoomIn() { PDFViewerApplication.zoomIn(); } function webViewerZoomOut() { PDFViewerApplication.zoomOut(); } function webViewerZoomReset() { PDFViewerApplication.zoomReset(); } function webViewerPageNumberChanged(evt) { var pdfViewer = PDFViewerApplication.pdfViewer; if (evt.value !== "") { PDFViewerApplication.pdfLinkService.goToPage(evt.value); } if (evt.value !== pdfViewer.currentPageNumber.toString() && evt.value !== pdfViewer.currentPageLabel) { PDFViewerApplication.toolbar.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel); } } function webViewerScaleChanged(evt) { PDFViewerApplication.pdfViewer.currentScaleValue = evt.value; } function webViewerRotateCw() { PDFViewerApplication.rotatePages(90); } function webViewerRotateCcw() { PDFViewerApplication.rotatePages(-90); } function webViewerOptionalContentConfig(evt) { PDFViewerApplication.pdfViewer.optionalContentConfigPromise = evt.promise; } function webViewerSwitchScrollMode(evt) { PDFViewerApplication.pdfViewer.scrollMode = evt.mode; } function webViewerSwitchSpreadMode(evt) { PDFViewerApplication.pdfViewer.spreadMode = evt.mode; } function webViewerDocumentProperties() { PDFViewerApplication.pdfDocumentProperties.open(); } function webViewerFind(evt) { PDFViewerApplication.findController.executeCommand("find" + evt.type, { query: evt.query, phraseSearch: evt.phraseSearch, caseSensitive: evt.caseSensitive, entireWord: evt.entireWord, highlightAll: evt.highlightAll, findPrevious: evt.findPrevious }); } function webViewerFindFromUrlHash(evt) { PDFViewerApplication.findController.executeCommand("find", { query: evt.query, phraseSearch: evt.phraseSearch, caseSensitive: false, entireWord: false, highlightAll: true, findPrevious: false }); } function webViewerUpdateFindMatchesCount(_ref20) { var matchesCount = _ref20.matchesCount; if (PDFViewerApplication.supportsIntegratedFind) { PDFViewerApplication.externalServices.updateFindMatchesCount(matchesCount); } else { PDFViewerApplication.findBar.updateResultsCount(matchesCount); } } function webViewerUpdateFindControlState(_ref21) { var state = _ref21.state, previous = _ref21.previous, matchesCount = _ref21.matchesCount, rawQuery = _ref21.rawQuery; if (PDFViewerApplication.supportsIntegratedFind) { PDFViewerApplication.externalServices.updateFindControlState({ result: state, findPrevious: previous, matchesCount: matchesCount, rawQuery: rawQuery }); } else { PDFViewerApplication.findBar.updateUIState(state, previous, matchesCount); } } function webViewerScaleChanging(evt) { PDFViewerApplication.toolbar.setPageScale(evt.presetValue, evt.scale); PDFViewerApplication.pdfViewer.update(); } function webViewerRotationChanging(evt) { PDFViewerApplication.pdfThumbnailViewer.pagesRotation = evt.pagesRotation; PDFViewerApplication.forceRendering(); PDFViewerApplication.pdfViewer.currentPageNumber = evt.pageNumber; } function webViewerPageChanging(_ref22) { var pageNumber = _ref22.pageNumber, pageLabel = _ref22.pageLabel; PDFViewerApplication.toolbar.setPageNumber(pageNumber, pageLabel); PDFViewerApplication.secondaryToolbar.setPageNumber(pageNumber); if (PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) { PDFViewerApplication.pdfThumbnailViewer.scrollThumbnailIntoView(pageNumber); } } function webViewerVisibilityChange(evt) { if (document.visibilityState === "visible") { setZoomDisabledTimeout(); } } var zoomDisabledTimeout = null; function setZoomDisabledTimeout() { if (zoomDisabledTimeout) { clearTimeout(zoomDisabledTimeout); } zoomDisabledTimeout = setTimeout(function () { zoomDisabledTimeout = null; }, WHEEL_ZOOM_DISABLED_TIMEOUT); } function webViewerWheel(evt) { var pdfViewer = PDFViewerApplication.pdfViewer, supportedMouseWheelZoomModifierKeys = PDFViewerApplication.supportedMouseWheelZoomModifierKeys; if (pdfViewer.isInPresentationMode) { return; } if (evt.ctrlKey && supportedMouseWheelZoomModifierKeys.ctrlKey || evt.metaKey && supportedMouseWheelZoomModifierKeys.metaKey) { evt.preventDefault(); if (zoomDisabledTimeout || document.visibilityState === "hidden") { return; } var previousScale = pdfViewer.currentScale; var delta = (0, _ui_utils.normalizeWheelEventDirection)(evt); var ticks = 0; if (evt.deltaMode === WheelEvent.DOM_DELTA_LINE || evt.deltaMode === WheelEvent.DOM_DELTA_PAGE) { if (Math.abs(delta) >= 1) { ticks = Math.sign(delta); } else { ticks = PDFViewerApplication.accumulateWheelTicks(delta); } } else { var PIXELS_PER_LINE_SCALE = 30; ticks = PDFViewerApplication.accumulateWheelTicks(delta / PIXELS_PER_LINE_SCALE); } if (ticks < 0) { PDFViewerApplication.zoomOut(-ticks); } else if (ticks > 0) { PDFViewerApplication.zoomIn(ticks); } var currentScale = pdfViewer.currentScale; if (previousScale !== currentScale) { var scaleCorrectionFactor = currentScale / previousScale - 1; var rect = pdfViewer.container.getBoundingClientRect(); var dx = evt.clientX - rect.left; var dy = evt.clientY - rect.top; pdfViewer.container.scrollLeft += dx * scaleCorrectionFactor; pdfViewer.container.scrollTop += dy * scaleCorrectionFactor; } } else { setZoomDisabledTimeout(); } } function webViewerTouchStart(evt) { if (evt.touches.length > 1) { evt.preventDefault(); } } function webViewerClick(evt) { if (PDFViewerApplication.triggerDelayedFallback && PDFViewerApplication.pdfViewer.containsElement(evt.target)) { PDFViewerApplication.triggerDelayedFallback(); } if (!PDFViewerApplication.secondaryToolbar.isOpen) { return; } var appConfig = PDFViewerApplication.appConfig; if (PDFViewerApplication.pdfViewer.containsElement(evt.target) || appConfig.toolbar.container.contains(evt.target) && evt.target !== appConfig.secondaryToolbar.toggleButton) { PDFViewerApplication.secondaryToolbar.close(); } } function webViewerKeyUp(evt) { if (evt.keyCode === 9) { if (PDFViewerApplication.triggerDelayedFallback) { PDFViewerApplication.triggerDelayedFallback(); } } } function webViewerKeyDown(evt) { if (PDFViewerApplication.overlayManager.active) { return; } var handled = false, ensureViewerFocused = false; var cmd = (evt.ctrlKey ? 1 : 0) | (evt.altKey ? 2 : 0) | (evt.shiftKey ? 4 : 0) | (evt.metaKey ? 8 : 0); var pdfViewer = PDFViewerApplication.pdfViewer; var isViewerInPresentationMode = pdfViewer === null || pdfViewer === void 0 ? void 0 : pdfViewer.isInPresentationMode; if (cmd === 1 || cmd === 8 || cmd === 5 || cmd === 12) { switch (evt.keyCode) { case 70: if (!PDFViewerApplication.supportsIntegratedFind && !evt.shiftKey) { PDFViewerApplication.findBar.open(); handled = true; } break; case 71: if (!PDFViewerApplication.supportsIntegratedFind) { var findState = PDFViewerApplication.findController.state; if (findState) { PDFViewerApplication.findController.executeCommand("findagain", { query: findState.query, phraseSearch: findState.phraseSearch, caseSensitive: findState.caseSensitive, entireWord: findState.entireWord, highlightAll: findState.highlightAll, findPrevious: cmd === 5 || cmd === 12 }); } handled = true; } break; case 61: case 107: case 187: case 171: if (!isViewerInPresentationMode) { PDFViewerApplication.zoomIn(); } handled = true; break; case 173: case 109: case 189: if (!isViewerInPresentationMode) { PDFViewerApplication.zoomOut(); } handled = true; break; case 48: case 96: if (!isViewerInPresentationMode) { setTimeout(function () { PDFViewerApplication.zoomReset(); }); handled = false; } break; case 38: if (isViewerInPresentationMode || PDFViewerApplication.page > 1) { PDFViewerApplication.page = 1; handled = true; ensureViewerFocused = true; } break; case 40: if (isViewerInPresentationMode || PDFViewerApplication.page < PDFViewerApplication.pagesCount) { PDFViewerApplication.page = PDFViewerApplication.pagesCount; handled = true; ensureViewerFocused = true; } break; } } var eventBus = PDFViewerApplication.eventBus; if (cmd === 1 || cmd === 8) { switch (evt.keyCode) { case 83: eventBus.dispatch("download", { source: window }); handled = true; break; case 79: { eventBus.dispatch("openfile", { source: window }); handled = true; } break; } } if (cmd === 3 || cmd === 10) { switch (evt.keyCode) { case 80: PDFViewerApplication.requestPresentationMode(); handled = true; break; case 71: PDFViewerApplication.appConfig.toolbar.pageNumber.select(); handled = true; break; } } if (handled) { if (ensureViewerFocused && !isViewerInPresentationMode) { pdfViewer.focus(); } evt.preventDefault(); return; } var curElement = (0, _ui_utils.getActiveOrFocusedElement)(); var curElementTagName = curElement === null || curElement === void 0 ? void 0 : curElement.tagName.toUpperCase(); if (curElementTagName === "INPUT" || curElementTagName === "TEXTAREA" || curElementTagName === "SELECT" || curElement !== null && curElement !== void 0 && curElement.isContentEditable) { if (evt.keyCode !== 27) { return; } } if (cmd === 0) { var turnPage = 0, turnOnlyIfPageFit = false; switch (evt.keyCode) { case 38: case 33: if (pdfViewer.isVerticalScrollbarEnabled) { turnOnlyIfPageFit = true; } turnPage = -1; break; case 8: if (!isViewerInPresentationMode) { turnOnlyIfPageFit = true; } turnPage = -1; break; case 37: if (pdfViewer.isHorizontalScrollbarEnabled) { turnOnlyIfPageFit = true; } case 75: case 80: turnPage = -1; break; case 27: if (PDFViewerApplication.secondaryToolbar.isOpen) { PDFViewerApplication.secondaryToolbar.close(); handled = true; } if (!PDFViewerApplication.supportsIntegratedFind && PDFViewerApplication.findBar.opened) { PDFViewerApplication.findBar.close(); handled = true; } break; case 40: case 34: if (pdfViewer.isVerticalScrollbarEnabled) { turnOnlyIfPageFit = true; } turnPage = 1; break; case 13: case 32: if (!isViewerInPresentationMode) { turnOnlyIfPageFit = true; } turnPage = 1; break; case 39: if (pdfViewer.isHorizontalScrollbarEnabled) { turnOnlyIfPageFit = true; } case 74: case 78: turnPage = 1; break; case 36: if (isViewerInPresentationMode || PDFViewerApplication.page > 1) { PDFViewerApplication.page = 1; handled = true; ensureViewerFocused = true; } break; case 35: if (isViewerInPresentationMode || PDFViewerApplication.page < PDFViewerApplication.pagesCount) { PDFViewerApplication.page = PDFViewerApplication.pagesCount; handled = true; ensureViewerFocused = true; } break; case 83: PDFViewerApplication.pdfCursorTools.switchTool(_pdf_cursor_tools.CursorTool.SELECT); break; case 72: PDFViewerApplication.pdfCursorTools.switchTool(_pdf_cursor_tools.CursorTool.HAND); break; case 82: PDFViewerApplication.rotatePages(90); break; case 115: PDFViewerApplication.pdfSidebar.toggle(); break; } if (turnPage !== 0 && (!turnOnlyIfPageFit || pdfViewer.currentScaleValue === "page-fit")) { if (turnPage > 0) { pdfViewer.nextPage(); } else { pdfViewer.previousPage(); } handled = true; } } if (cmd === 4) { switch (evt.keyCode) { case 13: case 32: if (!isViewerInPresentationMode && pdfViewer.currentScaleValue !== "page-fit") { break; } if (PDFViewerApplication.page > 1) { PDFViewerApplication.page--; } handled = true; break; case 82: PDFViewerApplication.rotatePages(-90); break; } } if (!handled && !isViewerInPresentationMode) { if (evt.keyCode >= 33 && evt.keyCode <= 40 || evt.keyCode === 32 && curElementTagName !== "BUTTON") { ensureViewerFocused = true; } } if (ensureViewerFocused && !pdfViewer.containsElement(curElement)) { pdfViewer.focus(); } if (handled) { evt.preventDefault(); } } function beforeUnload(evt) { evt.preventDefault(); evt.returnValue = ""; return false; } function apiPageLayoutToSpreadMode(layout) { switch (layout) { case "SinglePage": case "OneColumn": return _ui_utils.SpreadMode.NONE; case "TwoColumnLeft": case "TwoPageLeft": return _ui_utils.SpreadMode.ODD; case "TwoColumnRight": case "TwoPageRight": return _ui_utils.SpreadMode.EVEN; } return _ui_utils.SpreadMode.NONE; } function apiPageModeToSidebarView(mode) { switch (mode) { case "UseNone": return _ui_utils.SidebarView.NONE; case "UseThumbs": return _ui_utils.SidebarView.THUMBS; case "UseOutlines": return _ui_utils.SidebarView.OUTLINE; case "UseAttachments": return _ui_utils.SidebarView.ATTACHMENTS; case "UseOC": return _ui_utils.SidebarView.LAYERS; } return _ui_utils.SidebarView.NONE; } var PDFPrintServiceFactory = { instance: { supportsPrinting: false, createPrintService: function createPrintService() { throw new Error("Not implemented: createPrintService"); } } }; exports.PDFPrintServiceFactory = PDFPrintServiceFactory; /***/ }), /* 4 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { module.exports = __webpack_require__(5); /***/ }), /* 5 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { /* module decorator */ module = __webpack_require__.nmd(module); function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var runtime = function (exports) { "use strict"; var Op = Object.prototype; var hasOwn = Op.hasOwnProperty; var undefined; var $Symbol = typeof Symbol === "function" ? Symbol : {}; var iteratorSymbol = $Symbol.iterator || "@@iterator"; var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); return obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; var generator = Object.create(protoGenerator.prototype); var context = new Context(tryLocsList || []); generator._invoke = makeInvokeMethod(innerFn, self, context); return generator; } exports.wrap = wrap; function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } var GenStateSuspendedStart = "suspendedStart"; var GenStateSuspendedYield = "suspendedYield"; var GenStateExecuting = "executing"; var GenStateCompleted = "completed"; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; IteratorPrototype[iteratorSymbol] = function () { return this; }; var getProto = Object.getPrototypeOf; var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { IteratorPrototype = NativeIteratorPrototype; } var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; GeneratorFunctionPrototype.constructor = GeneratorFunction; GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } exports.isGeneratorFunction = function (genFun) { var ctor = typeof genFun === "function" && genFun.constructor; return ctor ? ctor === GeneratorFunction || (ctor.displayName || ctor.name) === "GeneratorFunction" : false; }; exports.mark = function (genFun) { if (Object.setPrototypeOf) { Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); } else { genFun.__proto__ = GeneratorFunctionPrototype; define(genFun, toStringTagSymbol, "GeneratorFunction"); } genFun.prototype = Object.create(Gp); return genFun; }; exports.awrap = function (arg) { return { __await: arg }; }; function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if (record.type === "throw") { reject(record.arg); } else { var result = record.arg; var value = result.value; if (value && _typeof(value) === "object" && hasOwn.call(value, "__await")) { return PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }); } return PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped; resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } } var previousPromise; function enqueue(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } this._invoke = enqueue; } defineIteratorMethods(AsyncIterator.prototype); AsyncIterator.prototype[asyncIteratorSymbol] = function () { return this; }; exports.AsyncIterator = AsyncIterator; exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { if (PromiseImpl === void 0) PromiseImpl = Promise; var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }; function makeInvokeMethod(innerFn, self, context) { var state = GenStateSuspendedStart; return function invoke(method, arg) { if (state === GenStateExecuting) { throw new Error("Generator is already running"); } if (state === GenStateCompleted) { if (method === "throw") { throw arg; } return doneResult(); } context.method = method; context.arg = arg; while (true) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if (context.method === "next") { context.sent = context._sent = context.arg; } else if (context.method === "throw") { if (state === GenStateSuspendedStart) { state = GenStateCompleted; throw context.arg; } context.dispatchException(context.arg); } else if (context.method === "return") { context.abrupt("return", context.arg); } state = GenStateExecuting; var record = tryCatch(innerFn, self, context); if (record.type === "normal") { state = context.done ? GenStateCompleted : GenStateSuspendedYield; if (record.arg === ContinueSentinel) { continue; } return { value: record.arg, done: context.done }; } else if (record.type === "throw") { state = GenStateCompleted; context.method = "throw"; context.arg = record.arg; } } }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (method === undefined) { context.delegate = null; if (context.method === "throw") { if (delegate.iterator["return"]) { context.method = "return"; context.arg = undefined; maybeInvokeDelegate(delegate, context); if (context.method === "throw") { return ContinueSentinel; } } context.method = "throw"; context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if (record.type === "throw") { context.method = "throw"; context.arg = record.arg; context.delegate = null; return ContinueSentinel; } var info = record.arg; if (!info) { context.method = "throw"; context.arg = new TypeError("iterator result is not an object"); context.delegate = null; return ContinueSentinel; } if (info.done) { context[delegate.resultName] = info.value; context.next = delegate.nextLoc; if (context.method !== "return") { context.method = "next"; context.arg = undefined; } } else { return info; } context.delegate = null; return ContinueSentinel; } defineIteratorMethods(Gp); define(Gp, toStringTagSymbol, "Generator"); Gp[iteratorSymbol] = function () { return this; }; Gp.toString = function () { return "[object Generator]"; }; function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; if (1 in locs) { entry.catchLoc = locs[1]; } if (2 in locs) { entry.finallyLoc = locs[2]; entry.afterLoc = locs[3]; } this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal"; delete record.arg; entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }]; tryLocsList.forEach(pushTryEntry, this); this.reset(true); } exports.keys = function (object) { var keys = []; for (var key in object) { keys.push(key); } keys.reverse(); return function next() { while (keys.length) { var key = keys.pop(); if (key in object) { next.value = key; next.done = false; return next; } } next.done = true; return next; }; }; function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) { return iteratorMethod.call(iterable); } if (typeof iterable.next === "function") { return iterable; } if (!isNaN(iterable.length)) { var i = -1, next = function next() { while (++i < iterable.length) { if (hasOwn.call(iterable, i)) { next.value = iterable[i]; next.done = false; return next; } } next.value = undefined; next.done = true; return next; }; return next.next = next; } } return { next: doneResult }; } exports.values = values; function doneResult() { return { value: undefined, done: true }; } Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { this.prev = 0; this.next = 0; this.sent = this._sent = undefined; this.done = false; this.delegate = null; this.method = "next"; this.arg = undefined; this.tryEntries.forEach(resetTryEntry); if (!skipTempReset) { for (var name in this) { if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) { this[name] = undefined; } } } }, stop: function stop() { this.done = true; var rootEntry = this.tryEntries[0]; var rootRecord = rootEntry.completion; if (rootRecord.type === "throw") { throw rootRecord.arg; } return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) { throw exception; } var context = this; function handle(loc, caught) { record.type = "throw"; record.arg = exception; context.next = loc; if (caught) { context.method = "next"; context.arg = undefined; } return !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; var record = entry.completion; if (entry.tryLoc === "root") { return handle("end"); } if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"); var hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } else if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } } else if (hasCatch) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } } else if (hasFinally) { if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } } else { throw new Error("try statement without catch or finally"); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) { finallyEntry = null; } var record = finallyEntry ? finallyEntry.completion : {}; record.type = type; record.arg = arg; if (finallyEntry) { this.method = "next"; this.next = finallyEntry.finallyLoc; return ContinueSentinel; } return this.complete(record); }, complete: function complete(record, afterLoc) { if (record.type === "throw") { throw record.arg; } if (record.type === "break" || record.type === "continue") { this.next = record.arg; } else if (record.type === "return") { this.rval = this.arg = record.arg; this.method = "return"; this.next = "end"; } else if (record.type === "normal" && afterLoc) { this.next = afterLoc; } return ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) { this.complete(entry.completion, entry.afterLoc); resetTryEntry(entry); return ContinueSentinel; } } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if (record.type === "throw") { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }; if (this.method === "next") { this.arg = undefined; } return ContinueSentinel; } }; return exports; }(( false ? 0 : _typeof(module)) === "object" ? module.exports : {}); try { regeneratorRuntime = runtime; } catch (accidentalStrictMode) { Function("r", "regeneratorRuntime = r")(runtime); } /***/ }), /* 6 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.approximateFraction = approximateFraction; exports.backtrackBeforeAllVisibleElements = backtrackBeforeAllVisibleElements; exports.binarySearchFirstItem = binarySearchFirstItem; exports.getActiveOrFocusedElement = getActiveOrFocusedElement; exports.getOutputScale = getOutputScale; exports.getPageSizeInches = getPageSizeInches; exports.getPDFFileNameFromURL = getPDFFileNameFromURL; exports.getVisibleElements = getVisibleElements; exports.isPortraitOrientation = isPortraitOrientation; exports.isValidRotation = isValidRotation; exports.isValidScrollMode = isValidScrollMode; exports.isValidSpreadMode = isValidSpreadMode; exports.moveToEndOfArray = moveToEndOfArray; exports.noContextMenuHandler = noContextMenuHandler; exports.normalizeWheelEventDelta = normalizeWheelEventDelta; exports.normalizeWheelEventDirection = normalizeWheelEventDirection; exports.parseQueryString = parseQueryString; exports.roundToDivide = roundToDivide; exports.scrollIntoView = scrollIntoView; exports.waitOnEventOrTimeout = waitOnEventOrTimeout; exports.watchScroll = watchScroll; exports.WaitOnType = exports.VERTICAL_PADDING = exports.UNKNOWN_SCALE = exports.TextLayerMode = exports.SpreadMode = exports.SidebarView = exports.ScrollMode = exports.SCROLLBAR_PADDING = exports.RendererType = exports.ProgressBar = exports.PresentationModeState = exports.NullL10n = exports.MIN_SCALE = exports.MAX_SCALE = exports.MAX_AUTO_SCALE = exports.EventBus = exports.DEFAULT_SCALE_VALUE = exports.DEFAULT_SCALE = exports.CSS_UNITS = exports.AutoPrintRegExp = exports.animationStarted = void 0; var _regenerator = _interopRequireDefault(__webpack_require__(4)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } var CSS_UNITS = 96.0 / 72.0; exports.CSS_UNITS = CSS_UNITS; var DEFAULT_SCALE_VALUE = "auto"; exports.DEFAULT_SCALE_VALUE = DEFAULT_SCALE_VALUE; var DEFAULT_SCALE = 1.0; exports.DEFAULT_SCALE = DEFAULT_SCALE; var MIN_SCALE = 0.1; exports.MIN_SCALE = MIN_SCALE; var MAX_SCALE = 10.0; exports.MAX_SCALE = MAX_SCALE; var UNKNOWN_SCALE = 0; exports.UNKNOWN_SCALE = UNKNOWN_SCALE; var MAX_AUTO_SCALE = 1.25; exports.MAX_AUTO_SCALE = MAX_AUTO_SCALE; var SCROLLBAR_PADDING = 40; exports.SCROLLBAR_PADDING = SCROLLBAR_PADDING; var VERTICAL_PADDING = 5; exports.VERTICAL_PADDING = VERTICAL_PADDING; var LOADINGBAR_END_OFFSET_VAR = "--loadingBar-end-offset"; var PresentationModeState = { UNKNOWN: 0, NORMAL: 1, CHANGING: 2, FULLSCREEN: 3 }; exports.PresentationModeState = PresentationModeState; var SidebarView = { UNKNOWN: -1, NONE: 0, THUMBS: 1, OUTLINE: 2, ATTACHMENTS: 3, LAYERS: 4 }; exports.SidebarView = SidebarView; var RendererType = { CANVAS: "canvas", SVG: "svg" }; exports.RendererType = RendererType; var TextLayerMode = { DISABLE: 0, ENABLE: 1, ENABLE_ENHANCE: 2 }; exports.TextLayerMode = TextLayerMode; var ScrollMode = { UNKNOWN: -1, VERTICAL: 0, HORIZONTAL: 1, WRAPPED: 2 }; exports.ScrollMode = ScrollMode; var SpreadMode = { UNKNOWN: -1, NONE: 0, ODD: 1, EVEN: 2 }; exports.SpreadMode = SpreadMode; var AutoPrintRegExp = /\bprint\s*\(/; exports.AutoPrintRegExp = AutoPrintRegExp; function formatL10nValue(text, args) { if (!args) { return text; } return text.replace(/\{\{\s*(\w+)\s*\}\}/g, function (all, name) { return name in args ? args[name] : "{{" + name + "}}"; }); } var NullL10n = { getLanguage: function getLanguage() { return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() { return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: return _context.abrupt("return", "en-us"); case 1: case "end": return _context.stop(); } } }, _callee); }))(); }, getDirection: function getDirection() { return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: return _context2.abrupt("return", "ltr"); case 1: case "end": return _context2.stop(); } } }, _callee2); }))(); }, get: function get(property, args, fallback) { return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee3() { return _regenerator["default"].wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: return _context3.abrupt("return", formatL10nValue(fallback, args)); case 1: case "end": return _context3.stop(); } } }, _callee3); }))(); }, translate: function translate(element) { return _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee4() { return _regenerator["default"].wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: case "end": return _context4.stop(); } } }, _callee4); }))(); } }; exports.NullL10n = NullL10n; function getOutputScale(ctx) { var devicePixelRatio = window.devicePixelRatio || 1; var backingStoreRatio = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.backingStorePixelRatio || 1; var pixelRatio = devicePixelRatio / backingStoreRatio; return { sx: pixelRatio, sy: pixelRatio, scaled: pixelRatio !== 1 }; } function scrollIntoView(element, spot) { var skipOverflowHiddenElements = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var parent = element.offsetParent; if (!parent) { console.error("offsetParent is not set -- cannot scroll"); return; } var offsetY = element.offsetTop + element.clientTop; var offsetX = element.offsetLeft + element.clientLeft; while (parent.clientHeight === parent.scrollHeight && parent.clientWidth === parent.scrollWidth || skipOverflowHiddenElements && getComputedStyle(parent).overflow === "hidden") { if (parent.dataset._scaleY) { offsetY /= parent.dataset._scaleY; offsetX /= parent.dataset._scaleX; } offsetY += parent.offsetTop; offsetX += parent.offsetLeft; parent = parent.offsetParent; if (!parent) { return; } } if (spot) { if (spot.top !== undefined) { offsetY += spot.top; } if (spot.left !== undefined) { offsetX += spot.left; parent.scrollLeft = offsetX; } } parent.scrollTop = offsetY; } function watchScroll(viewAreaElement, callback) { var debounceScroll = function debounceScroll(evt) { if (rAF) { return; } rAF = window.requestAnimationFrame(function viewAreaElementScrolled() { rAF = null; var currentX = viewAreaElement.scrollLeft; var lastX = state.lastX; if (currentX !== lastX) { state.right = currentX > lastX; } state.lastX = currentX; var currentY = viewAreaElement.scrollTop; var lastY = state.lastY; if (currentY !== lastY) { state.down = currentY > lastY; } state.lastY = currentY; callback(state); }); }; var state = { right: true, down: true, lastX: viewAreaElement.scrollLeft, lastY: viewAreaElement.scrollTop, _eventHandler: debounceScroll }; var rAF = null; viewAreaElement.addEventListener("scroll", debounceScroll, true); return state; } function parseQueryString(query) { var parts = query.split("&"); var params = Object.create(null); for (var i = 0, ii = parts.length; i < ii; ++i) { var param = parts[i].split("="); var key = param[0].toLowerCase(); var value = param.length > 1 ? param[1] : null; params[decodeURIComponent(key)] = decodeURIComponent(value); } return params; } function binarySearchFirstItem(items, condition) { var minIndex = 0; var maxIndex = items.length - 1; if (maxIndex < 0 || !condition(items[maxIndex])) { return items.length; } if (condition(items[minIndex])) { return minIndex; } while (minIndex < maxIndex) { var currentIndex = minIndex + maxIndex >> 1; var currentItem = items[currentIndex]; if (condition(currentItem)) { maxIndex = currentIndex; } else { minIndex = currentIndex + 1; } } return minIndex; } function approximateFraction(x) { if (Math.floor(x) === x) { return [x, 1]; } var xinv = 1 / x; var limit = 8; if (xinv > limit) { return [1, limit]; } else if (Math.floor(xinv) === xinv) { return [1, xinv]; } var x_ = x > 1 ? xinv : x; var a = 0, b = 1, c = 1, d = 1; while (true) { var p = a + c, q = b + d; if (q > limit) { break; } if (x_ <= p / q) { c = p; d = q; } else { a = p; b = q; } } var result; if (x_ - a / b < c / d - x_) { result = x_ === x ? [a, b] : [b, a]; } else { result = x_ === x ? [c, d] : [d, c]; } return result; } function roundToDivide(x, div) { var r = x % div; return r === 0 ? x : Math.round(x - r + div); } function getPageSizeInches(_ref) { var view = _ref.view, userUnit = _ref.userUnit, rotate = _ref.rotate; var _view = _slicedToArray(view, 4), x1 = _view[0], y1 = _view[1], x2 = _view[2], y2 = _view[3]; var changeOrientation = rotate % 180 !== 0; var width = (x2 - x1) / 72 * userUnit; var height = (y2 - y1) / 72 * userUnit; return { width: changeOrientation ? height : width, height: changeOrientation ? width : height }; } function backtrackBeforeAllVisibleElements(index, views, top) { if (index < 2) { return index; } var elt = views[index].div; var pageTop = elt.offsetTop + elt.clientTop; if (pageTop >= top) { elt = views[index - 1].div; pageTop = elt.offsetTop + elt.clientTop; } for (var i = index - 2; i >= 0; --i) { elt = views[i].div; if (elt.offsetTop + elt.clientTop + elt.clientHeight <= pageTop) { break; } index = i; } return index; } function getVisibleElements(_ref2) { var scrollEl = _ref2.scrollEl, views = _ref2.views, _ref2$sortByVisibilit = _ref2.sortByVisibility, sortByVisibility = _ref2$sortByVisibilit === void 0 ? false : _ref2$sortByVisibilit, _ref2$horizontal = _ref2.horizontal, horizontal = _ref2$horizontal === void 0 ? false : _ref2$horizontal, _ref2$rtl = _ref2.rtl, rtl = _ref2$rtl === void 0 ? false : _ref2$rtl; var top = scrollEl.scrollTop, bottom = top + scrollEl.clientHeight; var left = scrollEl.scrollLeft, right = left + scrollEl.clientWidth; function isElementBottomAfterViewTop(view) { var element = view.div; var elementBottom = element.offsetTop + element.clientTop + element.clientHeight; return elementBottom > top; } function isElementNextAfterViewHorizontally(view) { var element = view.div; var elementLeft = element.offsetLeft + element.clientLeft; var elementRight = elementLeft + element.clientWidth; return rtl ? elementLeft < right : elementRight > left; } var visible = [], numViews = views.length; var firstVisibleElementInd = binarySearchFirstItem(views, horizontal ? isElementNextAfterViewHorizontally : isElementBottomAfterViewTop); if (firstVisibleElementInd > 0 && firstVisibleElementInd < numViews && !horizontal) { firstVisibleElementInd = backtrackBeforeAllVisibleElements(firstVisibleElementInd, views, top); } var lastEdge = horizontal ? right : -1; for (var i = firstVisibleElementInd; i < numViews; i++) { var view = views[i], element = view.div; var currentWidth = element.offsetLeft + element.clientLeft; var currentHeight = element.offsetTop + element.clientTop; var viewWidth = element.clientWidth, viewHeight = element.clientHeight; var viewRight = currentWidth + viewWidth; var viewBottom = currentHeight + viewHeight; if (lastEdge === -1) { if (viewBottom >= bottom) { lastEdge = viewBottom; } } else if ((horizontal ? currentWidth : currentHeight) > lastEdge) { break; } if (viewBottom <= top || currentHeight >= bottom || viewRight <= left || currentWidth >= right) { continue; } var hiddenHeight = Math.max(0, top - currentHeight) + Math.max(0, viewBottom - bottom); var hiddenWidth = Math.max(0, left - currentWidth) + Math.max(0, viewRight - right); var fractionHeight = (viewHeight - hiddenHeight) / viewHeight, fractionWidth = (viewWidth - hiddenWidth) / viewWidth; var percent = fractionHeight * fractionWidth * 100 | 0; visible.push({ id: view.id, x: currentWidth, y: currentHeight, view: view, percent: percent, widthPercent: fractionWidth * 100 | 0 }); } var first = visible[0], last = visible[visible.length - 1]; if (sortByVisibility) { visible.sort(function (a, b) { var pc = a.percent - b.percent; if (Math.abs(pc) > 0.001) { return -pc; } return a.id - b.id; }); } return { first: first, last: last, views: visible }; } function noContextMenuHandler(evt) { evt.preventDefault(); } function isDataSchema(url) { var i = 0; var ii = url.length; while (i < ii && url[i].trim() === "") { i++; } return url.substring(i, i + 5).toLowerCase() === "data:"; } function getPDFFileNameFromURL(url) { var defaultFilename = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "document.pdf"; if (typeof url !== "string") { return defaultFilename; } if (isDataSchema(url)) { console.warn("getPDFFileNameFromURL: " + 'ignoring "data:" URL for performance reasons.'); return defaultFilename; } var reURI = /^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/; var reFilename = /[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i; var splitURI = reURI.exec(url); var suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || reFilename.exec(splitURI[3]); if (suggestedFilename) { suggestedFilename = suggestedFilename[0]; if (suggestedFilename.includes("%")) { try { suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0]; } catch (ex) {} } } return suggestedFilename || defaultFilename; } function normalizeWheelEventDirection(evt) { var delta = Math.sqrt(evt.deltaX * evt.deltaX + evt.deltaY * evt.deltaY); var angle = Math.atan2(evt.deltaY, evt.deltaX); if (-0.25 * Math.PI < angle && angle < 0.75 * Math.PI) { delta = -delta; } return delta; } function normalizeWheelEventDelta(evt) { var delta = normalizeWheelEventDirection(evt); var MOUSE_DOM_DELTA_PIXEL_MODE = 0; var MOUSE_DOM_DELTA_LINE_MODE = 1; var MOUSE_PIXELS_PER_LINE = 30; var MOUSE_LINES_PER_PAGE = 30; if (evt.deltaMode === MOUSE_DOM_DELTA_PIXEL_MODE) { delta /= MOUSE_PIXELS_PER_LINE * MOUSE_LINES_PER_PAGE; } else if (evt.deltaMode === MOUSE_DOM_DELTA_LINE_MODE) { delta /= MOUSE_LINES_PER_PAGE; } return delta; } function isValidRotation(angle) { return Number.isInteger(angle) && angle % 90 === 0; } function isValidScrollMode(mode) { return Number.isInteger(mode) && Object.values(ScrollMode).includes(mode) && mode !== ScrollMode.UNKNOWN; } function isValidSpreadMode(mode) { return Number.isInteger(mode) && Object.values(SpreadMode).includes(mode) && mode !== SpreadMode.UNKNOWN; } function isPortraitOrientation(size) { return size.width <= size.height; } var WaitOnType = { EVENT: "event", TIMEOUT: "timeout" }; exports.WaitOnType = WaitOnType; function waitOnEventOrTimeout(_ref3) { var target = _ref3.target, name = _ref3.name, _ref3$delay = _ref3.delay, delay = _ref3$delay === void 0 ? 0 : _ref3$delay; return new Promise(function (resolve, reject) { if (_typeof(target) !== "object" || !(name && typeof name === "string") || !(Number.isInteger(delay) && delay >= 0)) { throw new Error("waitOnEventOrTimeout - invalid parameters."); } function handler(type) { if (target instanceof EventBus) { target._off(name, eventHandler); } else { target.removeEventListener(name, eventHandler); } if (timeout) { clearTimeout(timeout); } resolve(type); } var eventHandler = handler.bind(null, WaitOnType.EVENT); if (target instanceof EventBus) { target._on(name, eventHandler); } else { target.addEventListener(name, eventHandler); } var timeoutHandler = handler.bind(null, WaitOnType.TIMEOUT); var timeout = setTimeout(timeoutHandler, delay); }); } var animationStarted = new Promise(function (resolve) { window.requestAnimationFrame(resolve); }); exports.animationStarted = animationStarted; function dispatchDOMEvent(eventName) { var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; throw new Error("Not implemented: dispatchDOMEvent"); } var EventBus = /*#__PURE__*/function () { function EventBus(options) { _classCallCheck(this, EventBus); this._listeners = Object.create(null); } _createClass(EventBus, [{ key: "on", value: function on(eventName, listener) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; this._on(eventName, listener, { external: true, once: options === null || options === void 0 ? void 0 : options.once }); } }, { key: "off", value: function off(eventName, listener) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; this._off(eventName, listener, { external: true, once: options === null || options === void 0 ? void 0 : options.once }); } }, { key: "dispatch", value: function dispatch(eventName) { var _this = this; var eventListeners = this._listeners[eventName]; if (!eventListeners || eventListeners.length === 0) { return; } var args = Array.prototype.slice.call(arguments, 1); var externalListeners; eventListeners.slice(0).forEach(function (_ref4) { var listener = _ref4.listener, external = _ref4.external, once = _ref4.once; if (once) { _this._off(eventName, listener); } if (external) { (externalListeners || (externalListeners = [])).push(listener); return; } listener.apply(null, args); }); if (externalListeners) { externalListeners.forEach(function (listener) { listener.apply(null, args); }); externalListeners = null; } } }, { key: "_on", value: function _on(eventName, listener) { var _this$_listeners; var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var eventListeners = (_this$_listeners = this._listeners)[eventName] || (_this$_listeners[eventName] = []); eventListeners.push({ listener: listener, external: (options === null || options === void 0 ? void 0 : options.external) === true, once: (options === null || options === void 0 ? void 0 : options.once) === true }); } }, { key: "_off", value: function _off(eventName, listener) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var eventListeners = this._listeners[eventName]; if (!eventListeners) { return; } for (var i = 0, ii = eventListeners.length; i < ii; i++) { if (eventListeners[i].listener === listener) { eventListeners.splice(i, 1); return; } } } }]); return EventBus; }(); exports.EventBus = EventBus; function clamp(v, min, max) { return Math.min(Math.max(v, min), max); } var ProgressBar = /*#__PURE__*/function () { function ProgressBar(id) { var _ref5 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, height = _ref5.height, width = _ref5.width, units = _ref5.units; _classCallCheck(this, ProgressBar); this.visible = true; this.div = document.querySelector(id + " .progress"); this.bar = this.div.parentNode; this.height = height || 100; this.width = width || 100; this.units = units || "%"; this.div.style.height = this.height + this.units; this.percent = 0; } _createClass(ProgressBar, [{ key: "_updateBar", value: function _updateBar() { if (this._indeterminate) { this.div.classList.add("indeterminate"); this.div.style.width = this.width + this.units; return; } this.div.classList.remove("indeterminate"); var progressSize = this.width * this._percent / 100; this.div.style.width = progressSize + this.units; } }, { key: "percent", get: function get() { return this._percent; }, set: function set(val) { this._indeterminate = isNaN(val); this._percent = clamp(val, 0, 100); this._updateBar(); } }, { key: "setWidth", value: function setWidth(viewer) { if (!viewer) { return; } var container = viewer.parentNode; var scrollbarWidth = container.offsetWidth - viewer.offsetWidth; if (scrollbarWidth > 0) { var doc = document.documentElement; doc.style.setProperty(LOADINGBAR_END_OFFSET_VAR, "".concat(scrollbarWidth, "px")); } } }, { key: "hide", value: function hide() { if (!this.visible) { return; } this.visible = false; this.bar.classList.add("hidden"); } }, { key: "show", value: function show() { if (this.visible) { return; } this.visible = true; this.bar.classList.remove("hidden"); } }]); return ProgressBar; }(); exports.ProgressBar = ProgressBar; function moveToEndOfArray(arr, condition) { var moved = [], len = arr.length; var write = 0; for (var read = 0; read < len; ++read) { if (condition(arr[read])) { moved.push(arr[read]); } else { arr[write] = arr[read]; ++write; } } for (var _read = 0; write < len; ++_read, ++write) { arr[write] = moved[_read]; } } function getActiveOrFocusedElement() { var curRoot = document; var curActiveOrFocused = curRoot.activeElement || curRoot.querySelector(":focus"); while ((_curActiveOrFocused = curActiveOrFocused) !== null && _curActiveOrFocused !== void 0 && _curActiveOrFocused.shadowRoot) { var _curActiveOrFocused; curRoot = curActiveOrFocused.shadowRoot; curActiveOrFocused = curRoot.activeElement || curRoot.querySelector(":focus"); } return curActiveOrFocused; } /***/ }), /* 7 */ /***/ ((module) => { var pdfjsLib; if (typeof window !== "undefined" && window["pdfjs-dist/build/pdf"]) { pdfjsLib = window["pdfjs-dist/build/pdf"]; } else { pdfjsLib = require("../build/pdf.js"); } module.exports = pdfjsLib; /***/ }), /* 8 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFCursorTools = exports.CursorTool = void 0; var _grab_to_pan = __webpack_require__(9); var _ui_utils = __webpack_require__(6); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var CursorTool = { SELECT: 0, HAND: 1, ZOOM: 2 }; exports.CursorTool = CursorTool; var PDFCursorTools = /*#__PURE__*/function () { function PDFCursorTools(_ref) { var _this = this; var container = _ref.container, eventBus = _ref.eventBus, _ref$cursorToolOnLoad = _ref.cursorToolOnLoad, cursorToolOnLoad = _ref$cursorToolOnLoad === void 0 ? CursorTool.SELECT : _ref$cursorToolOnLoad; _classCallCheck(this, PDFCursorTools); this.container = container; this.eventBus = eventBus; this.active = CursorTool.SELECT; this.activeBeforePresentationMode = null; this.handTool = new _grab_to_pan.GrabToPan({ element: this.container }); this._addEventListeners(); Promise.resolve().then(function () { _this.switchTool(cursorToolOnLoad); }); } _createClass(PDFCursorTools, [{ key: "activeTool", get: function get() { return this.active; } }, { key: "switchTool", value: function switchTool(tool) { var _this2 = this; if (this.activeBeforePresentationMode !== null) { return; } if (tool === this.active) { return; } var disableActiveTool = function disableActiveTool() { switch (_this2.active) { case CursorTool.SELECT: break; case CursorTool.HAND: _this2.handTool.deactivate(); break; case CursorTool.ZOOM: } }; switch (tool) { case CursorTool.SELECT: disableActiveTool(); break; case CursorTool.HAND: disableActiveTool(); this.handTool.activate(); break; case CursorTool.ZOOM: default: console.error("switchTool: \"".concat(tool, "\" is an unsupported value.")); return; } this.active = tool; this._dispatchEvent(); } }, { key: "_dispatchEvent", value: function _dispatchEvent() { this.eventBus.dispatch("cursortoolchanged", { source: this, tool: this.active }); } }, { key: "_addEventListeners", value: function _addEventListeners() { var _this3 = this; this.eventBus._on("switchcursortool", function (evt) { _this3.switchTool(evt.tool); }); this.eventBus._on("presentationmodechanged", function (evt) { switch (evt.state) { case _ui_utils.PresentationModeState.CHANGING: break; case _ui_utils.PresentationModeState.FULLSCREEN: { var previouslyActive = _this3.active; _this3.switchTool(CursorTool.SELECT); _this3.activeBeforePresentationMode = previouslyActive; break; } case _ui_utils.PresentationModeState.NORMAL: { var _previouslyActive = _this3.activeBeforePresentationMode; _this3.activeBeforePresentationMode = null; _this3.switchTool(_previouslyActive); break; } } }); } }]); return PDFCursorTools; }(); exports.PDFCursorTools = PDFCursorTools; /***/ }), /* 9 */ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.GrabToPan = GrabToPan; function GrabToPan(options) { this.element = options.element; this.document = options.element.ownerDocument; if (typeof options.ignoreTarget === "function") { this.ignoreTarget = options.ignoreTarget; } this.onActiveChanged = options.onActiveChanged; this.activate = this.activate.bind(this); this.deactivate = this.deactivate.bind(this); this.toggle = this.toggle.bind(this); this._onmousedown = this._onmousedown.bind(this); this._onmousemove = this._onmousemove.bind(this); this._endPan = this._endPan.bind(this); var overlay = this.overlay = document.createElement("div"); overlay.className = "grab-to-pan-grabbing"; } GrabToPan.prototype = { CSS_CLASS_GRAB: "grab-to-pan-grab", activate: function GrabToPan_activate() { if (!this.active) { this.active = true; this.element.addEventListener("mousedown", this._onmousedown, true); this.element.classList.add(this.CSS_CLASS_GRAB); if (this.onActiveChanged) { this.onActiveChanged(true); } } }, deactivate: function GrabToPan_deactivate() { if (this.active) { this.active = false; this.element.removeEventListener("mousedown", this._onmousedown, true); this._endPan(); this.element.classList.remove(this.CSS_CLASS_GRAB); if (this.onActiveChanged) { this.onActiveChanged(false); } } }, toggle: function GrabToPan_toggle() { if (this.active) { this.deactivate(); } else { this.activate(); } }, ignoreTarget: function GrabToPan_ignoreTarget(node) { return node[matchesSelector]("a[href], a[href] *, input, textarea, button, button *, select, option"); }, _onmousedown: function GrabToPan__onmousedown(event) { if (event.button !== 0 || this.ignoreTarget(event.target)) { return; } if (event.originalTarget) { try { event.originalTarget.tagName; } catch (e) { return; } } this.scrollLeftStart = this.element.scrollLeft; this.scrollTopStart = this.element.scrollTop; this.clientXStart = event.clientX; this.clientYStart = event.clientY; this.document.addEventListener("mousemove", this._onmousemove, true); this.document.addEventListener("mouseup", this._endPan, true); this.element.addEventListener("scroll", this._endPan, true); event.preventDefault(); event.stopPropagation(); var focusedElement = document.activeElement; if (focusedElement && !focusedElement.contains(event.target)) { focusedElement.blur(); } }, _onmousemove: function GrabToPan__onmousemove(event) { this.element.removeEventListener("scroll", this._endPan, true); if (isLeftMouseReleased(event)) { this._endPan(); return; } var xDiff = event.clientX - this.clientXStart; var yDiff = event.clientY - this.clientYStart; var scrollTop = this.scrollTopStart - yDiff; var scrollLeft = this.scrollLeftStart - xDiff; if (this.element.scrollTo) { this.element.scrollTo({ top: scrollTop, left: scrollLeft, behavior: "instant" }); } else { this.element.scrollTop = scrollTop; this.element.scrollLeft = scrollLeft; } if (!this.overlay.parentNode) { document.body.appendChild(this.overlay); } }, _endPan: function GrabToPan__endPan() { this.element.removeEventListener("scroll", this._endPan, true); this.document.removeEventListener("mousemove", this._onmousemove, true); this.document.removeEventListener("mouseup", this._endPan, true); this.overlay.remove(); } }; var matchesSelector; ["webkitM", "mozM", "m"].some(function (prefix) { var name = prefix + "atches"; if (name in document.documentElement) { matchesSelector = name; } name += "Selector"; if (name in document.documentElement) { matchesSelector = name; } return matchesSelector; }); var isNotIEorIsIE10plus = !document.documentMode || document.documentMode > 9; var chrome = window.chrome; var isChrome15OrOpera15plus = chrome && (chrome.webstore || chrome.app); var isSafari6plus = /Apple/.test(navigator.vendor) && /Version\/([6-9]\d*|[1-5]\d+)/.test(navigator.userAgent); function isLeftMouseReleased(event) { if ("buttons" in event && isNotIEorIsIE10plus) { return !(event.buttons & 1); } if (isChrome15OrOpera15plus || isSafari6plus) { return event.which === 0; } return false; } /***/ }), /* 10 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.RenderingStates = exports.PDFRenderingQueue = void 0; var _pdfjsLib = __webpack_require__(7); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var CLEANUP_TIMEOUT = 30000; var RenderingStates = { INITIAL: 0, RUNNING: 1, PAUSED: 2, FINISHED: 3 }; exports.RenderingStates = RenderingStates; var PDFRenderingQueue = /*#__PURE__*/function () { function PDFRenderingQueue() { _classCallCheck(this, PDFRenderingQueue); this.pdfViewer = null; this.pdfThumbnailViewer = null; this.onIdle = null; this.highestPriorityPage = null; this.idleTimeout = null; this.printing = false; this.isThumbnailViewEnabled = false; } _createClass(PDFRenderingQueue, [{ key: "setViewer", value: function setViewer(pdfViewer) { this.pdfViewer = pdfViewer; } }, { key: "setThumbnailViewer", value: function setThumbnailViewer(pdfThumbnailViewer) { this.pdfThumbnailViewer = pdfThumbnailViewer; } }, { key: "isHighestPriority", value: function isHighestPriority(view) { return this.highestPriorityPage === view.renderingId; } }, { key: "renderHighestPriority", value: function renderHighestPriority(currentlyVisiblePages) { if (this.idleTimeout) { clearTimeout(this.idleTimeout); this.idleTimeout = null; } if (this.pdfViewer.forceRendering(currentlyVisiblePages)) { return; } if (this.pdfThumbnailViewer && this.isThumbnailViewEnabled) { if (this.pdfThumbnailViewer.forceRendering()) { return; } } if (this.printing) { return; } if (this.onIdle) { this.idleTimeout = setTimeout(this.onIdle.bind(this), CLEANUP_TIMEOUT); } } }, { key: "getHighestPriority", value: function getHighestPriority(visible, views, scrolledDown) { var visibleViews = visible.views; var numVisible = visibleViews.length; if (numVisible === 0) { return null; } for (var i = 0; i < numVisible; ++i) { var view = visibleViews[i].view; if (!this.isViewFinished(view)) { return view; } } if (scrolledDown) { var nextPageIndex = visible.last.id; if (views[nextPageIndex] && !this.isViewFinished(views[nextPageIndex])) { return views[nextPageIndex]; } } else { var previousPageIndex = visible.first.id - 2; if (views[previousPageIndex] && !this.isViewFinished(views[previousPageIndex])) { return views[previousPageIndex]; } } return null; } }, { key: "isViewFinished", value: function isViewFinished(view) { return view.renderingState === RenderingStates.FINISHED; } }, { key: "renderView", value: function renderView(view) { var _this = this; switch (view.renderingState) { case RenderingStates.FINISHED: return false; case RenderingStates.PAUSED: this.highestPriorityPage = view.renderingId; view.resume(); break; case RenderingStates.RUNNING: this.highestPriorityPage = view.renderingId; break; case RenderingStates.INITIAL: this.highestPriorityPage = view.renderingId; view.draw()["finally"](function () { _this.renderHighestPriority(); })["catch"](function (reason) { if (reason instanceof _pdfjsLib.RenderingCancelledException) { return; } console.error("renderView: \"".concat(reason, "\"")); }); break; } return true; } }]); return PDFRenderingQueue; }(); exports.PDFRenderingQueue = PDFRenderingQueue; /***/ }), /* 11 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.OverlayManager = void 0; var _regenerator = _interopRequireDefault(__webpack_require__(4)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var OverlayManager = /*#__PURE__*/function () { function OverlayManager() { _classCallCheck(this, OverlayManager); this._overlays = {}; this._active = null; this._keyDownBound = this._keyDown.bind(this); } _createClass(OverlayManager, [{ key: "active", get: function get() { return this._active; } }, { key: "register", value: function () { var _register = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(name, element) { var callerCloseMethod, canForceClose, container, _args = arguments; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: callerCloseMethod = _args.length > 2 && _args[2] !== undefined ? _args[2] : null; canForceClose = _args.length > 3 && _args[3] !== undefined ? _args[3] : false; if (!(!name || !element || !(container = element.parentNode))) { _context.next = 6; break; } throw new Error("Not enough parameters."); case 6: if (!this._overlays[name]) { _context.next = 8; break; } throw new Error("The overlay is already registered."); case 8: this._overlays[name] = { element: element, container: container, callerCloseMethod: callerCloseMethod, canForceClose: canForceClose }; case 9: case "end": return _context.stop(); } } }, _callee, this); })); function register(_x, _x2) { return _register.apply(this, arguments); } return register; }() }, { key: "unregister", value: function () { var _unregister = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2(name) { return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: if (this._overlays[name]) { _context2.next = 4; break; } throw new Error("The overlay does not exist."); case 4: if (!(this._active === name)) { _context2.next = 6; break; } throw new Error("The overlay cannot be removed while it is active."); case 6: delete this._overlays[name]; case 7: case "end": return _context2.stop(); } } }, _callee2, this); })); function unregister(_x3) { return _unregister.apply(this, arguments); } return unregister; }() }, { key: "open", value: function () { var _open = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee3(name) { return _regenerator["default"].wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: if (this._overlays[name]) { _context3.next = 4; break; } throw new Error("The overlay does not exist."); case 4: if (!this._active) { _context3.next = 14; break; } if (!this._overlays[name].canForceClose) { _context3.next = 9; break; } this._closeThroughCaller(); _context3.next = 14; break; case 9: if (!(this._active === name)) { _context3.next = 13; break; } throw new Error("The overlay is already active."); case 13: throw new Error("Another overlay is currently active."); case 14: this._active = name; this._overlays[this._active].element.classList.remove("hidden"); this._overlays[this._active].container.classList.remove("hidden"); window.addEventListener("keydown", this._keyDownBound); case 18: case "end": return _context3.stop(); } } }, _callee3, this); })); function open(_x4) { return _open.apply(this, arguments); } return open; }() }, { key: "close", value: function () { var _close = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee4(name) { return _regenerator["default"].wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: if (this._overlays[name]) { _context4.next = 4; break; } throw new Error("The overlay does not exist."); case 4: if (this._active) { _context4.next = 8; break; } throw new Error("The overlay is currently not active."); case 8: if (!(this._active !== name)) { _context4.next = 10; break; } throw new Error("Another overlay is currently active."); case 10: this._overlays[this._active].container.classList.add("hidden"); this._overlays[this._active].element.classList.add("hidden"); this._active = null; window.removeEventListener("keydown", this._keyDownBound); case 14: case "end": return _context4.stop(); } } }, _callee4, this); })); function close(_x5) { return _close.apply(this, arguments); } return close; }() }, { key: "_keyDown", value: function _keyDown(evt) { if (this._active && evt.keyCode === 27) { this._closeThroughCaller(); evt.preventDefault(); } } }, { key: "_closeThroughCaller", value: function _closeThroughCaller() { if (this._overlays[this._active].callerCloseMethod) { this._overlays[this._active].callerCloseMethod(); } if (this._active) { this.close(this._active); } } }]); return OverlayManager; }(); exports.OverlayManager = OverlayManager; /***/ }), /* 12 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PasswordPrompt = void 0; var _ui_utils = __webpack_require__(6); var _pdfjsLib = __webpack_require__(7); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var PasswordPrompt = /*#__PURE__*/function () { function PasswordPrompt(options, overlayManager) { var _this = this; var l10n = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _ui_utils.NullL10n; var isViewerEmbedded = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; _classCallCheck(this, PasswordPrompt); this.overlayName = options.overlayName; this.container = options.container; this.label = options.label; this.input = options.input; this.submitButton = options.submitButton; this.cancelButton = options.cancelButton; this.overlayManager = overlayManager; this.l10n = l10n; this._isViewerEmbedded = isViewerEmbedded; this.updateCallback = null; this.reason = null; this.submitButton.addEventListener("click", this.verify.bind(this)); this.cancelButton.addEventListener("click", this.close.bind(this)); this.input.addEventListener("keydown", function (e) { if (e.keyCode === 13) { _this.verify(); } }); this.overlayManager.register(this.overlayName, this.container, this.close.bind(this), true); } _createClass(PasswordPrompt, [{ key: "open", value: function open() { var _this2 = this; this.overlayManager.open(this.overlayName).then(function () { if (!_this2._isViewerEmbedded || _this2.reason === _pdfjsLib.PasswordResponses.INCORRECT_PASSWORD) { _this2.input.focus(); } var promptString; if (_this2.reason === _pdfjsLib.PasswordResponses.INCORRECT_PASSWORD) { promptString = _this2.l10n.get("password_invalid", null, "Invalid password. Please try again."); } else { promptString = _this2.l10n.get("password_label", null, "Enter the password to open this PDF file."); } promptString.then(function (msg) { _this2.label.textContent = msg; }); }); } }, { key: "close", value: function close() { var _this3 = this; this.overlayManager.close(this.overlayName).then(function () { _this3.input.value = ""; }); } }, { key: "verify", value: function verify() { var password = this.input.value; if ((password === null || password === void 0 ? void 0 : password.length) > 0) { this.close(); this.updateCallback(password); } } }, { key: "setUpdateCallback", value: function setUpdateCallback(updateCallback, reason) { this.updateCallback = updateCallback; this.reason = reason; } }]); return PasswordPrompt; }(); exports.PasswordPrompt = PasswordPrompt; /***/ }), /* 13 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFAttachmentViewer = void 0; var _pdfjsLib = __webpack_require__(7); var _base_tree_viewer = __webpack_require__(14); var _viewer_compatibility = __webpack_require__(2); function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } var PdfFileRegExp = /\.pdf$/i; var PDFAttachmentViewer = /*#__PURE__*/function (_BaseTreeViewer) { _inherits(PDFAttachmentViewer, _BaseTreeViewer); var _super = _createSuper(PDFAttachmentViewer); function PDFAttachmentViewer(options) { var _this; _classCallCheck(this, PDFAttachmentViewer); _this = _super.call(this, options); _this.downloadManager = options.downloadManager; _this.eventBus._on("fileattachmentannotation", _this._appendAttachment.bind(_assertThisInitialized(_this))); return _this; } _createClass(PDFAttachmentViewer, [{ key: "reset", value: function reset() { var keepRenderedCapability = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; _get(_getPrototypeOf(PDFAttachmentViewer.prototype), "reset", this).call(this); this._attachments = null; if (!keepRenderedCapability) { this._renderedCapability = (0, _pdfjsLib.createPromiseCapability)(); } if (this._pendingDispatchEvent) { clearTimeout(this._pendingDispatchEvent); } this._pendingDispatchEvent = null; } }, { key: "_dispatchEvent", value: function _dispatchEvent(attachmentsCount) { var _this2 = this; this._renderedCapability.resolve(); if (this._pendingDispatchEvent) { clearTimeout(this._pendingDispatchEvent); this._pendingDispatchEvent = null; } if (attachmentsCount === 0) { this._pendingDispatchEvent = setTimeout(function () { _this2.eventBus.dispatch("attachmentsloaded", { source: _this2, attachmentsCount: 0 }); _this2._pendingDispatchEvent = null; }); return; } this.eventBus.dispatch("attachmentsloaded", { source: this, attachmentsCount: attachmentsCount }); } }, { key: "_bindPdfLink", value: function _bindPdfLink(element, _ref) { var _this3 = this; var content = _ref.content, filename = _ref.filename; var blobUrl; element.onclick = function () { if (!blobUrl) { blobUrl = URL.createObjectURL(new Blob([content], { type: "application/pdf" })); } var viewerUrl; viewerUrl = "?file=" + encodeURIComponent(blobUrl + "#" + filename); try { window.open(viewerUrl); } catch (ex) { console.error("_bindPdfLink: ".concat(ex)); URL.revokeObjectURL(blobUrl); blobUrl = null; _this3.downloadManager.downloadData(content, filename, "application/pdf"); } return false; }; } }, { key: "_bindLink", value: function _bindLink(element, _ref2) { var _this4 = this; var content = _ref2.content, filename = _ref2.filename; element.onclick = function () { var contentType = PdfFileRegExp.test(filename) ? "application/pdf" : ""; _this4.downloadManager.downloadData(content, filename, contentType); return false; }; } }, { key: "render", value: function render(_ref3) { var attachments = _ref3.attachments, _ref3$keepRenderedCap = _ref3.keepRenderedCapability, keepRenderedCapability = _ref3$keepRenderedCap === void 0 ? false : _ref3$keepRenderedCap; if (this._attachments) { this.reset(keepRenderedCapability); } this._attachments = attachments || null; if (!attachments) { this._dispatchEvent(0); return; } var names = Object.keys(attachments).sort(function (a, b) { return a.toLowerCase().localeCompare(b.toLowerCase()); }); var fragment = document.createDocumentFragment(); var attachmentsCount = 0; var _iterator = _createForOfIteratorHelper(names), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var name = _step.value; var item = attachments[name]; var filename = (0, _pdfjsLib.getFilenameFromUrl)(item.filename); var div = document.createElement("div"); div.className = "treeItem"; var element = document.createElement("a"); if (PdfFileRegExp.test(filename) && !_viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL) { this._bindPdfLink(element, { content: item.content, filename: filename }); } else { this._bindLink(element, { content: item.content, filename: filename }); } element.textContent = this._normalizeTextContent(filename); div.appendChild(element); fragment.appendChild(div); attachmentsCount++; } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } this._finishRendering(fragment, attachmentsCount); } }, { key: "_appendAttachment", value: function _appendAttachment(_ref4) { var _this5 = this; var id = _ref4.id, filename = _ref4.filename, content = _ref4.content; var renderedPromise = this._renderedCapability.promise; renderedPromise.then(function () { if (renderedPromise !== _this5._renderedCapability.promise) { return; } var attachments = _this5._attachments; if (!attachments) { attachments = Object.create(null); } else { for (var name in attachments) { if (id === name) { return; } } } attachments[id] = { filename: filename, content: content }; _this5.render({ attachments: attachments, keepRenderedCapability: true }); }); } }]); return PDFAttachmentViewer; }(_base_tree_viewer.BaseTreeViewer); exports.PDFAttachmentViewer = PDFAttachmentViewer; /***/ }), /* 14 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.BaseTreeViewer = void 0; var _pdfjsLib = __webpack_require__(7); function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var TREEITEM_OFFSET_TOP = -100; var TREEITEM_SELECTED_CLASS = "selected"; var BaseTreeViewer = /*#__PURE__*/function () { function BaseTreeViewer(options) { _classCallCheck(this, BaseTreeViewer); if (this.constructor === BaseTreeViewer) { throw new Error("Cannot initialize BaseTreeViewer."); } this.container = options.container; this.eventBus = options.eventBus; this.reset(); } _createClass(BaseTreeViewer, [{ key: "reset", value: function reset() { this._pdfDocument = null; this._lastToggleIsShow = true; this._currentTreeItem = null; this.container.textContent = ""; this.container.classList.remove("treeWithDeepNesting"); } }, { key: "_dispatchEvent", value: function _dispatchEvent(count) { throw new Error("Not implemented: _dispatchEvent"); } }, { key: "_bindLink", value: function _bindLink(element, params) { throw new Error("Not implemented: _bindLink"); } }, { key: "_normalizeTextContent", value: function _normalizeTextContent(str) { return (0, _pdfjsLib.removeNullCharacters)(str) || "\u2013"; } }, { key: "_addToggleButton", value: function _addToggleButton(div) { var _this = this; var hidden = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var toggler = document.createElement("div"); toggler.className = "treeItemToggler"; if (hidden) { toggler.classList.add("treeItemsHidden"); } toggler.onclick = function (evt) { evt.stopPropagation(); toggler.classList.toggle("treeItemsHidden"); if (evt.shiftKey) { var shouldShowAll = !toggler.classList.contains("treeItemsHidden"); _this._toggleTreeItem(div, shouldShowAll); } }; div.insertBefore(toggler, div.firstChild); } }, { key: "_toggleTreeItem", value: function _toggleTreeItem(root) { var show = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; this._lastToggleIsShow = show; var _iterator = _createForOfIteratorHelper(root.querySelectorAll(".treeItemToggler")), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var toggler = _step.value; toggler.classList.toggle("treeItemsHidden", !show); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } } }, { key: "_toggleAllTreeItems", value: function _toggleAllTreeItems() { this._toggleTreeItem(this.container, !this._lastToggleIsShow); } }, { key: "_finishRendering", value: function _finishRendering(fragment, count) { var hasAnyNesting = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; if (hasAnyNesting) { this.container.classList.add("treeWithDeepNesting"); this._lastToggleIsShow = !fragment.querySelector(".treeItemsHidden"); } this.container.appendChild(fragment); this._dispatchEvent(count); } }, { key: "render", value: function render(params) { throw new Error("Not implemented: render"); } }, { key: "_updateCurrentTreeItem", value: function _updateCurrentTreeItem() { var treeItem = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; if (this._currentTreeItem) { this._currentTreeItem.classList.remove(TREEITEM_SELECTED_CLASS); this._currentTreeItem = null; } if (treeItem) { treeItem.classList.add(TREEITEM_SELECTED_CLASS); this._currentTreeItem = treeItem; } } }, { key: "_scrollToCurrentTreeItem", value: function _scrollToCurrentTreeItem(treeItem) { if (!treeItem) { return; } var currentNode = treeItem.parentNode; while (currentNode && currentNode !== this.container) { if (currentNode.classList.contains("treeItem")) { var toggler = currentNode.firstElementChild; toggler === null || toggler === void 0 ? void 0 : toggler.classList.remove("treeItemsHidden"); } currentNode = currentNode.parentNode; } this._updateCurrentTreeItem(treeItem); this.container.scrollTo(treeItem.offsetLeft, treeItem.offsetTop + TREEITEM_OFFSET_TOP); } }]); return BaseTreeViewer; }(); exports.BaseTreeViewer = BaseTreeViewer; /***/ }), /* 15 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFDocumentProperties = void 0; var _regenerator = _interopRequireDefault(__webpack_require__(4)); var _pdfjsLib = __webpack_require__(7); var _ui_utils = __webpack_require__(6); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var DEFAULT_FIELD_CONTENT = "-"; var NON_METRIC_LOCALES = ["en-us", "en-lr", "my"]; var US_PAGE_NAMES = { "8.5x11": "Letter", "8.5x14": "Legal" }; var METRIC_PAGE_NAMES = { "297x420": "A3", "210x297": "A4" }; function getPageName(size, isPortrait, pageNames) { var width = isPortrait ? size.width : size.height; var height = isPortrait ? size.height : size.width; return pageNames["".concat(width, "x").concat(height)]; } var PDFDocumentProperties = /*#__PURE__*/function () { function PDFDocumentProperties(_ref, overlayManager, eventBus) { var _this = this; var overlayName = _ref.overlayName, fields = _ref.fields, container = _ref.container, closeButton = _ref.closeButton; var l10n = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : _ui_utils.NullL10n; _classCallCheck(this, PDFDocumentProperties); this.overlayName = overlayName; this.fields = fields; this.container = container; this.overlayManager = overlayManager; this.l10n = l10n; this._reset(); closeButton.addEventListener("click", this.close.bind(this)); this.overlayManager.register(this.overlayName, this.container, this.close.bind(this)); eventBus._on("pagechanging", function (evt) { _this._currentPageNumber = evt.pageNumber; }); eventBus._on("rotationchanging", function (evt) { _this._pagesRotation = evt.pagesRotation; }); this._isNonMetricLocale = true; l10n.getLanguage().then(function (locale) { _this._isNonMetricLocale = NON_METRIC_LOCALES.includes(locale); }); } _createClass(PDFDocumentProperties, [{ key: "open", value: function () { var _open = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() { var _this2 = this; var freezeFieldData, currentPageNumber, pagesRotation, _yield$this$pdfDocume, info, contentDispositionFilename, contentLength, _yield$Promise$all, _yield$Promise$all2, fileName, fileSize, creationDate, modificationDate, pageSize, isLinearized, _yield$this$pdfDocume2, length, data; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: freezeFieldData = function freezeFieldData(data) { Object.defineProperty(_this2, "fieldData", { value: Object.freeze(data), writable: false, enumerable: true, configurable: true }); }; _context.next = 3; return Promise.all([this.overlayManager.open(this.overlayName), this._dataAvailableCapability.promise]); case 3: currentPageNumber = this._currentPageNumber; pagesRotation = this._pagesRotation; if (!(this.fieldData && currentPageNumber === this.fieldData._currentPageNumber && pagesRotation === this.fieldData._pagesRotation)) { _context.next = 8; break; } this._updateUI(); return _context.abrupt("return"); case 8: _context.next = 10; return this.pdfDocument.getMetadata(); case 10: _yield$this$pdfDocume = _context.sent; info = _yield$this$pdfDocume.info; contentDispositionFilename = _yield$this$pdfDocume.contentDispositionFilename; contentLength = _yield$this$pdfDocume.contentLength; _context.next = 16; return Promise.all([contentDispositionFilename || (0, _ui_utils.getPDFFileNameFromURL)(this.url), this._parseFileSize(contentLength), this._parseDate(info.CreationDate), this._parseDate(info.ModDate), this.pdfDocument.getPage(currentPageNumber).then(function (pdfPage) { return _this2._parsePageSize((0, _ui_utils.getPageSizeInches)(pdfPage), pagesRotation); }), this._parseLinearization(info.IsLinearized)]); case 16: _yield$Promise$all = _context.sent; _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 6); fileName = _yield$Promise$all2[0]; fileSize = _yield$Promise$all2[1]; creationDate = _yield$Promise$all2[2]; modificationDate = _yield$Promise$all2[3]; pageSize = _yield$Promise$all2[4]; isLinearized = _yield$Promise$all2[5]; freezeFieldData({ fileName: fileName, fileSize: fileSize, title: info.Title, author: info.Author, subject: info.Subject, keywords: info.Keywords, creationDate: creationDate, modificationDate: modificationDate, creator: info.Creator, producer: info.Producer, version: info.PDFFormatVersion, pageCount: this.pdfDocument.numPages, pageSize: pageSize, linearized: isLinearized, _currentPageNumber: currentPageNumber, _pagesRotation: pagesRotation }); this._updateUI(); _context.next = 28; return this.pdfDocument.getDownloadInfo(); case 28: _yield$this$pdfDocume2 = _context.sent; length = _yield$this$pdfDocume2.length; if (!(contentLength === length)) { _context.next = 32; break; } return _context.abrupt("return"); case 32: data = Object.assign(Object.create(null), this.fieldData); _context.next = 35; return this._parseFileSize(length); case 35: data.fileSize = _context.sent; freezeFieldData(data); this._updateUI(); case 38: case "end": return _context.stop(); } } }, _callee, this); })); function open() { return _open.apply(this, arguments); } return open; }() }, { key: "close", value: function close() { this.overlayManager.close(this.overlayName); } }, { key: "setDocument", value: function setDocument(pdfDocument) { var url = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; if (this.pdfDocument) { this._reset(); this._updateUI(true); } if (!pdfDocument) { return; } this.pdfDocument = pdfDocument; this.url = url; this._dataAvailableCapability.resolve(); } }, { key: "_reset", value: function _reset() { this.pdfDocument = null; this.url = null; delete this.fieldData; this._dataAvailableCapability = (0, _pdfjsLib.createPromiseCapability)(); this._currentPageNumber = 1; this._pagesRotation = 0; } }, { key: "_updateUI", value: function _updateUI() { var reset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; if (reset || !this.fieldData) { for (var id in this.fields) { this.fields[id].textContent = DEFAULT_FIELD_CONTENT; } return; } if (this.overlayManager.active !== this.overlayName) { return; } for (var _id in this.fields) { var content = this.fieldData[_id]; this.fields[_id].textContent = content || content === 0 ? content : DEFAULT_FIELD_CONTENT; } } }, { key: "_parseFileSize", value: function () { var _parseFileSize2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { var fileSize, kb, _args2 = arguments; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: fileSize = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : 0; kb = fileSize / 1024; if (kb) { _context2.next = 6; break; } return _context2.abrupt("return", undefined); case 6: if (!(kb < 1024)) { _context2.next = 8; break; } return _context2.abrupt("return", this.l10n.get("document_properties_kb", { size_kb: (+kb.toPrecision(3)).toLocaleString(), size_b: fileSize.toLocaleString() }, "{{size_kb}} KB ({{size_b}} bytes)")); case 8: return _context2.abrupt("return", this.l10n.get("document_properties_mb", { size_mb: (+(kb / 1024).toPrecision(3)).toLocaleString(), size_b: fileSize.toLocaleString() }, "{{size_mb}} MB ({{size_b}} bytes)")); case 9: case "end": return _context2.stop(); } } }, _callee2, this); })); function _parseFileSize() { return _parseFileSize2.apply(this, arguments); } return _parseFileSize; }() }, { key: "_parsePageSize", value: function () { var _parsePageSize2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee3(pageSizeInches, pagesRotation) { var _this3 = this; var isPortrait, sizeInches, sizeMillimeters, pageName, rawName, exactMillimeters, intMillimeters; return _regenerator["default"].wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: if (pageSizeInches) { _context3.next = 2; break; } return _context3.abrupt("return", undefined); case 2: if (pagesRotation % 180 !== 0) { pageSizeInches = { width: pageSizeInches.height, height: pageSizeInches.width }; } isPortrait = (0, _ui_utils.isPortraitOrientation)(pageSizeInches); sizeInches = { width: Math.round(pageSizeInches.width * 100) / 100, height: Math.round(pageSizeInches.height * 100) / 100 }; sizeMillimeters = { width: Math.round(pageSizeInches.width * 25.4 * 10) / 10, height: Math.round(pageSizeInches.height * 25.4 * 10) / 10 }; pageName = null; rawName = getPageName(sizeInches, isPortrait, US_PAGE_NAMES) || getPageName(sizeMillimeters, isPortrait, METRIC_PAGE_NAMES); if (!rawName && !(Number.isInteger(sizeMillimeters.width) && Number.isInteger(sizeMillimeters.height))) { exactMillimeters = { width: pageSizeInches.width * 25.4, height: pageSizeInches.height * 25.4 }; intMillimeters = { width: Math.round(sizeMillimeters.width), height: Math.round(sizeMillimeters.height) }; if (Math.abs(exactMillimeters.width - intMillimeters.width) < 0.1 && Math.abs(exactMillimeters.height - intMillimeters.height) < 0.1) { rawName = getPageName(intMillimeters, isPortrait, METRIC_PAGE_NAMES); if (rawName) { sizeInches = { width: Math.round(intMillimeters.width / 25.4 * 100) / 100, height: Math.round(intMillimeters.height / 25.4 * 100) / 100 }; sizeMillimeters = intMillimeters; } } } if (rawName) { pageName = this.l10n.get("document_properties_page_size_name_" + rawName.toLowerCase(), null, rawName); } return _context3.abrupt("return", Promise.all([this._isNonMetricLocale ? sizeInches : sizeMillimeters, this.l10n.get("document_properties_page_size_unit_" + (this._isNonMetricLocale ? "inches" : "millimeters"), null, this._isNonMetricLocale ? "in" : "mm"), pageName, this.l10n.get("document_properties_page_size_orientation_" + (isPortrait ? "portrait" : "landscape"), null, isPortrait ? "portrait" : "landscape")]).then(function (_ref2) { var _ref3 = _slicedToArray(_ref2, 4), _ref3$ = _ref3[0], width = _ref3$.width, height = _ref3$.height, unit = _ref3[1], name = _ref3[2], orientation = _ref3[3]; return _this3.l10n.get("document_properties_page_size_dimension_" + (name ? "name_" : "") + "string", { width: width.toLocaleString(), height: height.toLocaleString(), unit: unit, name: name, orientation: orientation }, "{{width}} × {{height}} {{unit}} (" + (name ? "{{name}}, " : "") + "{{orientation}})"); })); case 11: case "end": return _context3.stop(); } } }, _callee3, this); })); function _parsePageSize(_x, _x2) { return _parsePageSize2.apply(this, arguments); } return _parsePageSize; }() }, { key: "_parseDate", value: function () { var _parseDate2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee4(inputDate) { var dateObject; return _regenerator["default"].wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: dateObject = _pdfjsLib.PDFDateString.toDateObject(inputDate); if (dateObject) { _context4.next = 3; break; } return _context4.abrupt("return", undefined); case 3: return _context4.abrupt("return", this.l10n.get("document_properties_date_string", { date: dateObject.toLocaleDateString(), time: dateObject.toLocaleTimeString() }, "{{date}}, {{time}}")); case 4: case "end": return _context4.stop(); } } }, _callee4, this); })); function _parseDate(_x3) { return _parseDate2.apply(this, arguments); } return _parseDate; }() }, { key: "_parseLinearization", value: function _parseLinearization(isLinearized) { return this.l10n.get("document_properties_linearized_" + (isLinearized ? "yes" : "no"), null, isLinearized ? "Yes" : "No"); } }]); return PDFDocumentProperties; }(); exports.PDFDocumentProperties = PDFDocumentProperties; /***/ }), /* 16 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFFindBar = void 0; var _pdf_find_controller = __webpack_require__(17); var _ui_utils = __webpack_require__(6); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var MATCHES_COUNT_LIMIT = 1000; var PDFFindBar = /*#__PURE__*/function () { function PDFFindBar(options, eventBus) { var _this = this; var l10n = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _ui_utils.NullL10n; _classCallCheck(this, PDFFindBar); this.opened = false; this.bar = options.bar || null; this.toggleButton = options.toggleButton || null; this.findField = options.findField || null; this.highlightAll = options.highlightAllCheckbox || null; this.caseSensitive = options.caseSensitiveCheckbox || null; this.entireWord = options.entireWordCheckbox || null; this.findMsg = options.findMsg || null; this.findResultsCount = options.findResultsCount || null; this.findPreviousButton = options.findPreviousButton || null; this.findNextButton = options.findNextButton || null; this.eventBus = eventBus; this.l10n = l10n; this.toggleButton.addEventListener("click", function () { _this.toggle(); }); this.findField.addEventListener("input", function () { _this.dispatchEvent(""); }); this.bar.addEventListener("keydown", function (e) { switch (e.keyCode) { case 13: if (e.target === _this.findField) { _this.dispatchEvent("again", e.shiftKey); } break; case 27: _this.close(); break; } }); this.findPreviousButton.addEventListener("click", function () { _this.dispatchEvent("again", true); }); this.findNextButton.addEventListener("click", function () { _this.dispatchEvent("again", false); }); this.highlightAll.addEventListener("click", function () { _this.dispatchEvent("highlightallchange"); }); this.caseSensitive.addEventListener("click", function () { _this.dispatchEvent("casesensitivitychange"); }); this.entireWord.addEventListener("click", function () { _this.dispatchEvent("entirewordchange"); }); this.eventBus._on("resize", this._adjustWidth.bind(this)); } _createClass(PDFFindBar, [{ key: "reset", value: function reset() { this.updateUIState(); } }, { key: "dispatchEvent", value: function dispatchEvent(type, findPrev) { this.eventBus.dispatch("find", { source: this, type: type, query: this.findField.value, phraseSearch: true, caseSensitive: this.caseSensitive.checked, entireWord: this.entireWord.checked, highlightAll: this.highlightAll.checked, findPrevious: findPrev }); } }, { key: "updateUIState", value: function updateUIState(state, previous, matchesCount) { var _this2 = this; var findMsg = ""; var status = ""; switch (state) { case _pdf_find_controller.FindState.FOUND: break; case _pdf_find_controller.FindState.PENDING: status = "pending"; break; case _pdf_find_controller.FindState.NOT_FOUND: findMsg = this.l10n.get("find_not_found", null, "Phrase not found"); status = "notFound"; break; case _pdf_find_controller.FindState.WRAPPED: if (previous) { findMsg = this.l10n.get("find_reached_top", null, "Reached top of document, continued from bottom"); } else { findMsg = this.l10n.get("find_reached_bottom", null, "Reached end of document, continued from top"); } break; } this.findField.setAttribute("data-status", status); Promise.resolve(findMsg).then(function (msg) { _this2.findMsg.textContent = msg; _this2._adjustWidth(); }); this.updateResultsCount(matchesCount); } }, { key: "updateResultsCount", value: function updateResultsCount() { var _this3 = this; var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref$current = _ref.current, current = _ref$current === void 0 ? 0 : _ref$current, _ref$total = _ref.total, total = _ref$total === void 0 ? 0 : _ref$total; if (!this.findResultsCount) { return; } var limit = MATCHES_COUNT_LIMIT; var matchesCountMsg = ""; if (total > 0) { if (total > limit) { matchesCountMsg = this.l10n.get("find_match_count_limit", { limit: limit }, "More than {{limit}} match" + (limit !== 1 ? "es" : "")); } else { matchesCountMsg = this.l10n.get("find_match_count", { current: current, total: total }, "{{current}} of {{total}} match" + (total !== 1 ? "es" : "")); } } Promise.resolve(matchesCountMsg).then(function (msg) { _this3.findResultsCount.textContent = msg; _this3.findResultsCount.classList.toggle("hidden", !total); _this3._adjustWidth(); }); } }, { key: "open", value: function open() { if (!this.opened) { this.opened = true; this.toggleButton.classList.add("toggled"); this.toggleButton.setAttribute("aria-expanded", "true"); this.bar.classList.remove("hidden"); } this.findField.select(); this.findField.focus(); this._adjustWidth(); } }, { key: "close", value: function close() { if (!this.opened) { return; } this.opened = false; this.toggleButton.classList.remove("toggled"); this.toggleButton.setAttribute("aria-expanded", "false"); this.bar.classList.add("hidden"); this.eventBus.dispatch("findbarclose", { source: this }); } }, { key: "toggle", value: function toggle() { if (this.opened) { this.close(); } else { this.open(); } } }, { key: "_adjustWidth", value: function _adjustWidth() { if (!this.opened) { return; } this.bar.classList.remove("wrapContainers"); var findbarHeight = this.bar.clientHeight; var inputContainerHeight = this.bar.firstElementChild.clientHeight; if (findbarHeight > inputContainerHeight) { this.bar.classList.add("wrapContainers"); } } }]); return PDFFindBar; }(); exports.PDFFindBar = PDFFindBar; /***/ }), /* 17 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFFindController = exports.FindState = void 0; var _pdfjsLib = __webpack_require__(7); var _pdf_find_utils = __webpack_require__(18); var _ui_utils = __webpack_require__(6); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } var FindState = { FOUND: 0, NOT_FOUND: 1, WRAPPED: 2, PENDING: 3 }; exports.FindState = FindState; var FIND_TIMEOUT = 250; var MATCH_SCROLL_OFFSET_TOP = -50; var MATCH_SCROLL_OFFSET_LEFT = -400; var CHARACTERS_TO_NORMALIZE = { "\u2018": "'", "\u2019": "'", "\u201A": "'", "\u201B": "'", "\u201C": '"', "\u201D": '"', "\u201E": '"', "\u201F": '"', "\xBC": "1/4", "\xBD": "1/2", "\xBE": "3/4" }; var normalizationRegex = null; function normalize(text) { if (!normalizationRegex) { var replace = Object.keys(CHARACTERS_TO_NORMALIZE).join(""); normalizationRegex = new RegExp("[".concat(replace, "]"), "g"); } var diffs = null; var normalizedText = text.replace(normalizationRegex, function (ch, index) { var normalizedCh = CHARACTERS_TO_NORMALIZE[ch], diff = normalizedCh.length - ch.length; if (diff !== 0) { (diffs || (diffs = [])).push([index, diff]); } return normalizedCh; }); return [normalizedText, diffs]; } function getOriginalIndex(matchIndex) { var diffs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; if (!diffs) { return matchIndex; } var totalDiff = 0; var _iterator = _createForOfIteratorHelper(diffs), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var _step$value = _slicedToArray(_step.value, 2), index = _step$value[0], diff = _step$value[1]; var currentIndex = index + totalDiff; if (currentIndex >= matchIndex) { break; } if (currentIndex + diff > matchIndex) { totalDiff += matchIndex - currentIndex; break; } totalDiff += diff; } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } return matchIndex - totalDiff; } var PDFFindController = /*#__PURE__*/function () { function PDFFindController(_ref) { var linkService = _ref.linkService, eventBus = _ref.eventBus; _classCallCheck(this, PDFFindController); this._linkService = linkService; this._eventBus = eventBus; this._reset(); eventBus._on("findbarclose", this._onFindBarClose.bind(this)); } _createClass(PDFFindController, [{ key: "highlightMatches", get: function get() { return this._highlightMatches; } }, { key: "pageMatches", get: function get() { return this._pageMatches; } }, { key: "pageMatchesLength", get: function get() { return this._pageMatchesLength; } }, { key: "selected", get: function get() { return this._selected; } }, { key: "state", get: function get() { return this._state; } }, { key: "setDocument", value: function setDocument(pdfDocument) { if (this._pdfDocument) { this._reset(); } if (!pdfDocument) { return; } this._pdfDocument = pdfDocument; this._firstPageCapability.resolve(); } }, { key: "executeCommand", value: function executeCommand(cmd, state) { var _this = this; if (!state) { return; } var pdfDocument = this._pdfDocument; if (this._state === null || this._shouldDirtyMatch(cmd, state)) { this._dirtyMatch = true; } this._state = state; if (cmd !== "findhighlightallchange") { this._updateUIState(FindState.PENDING); } this._firstPageCapability.promise.then(function () { if (!_this._pdfDocument || pdfDocument && _this._pdfDocument !== pdfDocument) { return; } _this._extractText(); var findbarClosed = !_this._highlightMatches; var pendingTimeout = !!_this._findTimeout; if (_this._findTimeout) { clearTimeout(_this._findTimeout); _this._findTimeout = null; } if (cmd === "find") { _this._findTimeout = setTimeout(function () { _this._nextMatch(); _this._findTimeout = null; }, FIND_TIMEOUT); } else if (_this._dirtyMatch) { _this._nextMatch(); } else if (cmd === "findagain") { _this._nextMatch(); if (findbarClosed && _this._state.highlightAll) { _this._updateAllPages(); } } else if (cmd === "findhighlightallchange") { if (pendingTimeout) { _this._nextMatch(); } else { _this._highlightMatches = true; } _this._updateAllPages(); } else { _this._nextMatch(); } }); } }, { key: "scrollMatchIntoView", value: function scrollMatchIntoView(_ref2) { var _ref2$element = _ref2.element, element = _ref2$element === void 0 ? null : _ref2$element, _ref2$pageIndex = _ref2.pageIndex, pageIndex = _ref2$pageIndex === void 0 ? -1 : _ref2$pageIndex, _ref2$matchIndex = _ref2.matchIndex, matchIndex = _ref2$matchIndex === void 0 ? -1 : _ref2$matchIndex; if (!this._scrollMatches || !element) { return; } else if (matchIndex === -1 || matchIndex !== this._selected.matchIdx) { return; } else if (pageIndex === -1 || pageIndex !== this._selected.pageIdx) { return; } this._scrollMatches = false; var spot = { top: MATCH_SCROLL_OFFSET_TOP, left: MATCH_SCROLL_OFFSET_LEFT }; (0, _ui_utils.scrollIntoView)(element, spot, true); } }, { key: "_reset", value: function _reset() { this._highlightMatches = false; this._scrollMatches = false; this._pdfDocument = null; this._pageMatches = []; this._pageMatchesLength = []; this._state = null; this._selected = { pageIdx: -1, matchIdx: -1 }; this._offset = { pageIdx: null, matchIdx: null, wrapped: false }; this._extractTextPromises = []; this._pageContents = []; this._pageDiffs = []; this._matchesCountTotal = 0; this._pagesToSearch = null; this._pendingFindMatches = Object.create(null); this._resumePageIdx = null; this._dirtyMatch = false; clearTimeout(this._findTimeout); this._findTimeout = null; this._firstPageCapability = (0, _pdfjsLib.createPromiseCapability)(); } }, { key: "_query", get: function get() { if (this._state.query !== this._rawQuery) { this._rawQuery = this._state.query; var _normalize = normalize(this._state.query); var _normalize2 = _slicedToArray(_normalize, 1); this._normalizedQuery = _normalize2[0]; } return this._normalizedQuery; } }, { key: "_shouldDirtyMatch", value: function _shouldDirtyMatch(cmd, state) { if (state.query !== this._state.query) { return true; } switch (cmd) { case "findagain": var pageNumber = this._selected.pageIdx + 1; var linkService = this._linkService; if (pageNumber >= 1 && pageNumber <= linkService.pagesCount && pageNumber !== linkService.page && !linkService.isPageVisible(pageNumber)) { return true; } return false; case "findhighlightallchange": return false; } return true; } }, { key: "_prepareMatches", value: function _prepareMatches(matchesWithLength, matches, matchesLength) { function isSubTerm(currentIndex) { var currentElem = matchesWithLength[currentIndex]; var nextElem = matchesWithLength[currentIndex + 1]; if (currentIndex < matchesWithLength.length - 1 && currentElem.match === nextElem.match) { currentElem.skipped = true; return true; } for (var i = currentIndex - 1; i >= 0; i--) { var prevElem = matchesWithLength[i]; if (prevElem.skipped) { continue; } if (prevElem.match + prevElem.matchLength < currentElem.match) { break; } if (prevElem.match + prevElem.matchLength >= currentElem.match + currentElem.matchLength) { currentElem.skipped = true; return true; } } return false; } matchesWithLength.sort(function (a, b) { return a.match === b.match ? a.matchLength - b.matchLength : a.match - b.match; }); for (var i = 0, len = matchesWithLength.length; i < len; i++) { if (isSubTerm(i)) { continue; } matches.push(matchesWithLength[i].match); matchesLength.push(matchesWithLength[i].matchLength); } } }, { key: "_isEntireWord", value: function _isEntireWord(content, startIdx, length) { if (startIdx > 0) { var first = content.charCodeAt(startIdx); var limit = content.charCodeAt(startIdx - 1); if ((0, _pdf_find_utils.getCharacterType)(first) === (0, _pdf_find_utils.getCharacterType)(limit)) { return false; } } var endIdx = startIdx + length - 1; if (endIdx < content.length - 1) { var last = content.charCodeAt(endIdx); var _limit = content.charCodeAt(endIdx + 1); if ((0, _pdf_find_utils.getCharacterType)(last) === (0, _pdf_find_utils.getCharacterType)(_limit)) { return false; } } return true; } }, { key: "_calculatePhraseMatch", value: function _calculatePhraseMatch(query, pageIndex, pageContent, pageDiffs, entireWord) { var matches = [], matchesLength = []; var queryLen = query.length; var matchIdx = -queryLen; while (true) { matchIdx = pageContent.indexOf(query, matchIdx + queryLen); if (matchIdx === -1) { break; } if (entireWord && !this._isEntireWord(pageContent, matchIdx, queryLen)) { continue; } var originalMatchIdx = getOriginalIndex(matchIdx, pageDiffs), matchEnd = matchIdx + queryLen - 1, originalQueryLen = getOriginalIndex(matchEnd, pageDiffs) - originalMatchIdx + 1; matches.push(originalMatchIdx); matchesLength.push(originalQueryLen); } this._pageMatches[pageIndex] = matches; this._pageMatchesLength[pageIndex] = matchesLength; } }, { key: "_calculateWordMatch", value: function _calculateWordMatch(query, pageIndex, pageContent, pageDiffs, entireWord) { var matchesWithLength = []; var queryArray = query.match(/\S+/g); for (var i = 0, len = queryArray.length; i < len; i++) { var subquery = queryArray[i]; var subqueryLen = subquery.length; var matchIdx = -subqueryLen; while (true) { matchIdx = pageContent.indexOf(subquery, matchIdx + subqueryLen); if (matchIdx === -1) { break; } if (entireWord && !this._isEntireWord(pageContent, matchIdx, subqueryLen)) { continue; } var originalMatchIdx = getOriginalIndex(matchIdx, pageDiffs), matchEnd = matchIdx + subqueryLen - 1, originalQueryLen = getOriginalIndex(matchEnd, pageDiffs) - originalMatchIdx + 1; matchesWithLength.push({ match: originalMatchIdx, matchLength: originalQueryLen, skipped: false }); } } this._pageMatchesLength[pageIndex] = []; this._pageMatches[pageIndex] = []; this._prepareMatches(matchesWithLength, this._pageMatches[pageIndex], this._pageMatchesLength[pageIndex]); } }, { key: "_calculateMatch", value: function _calculateMatch(pageIndex) { var pageContent = this._pageContents[pageIndex]; var pageDiffs = this._pageDiffs[pageIndex]; var query = this._query; var _this$_state = this._state, caseSensitive = _this$_state.caseSensitive, entireWord = _this$_state.entireWord, phraseSearch = _this$_state.phraseSearch; if (query.length === 0) { return; } if (!caseSensitive) { pageContent = pageContent.toLowerCase(); query = query.toLowerCase(); } if (phraseSearch) { this._calculatePhraseMatch(query, pageIndex, pageContent, pageDiffs, entireWord); } else { this._calculateWordMatch(query, pageIndex, pageContent, pageDiffs, entireWord); } if (this._state.highlightAll) { this._updatePage(pageIndex); } if (this._resumePageIdx === pageIndex) { this._resumePageIdx = null; this._nextPageMatch(); } var pageMatchesCount = this._pageMatches[pageIndex].length; if (pageMatchesCount > 0) { this._matchesCountTotal += pageMatchesCount; this._updateUIResultsCount(); } } }, { key: "_extractText", value: function _extractText() { var _this2 = this; if (this._extractTextPromises.length > 0) { return; } var promise = Promise.resolve(); var _loop = function _loop(i, ii) { var extractTextCapability = (0, _pdfjsLib.createPromiseCapability)(); _this2._extractTextPromises[i] = extractTextCapability.promise; promise = promise.then(function () { return _this2._pdfDocument.getPage(i + 1).then(function (pdfPage) { return pdfPage.getTextContent({ normalizeWhitespace: true }); }).then(function (textContent) { var textItems = textContent.items; var strBuf = []; for (var j = 0, jj = textItems.length; j < jj; j++) { strBuf.push(textItems[j].str); } var _normalize3 = normalize(strBuf.join("")); var _normalize4 = _slicedToArray(_normalize3, 2); _this2._pageContents[i] = _normalize4[0]; _this2._pageDiffs[i] = _normalize4[1]; extractTextCapability.resolve(i); }, function (reason) { console.error("Unable to get text content for page ".concat(i + 1), reason); _this2._pageContents[i] = ""; _this2._pageDiffs[i] = null; extractTextCapability.resolve(i); }); }); }; for (var i = 0, ii = this._linkService.pagesCount; i < ii; i++) { _loop(i, ii); } } }, { key: "_updatePage", value: function _updatePage(index) { if (this._scrollMatches && this._selected.pageIdx === index) { this._linkService.page = index + 1; } this._eventBus.dispatch("updatetextlayermatches", { source: this, pageIndex: index }); } }, { key: "_updateAllPages", value: function _updateAllPages() { this._eventBus.dispatch("updatetextlayermatches", { source: this, pageIndex: -1 }); } }, { key: "_nextMatch", value: function _nextMatch() { var _this3 = this; var previous = this._state.findPrevious; var currentPageIndex = this._linkService.page - 1; var numPages = this._linkService.pagesCount; this._highlightMatches = true; if (this._dirtyMatch) { this._dirtyMatch = false; this._selected.pageIdx = this._selected.matchIdx = -1; this._offset.pageIdx = currentPageIndex; this._offset.matchIdx = null; this._offset.wrapped = false; this._resumePageIdx = null; this._pageMatches.length = 0; this._pageMatchesLength.length = 0; this._matchesCountTotal = 0; this._updateAllPages(); for (var i = 0; i < numPages; i++) { if (this._pendingFindMatches[i] === true) { continue; } this._pendingFindMatches[i] = true; this._extractTextPromises[i].then(function (pageIdx) { delete _this3._pendingFindMatches[pageIdx]; _this3._calculateMatch(pageIdx); }); } } if (this._query === "") { this._updateUIState(FindState.FOUND); return; } if (this._resumePageIdx) { return; } var offset = this._offset; this._pagesToSearch = numPages; if (offset.matchIdx !== null) { var numPageMatches = this._pageMatches[offset.pageIdx].length; if (!previous && offset.matchIdx + 1 < numPageMatches || previous && offset.matchIdx > 0) { offset.matchIdx = previous ? offset.matchIdx - 1 : offset.matchIdx + 1; this._updateMatch(true); return; } this._advanceOffsetPage(previous); } this._nextPageMatch(); } }, { key: "_matchesReady", value: function _matchesReady(matches) { var offset = this._offset; var numMatches = matches.length; var previous = this._state.findPrevious; if (numMatches) { offset.matchIdx = previous ? numMatches - 1 : 0; this._updateMatch(true); return true; } this._advanceOffsetPage(previous); if (offset.wrapped) { offset.matchIdx = null; if (this._pagesToSearch < 0) { this._updateMatch(false); return true; } } return false; } }, { key: "_nextPageMatch", value: function _nextPageMatch() { if (this._resumePageIdx !== null) { console.error("There can only be one pending page."); } var matches = null; do { var pageIdx = this._offset.pageIdx; matches = this._pageMatches[pageIdx]; if (!matches) { this._resumePageIdx = pageIdx; break; } } while (!this._matchesReady(matches)); } }, { key: "_advanceOffsetPage", value: function _advanceOffsetPage(previous) { var offset = this._offset; var numPages = this._linkService.pagesCount; offset.pageIdx = previous ? offset.pageIdx - 1 : offset.pageIdx + 1; offset.matchIdx = null; this._pagesToSearch--; if (offset.pageIdx >= numPages || offset.pageIdx < 0) { offset.pageIdx = previous ? numPages - 1 : 0; offset.wrapped = true; } } }, { key: "_updateMatch", value: function _updateMatch() { var found = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var state = FindState.NOT_FOUND; var wrapped = this._offset.wrapped; this._offset.wrapped = false; if (found) { var previousPage = this._selected.pageIdx; this._selected.pageIdx = this._offset.pageIdx; this._selected.matchIdx = this._offset.matchIdx; state = wrapped ? FindState.WRAPPED : FindState.FOUND; if (previousPage !== -1 && previousPage !== this._selected.pageIdx) { this._updatePage(previousPage); } } this._updateUIState(state, this._state.findPrevious); if (this._selected.pageIdx !== -1) { this._scrollMatches = true; this._updatePage(this._selected.pageIdx); } } }, { key: "_onFindBarClose", value: function _onFindBarClose(evt) { var _this4 = this; var pdfDocument = this._pdfDocument; this._firstPageCapability.promise.then(function () { if (!_this4._pdfDocument || pdfDocument && _this4._pdfDocument !== pdfDocument) { return; } if (_this4._findTimeout) { clearTimeout(_this4._findTimeout); _this4._findTimeout = null; } if (_this4._resumePageIdx) { _this4._resumePageIdx = null; _this4._dirtyMatch = true; } _this4._updateUIState(FindState.FOUND); _this4._highlightMatches = false; _this4._updateAllPages(); }); } }, { key: "_requestMatchesCount", value: function _requestMatchesCount() { var _this$_selected = this._selected, pageIdx = _this$_selected.pageIdx, matchIdx = _this$_selected.matchIdx; var current = 0, total = this._matchesCountTotal; if (matchIdx !== -1) { for (var i = 0; i < pageIdx; i++) { current += this._pageMatches[i] && this._pageMatches[i].length || 0; } current += matchIdx + 1; } if (current < 1 || current > total) { current = total = 0; } return { current: current, total: total }; } }, { key: "_updateUIResultsCount", value: function _updateUIResultsCount() { this._eventBus.dispatch("updatefindmatchescount", { source: this, matchesCount: this._requestMatchesCount() }); } }, { key: "_updateUIState", value: function _updateUIState(state, previous) { this._eventBus.dispatch("updatefindcontrolstate", { source: this, state: state, previous: previous, matchesCount: this._requestMatchesCount(), rawQuery: this._state ? this._state.query : null }); } }]); return PDFFindController; }(); exports.PDFFindController = PDFFindController; /***/ }), /* 18 */ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getCharacterType = getCharacterType; exports.CharacterType = void 0; var CharacterType = { SPACE: 0, ALPHA_LETTER: 1, PUNCT: 2, HAN_LETTER: 3, KATAKANA_LETTER: 4, HIRAGANA_LETTER: 5, HALFWIDTH_KATAKANA_LETTER: 6, THAI_LETTER: 7 }; exports.CharacterType = CharacterType; function isAlphabeticalScript(charCode) { return charCode < 0x2e80; } function isAscii(charCode) { return (charCode & 0xff80) === 0; } function isAsciiAlpha(charCode) { return charCode >= 0x61 && charCode <= 0x7a || charCode >= 0x41 && charCode <= 0x5a; } function isAsciiDigit(charCode) { return charCode >= 0x30 && charCode <= 0x39; } function isAsciiSpace(charCode) { return charCode === 0x20 || charCode === 0x09 || charCode === 0x0d || charCode === 0x0a; } function isHan(charCode) { return charCode >= 0x3400 && charCode <= 0x9fff || charCode >= 0xf900 && charCode <= 0xfaff; } function isKatakana(charCode) { return charCode >= 0x30a0 && charCode <= 0x30ff; } function isHiragana(charCode) { return charCode >= 0x3040 && charCode <= 0x309f; } function isHalfwidthKatakana(charCode) { return charCode >= 0xff60 && charCode <= 0xff9f; } function isThai(charCode) { return (charCode & 0xff80) === 0x0e00; } function getCharacterType(charCode) { if (isAlphabeticalScript(charCode)) { if (isAscii(charCode)) { if (isAsciiSpace(charCode)) { return CharacterType.SPACE; } else if (isAsciiAlpha(charCode) || isAsciiDigit(charCode) || charCode === 0x5f) { return CharacterType.ALPHA_LETTER; } return CharacterType.PUNCT; } else if (isThai(charCode)) { return CharacterType.THAI_LETTER; } else if (charCode === 0xa0) { return CharacterType.SPACE; } return CharacterType.ALPHA_LETTER; } if (isHan(charCode)) { return CharacterType.HAN_LETTER; } else if (isKatakana(charCode)) { return CharacterType.KATAKANA_LETTER; } else if (isHiragana(charCode)) { return CharacterType.HIRAGANA_LETTER; } else if (isHalfwidthKatakana(charCode)) { return CharacterType.HALFWIDTH_KATAKANA_LETTER; } return CharacterType.ALPHA_LETTER; } /***/ }), /* 19 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.isDestArraysEqual = isDestArraysEqual; exports.isDestHashesEqual = isDestHashesEqual; exports.PDFHistory = void 0; var _ui_utils = __webpack_require__(6); function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var HASH_CHANGE_TIMEOUT = 1000; var POSITION_UPDATED_THRESHOLD = 50; var UPDATE_VIEWAREA_TIMEOUT = 1000; function getCurrentHash() { return document.location.hash; } var PDFHistory = /*#__PURE__*/function () { function PDFHistory(_ref) { var _this = this; var linkService = _ref.linkService, eventBus = _ref.eventBus; _classCallCheck(this, PDFHistory); this.linkService = linkService; this.eventBus = eventBus; this._initialized = false; this._fingerprint = ""; this.reset(); this._boundEvents = null; this._isViewerInPresentationMode = false; this.eventBus._on("presentationmodechanged", function (evt) { _this._isViewerInPresentationMode = evt.state !== _ui_utils.PresentationModeState.NORMAL; }); this.eventBus._on("pagesinit", function () { _this._isPagesLoaded = false; _this.eventBus._on("pagesloaded", function (evt) { _this._isPagesLoaded = !!evt.pagesCount; }, { once: true }); }); } _createClass(PDFHistory, [{ key: "initialize", value: function initialize(_ref2) { var fingerprint = _ref2.fingerprint, _ref2$resetHistory = _ref2.resetHistory, resetHistory = _ref2$resetHistory === void 0 ? false : _ref2$resetHistory, _ref2$updateUrl = _ref2.updateUrl, updateUrl = _ref2$updateUrl === void 0 ? false : _ref2$updateUrl; if (!fingerprint || typeof fingerprint !== "string") { console.error('PDFHistory.initialize: The "fingerprint" must be a non-empty string.'); return; } if (this._initialized) { this.reset(); } var reInitialized = this._fingerprint !== "" && this._fingerprint !== fingerprint; this._fingerprint = fingerprint; this._updateUrl = updateUrl === true; this._initialized = true; this._bindEvents(); var state = window.history.state; this._popStateInProgress = false; this._blockHashChange = 0; this._currentHash = getCurrentHash(); this._numPositionUpdates = 0; this._uid = this._maxUid = 0; this._destination = null; this._position = null; if (!this._isValidState(state, true) || resetHistory) { var _this$_parseCurrentHa = this._parseCurrentHash(true), hash = _this$_parseCurrentHa.hash, page = _this$_parseCurrentHa.page, rotation = _this$_parseCurrentHa.rotation; if (!hash || reInitialized || resetHistory) { this._pushOrReplaceState(null, true); return; } this._pushOrReplaceState({ hash: hash, page: page, rotation: rotation }, true); return; } var destination = state.destination; this._updateInternalState(destination, state.uid, true); if (destination.rotation !== undefined) { this._initialRotation = destination.rotation; } if (destination.dest) { this._initialBookmark = JSON.stringify(destination.dest); this._destination.page = null; } else if (destination.hash) { this._initialBookmark = destination.hash; } else if (destination.page) { this._initialBookmark = "page=".concat(destination.page); } } }, { key: "reset", value: function reset() { if (this._initialized) { this._pageHide(); this._initialized = false; this._unbindEvents(); } if (this._updateViewareaTimeout) { clearTimeout(this._updateViewareaTimeout); this._updateViewareaTimeout = null; } this._initialBookmark = null; this._initialRotation = null; } }, { key: "push", value: function push(_ref3) { var _this2 = this; var _ref3$namedDest = _ref3.namedDest, namedDest = _ref3$namedDest === void 0 ? null : _ref3$namedDest, explicitDest = _ref3.explicitDest, pageNumber = _ref3.pageNumber; if (!this._initialized) { return; } if (namedDest && typeof namedDest !== "string") { console.error("PDFHistory.push: " + "\"".concat(namedDest, "\" is not a valid namedDest parameter.")); return; } else if (!Array.isArray(explicitDest)) { console.error("PDFHistory.push: " + "\"".concat(explicitDest, "\" is not a valid explicitDest parameter.")); return; } else if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.linkService.pagesCount)) { if (pageNumber !== null || this._destination) { console.error("PDFHistory.push: " + "\"".concat(pageNumber, "\" is not a valid pageNumber parameter.")); return; } } var hash = namedDest || JSON.stringify(explicitDest); if (!hash) { return; } var forceReplace = false; if (this._destination && (isDestHashesEqual(this._destination.hash, hash) || isDestArraysEqual(this._destination.dest, explicitDest))) { if (this._destination.page) { return; } forceReplace = true; } if (this._popStateInProgress && !forceReplace) { return; } this._pushOrReplaceState({ dest: explicitDest, hash: hash, page: pageNumber, rotation: this.linkService.rotation }, forceReplace); if (!this._popStateInProgress) { this._popStateInProgress = true; Promise.resolve().then(function () { _this2._popStateInProgress = false; }); } } }, { key: "pushPage", value: function pushPage(pageNumber) { var _this$_destination, _this3 = this; if (!this._initialized) { return; } if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.linkService.pagesCount)) { console.error("PDFHistory.pushPage: \"".concat(pageNumber, "\" is not a valid page number.")); return; } if (((_this$_destination = this._destination) === null || _this$_destination === void 0 ? void 0 : _this$_destination.page) === pageNumber) { return; } if (this._popStateInProgress) { return; } this._pushOrReplaceState({ hash: "page=".concat(pageNumber), page: pageNumber, rotation: this.linkService.rotation }); if (!this._popStateInProgress) { this._popStateInProgress = true; Promise.resolve().then(function () { _this3._popStateInProgress = false; }); } } }, { key: "pushCurrentPosition", value: function pushCurrentPosition() { if (!this._initialized || this._popStateInProgress) { return; } this._tryPushCurrentPosition(); } }, { key: "back", value: function back() { if (!this._initialized || this._popStateInProgress) { return; } var state = window.history.state; if (this._isValidState(state) && state.uid > 0) { window.history.back(); } } }, { key: "forward", value: function forward() { if (!this._initialized || this._popStateInProgress) { return; } var state = window.history.state; if (this._isValidState(state) && state.uid < this._maxUid) { window.history.forward(); } } }, { key: "popStateInProgress", get: function get() { return this._initialized && (this._popStateInProgress || this._blockHashChange > 0); } }, { key: "initialBookmark", get: function get() { return this._initialized ? this._initialBookmark : null; } }, { key: "initialRotation", get: function get() { return this._initialized ? this._initialRotation : null; } }, { key: "_pushOrReplaceState", value: function _pushOrReplaceState(destination) { var forceReplace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var shouldReplace = forceReplace || !this._destination; var newState = { fingerprint: this._fingerprint, uid: shouldReplace ? this._uid : this._uid + 1, destination: destination }; this._updateInternalState(destination, newState.uid); var newUrl; if (this._updateUrl && destination !== null && destination !== void 0 && destination.hash) { var baseUrl = document.location.href.split("#")[0]; if (!baseUrl.startsWith("file://")) { newUrl = "".concat(baseUrl, "#").concat(destination.hash); } } if (shouldReplace) { window.history.replaceState(newState, "", newUrl); } else { window.history.pushState(newState, "", newUrl); } } }, { key: "_tryPushCurrentPosition", value: function _tryPushCurrentPosition() { var temporary = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; if (!this._position) { return; } var position = this._position; if (temporary) { position = Object.assign(Object.create(null), this._position); position.temporary = true; } if (!this._destination) { this._pushOrReplaceState(position); return; } if (this._destination.temporary) { this._pushOrReplaceState(position, true); return; } if (this._destination.hash === position.hash) { return; } if (!this._destination.page && (POSITION_UPDATED_THRESHOLD <= 0 || this._numPositionUpdates <= POSITION_UPDATED_THRESHOLD)) { return; } var forceReplace = false; if (this._destination.page >= position.first && this._destination.page <= position.page) { if (this._destination.dest || !this._destination.first) { return; } forceReplace = true; } this._pushOrReplaceState(position, forceReplace); } }, { key: "_isValidState", value: function _isValidState(state) { var checkReload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; if (!state) { return false; } if (state.fingerprint !== this._fingerprint) { if (checkReload) { if (typeof state.fingerprint !== "string" || state.fingerprint.length !== this._fingerprint.length) { return false; } var _performance$getEntri = performance.getEntriesByType("navigation"), _performance$getEntri2 = _slicedToArray(_performance$getEntri, 1), perfEntry = _performance$getEntri2[0]; if ((perfEntry === null || perfEntry === void 0 ? void 0 : perfEntry.type) !== "reload") { return false; } } else { return false; } } if (!Number.isInteger(state.uid) || state.uid < 0) { return false; } if (state.destination === null || _typeof(state.destination) !== "object") { return false; } return true; } }, { key: "_updateInternalState", value: function _updateInternalState(destination, uid) { var removeTemporary = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; if (this._updateViewareaTimeout) { clearTimeout(this._updateViewareaTimeout); this._updateViewareaTimeout = null; } if (removeTemporary && destination !== null && destination !== void 0 && destination.temporary) { delete destination.temporary; } this._destination = destination; this._uid = uid; this._maxUid = Math.max(this._maxUid, uid); this._numPositionUpdates = 0; } }, { key: "_parseCurrentHash", value: function _parseCurrentHash() { var checkNameddest = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var hash = unescape(getCurrentHash()).substring(1); var params = (0, _ui_utils.parseQueryString)(hash); var nameddest = params.nameddest || ""; var page = params.page | 0; if (!(Number.isInteger(page) && page > 0 && page <= this.linkService.pagesCount) || checkNameddest && nameddest.length > 0) { page = null; } return { hash: hash, page: page, rotation: this.linkService.rotation }; } }, { key: "_updateViewarea", value: function _updateViewarea(_ref4) { var _this4 = this; var location = _ref4.location; if (this._updateViewareaTimeout) { clearTimeout(this._updateViewareaTimeout); this._updateViewareaTimeout = null; } this._position = { hash: this._isViewerInPresentationMode ? "page=".concat(location.pageNumber) : location.pdfOpenParams.substring(1), page: this.linkService.page, first: location.pageNumber, rotation: location.rotation }; if (this._popStateInProgress) { return; } if (POSITION_UPDATED_THRESHOLD > 0 && this._isPagesLoaded && this._destination && !this._destination.page) { this._numPositionUpdates++; } if (UPDATE_VIEWAREA_TIMEOUT > 0) { this._updateViewareaTimeout = setTimeout(function () { if (!_this4._popStateInProgress) { _this4._tryPushCurrentPosition(true); } _this4._updateViewareaTimeout = null; }, UPDATE_VIEWAREA_TIMEOUT); } } }, { key: "_popState", value: function _popState(_ref5) { var _this5 = this; var state = _ref5.state; var newHash = getCurrentHash(), hashChanged = this._currentHash !== newHash; this._currentHash = newHash; if (!state) { this._uid++; var _this$_parseCurrentHa2 = this._parseCurrentHash(), hash = _this$_parseCurrentHa2.hash, page = _this$_parseCurrentHa2.page, rotation = _this$_parseCurrentHa2.rotation; this._pushOrReplaceState({ hash: hash, page: page, rotation: rotation }, true); return; } if (!this._isValidState(state)) { return; } this._popStateInProgress = true; if (hashChanged) { this._blockHashChange++; (0, _ui_utils.waitOnEventOrTimeout)({ target: window, name: "hashchange", delay: HASH_CHANGE_TIMEOUT }).then(function () { _this5._blockHashChange--; }); } var destination = state.destination; this._updateInternalState(destination, state.uid, true); if ((0, _ui_utils.isValidRotation)(destination.rotation)) { this.linkService.rotation = destination.rotation; } if (destination.dest) { this.linkService.goToDestination(destination.dest); } else if (destination.hash) { this.linkService.setHash(destination.hash); } else if (destination.page) { this.linkService.page = destination.page; } Promise.resolve().then(function () { _this5._popStateInProgress = false; }); } }, { key: "_pageHide", value: function _pageHide() { if (!this._destination || this._destination.temporary) { this._tryPushCurrentPosition(); } } }, { key: "_bindEvents", value: function _bindEvents() { if (this._boundEvents) { return; } this._boundEvents = { updateViewarea: this._updateViewarea.bind(this), popState: this._popState.bind(this), pageHide: this._pageHide.bind(this) }; this.eventBus._on("updateviewarea", this._boundEvents.updateViewarea); window.addEventListener("popstate", this._boundEvents.popState); window.addEventListener("pagehide", this._boundEvents.pageHide); } }, { key: "_unbindEvents", value: function _unbindEvents() { if (!this._boundEvents) { return; } this.eventBus._off("updateviewarea", this._boundEvents.updateViewarea); window.removeEventListener("popstate", this._boundEvents.popState); window.removeEventListener("pagehide", this._boundEvents.pageHide); this._boundEvents = null; } }]); return PDFHistory; }(); exports.PDFHistory = PDFHistory; function isDestHashesEqual(destHash, pushHash) { if (typeof destHash !== "string" || typeof pushHash !== "string") { return false; } if (destHash === pushHash) { return true; } var _parseQueryString = (0, _ui_utils.parseQueryString)(destHash), nameddest = _parseQueryString.nameddest; if (nameddest === pushHash) { return true; } return false; } function isDestArraysEqual(firstDest, secondDest) { function isEntryEqual(first, second) { if (_typeof(first) !== _typeof(second)) { return false; } if (Array.isArray(first) || Array.isArray(second)) { return false; } if (first !== null && _typeof(first) === "object" && second !== null) { if (Object.keys(first).length !== Object.keys(second).length) { return false; } for (var key in first) { if (!isEntryEqual(first[key], second[key])) { return false; } } return true; } return first === second || Number.isNaN(first) && Number.isNaN(second); } if (!(Array.isArray(firstDest) && Array.isArray(secondDest))) { return false; } if (firstDest.length !== secondDest.length) { return false; } for (var i = 0, ii = firstDest.length; i < ii; i++) { if (!isEntryEqual(firstDest[i], secondDest[i])) { return false; } } return true; } /***/ }), /* 20 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFLayerViewer = void 0; var _regenerator = _interopRequireDefault(__webpack_require__(4)); var _base_tree_viewer = __webpack_require__(14); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } var PDFLayerViewer = /*#__PURE__*/function (_BaseTreeViewer) { _inherits(PDFLayerViewer, _BaseTreeViewer); var _super = _createSuper(PDFLayerViewer); function PDFLayerViewer(options) { var _this; _classCallCheck(this, PDFLayerViewer); _this = _super.call(this, options); _this.l10n = options.l10n; _this.eventBus._on("resetlayers", _this._resetLayers.bind(_assertThisInitialized(_this))); _this.eventBus._on("togglelayerstree", _this._toggleAllTreeItems.bind(_assertThisInitialized(_this))); return _this; } _createClass(PDFLayerViewer, [{ key: "reset", value: function reset() { _get(_getPrototypeOf(PDFLayerViewer.prototype), "reset", this).call(this); this._optionalContentConfig = null; } }, { key: "_dispatchEvent", value: function _dispatchEvent(layersCount) { this.eventBus.dispatch("layersloaded", { source: this, layersCount: layersCount }); } }, { key: "_bindLink", value: function _bindLink(element, _ref) { var _this2 = this; var groupId = _ref.groupId, input = _ref.input; var setVisibility = function setVisibility() { _this2._optionalContentConfig.setVisibility(groupId, input.checked); _this2.eventBus.dispatch("optionalcontentconfig", { source: _this2, promise: Promise.resolve(_this2._optionalContentConfig) }); }; element.onclick = function (evt) { if (evt.target === input) { setVisibility(); return true; } else if (evt.target !== element) { return true; } input.checked = !input.checked; setVisibility(); return false; }; } }, { key: "_setNestedName", value: function () { var _setNestedName2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(element, _ref2) { var _ref2$name, name; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _ref2$name = _ref2.name, name = _ref2$name === void 0 ? null : _ref2$name; if (!(typeof name === "string")) { _context.next = 4; break; } element.textContent = this._normalizeTextContent(name); return _context.abrupt("return"); case 4: _context.next = 6; return this.l10n.get("additional_layers", null, "Additional Layers"); case 6: element.textContent = _context.sent; element.style.fontStyle = "italic"; case 8: case "end": return _context.stop(); } } }, _callee, this); })); function _setNestedName(_x, _x2) { return _setNestedName2.apply(this, arguments); } return _setNestedName; }() }, { key: "_addToggleButton", value: function _addToggleButton(div, _ref3) { var _ref3$name = _ref3.name, name = _ref3$name === void 0 ? null : _ref3$name; _get(_getPrototypeOf(PDFLayerViewer.prototype), "_addToggleButton", this).call(this, div, name === null); } }, { key: "_toggleAllTreeItems", value: function _toggleAllTreeItems() { if (!this._optionalContentConfig) { return; } _get(_getPrototypeOf(PDFLayerViewer.prototype), "_toggleAllTreeItems", this).call(this); } }, { key: "render", value: function render(_ref4) { var optionalContentConfig = _ref4.optionalContentConfig, pdfDocument = _ref4.pdfDocument; if (this._optionalContentConfig) { this.reset(); } this._optionalContentConfig = optionalContentConfig || null; this._pdfDocument = pdfDocument || null; var groups = optionalContentConfig === null || optionalContentConfig === void 0 ? void 0 : optionalContentConfig.getOrder(); if (!groups) { this._dispatchEvent(0); return; } var fragment = document.createDocumentFragment(), queue = [{ parent: fragment, groups: groups }]; var layersCount = 0, hasAnyNesting = false; while (queue.length > 0) { var levelData = queue.shift(); var _iterator = _createForOfIteratorHelper(levelData.groups), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var groupId = _step.value; var div = document.createElement("div"); div.className = "treeItem"; var element = document.createElement("a"); div.appendChild(element); if (_typeof(groupId) === "object") { hasAnyNesting = true; this._addToggleButton(div, groupId); this._setNestedName(element, groupId); var itemsDiv = document.createElement("div"); itemsDiv.className = "treeItems"; div.appendChild(itemsDiv); queue.push({ parent: itemsDiv, groups: groupId.order }); } else { var group = optionalContentConfig.getGroup(groupId); var input = document.createElement("input"); this._bindLink(element, { groupId: groupId, input: input }); input.type = "checkbox"; input.id = groupId; input.checked = group.visible; var label = document.createElement("label"); label.setAttribute("for", groupId); label.textContent = this._normalizeTextContent(group.name); element.appendChild(input); element.appendChild(label); layersCount++; } levelData.parent.appendChild(div); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } } this._finishRendering(fragment, layersCount, hasAnyNesting); } }, { key: "_resetLayers", value: function () { var _resetLayers2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { var optionalContentConfig; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: if (this._optionalContentConfig) { _context2.next = 2; break; } return _context2.abrupt("return"); case 2: _context2.next = 4; return this._pdfDocument.getOptionalContentConfig(); case 4: optionalContentConfig = _context2.sent; this.eventBus.dispatch("optionalcontentconfig", { source: this, promise: Promise.resolve(optionalContentConfig) }); this.render({ optionalContentConfig: optionalContentConfig, pdfDocument: this._pdfDocument }); case 7: case "end": return _context2.stop(); } } }, _callee2, this); })); function _resetLayers() { return _resetLayers2.apply(this, arguments); } return _resetLayers; }() }]); return PDFLayerViewer; }(_base_tree_viewer.BaseTreeViewer); exports.PDFLayerViewer = PDFLayerViewer; /***/ }), /* 21 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.SimpleLinkService = exports.PDFLinkService = void 0; var _regenerator = _interopRequireDefault(__webpack_require__(4)); var _ui_utils = __webpack_require__(6); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var PDFLinkService = /*#__PURE__*/function () { function PDFLinkService() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, eventBus = _ref.eventBus, _ref$externalLinkTarg = _ref.externalLinkTarget, externalLinkTarget = _ref$externalLinkTarg === void 0 ? null : _ref$externalLinkTarg, _ref$externalLinkRel = _ref.externalLinkRel, externalLinkRel = _ref$externalLinkRel === void 0 ? null : _ref$externalLinkRel, _ref$externalLinkEnab = _ref.externalLinkEnabled, externalLinkEnabled = _ref$externalLinkEnab === void 0 ? true : _ref$externalLinkEnab, _ref$ignoreDestinatio = _ref.ignoreDestinationZoom, ignoreDestinationZoom = _ref$ignoreDestinatio === void 0 ? false : _ref$ignoreDestinatio; _classCallCheck(this, PDFLinkService); this.eventBus = eventBus; this.externalLinkTarget = externalLinkTarget; this.externalLinkRel = externalLinkRel; this.externalLinkEnabled = externalLinkEnabled; this._ignoreDestinationZoom = ignoreDestinationZoom; this.baseUrl = null; this.pdfDocument = null; this.pdfViewer = null; this.pdfHistory = null; this._pagesRefCache = null; } _createClass(PDFLinkService, [{ key: "setDocument", value: function setDocument(pdfDocument) { var baseUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; this.baseUrl = baseUrl; this.pdfDocument = pdfDocument; this._pagesRefCache = Object.create(null); } }, { key: "setViewer", value: function setViewer(pdfViewer) { this.pdfViewer = pdfViewer; } }, { key: "setHistory", value: function setHistory(pdfHistory) { this.pdfHistory = pdfHistory; } }, { key: "pagesCount", get: function get() { return this.pdfDocument ? this.pdfDocument.numPages : 0; } }, { key: "page", get: function get() { return this.pdfViewer.currentPageNumber; }, set: function set(value) { this.pdfViewer.currentPageNumber = value; } }, { key: "rotation", get: function get() { return this.pdfViewer.pagesRotation; }, set: function set(value) { this.pdfViewer.pagesRotation = value; } }, { key: "navigateTo", value: function navigateTo(dest) { console.error("Deprecated method: `navigateTo`, use `goToDestination` instead."); this.goToDestination(dest); } }, { key: "_goToDestinationHelper", value: function _goToDestinationHelper(rawDest) { var _this = this; var namedDest = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; var explicitDest = arguments.length > 2 ? arguments[2] : undefined; var destRef = explicitDest[0]; var pageNumber; if (destRef instanceof Object) { pageNumber = this._cachedPageNumber(destRef); if (pageNumber === null) { this.pdfDocument.getPageIndex(destRef).then(function (pageIndex) { _this.cachePageRef(pageIndex + 1, destRef); _this._goToDestinationHelper(rawDest, namedDest, explicitDest); })["catch"](function () { console.error("PDFLinkService._goToDestinationHelper: \"".concat(destRef, "\" is not ") + "a valid page reference, for dest=\"".concat(rawDest, "\".")); }); return; } } else if (Number.isInteger(destRef)) { pageNumber = destRef + 1; } else { console.error("PDFLinkService._goToDestinationHelper: \"".concat(destRef, "\" is not ") + "a valid destination reference, for dest=\"".concat(rawDest, "\".")); return; } if (!pageNumber || pageNumber < 1 || pageNumber > this.pagesCount) { console.error("PDFLinkService._goToDestinationHelper: \"".concat(pageNumber, "\" is not ") + "a valid page number, for dest=\"".concat(rawDest, "\".")); return; } if (this.pdfHistory) { this.pdfHistory.pushCurrentPosition(); this.pdfHistory.push({ namedDest: namedDest, explicitDest: explicitDest, pageNumber: pageNumber }); } this.pdfViewer.scrollPageIntoView({ pageNumber: pageNumber, destArray: explicitDest, ignoreDestinationZoom: this._ignoreDestinationZoom }); } }, { key: "goToDestination", value: function () { var _goToDestination = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(dest) { var namedDest, explicitDest; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (this.pdfDocument) { _context.next = 2; break; } return _context.abrupt("return"); case 2: if (!(typeof dest === "string")) { _context.next = 9; break; } namedDest = dest; _context.next = 6; return this.pdfDocument.getDestination(dest); case 6: explicitDest = _context.sent; _context.next = 13; break; case 9: namedDest = null; _context.next = 12; return dest; case 12: explicitDest = _context.sent; case 13: if (Array.isArray(explicitDest)) { _context.next = 16; break; } console.error("PDFLinkService.goToDestination: \"".concat(explicitDest, "\" is not ") + "a valid destination array, for dest=\"".concat(dest, "\".")); return _context.abrupt("return"); case 16: this._goToDestinationHelper(dest, namedDest, explicitDest); case 17: case "end": return _context.stop(); } } }, _callee, this); })); function goToDestination(_x) { return _goToDestination.apply(this, arguments); } return goToDestination; }() }, { key: "goToPage", value: function goToPage(val) { if (!this.pdfDocument) { return; } var pageNumber = typeof val === "string" && this.pdfViewer.pageLabelToPageNumber(val) || val | 0; if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) { console.error("PDFLinkService.goToPage: \"".concat(val, "\" is not a valid page.")); return; } if (this.pdfHistory) { this.pdfHistory.pushCurrentPosition(); this.pdfHistory.pushPage(pageNumber); } this.pdfViewer.scrollPageIntoView({ pageNumber: pageNumber }); } }, { key: "getDestinationHash", value: function getDestinationHash(dest) { if (typeof dest === "string") { if (dest.length > 0) { return this.getAnchorUrl("#" + escape(dest)); } } else if (Array.isArray(dest)) { var str = JSON.stringify(dest); if (str.length > 0) { return this.getAnchorUrl("#" + escape(str)); } } return this.getAnchorUrl(""); } }, { key: "getAnchorUrl", value: function getAnchorUrl(anchor) { return (this.baseUrl || "") + anchor; } }, { key: "setHash", value: function setHash(hash) { if (!this.pdfDocument) { return; } var pageNumber, dest; if (hash.includes("=")) { var params = (0, _ui_utils.parseQueryString)(hash); if ("search" in params) { this.eventBus.dispatch("findfromurlhash", { source: this, query: params.search.replace(/"/g, ""), phraseSearch: params.phrase === "true" }); } if ("page" in params) { pageNumber = params.page | 0 || 1; } if ("zoom" in params) { var zoomArgs = params.zoom.split(","); var zoomArg = zoomArgs[0]; var zoomArgNumber = parseFloat(zoomArg); if (!zoomArg.includes("Fit")) { dest = [null, { name: "XYZ" }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null, zoomArgs.length > 2 ? zoomArgs[2] | 0 : null, zoomArgNumber ? zoomArgNumber / 100 : zoomArg]; } else { if (zoomArg === "Fit" || zoomArg === "FitB") { dest = [null, { name: zoomArg }]; } else if (zoomArg === "FitH" || zoomArg === "FitBH" || zoomArg === "FitV" || zoomArg === "FitBV") { dest = [null, { name: zoomArg }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null]; } else if (zoomArg === "FitR") { if (zoomArgs.length !== 5) { console.error('PDFLinkService.setHash: Not enough parameters for "FitR".'); } else { dest = [null, { name: zoomArg }, zoomArgs[1] | 0, zoomArgs[2] | 0, zoomArgs[3] | 0, zoomArgs[4] | 0]; } } else { console.error("PDFLinkService.setHash: \"".concat(zoomArg, "\" is not ") + "a valid zoom value."); } } } if (dest) { this.pdfViewer.scrollPageIntoView({ pageNumber: pageNumber || this.page, destArray: dest, allowNegativeOffset: true }); } else if (pageNumber) { this.page = pageNumber; } if ("pagemode" in params) { this.eventBus.dispatch("pagemode", { source: this, mode: params.pagemode }); } if ("nameddest" in params) { this.goToDestination(params.nameddest); } } else { dest = unescape(hash); try { dest = JSON.parse(dest); if (!Array.isArray(dest)) { dest = dest.toString(); } } catch (ex) {} if (typeof dest === "string" || isValidExplicitDestination(dest)) { this.goToDestination(dest); return; } console.error("PDFLinkService.setHash: \"".concat(unescape(hash), "\" is not ") + "a valid destination."); } } }, { key: "executeNamedAction", value: function executeNamedAction(action) { switch (action) { case "GoBack": if (this.pdfHistory) { this.pdfHistory.back(); } break; case "GoForward": if (this.pdfHistory) { this.pdfHistory.forward(); } break; case "NextPage": this.pdfViewer.nextPage(); break; case "PrevPage": this.pdfViewer.previousPage(); break; case "LastPage": this.page = this.pagesCount; break; case "FirstPage": this.page = 1; break; default: break; } this.eventBus.dispatch("namedaction", { source: this, action: action }); } }, { key: "cachePageRef", value: function cachePageRef(pageNum, pageRef) { if (!pageRef) { return; } var refStr = pageRef.gen === 0 ? "".concat(pageRef.num, "R") : "".concat(pageRef.num, "R").concat(pageRef.gen); this._pagesRefCache[refStr] = pageNum; } }, { key: "_cachedPageNumber", value: function _cachedPageNumber(pageRef) { var _this$_pagesRefCache; var refStr = pageRef.gen === 0 ? "".concat(pageRef.num, "R") : "".concat(pageRef.num, "R").concat(pageRef.gen); return ((_this$_pagesRefCache = this._pagesRefCache) === null || _this$_pagesRefCache === void 0 ? void 0 : _this$_pagesRefCache[refStr]) || null; } }, { key: "isPageVisible", value: function isPageVisible(pageNumber) { return this.pdfViewer.isPageVisible(pageNumber); } }, { key: "isPageCached", value: function isPageCached(pageNumber) { return this.pdfViewer.isPageCached(pageNumber); } }]); return PDFLinkService; }(); exports.PDFLinkService = PDFLinkService; function isValidExplicitDestination(dest) { if (!Array.isArray(dest)) { return false; } var destLength = dest.length; if (destLength < 2) { return false; } var page = dest[0]; if (!(_typeof(page) === "object" && Number.isInteger(page.num) && Number.isInteger(page.gen)) && !(Number.isInteger(page) && page >= 0)) { return false; } var zoom = dest[1]; if (!(_typeof(zoom) === "object" && typeof zoom.name === "string")) { return false; } var allowNull = true; switch (zoom.name) { case "XYZ": if (destLength !== 5) { return false; } break; case "Fit": case "FitB": return destLength === 2; case "FitH": case "FitBH": case "FitV": case "FitBV": if (destLength !== 3) { return false; } break; case "FitR": if (destLength !== 6) { return false; } allowNull = false; break; default: return false; } for (var i = 2; i < destLength; i++) { var param = dest[i]; if (!(typeof param === "number" || allowNull && param === null)) { return false; } } return true; } var SimpleLinkService = /*#__PURE__*/function () { function SimpleLinkService() { _classCallCheck(this, SimpleLinkService); this.externalLinkTarget = null; this.externalLinkRel = null; this.externalLinkEnabled = true; this._ignoreDestinationZoom = false; } _createClass(SimpleLinkService, [{ key: "pagesCount", get: function get() { return 0; } }, { key: "page", get: function get() { return 0; }, set: function set(value) {} }, { key: "rotation", get: function get() { return 0; }, set: function set(value) {} }, { key: "goToDestination", value: function () { var _goToDestination2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2(dest) { return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: case "end": return _context2.stop(); } } }, _callee2); })); function goToDestination(_x2) { return _goToDestination2.apply(this, arguments); } return goToDestination; }() }, { key: "goToPage", value: function goToPage(val) {} }, { key: "getDestinationHash", value: function getDestinationHash(dest) { return "#"; } }, { key: "getAnchorUrl", value: function getAnchorUrl(hash) { return "#"; } }, { key: "setHash", value: function setHash(hash) {} }, { key: "executeNamedAction", value: function executeNamedAction(action) {} }, { key: "cachePageRef", value: function cachePageRef(pageNum, pageRef) {} }, { key: "isPageVisible", value: function isPageVisible(pageNumber) { return true; } }, { key: "isPageCached", value: function isPageCached(pageNumber) { return true; } }]); return SimpleLinkService; }(); exports.SimpleLinkService = SimpleLinkService; /***/ }), /* 22 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFOutlineViewer = void 0; var _regenerator = _interopRequireDefault(__webpack_require__(4)); var _pdfjsLib = __webpack_require__(7); var _base_tree_viewer = __webpack_require__(14); var _ui_utils = __webpack_require__(6); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } var PDFOutlineViewer = /*#__PURE__*/function (_BaseTreeViewer) { _inherits(PDFOutlineViewer, _BaseTreeViewer); var _super = _createSuper(PDFOutlineViewer); function PDFOutlineViewer(options) { var _this; _classCallCheck(this, PDFOutlineViewer); _this = _super.call(this, options); _this.linkService = options.linkService; _this.eventBus._on("toggleoutlinetree", _this._toggleAllTreeItems.bind(_assertThisInitialized(_this))); _this.eventBus._on("currentoutlineitem", _this._currentOutlineItem.bind(_assertThisInitialized(_this))); _this.eventBus._on("pagechanging", function (evt) { _this._currentPageNumber = evt.pageNumber; }); _this.eventBus._on("pagesloaded", function (evt) { _this._isPagesLoaded = !!evt.pagesCount; }); _this.eventBus._on("sidebarviewchanged", function (evt) { _this._sidebarView = evt.view; }); return _this; } _createClass(PDFOutlineViewer, [{ key: "reset", value: function reset() { _get(_getPrototypeOf(PDFOutlineViewer.prototype), "reset", this).call(this); this._outline = null; this._pageNumberToDestHashCapability = null; this._currentPageNumber = 1; this._isPagesLoaded = false; } }, { key: "_dispatchEvent", value: function _dispatchEvent(outlineCount) { var _this$_pdfDocument; this.eventBus.dispatch("outlineloaded", { source: this, outlineCount: outlineCount, enableCurrentOutlineItemButton: outlineCount > 0 && !((_this$_pdfDocument = this._pdfDocument) !== null && _this$_pdfDocument !== void 0 && _this$_pdfDocument.loadingParams.disableAutoFetch) }); } }, { key: "_bindLink", value: function _bindLink(element, _ref) { var _this2 = this; var url = _ref.url, newWindow = _ref.newWindow, dest = _ref.dest; var linkService = this.linkService; if (url) { (0, _pdfjsLib.addLinkAttributes)(element, { url: url, target: newWindow ? _pdfjsLib.LinkTarget.BLANK : linkService.externalLinkTarget, rel: linkService.externalLinkRel, enabled: linkService.externalLinkEnabled }); return; } element.href = linkService.getDestinationHash(dest); element.onclick = function (evt) { _this2._updateCurrentTreeItem(evt.target.parentNode); if (dest) { linkService.goToDestination(dest); } return false; }; } }, { key: "_setStyles", value: function _setStyles(element, _ref2) { var bold = _ref2.bold, italic = _ref2.italic; if (bold) { element.style.fontWeight = "bold"; } if (italic) { element.style.fontStyle = "italic"; } } }, { key: "_addToggleButton", value: function _addToggleButton(div, _ref3) { var count = _ref3.count, items = _ref3.items; var hidden = false; if (count < 0) { var totalCount = items.length; if (totalCount > 0) { var queue = _toConsumableArray(items); while (queue.length > 0) { var _queue$shift = queue.shift(), nestedCount = _queue$shift.count, nestedItems = _queue$shift.items; if (nestedCount > 0 && nestedItems.length > 0) { totalCount += nestedItems.length; queue.push.apply(queue, _toConsumableArray(nestedItems)); } } } if (Math.abs(count) === totalCount) { hidden = true; } } _get(_getPrototypeOf(PDFOutlineViewer.prototype), "_addToggleButton", this).call(this, div, hidden); } }, { key: "_toggleAllTreeItems", value: function _toggleAllTreeItems() { if (!this._outline) { return; } _get(_getPrototypeOf(PDFOutlineViewer.prototype), "_toggleAllTreeItems", this).call(this); } }, { key: "render", value: function render(_ref4) { var outline = _ref4.outline, pdfDocument = _ref4.pdfDocument; if (this._outline) { this.reset(); } this._outline = outline || null; this._pdfDocument = pdfDocument || null; if (!outline) { this._dispatchEvent(0); return; } var fragment = document.createDocumentFragment(); var queue = [{ parent: fragment, items: outline }]; var outlineCount = 0, hasAnyNesting = false; while (queue.length > 0) { var levelData = queue.shift(); var _iterator = _createForOfIteratorHelper(levelData.items), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var item = _step.value; var div = document.createElement("div"); div.className = "treeItem"; var element = document.createElement("a"); this._bindLink(element, item); this._setStyles(element, item); element.textContent = this._normalizeTextContent(item.title); div.appendChild(element); if (item.items.length > 0) { hasAnyNesting = true; this._addToggleButton(div, item); var itemsDiv = document.createElement("div"); itemsDiv.className = "treeItems"; div.appendChild(itemsDiv); queue.push({ parent: itemsDiv, items: item.items }); } levelData.parent.appendChild(div); outlineCount++; } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } } this._finishRendering(fragment, outlineCount, hasAnyNesting); } }, { key: "_currentOutlineItem", value: function () { var _currentOutlineItem2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() { var pageNumberToDestHash, i, destHash, linkElement; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (this._isPagesLoaded) { _context.next = 2; break; } throw new Error("_currentOutlineItem: All pages have not been loaded."); case 2: if (!(!this._outline || !this._pdfDocument)) { _context.next = 4; break; } return _context.abrupt("return"); case 4: _context.next = 6; return this._getPageNumberToDestHash(this._pdfDocument); case 6: pageNumberToDestHash = _context.sent; if (pageNumberToDestHash) { _context.next = 9; break; } return _context.abrupt("return"); case 9: this._updateCurrentTreeItem(null); if (!(this._sidebarView !== _ui_utils.SidebarView.OUTLINE)) { _context.next = 12; break; } return _context.abrupt("return"); case 12: i = this._currentPageNumber; case 13: if (!(i > 0)) { _context.next = 25; break; } destHash = pageNumberToDestHash.get(i); if (destHash) { _context.next = 17; break; } return _context.abrupt("continue", 22); case 17: linkElement = this.container.querySelector("a[href=\"".concat(destHash, "\"]")); if (linkElement) { _context.next = 20; break; } return _context.abrupt("continue", 22); case 20: this._scrollToCurrentTreeItem(linkElement.parentNode); return _context.abrupt("break", 25); case 22: i--; _context.next = 13; break; case 25: case "end": return _context.stop(); } } }, _callee, this); })); function _currentOutlineItem() { return _currentOutlineItem2.apply(this, arguments); } return _currentOutlineItem; }() }, { key: "_getPageNumberToDestHash", value: function () { var _getPageNumberToDestHash2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2(pdfDocument) { var pageNumberToDestHash, pageNumberNesting, queue, levelData, currentNesting, _iterator2, _step2, _step2$value, dest, items, explicitDest, pageNumber, _explicitDest, _explicitDest2, destRef, destHash; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: if (!this._pageNumberToDestHashCapability) { _context2.next = 2; break; } return _context2.abrupt("return", this._pageNumberToDestHashCapability.promise); case 2: this._pageNumberToDestHashCapability = (0, _pdfjsLib.createPromiseCapability)(); pageNumberToDestHash = new Map(), pageNumberNesting = new Map(); queue = [{ nesting: 0, items: this._outline }]; case 5: if (!(queue.length > 0)) { _context2.next = 56; break; } levelData = queue.shift(), currentNesting = levelData.nesting; _iterator2 = _createForOfIteratorHelper(levelData.items); _context2.prev = 8; _iterator2.s(); case 10: if ((_step2 = _iterator2.n()).done) { _context2.next = 46; break; } _step2$value = _step2.value, dest = _step2$value.dest, items = _step2$value.items; explicitDest = void 0, pageNumber = void 0; if (!(typeof dest === "string")) { _context2.next = 21; break; } _context2.next = 16; return pdfDocument.getDestination(dest); case 16: explicitDest = _context2.sent; if (!(pdfDocument !== this._pdfDocument)) { _context2.next = 19; break; } return _context2.abrupt("return", null); case 19: _context2.next = 22; break; case 21: explicitDest = dest; case 22: if (!Array.isArray(explicitDest)) { _context2.next = 43; break; } _explicitDest = explicitDest, _explicitDest2 = _slicedToArray(_explicitDest, 1), destRef = _explicitDest2[0]; if (!(_typeof(destRef) === "object")) { _context2.next = 41; break; } pageNumber = this.linkService._cachedPageNumber(destRef); if (pageNumber) { _context2.next = 39; break; } _context2.prev = 27; _context2.next = 30; return pdfDocument.getPageIndex(destRef); case 30: _context2.t0 = _context2.sent; pageNumber = _context2.t0 + 1; if (!(pdfDocument !== this._pdfDocument)) { _context2.next = 34; break; } return _context2.abrupt("return", null); case 34: this.linkService.cachePageRef(pageNumber, destRef); _context2.next = 39; break; case 37: _context2.prev = 37; _context2.t1 = _context2["catch"](27); case 39: _context2.next = 42; break; case 41: if (Number.isInteger(destRef)) { pageNumber = destRef + 1; } case 42: if (Number.isInteger(pageNumber) && (!pageNumberToDestHash.has(pageNumber) || currentNesting > pageNumberNesting.get(pageNumber))) { destHash = this.linkService.getDestinationHash(dest); pageNumberToDestHash.set(pageNumber, destHash); pageNumberNesting.set(pageNumber, currentNesting); } case 43: if (items.length > 0) { queue.push({ nesting: currentNesting + 1, items: items }); } case 44: _context2.next = 10; break; case 46: _context2.next = 51; break; case 48: _context2.prev = 48; _context2.t2 = _context2["catch"](8); _iterator2.e(_context2.t2); case 51: _context2.prev = 51; _iterator2.f(); return _context2.finish(51); case 54: _context2.next = 5; break; case 56: this._pageNumberToDestHashCapability.resolve(pageNumberToDestHash.size > 0 ? pageNumberToDestHash : null); return _context2.abrupt("return", this._pageNumberToDestHashCapability.promise); case 58: case "end": return _context2.stop(); } } }, _callee2, this, [[8, 48, 51, 54], [27, 37]]); })); function _getPageNumberToDestHash(_x) { return _getPageNumberToDestHash2.apply(this, arguments); } return _getPageNumberToDestHash; }() }]); return PDFOutlineViewer; }(_base_tree_viewer.BaseTreeViewer); exports.PDFOutlineViewer = PDFOutlineViewer; /***/ }), /* 23 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFPresentationMode = void 0; var _ui_utils = __webpack_require__(6); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var DELAY_BEFORE_RESETTING_SWITCH_IN_PROGRESS = 1500; var DELAY_BEFORE_HIDING_CONTROLS = 3000; var ACTIVE_SELECTOR = "pdfPresentationMode"; var CONTROLS_SELECTOR = "pdfPresentationModeControls"; var MOUSE_SCROLL_COOLDOWN_TIME = 50; var PAGE_SWITCH_THRESHOLD = 0.1; var SWIPE_MIN_DISTANCE_THRESHOLD = 50; var SWIPE_ANGLE_THRESHOLD = Math.PI / 6; var PDFPresentationMode = /*#__PURE__*/function () { function PDFPresentationMode(_ref) { var _this = this; var container = _ref.container, pdfViewer = _ref.pdfViewer, eventBus = _ref.eventBus, _ref$contextMenuItems = _ref.contextMenuItems, contextMenuItems = _ref$contextMenuItems === void 0 ? null : _ref$contextMenuItems; _classCallCheck(this, PDFPresentationMode); this.container = container; this.pdfViewer = pdfViewer; this.eventBus = eventBus; this.active = false; this.args = null; this.contextMenuOpen = false; this.mouseScrollTimeStamp = 0; this.mouseScrollDelta = 0; this.touchSwipeState = null; if (contextMenuItems) { contextMenuItems.contextFirstPage.addEventListener("click", function () { _this.contextMenuOpen = false; _this.eventBus.dispatch("firstpage", { source: _this }); }); contextMenuItems.contextLastPage.addEventListener("click", function () { _this.contextMenuOpen = false; _this.eventBus.dispatch("lastpage", { source: _this }); }); contextMenuItems.contextPageRotateCw.addEventListener("click", function () { _this.contextMenuOpen = false; _this.eventBus.dispatch("rotatecw", { source: _this }); }); contextMenuItems.contextPageRotateCcw.addEventListener("click", function () { _this.contextMenuOpen = false; _this.eventBus.dispatch("rotateccw", { source: _this }); }); } } _createClass(PDFPresentationMode, [{ key: "request", value: function request() { if (this.switchInProgress || this.active || !this.pdfViewer.pagesCount) { return false; } this._addFullscreenChangeListeners(); this._setSwitchInProgress(); this._notifyStateChange(); if (this.container.requestFullscreen) { this.container.requestFullscreen(); } else if (this.container.mozRequestFullScreen) { this.container.mozRequestFullScreen(); } else if (this.container.webkitRequestFullscreen) { this.container.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT); } else { return false; } this.args = { page: this.pdfViewer.currentPageNumber, previousScale: this.pdfViewer.currentScaleValue }; return true; } }, { key: "_mouseWheel", value: function _mouseWheel(evt) { if (!this.active) { return; } evt.preventDefault(); var delta = (0, _ui_utils.normalizeWheelEventDelta)(evt); var currentTime = new Date().getTime(); var storedTime = this.mouseScrollTimeStamp; if (currentTime > storedTime && currentTime - storedTime < MOUSE_SCROLL_COOLDOWN_TIME) { return; } if (this.mouseScrollDelta > 0 && delta < 0 || this.mouseScrollDelta < 0 && delta > 0) { this._resetMouseScrollState(); } this.mouseScrollDelta += delta; if (Math.abs(this.mouseScrollDelta) >= PAGE_SWITCH_THRESHOLD) { var totalDelta = this.mouseScrollDelta; this._resetMouseScrollState(); var success = totalDelta > 0 ? this.pdfViewer.previousPage() : this.pdfViewer.nextPage(); if (success) { this.mouseScrollTimeStamp = currentTime; } } } }, { key: "isFullscreen", get: function get() { return !!(document.fullscreenElement || document.mozFullScreen || document.webkitIsFullScreen); } }, { key: "_notifyStateChange", value: function _notifyStateChange() { var state = _ui_utils.PresentationModeState.NORMAL; if (this.switchInProgress) { state = _ui_utils.PresentationModeState.CHANGING; } else if (this.active) { state = _ui_utils.PresentationModeState.FULLSCREEN; } this.eventBus.dispatch("presentationmodechanged", { source: this, state: state, get active() { throw new Error("Deprecated parameter: `active`, please use `state` instead."); }, get switchInProgress() { throw new Error("Deprecated parameter: `switchInProgress`, please use `state` instead."); } }); } }, { key: "_setSwitchInProgress", value: function _setSwitchInProgress() { var _this2 = this; if (this.switchInProgress) { clearTimeout(this.switchInProgress); } this.switchInProgress = setTimeout(function () { _this2._removeFullscreenChangeListeners(); delete _this2.switchInProgress; _this2._notifyStateChange(); }, DELAY_BEFORE_RESETTING_SWITCH_IN_PROGRESS); } }, { key: "_resetSwitchInProgress", value: function _resetSwitchInProgress() { if (this.switchInProgress) { clearTimeout(this.switchInProgress); delete this.switchInProgress; } } }, { key: "_enter", value: function _enter() { var _this3 = this; this.active = true; this._resetSwitchInProgress(); this._notifyStateChange(); this.container.classList.add(ACTIVE_SELECTOR); setTimeout(function () { _this3.pdfViewer.currentPageNumber = _this3.args.page; _this3.pdfViewer.currentScaleValue = "page-fit"; }, 0); this._addWindowListeners(); this._showControls(); this.contextMenuOpen = false; this.container.setAttribute("contextmenu", "viewerContextMenu"); window.getSelection().removeAllRanges(); } }, { key: "_exit", value: function _exit() { var _this4 = this; var page = this.pdfViewer.currentPageNumber; this.container.classList.remove(ACTIVE_SELECTOR); setTimeout(function () { _this4.active = false; _this4._removeFullscreenChangeListeners(); _this4._notifyStateChange(); _this4.pdfViewer.currentScaleValue = _this4.args.previousScale; _this4.pdfViewer.currentPageNumber = page; _this4.args = null; }, 0); this._removeWindowListeners(); this._hideControls(); this._resetMouseScrollState(); this.container.removeAttribute("contextmenu"); this.contextMenuOpen = false; } }, { key: "_mouseDown", value: function _mouseDown(evt) { if (this.contextMenuOpen) { this.contextMenuOpen = false; evt.preventDefault(); return; } if (evt.button === 0) { var isInternalLink = evt.target.href && evt.target.classList.contains("internalLink"); if (!isInternalLink) { evt.preventDefault(); if (evt.shiftKey) { this.pdfViewer.previousPage(); } else { this.pdfViewer.nextPage(); } } } } }, { key: "_contextMenu", value: function _contextMenu() { this.contextMenuOpen = true; } }, { key: "_showControls", value: function _showControls() { var _this5 = this; if (this.controlsTimeout) { clearTimeout(this.controlsTimeout); } else { this.container.classList.add(CONTROLS_SELECTOR); } this.controlsTimeout = setTimeout(function () { _this5.container.classList.remove(CONTROLS_SELECTOR); delete _this5.controlsTimeout; }, DELAY_BEFORE_HIDING_CONTROLS); } }, { key: "_hideControls", value: function _hideControls() { if (!this.controlsTimeout) { return; } clearTimeout(this.controlsTimeout); this.container.classList.remove(CONTROLS_SELECTOR); delete this.controlsTimeout; } }, { key: "_resetMouseScrollState", value: function _resetMouseScrollState() { this.mouseScrollTimeStamp = 0; this.mouseScrollDelta = 0; } }, { key: "_touchSwipe", value: function _touchSwipe(evt) { if (!this.active) { return; } if (evt.touches.length > 1) { this.touchSwipeState = null; return; } switch (evt.type) { case "touchstart": this.touchSwipeState = { startX: evt.touches[0].pageX, startY: evt.touches[0].pageY, endX: evt.touches[0].pageX, endY: evt.touches[0].pageY }; break; case "touchmove": if (this.touchSwipeState === null) { return; } this.touchSwipeState.endX = evt.touches[0].pageX; this.touchSwipeState.endY = evt.touches[0].pageY; evt.preventDefault(); break; case "touchend": if (this.touchSwipeState === null) { return; } var delta = 0; var dx = this.touchSwipeState.endX - this.touchSwipeState.startX; var dy = this.touchSwipeState.endY - this.touchSwipeState.startY; var absAngle = Math.abs(Math.atan2(dy, dx)); if (Math.abs(dx) > SWIPE_MIN_DISTANCE_THRESHOLD && (absAngle <= SWIPE_ANGLE_THRESHOLD || absAngle >= Math.PI - SWIPE_ANGLE_THRESHOLD)) { delta = dx; } else if (Math.abs(dy) > SWIPE_MIN_DISTANCE_THRESHOLD && Math.abs(absAngle - Math.PI / 2) <= SWIPE_ANGLE_THRESHOLD) { delta = dy; } if (delta > 0) { this.pdfViewer.previousPage(); } else if (delta < 0) { this.pdfViewer.nextPage(); } break; } } }, { key: "_addWindowListeners", value: function _addWindowListeners() { this.showControlsBind = this._showControls.bind(this); this.mouseDownBind = this._mouseDown.bind(this); this.mouseWheelBind = this._mouseWheel.bind(this); this.resetMouseScrollStateBind = this._resetMouseScrollState.bind(this); this.contextMenuBind = this._contextMenu.bind(this); this.touchSwipeBind = this._touchSwipe.bind(this); window.addEventListener("mousemove", this.showControlsBind); window.addEventListener("mousedown", this.mouseDownBind); window.addEventListener("wheel", this.mouseWheelBind, { passive: false }); window.addEventListener("keydown", this.resetMouseScrollStateBind); window.addEventListener("contextmenu", this.contextMenuBind); window.addEventListener("touchstart", this.touchSwipeBind); window.addEventListener("touchmove", this.touchSwipeBind); window.addEventListener("touchend", this.touchSwipeBind); } }, { key: "_removeWindowListeners", value: function _removeWindowListeners() { window.removeEventListener("mousemove", this.showControlsBind); window.removeEventListener("mousedown", this.mouseDownBind); window.removeEventListener("wheel", this.mouseWheelBind, { passive: false }); window.removeEventListener("keydown", this.resetMouseScrollStateBind); window.removeEventListener("contextmenu", this.contextMenuBind); window.removeEventListener("touchstart", this.touchSwipeBind); window.removeEventListener("touchmove", this.touchSwipeBind); window.removeEventListener("touchend", this.touchSwipeBind); delete this.showControlsBind; delete this.mouseDownBind; delete this.mouseWheelBind; delete this.resetMouseScrollStateBind; delete this.contextMenuBind; delete this.touchSwipeBind; } }, { key: "_fullscreenChange", value: function _fullscreenChange() { if (this.isFullscreen) { this._enter(); } else { this._exit(); } } }, { key: "_addFullscreenChangeListeners", value: function _addFullscreenChangeListeners() { this.fullscreenChangeBind = this._fullscreenChange.bind(this); window.addEventListener("fullscreenchange", this.fullscreenChangeBind); window.addEventListener("mozfullscreenchange", this.fullscreenChangeBind); window.addEventListener("webkitfullscreenchange", this.fullscreenChangeBind); } }, { key: "_removeFullscreenChangeListeners", value: function _removeFullscreenChangeListeners() { window.removeEventListener("fullscreenchange", this.fullscreenChangeBind); window.removeEventListener("mozfullscreenchange", this.fullscreenChangeBind); window.removeEventListener("webkitfullscreenchange", this.fullscreenChangeBind); delete this.fullscreenChangeBind; } }]); return PDFPresentationMode; }(); exports.PDFPresentationMode = PDFPresentationMode; /***/ }), /* 24 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFSidebar = void 0; var _ui_utils = __webpack_require__(6); var _pdf_rendering_queue = __webpack_require__(10); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var UI_NOTIFICATION_CLASS = "pdfSidebarNotification"; var PDFSidebar = /*#__PURE__*/function () { function PDFSidebar(_ref) { var elements = _ref.elements, pdfViewer = _ref.pdfViewer, pdfThumbnailViewer = _ref.pdfThumbnailViewer, eventBus = _ref.eventBus, _ref$l10n = _ref.l10n, l10n = _ref$l10n === void 0 ? _ui_utils.NullL10n : _ref$l10n; _classCallCheck(this, PDFSidebar); this.isOpen = false; this.active = _ui_utils.SidebarView.THUMBS; this.isInitialViewSet = false; this.onToggled = null; this.pdfViewer = pdfViewer; this.pdfThumbnailViewer = pdfThumbnailViewer; this.outerContainer = elements.outerContainer; this.viewerContainer = elements.viewerContainer; this.toggleButton = elements.toggleButton; this.thumbnailButton = elements.thumbnailButton; this.outlineButton = elements.outlineButton; this.attachmentsButton = elements.attachmentsButton; this.layersButton = elements.layersButton; this.thumbnailView = elements.thumbnailView; this.outlineView = elements.outlineView; this.attachmentsView = elements.attachmentsView; this.layersView = elements.layersView; this._outlineOptionsContainer = elements.outlineOptionsContainer; this._currentOutlineItemButton = elements.currentOutlineItemButton; this.eventBus = eventBus; this.l10n = l10n; this._addEventListeners(); } _createClass(PDFSidebar, [{ key: "reset", value: function reset() { this.isInitialViewSet = false; this._hideUINotification(true); this.switchView(_ui_utils.SidebarView.THUMBS); this.outlineButton.disabled = false; this.attachmentsButton.disabled = false; this.layersButton.disabled = false; this._currentOutlineItemButton.disabled = true; } }, { key: "visibleView", get: function get() { return this.isOpen ? this.active : _ui_utils.SidebarView.NONE; } }, { key: "isThumbnailViewVisible", get: function get() { return this.isOpen && this.active === _ui_utils.SidebarView.THUMBS; } }, { key: "isOutlineViewVisible", get: function get() { return this.isOpen && this.active === _ui_utils.SidebarView.OUTLINE; } }, { key: "isAttachmentsViewVisible", get: function get() { return this.isOpen && this.active === _ui_utils.SidebarView.ATTACHMENTS; } }, { key: "isLayersViewVisible", get: function get() { return this.isOpen && this.active === _ui_utils.SidebarView.LAYERS; } }, { key: "setInitialView", value: function setInitialView() { var view = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _ui_utils.SidebarView.NONE; if (this.isInitialViewSet) { return; } this.isInitialViewSet = true; if (view === _ui_utils.SidebarView.NONE || view === _ui_utils.SidebarView.UNKNOWN) { this._dispatchEvent(); return; } if (!this._switchView(view, true)) { this._dispatchEvent(); } } }, { key: "switchView", value: function switchView(view) { var forceOpen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; this._switchView(view, forceOpen); } }, { key: "_switchView", value: function _switchView(view) { var forceOpen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var isViewChanged = view !== this.active; var shouldForceRendering = false; switch (view) { case _ui_utils.SidebarView.NONE: if (this.isOpen) { this.close(); return true; } return false; case _ui_utils.SidebarView.THUMBS: if (this.isOpen && isViewChanged) { shouldForceRendering = true; } break; case _ui_utils.SidebarView.OUTLINE: if (this.outlineButton.disabled) { return false; } break; case _ui_utils.SidebarView.ATTACHMENTS: if (this.attachmentsButton.disabled) { return false; } break; case _ui_utils.SidebarView.LAYERS: if (this.layersButton.disabled) { return false; } break; default: console.error("PDFSidebar._switchView: \"".concat(view, "\" is not a valid view.")); return false; } this.active = view; this.thumbnailButton.classList.toggle("toggled", view === _ui_utils.SidebarView.THUMBS); this.outlineButton.classList.toggle("toggled", view === _ui_utils.SidebarView.OUTLINE); this.attachmentsButton.classList.toggle("toggled", view === _ui_utils.SidebarView.ATTACHMENTS); this.layersButton.classList.toggle("toggled", view === _ui_utils.SidebarView.LAYERS); this.thumbnailView.classList.toggle("hidden", view !== _ui_utils.SidebarView.THUMBS); this.outlineView.classList.toggle("hidden", view !== _ui_utils.SidebarView.OUTLINE); this.attachmentsView.classList.toggle("hidden", view !== _ui_utils.SidebarView.ATTACHMENTS); this.layersView.classList.toggle("hidden", view !== _ui_utils.SidebarView.LAYERS); this._outlineOptionsContainer.classList.toggle("hidden", view !== _ui_utils.SidebarView.OUTLINE); if (forceOpen && !this.isOpen) { this.open(); return true; } if (shouldForceRendering) { this._updateThumbnailViewer(); this._forceRendering(); } if (isViewChanged) { this._dispatchEvent(); } return isViewChanged; } }, { key: "open", value: function open() { if (this.isOpen) { return; } this.isOpen = true; this.toggleButton.classList.add("toggled"); this.toggleButton.setAttribute("aria-expanded", "true"); this.outerContainer.classList.add("sidebarMoving", "sidebarOpen"); if (this.active === _ui_utils.SidebarView.THUMBS) { this._updateThumbnailViewer(); } this._forceRendering(); this._dispatchEvent(); this._hideUINotification(); } }, { key: "close", value: function close() { if (!this.isOpen) { return; } this.isOpen = false; this.toggleButton.classList.remove("toggled"); this.toggleButton.setAttribute("aria-expanded", "false"); this.outerContainer.classList.add("sidebarMoving"); this.outerContainer.classList.remove("sidebarOpen"); this._forceRendering(); this._dispatchEvent(); } }, { key: "toggle", value: function toggle() { if (this.isOpen) { this.close(); } else { this.open(); } } }, { key: "_dispatchEvent", value: function _dispatchEvent() { this.eventBus.dispatch("sidebarviewchanged", { source: this, view: this.visibleView }); } }, { key: "_forceRendering", value: function _forceRendering() { if (this.onToggled) { this.onToggled(); } else { this.pdfViewer.forceRendering(); this.pdfThumbnailViewer.forceRendering(); } } }, { key: "_updateThumbnailViewer", value: function _updateThumbnailViewer() { var pdfViewer = this.pdfViewer, pdfThumbnailViewer = this.pdfThumbnailViewer; var pagesCount = pdfViewer.pagesCount; for (var pageIndex = 0; pageIndex < pagesCount; pageIndex++) { var pageView = pdfViewer.getPageView(pageIndex); if ((pageView === null || pageView === void 0 ? void 0 : pageView.renderingState) === _pdf_rendering_queue.RenderingStates.FINISHED) { var thumbnailView = pdfThumbnailViewer.getThumbnail(pageIndex); thumbnailView.setImage(pageView); } } pdfThumbnailViewer.scrollThumbnailIntoView(pdfViewer.currentPageNumber); } }, { key: "_showUINotification", value: function _showUINotification() { var _this = this; this.l10n.get("toggle_sidebar_notification2.title", null, "Toggle Sidebar (document contains outline/attachments/layers)").then(function (msg) { _this.toggleButton.title = msg; }); if (!this.isOpen) { this.toggleButton.classList.add(UI_NOTIFICATION_CLASS); } } }, { key: "_hideUINotification", value: function _hideUINotification() { var _this2 = this; var reset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; if (this.isOpen || reset) { this.toggleButton.classList.remove(UI_NOTIFICATION_CLASS); } if (reset) { this.l10n.get("toggle_sidebar.title", null, "Toggle Sidebar").then(function (msg) { _this2.toggleButton.title = msg; }); } } }, { key: "_addEventListeners", value: function _addEventListeners() { var _this3 = this; this.viewerContainer.addEventListener("transitionend", function (evt) { if (evt.target === _this3.viewerContainer) { _this3.outerContainer.classList.remove("sidebarMoving"); } }); this.toggleButton.addEventListener("click", function () { _this3.toggle(); }); this.thumbnailButton.addEventListener("click", function () { _this3.switchView(_ui_utils.SidebarView.THUMBS); }); this.outlineButton.addEventListener("click", function () { _this3.switchView(_ui_utils.SidebarView.OUTLINE); }); this.outlineButton.addEventListener("dblclick", function () { _this3.eventBus.dispatch("toggleoutlinetree", { source: _this3 }); }); this.attachmentsButton.addEventListener("click", function () { _this3.switchView(_ui_utils.SidebarView.ATTACHMENTS); }); this.layersButton.addEventListener("click", function () { _this3.switchView(_ui_utils.SidebarView.LAYERS); }); this.layersButton.addEventListener("dblclick", function () { _this3.eventBus.dispatch("resetlayers", { source: _this3 }); }); this._currentOutlineItemButton.addEventListener("click", function () { _this3.eventBus.dispatch("currentoutlineitem", { source: _this3 }); }); var onTreeLoaded = function onTreeLoaded(count, button, view) { button.disabled = !count; if (count) { _this3._showUINotification(); } else if (_this3.active === view) { _this3.switchView(_ui_utils.SidebarView.THUMBS); } }; this.eventBus._on("outlineloaded", function (evt) { onTreeLoaded(evt.outlineCount, _this3.outlineButton, _ui_utils.SidebarView.OUTLINE); if (evt.enableCurrentOutlineItemButton) { _this3.pdfViewer.pagesPromise.then(function () { _this3._currentOutlineItemButton.disabled = !_this3.isInitialViewSet; }); } }); this.eventBus._on("attachmentsloaded", function (evt) { onTreeLoaded(evt.attachmentsCount, _this3.attachmentsButton, _ui_utils.SidebarView.ATTACHMENTS); }); this.eventBus._on("layersloaded", function (evt) { onTreeLoaded(evt.layersCount, _this3.layersButton, _ui_utils.SidebarView.LAYERS); }); this.eventBus._on("presentationmodechanged", function (evt) { if (evt.state === _ui_utils.PresentationModeState.NORMAL && _this3.isThumbnailViewVisible) { _this3._updateThumbnailViewer(); } }); } }]); return PDFSidebar; }(); exports.PDFSidebar = PDFSidebar; /***/ }), /* 25 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFSidebarResizer = void 0; var _ui_utils = __webpack_require__(6); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var SIDEBAR_WIDTH_VAR = "--sidebar-width"; var SIDEBAR_MIN_WIDTH = 200; var SIDEBAR_RESIZING_CLASS = "sidebarResizing"; var PDFSidebarResizer = /*#__PURE__*/function () { function PDFSidebarResizer(options, eventBus) { var _this = this; var l10n = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _ui_utils.NullL10n; _classCallCheck(this, PDFSidebarResizer); this.isRTL = false; this.sidebarOpen = false; this.doc = document.documentElement; this._width = null; this._outerContainerWidth = null; this._boundEvents = Object.create(null); this.outerContainer = options.outerContainer; this.resizer = options.resizer; this.eventBus = eventBus; l10n.getDirection().then(function (dir) { _this.isRTL = dir === "rtl"; }); this._addEventListeners(); } _createClass(PDFSidebarResizer, [{ key: "outerContainerWidth", get: function get() { if (!this._outerContainerWidth) { this._outerContainerWidth = this.outerContainer.clientWidth; } return this._outerContainerWidth; } }, { key: "_updateWidth", value: function _updateWidth() { var width = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; var maxWidth = Math.floor(this.outerContainerWidth / 2); if (width > maxWidth) { width = maxWidth; } if (width < SIDEBAR_MIN_WIDTH) { width = SIDEBAR_MIN_WIDTH; } if (width === this._width) { return false; } this._width = width; this.doc.style.setProperty(SIDEBAR_WIDTH_VAR, "".concat(width, "px")); return true; } }, { key: "_mouseMove", value: function _mouseMove(evt) { var width = evt.clientX; if (this.isRTL) { width = this.outerContainerWidth - width; } this._updateWidth(width); } }, { key: "_mouseUp", value: function _mouseUp(evt) { this.outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS); this.eventBus.dispatch("resize", { source: this }); var _boundEvents = this._boundEvents; window.removeEventListener("mousemove", _boundEvents.mouseMove); window.removeEventListener("mouseup", _boundEvents.mouseUp); } }, { key: "_addEventListeners", value: function _addEventListeners() { var _this2 = this; var _boundEvents = this._boundEvents; _boundEvents.mouseMove = this._mouseMove.bind(this); _boundEvents.mouseUp = this._mouseUp.bind(this); this.resizer.addEventListener("mousedown", function (evt) { if (evt.button !== 0) { return; } _this2.outerContainer.classList.add(SIDEBAR_RESIZING_CLASS); window.addEventListener("mousemove", _boundEvents.mouseMove); window.addEventListener("mouseup", _boundEvents.mouseUp); }); this.eventBus._on("sidebarviewchanged", function (evt) { _this2.sidebarOpen = !!(evt !== null && evt !== void 0 && evt.view); }); this.eventBus._on("resize", function (evt) { if (!evt || evt.source !== window) { return; } _this2._outerContainerWidth = null; if (!_this2._width) { return; } if (!_this2.sidebarOpen) { _this2._updateWidth(_this2._width); return; } _this2.outerContainer.classList.add(SIDEBAR_RESIZING_CLASS); var updated = _this2._updateWidth(_this2._width); Promise.resolve().then(function () { _this2.outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS); if (updated) { _this2.eventBus.dispatch("resize", { source: _this2 }); } }); }); } }]); return PDFSidebarResizer; }(); exports.PDFSidebarResizer = PDFSidebarResizer; /***/ }), /* 26 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFThumbnailViewer = void 0; var _ui_utils = __webpack_require__(6); var _pdf_thumbnail_view = __webpack_require__(27); var _pdf_rendering_queue = __webpack_require__(10); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var THUMBNAIL_SCROLL_MARGIN = -19; var THUMBNAIL_SELECTED_CLASS = "selected"; var PDFThumbnailViewer = /*#__PURE__*/function () { function PDFThumbnailViewer(_ref) { var _this = this; var container = _ref.container, eventBus = _ref.eventBus, linkService = _ref.linkService, renderingQueue = _ref.renderingQueue, _ref$l10n = _ref.l10n, l10n = _ref$l10n === void 0 ? _ui_utils.NullL10n : _ref$l10n; _classCallCheck(this, PDFThumbnailViewer); this.container = container; this.linkService = linkService; this.renderingQueue = renderingQueue; this.l10n = l10n; this.scroll = (0, _ui_utils.watchScroll)(this.container, this._scrollUpdated.bind(this)); this._resetView(); eventBus._on("optionalcontentconfigchanged", function () { _this._setImageDisabled = true; }); } _createClass(PDFThumbnailViewer, [{ key: "_scrollUpdated", value: function _scrollUpdated() { this.renderingQueue.renderHighestPriority(); } }, { key: "getThumbnail", value: function getThumbnail(index) { return this._thumbnails[index]; } }, { key: "_getVisibleThumbs", value: function _getVisibleThumbs() { return (0, _ui_utils.getVisibleElements)({ scrollEl: this.container, views: this._thumbnails }); } }, { key: "scrollThumbnailIntoView", value: function scrollThumbnailIntoView(pageNumber) { if (!this.pdfDocument) { return; } var thumbnailView = this._thumbnails[pageNumber - 1]; if (!thumbnailView) { console.error('scrollThumbnailIntoView: Invalid "pageNumber" parameter.'); return; } if (pageNumber !== this._currentPageNumber) { var prevThumbnailView = this._thumbnails[this._currentPageNumber - 1]; prevThumbnailView.div.classList.remove(THUMBNAIL_SELECTED_CLASS); thumbnailView.div.classList.add(THUMBNAIL_SELECTED_CLASS); } var visibleThumbs = this._getVisibleThumbs(); var numVisibleThumbs = visibleThumbs.views.length; if (numVisibleThumbs > 0) { var first = visibleThumbs.first.id; var last = numVisibleThumbs > 1 ? visibleThumbs.last.id : first; var shouldScroll = false; if (pageNumber <= first || pageNumber >= last) { shouldScroll = true; } else { visibleThumbs.views.some(function (view) { if (view.id !== pageNumber) { return false; } shouldScroll = view.percent < 100; return true; }); } if (shouldScroll) { (0, _ui_utils.scrollIntoView)(thumbnailView.div, { top: THUMBNAIL_SCROLL_MARGIN }); } } this._currentPageNumber = pageNumber; } }, { key: "pagesRotation", get: function get() { return this._pagesRotation; }, set: function set(rotation) { if (!(0, _ui_utils.isValidRotation)(rotation)) { throw new Error("Invalid thumbnails rotation angle."); } if (!this.pdfDocument) { return; } if (this._pagesRotation === rotation) { return; } this._pagesRotation = rotation; for (var i = 0, ii = this._thumbnails.length; i < ii; i++) { this._thumbnails[i].update(rotation); } } }, { key: "cleanup", value: function cleanup() { for (var i = 0, ii = this._thumbnails.length; i < ii; i++) { if (this._thumbnails[i] && this._thumbnails[i].renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) { this._thumbnails[i].reset(); } } _pdf_thumbnail_view.TempImageFactory.destroyCanvas(); } }, { key: "_resetView", value: function _resetView() { this._thumbnails = []; this._currentPageNumber = 1; this._pageLabels = null; this._pagesRotation = 0; this._optionalContentConfigPromise = null; this._pagesRequests = new WeakMap(); this._setImageDisabled = false; this.container.textContent = ""; } }, { key: "setDocument", value: function setDocument(pdfDocument) { var _this2 = this; if (this.pdfDocument) { this._cancelRendering(); this._resetView(); } this.pdfDocument = pdfDocument; if (!pdfDocument) { return; } var firstPagePromise = pdfDocument.getPage(1); var optionalContentConfigPromise = pdfDocument.getOptionalContentConfig(); firstPagePromise.then(function (firstPdfPage) { _this2._optionalContentConfigPromise = optionalContentConfigPromise; var pagesCount = pdfDocument.numPages; var viewport = firstPdfPage.getViewport({ scale: 1 }); var checkSetImageDisabled = function checkSetImageDisabled() { return _this2._setImageDisabled; }; for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) { var thumbnail = new _pdf_thumbnail_view.PDFThumbnailView({ container: _this2.container, id: pageNum, defaultViewport: viewport.clone(), optionalContentConfigPromise: optionalContentConfigPromise, linkService: _this2.linkService, renderingQueue: _this2.renderingQueue, checkSetImageDisabled: checkSetImageDisabled, disableCanvasToImageConversion: false, l10n: _this2.l10n }); _this2._thumbnails.push(thumbnail); } var firstThumbnailView = _this2._thumbnails[0]; if (firstThumbnailView) { firstThumbnailView.setPdfPage(firstPdfPage); } var thumbnailView = _this2._thumbnails[_this2._currentPageNumber - 1]; thumbnailView.div.classList.add(THUMBNAIL_SELECTED_CLASS); })["catch"](function (reason) { console.error("Unable to initialize thumbnail viewer", reason); }); } }, { key: "_cancelRendering", value: function _cancelRendering() { for (var i = 0, ii = this._thumbnails.length; i < ii; i++) { if (this._thumbnails[i]) { this._thumbnails[i].cancelRendering(); } } } }, { key: "setPageLabels", value: function setPageLabels(labels) { if (!this.pdfDocument) { return; } if (!labels) { this._pageLabels = null; } else if (!(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)) { this._pageLabels = null; console.error("PDFThumbnailViewer_setPageLabels: Invalid page labels."); } else { this._pageLabels = labels; } for (var i = 0, ii = this._thumbnails.length; i < ii; i++) { var _this$_pageLabels$i, _this$_pageLabels; this._thumbnails[i].setPageLabel((_this$_pageLabels$i = (_this$_pageLabels = this._pageLabels) === null || _this$_pageLabels === void 0 ? void 0 : _this$_pageLabels[i]) !== null && _this$_pageLabels$i !== void 0 ? _this$_pageLabels$i : null); } } }, { key: "_ensurePdfPageLoaded", value: function _ensurePdfPageLoaded(thumbView) { var _this3 = this; if (thumbView.pdfPage) { return Promise.resolve(thumbView.pdfPage); } if (this._pagesRequests.has(thumbView)) { return this._pagesRequests.get(thumbView); } var promise = this.pdfDocument.getPage(thumbView.id).then(function (pdfPage) { if (!thumbView.pdfPage) { thumbView.setPdfPage(pdfPage); } _this3._pagesRequests["delete"](thumbView); return pdfPage; })["catch"](function (reason) { console.error("Unable to get page for thumb view", reason); _this3._pagesRequests["delete"](thumbView); }); this._pagesRequests.set(thumbView, promise); return promise; } }, { key: "forceRendering", value: function forceRendering() { var _this4 = this; var visibleThumbs = this._getVisibleThumbs(); var thumbView = this.renderingQueue.getHighestPriority(visibleThumbs, this._thumbnails, this.scroll.down); if (thumbView) { this._ensurePdfPageLoaded(thumbView).then(function () { _this4.renderingQueue.renderView(thumbView); }); return true; } return false; } }]); return PDFThumbnailViewer; }(); exports.PDFThumbnailViewer = PDFThumbnailViewer; /***/ }), /* 27 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.TempImageFactory = exports.PDFThumbnailView = void 0; var _regenerator = _interopRequireDefault(__webpack_require__(4)); var _ui_utils = __webpack_require__(6); var _pdfjsLib = __webpack_require__(7); var _pdf_rendering_queue = __webpack_require__(10); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var MAX_NUM_SCALING_STEPS = 3; var THUMBNAIL_CANVAS_BORDER_WIDTH = 1; var THUMBNAIL_WIDTH = 98; var TempImageFactory = function TempImageFactoryClosure() { var tempCanvasCache = null; return { getCanvas: function getCanvas(width, height) { var tempCanvas = tempCanvasCache; if (!tempCanvas) { tempCanvas = document.createElement("canvas"); tempCanvasCache = tempCanvas; } tempCanvas.width = width; tempCanvas.height = height; tempCanvas.mozOpaque = true; var ctx = tempCanvas.getContext("2d", { alpha: false }); ctx.save(); ctx.fillStyle = "rgb(255, 255, 255)"; ctx.fillRect(0, 0, width, height); ctx.restore(); return tempCanvas; }, destroyCanvas: function destroyCanvas() { var tempCanvas = tempCanvasCache; if (tempCanvas) { tempCanvas.width = 0; tempCanvas.height = 0; } tempCanvasCache = null; } }; }(); exports.TempImageFactory = TempImageFactory; var PDFThumbnailView = /*#__PURE__*/function () { function PDFThumbnailView(_ref) { var container = _ref.container, id = _ref.id, defaultViewport = _ref.defaultViewport, optionalContentConfigPromise = _ref.optionalContentConfigPromise, linkService = _ref.linkService, renderingQueue = _ref.renderingQueue, checkSetImageDisabled = _ref.checkSetImageDisabled, _ref$disableCanvasToI = _ref.disableCanvasToImageConversion, disableCanvasToImageConversion = _ref$disableCanvasToI === void 0 ? false : _ref$disableCanvasToI, _ref$l10n = _ref.l10n, l10n = _ref$l10n === void 0 ? _ui_utils.NullL10n : _ref$l10n; _classCallCheck(this, PDFThumbnailView); this.id = id; this.renderingId = "thumbnail" + id; this.pageLabel = null; this.pdfPage = null; this.rotation = 0; this.viewport = defaultViewport; this.pdfPageRotate = defaultViewport.rotation; this._optionalContentConfigPromise = optionalContentConfigPromise || null; this.linkService = linkService; this.renderingQueue = renderingQueue; this.renderTask = null; this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL; this.resume = null; this._checkSetImageDisabled = checkSetImageDisabled || function () { return false; }; this.disableCanvasToImageConversion = disableCanvasToImageConversion; this.pageWidth = this.viewport.width; this.pageHeight = this.viewport.height; this.pageRatio = this.pageWidth / this.pageHeight; this.canvasWidth = THUMBNAIL_WIDTH; this.canvasHeight = this.canvasWidth / this.pageRatio | 0; this.scale = this.canvasWidth / this.pageWidth; this.l10n = l10n; var anchor = document.createElement("a"); anchor.href = linkService.getAnchorUrl("#page=" + id); this._thumbPageTitle.then(function (msg) { anchor.title = msg; }); anchor.onclick = function () { linkService.goToPage(id); return false; }; this.anchor = anchor; var div = document.createElement("div"); div.className = "thumbnail"; div.setAttribute("data-page-number", this.id); this.div = div; var ring = document.createElement("div"); ring.className = "thumbnailSelectionRing"; var borderAdjustment = 2 * THUMBNAIL_CANVAS_BORDER_WIDTH; ring.style.width = this.canvasWidth + borderAdjustment + "px"; ring.style.height = this.canvasHeight + borderAdjustment + "px"; this.ring = ring; div.appendChild(ring); anchor.appendChild(div); container.appendChild(anchor); } _createClass(PDFThumbnailView, [{ key: "setPdfPage", value: function setPdfPage(pdfPage) { this.pdfPage = pdfPage; this.pdfPageRotate = pdfPage.rotate; var totalRotation = (this.rotation + this.pdfPageRotate) % 360; this.viewport = pdfPage.getViewport({ scale: 1, rotation: totalRotation }); this.reset(); } }, { key: "reset", value: function reset() { this.cancelRendering(); this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL; this.pageWidth = this.viewport.width; this.pageHeight = this.viewport.height; this.pageRatio = this.pageWidth / this.pageHeight; this.canvasHeight = this.canvasWidth / this.pageRatio | 0; this.scale = this.canvasWidth / this.pageWidth; this.div.removeAttribute("data-loaded"); var ring = this.ring; var childNodes = ring.childNodes; for (var i = childNodes.length - 1; i >= 0; i--) { ring.removeChild(childNodes[i]); } var borderAdjustment = 2 * THUMBNAIL_CANVAS_BORDER_WIDTH; ring.style.width = this.canvasWidth + borderAdjustment + "px"; ring.style.height = this.canvasHeight + borderAdjustment + "px"; if (this.canvas) { this.canvas.width = 0; this.canvas.height = 0; delete this.canvas; } if (this.image) { this.image.removeAttribute("src"); delete this.image; } } }, { key: "update", value: function update(rotation) { if (typeof rotation !== "undefined") { this.rotation = rotation; } var totalRotation = (this.rotation + this.pdfPageRotate) % 360; this.viewport = this.viewport.clone({ scale: 1, rotation: totalRotation }); this.reset(); } }, { key: "cancelRendering", value: function cancelRendering() { if (this.renderTask) { this.renderTask.cancel(); this.renderTask = null; } this.resume = null; } }, { key: "_getPageDrawContext", value: function _getPageDrawContext() { var canvas = document.createElement("canvas"); this.canvas = canvas; canvas.mozOpaque = true; var ctx = canvas.getContext("2d", { alpha: false }); var outputScale = (0, _ui_utils.getOutputScale)(ctx); canvas.width = this.canvasWidth * outputScale.sx | 0; canvas.height = this.canvasHeight * outputScale.sy | 0; canvas.style.width = this.canvasWidth + "px"; canvas.style.height = this.canvasHeight + "px"; var transform = outputScale.scaled ? [outputScale.sx, 0, 0, outputScale.sy, 0, 0] : null; return [ctx, transform]; } }, { key: "_convertCanvasToImage", value: function _convertCanvasToImage() { var _this = this; if (!this.canvas) { return; } if (this.renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) { return; } var className = "thumbnailImage"; if (this.disableCanvasToImageConversion) { this.canvas.className = className; this._thumbPageCanvas.then(function (msg) { _this.canvas.setAttribute("aria-label", msg); }); this.div.setAttribute("data-loaded", true); this.ring.appendChild(this.canvas); return; } var image = document.createElement("img"); image.className = className; this._thumbPageCanvas.then(function (msg) { image.setAttribute("aria-label", msg); }); image.style.width = this.canvasWidth + "px"; image.style.height = this.canvasHeight + "px"; image.src = this.canvas.toDataURL(); this.image = image; this.div.setAttribute("data-loaded", true); this.ring.appendChild(image); this.canvas.width = 0; this.canvas.height = 0; delete this.canvas; } }, { key: "draw", value: function draw() { var _this2 = this; if (this.renderingState !== _pdf_rendering_queue.RenderingStates.INITIAL) { console.error("Must be in new state before drawing"); return Promise.resolve(undefined); } var pdfPage = this.pdfPage; if (!pdfPage) { this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED; return Promise.reject(new Error("pdfPage is not loaded")); } this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING; var finishRenderTask = /*#__PURE__*/function () { var _ref2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() { var error, _args = arguments; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: error = _args.length > 0 && _args[0] !== undefined ? _args[0] : null; if (renderTask === _this2.renderTask) { _this2.renderTask = null; } if (!(error instanceof _pdfjsLib.RenderingCancelledException)) { _context.next = 4; break; } return _context.abrupt("return"); case 4: _this2.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED; _this2._convertCanvasToImage(); if (!error) { _context.next = 8; break; } throw error; case 8: case "end": return _context.stop(); } } }, _callee); })); return function finishRenderTask() { return _ref2.apply(this, arguments); }; }(); var _this$_getPageDrawCon = this._getPageDrawContext(), _this$_getPageDrawCon2 = _slicedToArray(_this$_getPageDrawCon, 2), ctx = _this$_getPageDrawCon2[0], transform = _this$_getPageDrawCon2[1]; var drawViewport = this.viewport.clone({ scale: this.scale }); var renderContinueCallback = function renderContinueCallback(cont) { if (!_this2.renderingQueue.isHighestPriority(_this2)) { _this2.renderingState = _pdf_rendering_queue.RenderingStates.PAUSED; _this2.resume = function () { _this2.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING; cont(); }; return; } cont(); }; var renderContext = { canvasContext: ctx, transform: transform, viewport: drawViewport, optionalContentConfigPromise: this._optionalContentConfigPromise }; var renderTask = this.renderTask = pdfPage.render(renderContext); renderTask.onContinue = renderContinueCallback; var resultPromise = renderTask.promise.then(function () { finishRenderTask(null); }, function (error) { finishRenderTask(error); }); resultPromise["finally"](function () { var _this2$pdfPage; var pageCached = _this2.linkService.isPageCached(_this2.id); if (pageCached) { return; } (_this2$pdfPage = _this2.pdfPage) === null || _this2$pdfPage === void 0 ? void 0 : _this2$pdfPage.cleanup(); }); return resultPromise; } }, { key: "setImage", value: function setImage(pageView) { if (this._checkSetImageDisabled()) { return; } if (this.renderingState !== _pdf_rendering_queue.RenderingStates.INITIAL) { return; } var img = pageView.canvas; if (!img) { return; } if (!this.pdfPage) { this.setPdfPage(pageView.pdfPage); } this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED; var _this$_getPageDrawCon3 = this._getPageDrawContext(), _this$_getPageDrawCon4 = _slicedToArray(_this$_getPageDrawCon3, 1), ctx = _this$_getPageDrawCon4[0]; var canvas = ctx.canvas; if (img.width <= 2 * canvas.width) { ctx.drawImage(img, 0, 0, img.width, img.height, 0, 0, canvas.width, canvas.height); this._convertCanvasToImage(); return; } var reducedWidth = canvas.width << MAX_NUM_SCALING_STEPS; var reducedHeight = canvas.height << MAX_NUM_SCALING_STEPS; var reducedImage = TempImageFactory.getCanvas(reducedWidth, reducedHeight); var reducedImageCtx = reducedImage.getContext("2d"); while (reducedWidth > img.width || reducedHeight > img.height) { reducedWidth >>= 1; reducedHeight >>= 1; } reducedImageCtx.drawImage(img, 0, 0, img.width, img.height, 0, 0, reducedWidth, reducedHeight); while (reducedWidth > 2 * canvas.width) { reducedImageCtx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, reducedWidth >> 1, reducedHeight >> 1); reducedWidth >>= 1; reducedHeight >>= 1; } ctx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, canvas.width, canvas.height); this._convertCanvasToImage(); } }, { key: "_thumbPageTitle", get: function get() { var _this$pageLabel; return this.l10n.get("thumb_page_title", { page: (_this$pageLabel = this.pageLabel) !== null && _this$pageLabel !== void 0 ? _this$pageLabel : this.id }, "Page {{page}}"); } }, { key: "_thumbPageCanvas", get: function get() { var _this$pageLabel2; return this.l10n.get("thumb_page_canvas", { page: (_this$pageLabel2 = this.pageLabel) !== null && _this$pageLabel2 !== void 0 ? _this$pageLabel2 : this.id }, "Thumbnail of Page {{page}}"); } }, { key: "setPageLabel", value: function setPageLabel(label) { var _this3 = this; this.pageLabel = typeof label === "string" ? label : null; this._thumbPageTitle.then(function (msg) { _this3.anchor.title = msg; }); if (this.renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) { return; } this._thumbPageCanvas.then(function (msg) { if (_this3.image) { _this3.image.setAttribute("aria-label", msg); } else if (_this3.disableCanvasToImageConversion && _this3.canvas) { _this3.canvas.setAttribute("aria-label", msg); } }); } }]); return PDFThumbnailView; }(); exports.PDFThumbnailView = PDFThumbnailView; /***/ }), /* 28 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFViewer = void 0; var _ui_utils = __webpack_require__(6); var _base_viewer = __webpack_require__(29); var _pdfjsLib = __webpack_require__(7); function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } var PDFViewer = /*#__PURE__*/function (_BaseViewer) { _inherits(PDFViewer, _BaseViewer); var _super = _createSuper(PDFViewer); function PDFViewer() { _classCallCheck(this, PDFViewer); return _super.apply(this, arguments); } _createClass(PDFViewer, [{ key: "_viewerElement", get: function get() { return (0, _pdfjsLib.shadow)(this, "_viewerElement", this.viewer); } }, { key: "_scrollIntoView", value: function _scrollIntoView(_ref) { var pageDiv = _ref.pageDiv, _ref$pageSpot = _ref.pageSpot, pageSpot = _ref$pageSpot === void 0 ? null : _ref$pageSpot, _ref$pageNumber = _ref.pageNumber, pageNumber = _ref$pageNumber === void 0 ? null : _ref$pageNumber; if (!pageSpot && !this.isInPresentationMode) { var left = pageDiv.offsetLeft + pageDiv.clientLeft; var right = left + pageDiv.clientWidth; var _this$container = this.container, scrollLeft = _this$container.scrollLeft, clientWidth = _this$container.clientWidth; if (this._isScrollModeHorizontal || left < scrollLeft || right > scrollLeft + clientWidth) { pageSpot = { left: 0, top: 0 }; } } _get(_getPrototypeOf(PDFViewer.prototype), "_scrollIntoView", this).call(this, { pageDiv: pageDiv, pageSpot: pageSpot, pageNumber: pageNumber }); } }, { key: "_getVisiblePages", value: function _getVisiblePages() { if (this.isInPresentationMode) { return this._getCurrentVisiblePage(); } return _get(_getPrototypeOf(PDFViewer.prototype), "_getVisiblePages", this).call(this); } }, { key: "_updateHelper", value: function _updateHelper(visiblePages) { if (this.isInPresentationMode) { return; } var currentId = this._currentPageNumber; var stillFullyVisible = false; var _iterator = _createForOfIteratorHelper(visiblePages), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var page = _step.value; if (page.percent < 100) { break; } if (page.id === currentId && this._scrollMode === _ui_utils.ScrollMode.VERTICAL && this._spreadMode === _ui_utils.SpreadMode.NONE) { stillFullyVisible = true; break; } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } if (!stillFullyVisible) { currentId = visiblePages[0].id; } this._setCurrentPageNumber(currentId); } }]); return PDFViewer; }(_base_viewer.BaseViewer); exports.PDFViewer = PDFViewer; /***/ }), /* 29 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.BaseViewer = void 0; var _pdfjsLib = __webpack_require__(7); var _ui_utils = __webpack_require__(6); var _pdf_rendering_queue = __webpack_require__(10); var _annotation_layer_builder = __webpack_require__(30); var _pdf_page_view = __webpack_require__(31); var _pdf_link_service = __webpack_require__(21); var _text_layer_builder = __webpack_require__(32); function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var DEFAULT_CACHE_SIZE = 10; function PDFPageViewBuffer(size) { var data = []; this.push = function (view) { var i = data.indexOf(view); if (i >= 0) { data.splice(i, 1); } data.push(view); if (data.length > size) { data.shift().destroy(); } }; this.resize = function (newSize, pagesToKeep) { size = newSize; if (pagesToKeep) { var pageIdsToKeep = new Set(); for (var i = 0, iMax = pagesToKeep.length; i < iMax; ++i) { pageIdsToKeep.add(pagesToKeep[i].id); } (0, _ui_utils.moveToEndOfArray)(data, function (page) { return pageIdsToKeep.has(page.id); }); } while (data.length > size) { data.shift().destroy(); } }; this.has = function (view) { return data.includes(view); }; } function isSameScale(oldScale, newScale) { if (newScale === oldScale) { return true; } if (Math.abs(newScale - oldScale) < 1e-15) { return true; } return false; } var BaseViewer = /*#__PURE__*/function () { function BaseViewer(options) { var _this$container, _this$viewer, _this = this; _classCallCheck(this, BaseViewer); if (this.constructor === BaseViewer) { throw new Error("Cannot initialize BaseViewer."); } var viewerVersion = '2.8.57'; if (_pdfjsLib.version !== viewerVersion) { throw new Error("The API version \"".concat(_pdfjsLib.version, "\" does not match the Viewer version \"").concat(viewerVersion, "\".")); } this._name = this.constructor.name; this.container = options.container; this.viewer = options.viewer || options.container.firstElementChild; if (!(((_this$container = this.container) === null || _this$container === void 0 ? void 0 : _this$container.tagName.toUpperCase()) === "DIV" && ((_this$viewer = this.viewer) === null || _this$viewer === void 0 ? void 0 : _this$viewer.tagName.toUpperCase()) === "DIV")) { throw new Error("Invalid `container` and/or `viewer` option."); } if (getComputedStyle(this.container).position !== "absolute") { throw new Error("The `container` must be absolutely positioned."); } this.eventBus = options.eventBus; this.linkService = options.linkService || new _pdf_link_service.SimpleLinkService(); this.downloadManager = options.downloadManager || null; this.findController = options.findController || null; this.removePageBorders = options.removePageBorders || false; this.textLayerMode = Number.isInteger(options.textLayerMode) ? options.textLayerMode : _ui_utils.TextLayerMode.ENABLE; this.imageResourcesPath = options.imageResourcesPath || ""; this.renderInteractiveForms = typeof options.renderInteractiveForms === "boolean" ? options.renderInteractiveForms : true; this.enablePrintAutoRotate = options.enablePrintAutoRotate || false; this.renderer = options.renderer || _ui_utils.RendererType.CANVAS; this.enableWebGL = options.enableWebGL || false; this.useOnlyCssZoom = options.useOnlyCssZoom || false; this.maxCanvasPixels = options.maxCanvasPixels; this.l10n = options.l10n || _ui_utils.NullL10n; this.enableScripting = options.enableScripting || false; this._mouseState = options.mouseState || null; this.defaultRenderingQueue = !options.renderingQueue; if (this.defaultRenderingQueue) { this.renderingQueue = new _pdf_rendering_queue.PDFRenderingQueue(); this.renderingQueue.setViewer(this); } else { this.renderingQueue = options.renderingQueue; } this.scroll = (0, _ui_utils.watchScroll)(this.container, this._scrollUpdate.bind(this)); this.presentationModeState = _ui_utils.PresentationModeState.UNKNOWN; this._onBeforeDraw = this._onAfterDraw = null; this._resetView(); if (this.removePageBorders) { this.viewer.classList.add("removePageBorders"); } Promise.resolve().then(function () { _this.eventBus.dispatch("baseviewerinit", { source: _this }); }); } _createClass(BaseViewer, [{ key: "pagesCount", get: function get() { return this._pages.length; } }, { key: "getPageView", value: function getPageView(index) { return this._pages[index]; } }, { key: "pageViewsReady", get: function get() { if (!this._pagesCapability.settled) { return false; } return this._pages.every(function (pageView) { return pageView === null || pageView === void 0 ? void 0 : pageView.pdfPage; }); } }, { key: "currentPageNumber", get: function get() { return this._currentPageNumber; }, set: function set(val) { if (!Number.isInteger(val)) { throw new Error("Invalid page number."); } if (!this.pdfDocument) { return; } if (!this._setCurrentPageNumber(val, true)) { console.error("".concat(this._name, ".currentPageNumber: \"").concat(val, "\" is not a valid page.")); } } }, { key: "_setCurrentPageNumber", value: function _setCurrentPageNumber(val) { var _this$_pageLabels, _this$_pageLabels2; var resetCurrentPageView = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; if (this._currentPageNumber === val) { if (resetCurrentPageView) { this._resetCurrentPageView(); } return true; } if (!(0 < val && val <= this.pagesCount)) { return false; } var previous = this._currentPageNumber; this._currentPageNumber = val; this.eventBus.dispatch("pagechanging", { source: this, pageNumber: val, pageLabel: (_this$_pageLabels = (_this$_pageLabels2 = this._pageLabels) === null || _this$_pageLabels2 === void 0 ? void 0 : _this$_pageLabels2[val - 1]) !== null && _this$_pageLabels !== void 0 ? _this$_pageLabels : null, previous: previous }); if (resetCurrentPageView) { this._resetCurrentPageView(); } return true; } }, { key: "currentPageLabel", get: function get() { var _this$_pageLabels3, _this$_pageLabels4; return (_this$_pageLabels3 = (_this$_pageLabels4 = this._pageLabels) === null || _this$_pageLabels4 === void 0 ? void 0 : _this$_pageLabels4[this._currentPageNumber - 1]) !== null && _this$_pageLabels3 !== void 0 ? _this$_pageLabels3 : null; }, set: function set(val) { if (!this.pdfDocument) { return; } var page = val | 0; if (this._pageLabels) { var i = this._pageLabels.indexOf(val); if (i >= 0) { page = i + 1; } } if (!this._setCurrentPageNumber(page, true)) { console.error("".concat(this._name, ".currentPageLabel: \"").concat(val, "\" is not a valid page.")); } } }, { key: "currentScale", get: function get() { return this._currentScale !== _ui_utils.UNKNOWN_SCALE ? this._currentScale : _ui_utils.DEFAULT_SCALE; }, set: function set(val) { if (isNaN(val)) { throw new Error("Invalid numeric scale."); } if (!this.pdfDocument) { return; } this._setScale(val, false); } }, { key: "currentScaleValue", get: function get() { return this._currentScaleValue; }, set: function set(val) { if (!this.pdfDocument) { return; } this._setScale(val, false); } }, { key: "pagesRotation", get: function get() { return this._pagesRotation; }, set: function set(rotation) { if (!(0, _ui_utils.isValidRotation)(rotation)) { throw new Error("Invalid pages rotation angle."); } if (!this.pdfDocument) { return; } if (this._pagesRotation === rotation) { return; } this._pagesRotation = rotation; var pageNumber = this._currentPageNumber; for (var i = 0, ii = this._pages.length; i < ii; i++) { var pageView = this._pages[i]; pageView.update(pageView.scale, rotation); } if (this._currentScaleValue) { this._setScale(this._currentScaleValue, true); } this.eventBus.dispatch("rotationchanging", { source: this, pagesRotation: rotation, pageNumber: pageNumber }); if (this.defaultRenderingQueue) { this.update(); } } }, { key: "firstPagePromise", get: function get() { return this.pdfDocument ? this._firstPageCapability.promise : null; } }, { key: "onePageRendered", get: function get() { return this.pdfDocument ? this._onePageRenderedCapability.promise : null; } }, { key: "pagesPromise", get: function get() { return this.pdfDocument ? this._pagesCapability.promise : null; } }, { key: "_viewerElement", get: function get() { throw new Error("Not implemented: _viewerElement"); } }, { key: "_onePageRenderedOrForceFetch", value: function _onePageRenderedOrForceFetch() { if (!this.container.offsetParent || this._getVisiblePages().views.length === 0) { return Promise.resolve(); } return this._onePageRenderedCapability.promise; } }, { key: "setDocument", value: function setDocument(pdfDocument) { var _this2 = this; if (this.pdfDocument) { this.eventBus.dispatch("pagesdestroy", { source: this }); this._cancelRendering(); this._resetView(); if (this.findController) { this.findController.setDocument(null); } } this.pdfDocument = pdfDocument; if (!pdfDocument) { return; } var pagesCount = pdfDocument.numPages; var firstPagePromise = pdfDocument.getPage(1); var optionalContentConfigPromise = pdfDocument.getOptionalContentConfig(); this._pagesCapability.promise.then(function () { _this2.eventBus.dispatch("pagesloaded", { source: _this2, pagesCount: pagesCount }); }); this._onBeforeDraw = function (evt) { var pageView = _this2._pages[evt.pageNumber - 1]; if (!pageView) { return; } _this2._buffer.push(pageView); }; this.eventBus._on("pagerender", this._onBeforeDraw); this._onAfterDraw = function (evt) { if (evt.cssTransform || _this2._onePageRenderedCapability.settled) { return; } _this2._onePageRenderedCapability.resolve(); _this2.eventBus._off("pagerendered", _this2._onAfterDraw); _this2._onAfterDraw = null; }; this.eventBus._on("pagerendered", this._onAfterDraw); firstPagePromise.then(function (firstPdfPage) { _this2._firstPageCapability.resolve(firstPdfPage); _this2._optionalContentConfigPromise = optionalContentConfigPromise; var scale = _this2.currentScale; var viewport = firstPdfPage.getViewport({ scale: scale * _ui_utils.CSS_UNITS }); var textLayerFactory = _this2.textLayerMode !== _ui_utils.TextLayerMode.DISABLE ? _this2 : null; for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) { var pageView = new _pdf_page_view.PDFPageView({ container: _this2._viewerElement, eventBus: _this2.eventBus, id: pageNum, scale: scale, defaultViewport: viewport.clone(), optionalContentConfigPromise: optionalContentConfigPromise, renderingQueue: _this2.renderingQueue, textLayerFactory: textLayerFactory, textLayerMode: _this2.textLayerMode, annotationLayerFactory: _this2, imageResourcesPath: _this2.imageResourcesPath, renderInteractiveForms: _this2.renderInteractiveForms, renderer: _this2.renderer, enableWebGL: _this2.enableWebGL, useOnlyCssZoom: _this2.useOnlyCssZoom, maxCanvasPixels: _this2.maxCanvasPixels, l10n: _this2.l10n, enableScripting: _this2.enableScripting }); _this2._pages.push(pageView); } var firstPageView = _this2._pages[0]; if (firstPageView) { firstPageView.setPdfPage(firstPdfPage); _this2.linkService.cachePageRef(1, firstPdfPage.ref); } if (_this2._spreadMode !== _ui_utils.SpreadMode.NONE) { _this2._updateSpreadMode(); } _this2._onePageRenderedOrForceFetch().then(function () { if (_this2.findController) { _this2.findController.setDocument(pdfDocument); } if (pdfDocument.loadingParams.disableAutoFetch || pagesCount > 7500) { _this2._pagesCapability.resolve(); return; } var getPagesLeft = pagesCount - 1; if (getPagesLeft <= 0) { _this2._pagesCapability.resolve(); return; } var _loop = function _loop(_pageNum) { pdfDocument.getPage(_pageNum).then(function (pdfPage) { var pageView = _this2._pages[_pageNum - 1]; if (!pageView.pdfPage) { pageView.setPdfPage(pdfPage); } _this2.linkService.cachePageRef(_pageNum, pdfPage.ref); if (--getPagesLeft === 0) { _this2._pagesCapability.resolve(); } }, function (reason) { console.error("Unable to get page ".concat(_pageNum, " to initialize viewer"), reason); if (--getPagesLeft === 0) { _this2._pagesCapability.resolve(); } }); }; for (var _pageNum = 2; _pageNum <= pagesCount; ++_pageNum) { _loop(_pageNum); } }); _this2.eventBus.dispatch("pagesinit", { source: _this2 }); if (_this2.defaultRenderingQueue) { _this2.update(); } })["catch"](function (reason) { console.error("Unable to initialize viewer", reason); }); } }, { key: "setPageLabels", value: function setPageLabels(labels) { if (!this.pdfDocument) { return; } if (!labels) { this._pageLabels = null; } else if (!(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)) { this._pageLabels = null; console.error("".concat(this._name, ".setPageLabels: Invalid page labels.")); } else { this._pageLabels = labels; } for (var i = 0, ii = this._pages.length; i < ii; i++) { var _this$_pageLabels$i, _this$_pageLabels5; this._pages[i].setPageLabel((_this$_pageLabels$i = (_this$_pageLabels5 = this._pageLabels) === null || _this$_pageLabels5 === void 0 ? void 0 : _this$_pageLabels5[i]) !== null && _this$_pageLabels$i !== void 0 ? _this$_pageLabels$i : null); } } }, { key: "_resetView", value: function _resetView() { this._pages = []; this._currentPageNumber = 1; this._currentScale = _ui_utils.UNKNOWN_SCALE; this._currentScaleValue = null; this._pageLabels = null; this._buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE); this._location = null; this._pagesRotation = 0; this._optionalContentConfigPromise = null; this._pagesRequests = new WeakMap(); this._firstPageCapability = (0, _pdfjsLib.createPromiseCapability)(); this._onePageRenderedCapability = (0, _pdfjsLib.createPromiseCapability)(); this._pagesCapability = (0, _pdfjsLib.createPromiseCapability)(); this._scrollMode = _ui_utils.ScrollMode.VERTICAL; this._spreadMode = _ui_utils.SpreadMode.NONE; if (this._onBeforeDraw) { this.eventBus._off("pagerender", this._onBeforeDraw); this._onBeforeDraw = null; } if (this._onAfterDraw) { this.eventBus._off("pagerendered", this._onAfterDraw); this._onAfterDraw = null; } this._resetScriptingEvents(); this.viewer.textContent = ""; this._updateScrollMode(); } }, { key: "_scrollUpdate", value: function _scrollUpdate() { if (this.pagesCount === 0) { return; } this.update(); } }, { key: "_scrollIntoView", value: function _scrollIntoView(_ref) { var pageDiv = _ref.pageDiv, _ref$pageSpot = _ref.pageSpot, pageSpot = _ref$pageSpot === void 0 ? null : _ref$pageSpot, _ref$pageNumber = _ref.pageNumber, pageNumber = _ref$pageNumber === void 0 ? null : _ref$pageNumber; (0, _ui_utils.scrollIntoView)(pageDiv, pageSpot); } }, { key: "_setScaleUpdatePages", value: function _setScaleUpdatePages(newScale, newValue) { var noScroll = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var preset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; this._currentScaleValue = newValue.toString(); if (isSameScale(this._currentScale, newScale)) { if (preset) { this.eventBus.dispatch("scalechanging", { source: this, scale: newScale, presetValue: newValue }); } return; } for (var i = 0, ii = this._pages.length; i < ii; i++) { this._pages[i].update(newScale); } this._currentScale = newScale; if (!noScroll) { var page = this._currentPageNumber, dest; if (this._location && !(this.isInPresentationMode || this.isChangingPresentationMode)) { page = this._location.pageNumber; dest = [null, { name: "XYZ" }, this._location.left, this._location.top, null]; } this.scrollPageIntoView({ pageNumber: page, destArray: dest, allowNegativeOffset: true }); } this.eventBus.dispatch("scalechanging", { source: this, scale: newScale, presetValue: preset ? newValue : undefined }); if (this.defaultRenderingQueue) { this.update(); } } }, { key: "_pageWidthScaleFactor", get: function get() { if (this.spreadMode !== _ui_utils.SpreadMode.NONE && this.scrollMode !== _ui_utils.ScrollMode.HORIZONTAL && !this.isInPresentationMode) { return 2; } return 1; } }, { key: "_setScale", value: function _setScale(value) { var noScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var scale = parseFloat(value); if (scale > 0) { this._setScaleUpdatePages(scale, value, noScroll, false); } else { var currentPage = this._pages[this._currentPageNumber - 1]; if (!currentPage) { return; } var noPadding = this.isInPresentationMode || this.removePageBorders; var hPadding = noPadding ? 0 : _ui_utils.SCROLLBAR_PADDING; var vPadding = noPadding ? 0 : _ui_utils.VERTICAL_PADDING; if (!noPadding && this._isScrollModeHorizontal) { var _ref2 = [vPadding, hPadding]; hPadding = _ref2[0]; vPadding = _ref2[1]; } var pageWidthScale = (this.container.clientWidth - hPadding) / currentPage.width * currentPage.scale / this._pageWidthScaleFactor; var pageHeightScale = (this.container.clientHeight - vPadding) / currentPage.height * currentPage.scale; switch (value) { case "page-actual": scale = 1; break; case "page-width": scale = pageWidthScale; break; case "page-height": scale = pageHeightScale; break; case "page-fit": scale = Math.min(pageWidthScale, pageHeightScale); break; case "auto": var horizontalScale = (0, _ui_utils.isPortraitOrientation)(currentPage) ? pageWidthScale : Math.min(pageHeightScale, pageWidthScale); scale = Math.min(_ui_utils.MAX_AUTO_SCALE, horizontalScale); break; default: console.error("".concat(this._name, "._setScale: \"").concat(value, "\" is an unknown zoom value.")); return; } this._setScaleUpdatePages(scale, value, noScroll, true); } } }, { key: "_resetCurrentPageView", value: function _resetCurrentPageView() { if (this.isInPresentationMode) { this._setScale(this._currentScaleValue, true); } var pageView = this._pages[this._currentPageNumber - 1]; this._scrollIntoView({ pageDiv: pageView.div }); } }, { key: "pageLabelToPageNumber", value: function pageLabelToPageNumber(label) { if (!this._pageLabels) { return null; } var i = this._pageLabels.indexOf(label); if (i < 0) { return null; } return i + 1; } }, { key: "scrollPageIntoView", value: function scrollPageIntoView(_ref3) { var pageNumber = _ref3.pageNumber, _ref3$destArray = _ref3.destArray, destArray = _ref3$destArray === void 0 ? null : _ref3$destArray, _ref3$allowNegativeOf = _ref3.allowNegativeOffset, allowNegativeOffset = _ref3$allowNegativeOf === void 0 ? false : _ref3$allowNegativeOf, _ref3$ignoreDestinati = _ref3.ignoreDestinationZoom, ignoreDestinationZoom = _ref3$ignoreDestinati === void 0 ? false : _ref3$ignoreDestinati; if (!this.pdfDocument) { return; } var pageView = Number.isInteger(pageNumber) && this._pages[pageNumber - 1]; if (!pageView) { console.error("".concat(this._name, ".scrollPageIntoView: ") + "\"".concat(pageNumber, "\" is not a valid pageNumber parameter.")); return; } if (this.isInPresentationMode || !destArray) { this._setCurrentPageNumber(pageNumber, true); return; } var x = 0, y = 0; var width = 0, height = 0, widthScale, heightScale; var changeOrientation = pageView.rotation % 180 !== 0; var pageWidth = (changeOrientation ? pageView.height : pageView.width) / pageView.scale / _ui_utils.CSS_UNITS; var pageHeight = (changeOrientation ? pageView.width : pageView.height) / pageView.scale / _ui_utils.CSS_UNITS; var scale = 0; switch (destArray[1].name) { case "XYZ": x = destArray[2]; y = destArray[3]; scale = destArray[4]; x = x !== null ? x : 0; y = y !== null ? y : pageHeight; break; case "Fit": case "FitB": scale = "page-fit"; break; case "FitH": case "FitBH": y = destArray[2]; scale = "page-width"; if (y === null && this._location) { x = this._location.left; y = this._location.top; } else if (typeof y !== "number") { y = pageHeight; } break; case "FitV": case "FitBV": x = destArray[2]; width = pageWidth; height = pageHeight; scale = "page-height"; break; case "FitR": x = destArray[2]; y = destArray[3]; width = destArray[4] - x; height = destArray[5] - y; var hPadding = this.removePageBorders ? 0 : _ui_utils.SCROLLBAR_PADDING; var vPadding = this.removePageBorders ? 0 : _ui_utils.VERTICAL_PADDING; widthScale = (this.container.clientWidth - hPadding) / width / _ui_utils.CSS_UNITS; heightScale = (this.container.clientHeight - vPadding) / height / _ui_utils.CSS_UNITS; scale = Math.min(Math.abs(widthScale), Math.abs(heightScale)); break; default: console.error("".concat(this._name, ".scrollPageIntoView: ") + "\"".concat(destArray[1].name, "\" is not a valid destination type.")); return; } if (!ignoreDestinationZoom) { if (scale && scale !== this._currentScale) { this.currentScaleValue = scale; } else if (this._currentScale === _ui_utils.UNKNOWN_SCALE) { this.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE; } } if (scale === "page-fit" && !destArray[4]) { this._scrollIntoView({ pageDiv: pageView.div, pageNumber: pageNumber }); return; } var boundingRect = [pageView.viewport.convertToViewportPoint(x, y), pageView.viewport.convertToViewportPoint(x + width, y + height)]; var left = Math.min(boundingRect[0][0], boundingRect[1][0]); var top = Math.min(boundingRect[0][1], boundingRect[1][1]); if (!allowNegativeOffset) { left = Math.max(left, 0); top = Math.max(top, 0); } this._scrollIntoView({ pageDiv: pageView.div, pageSpot: { left: left, top: top }, pageNumber: pageNumber }); } }, { key: "_updateLocation", value: function _updateLocation(firstPage) { var currentScale = this._currentScale; var currentScaleValue = this._currentScaleValue; var normalizedScaleValue = parseFloat(currentScaleValue) === currentScale ? Math.round(currentScale * 10000) / 100 : currentScaleValue; var pageNumber = firstPage.id; var pdfOpenParams = "#page=" + pageNumber; pdfOpenParams += "&zoom=" + normalizedScaleValue; var currentPageView = this._pages[pageNumber - 1]; var container = this.container; var topLeft = currentPageView.getPagePoint(container.scrollLeft - firstPage.x, container.scrollTop - firstPage.y); var intLeft = Math.round(topLeft[0]); var intTop = Math.round(topLeft[1]); pdfOpenParams += "," + intLeft + "," + intTop; this._location = { pageNumber: pageNumber, scale: normalizedScaleValue, top: intTop, left: intLeft, rotation: this._pagesRotation, pdfOpenParams: pdfOpenParams }; } }, { key: "_updateHelper", value: function _updateHelper(visiblePages) { throw new Error("Not implemented: _updateHelper"); } }, { key: "update", value: function update() { var visible = this._getVisiblePages(); var visiblePages = visible.views, numVisiblePages = visiblePages.length; if (numVisiblePages === 0) { return; } var newCacheSize = Math.max(DEFAULT_CACHE_SIZE, 2 * numVisiblePages + 1); this._buffer.resize(newCacheSize, visiblePages); this.renderingQueue.renderHighestPriority(visible); this._updateHelper(visiblePages); this._updateLocation(visible.first); this.eventBus.dispatch("updateviewarea", { source: this, location: this._location }); } }, { key: "containsElement", value: function containsElement(element) { return this.container.contains(element); } }, { key: "focus", value: function focus() { this.container.focus(); } }, { key: "_isScrollModeHorizontal", get: function get() { return this.isInPresentationMode ? false : this._scrollMode === _ui_utils.ScrollMode.HORIZONTAL; } }, { key: "_isContainerRtl", get: function get() { return getComputedStyle(this.container).direction === "rtl"; } }, { key: "isInPresentationMode", get: function get() { return this.presentationModeState === _ui_utils.PresentationModeState.FULLSCREEN; } }, { key: "isChangingPresentationMode", get: function get() { return this.presentationModeState === _ui_utils.PresentationModeState.CHANGING; } }, { key: "isHorizontalScrollbarEnabled", get: function get() { return this.isInPresentationMode ? false : this.container.scrollWidth > this.container.clientWidth; } }, { key: "isVerticalScrollbarEnabled", get: function get() { return this.isInPresentationMode ? false : this.container.scrollHeight > this.container.clientHeight; } }, { key: "_getCurrentVisiblePage", value: function _getCurrentVisiblePage() { if (!this.pagesCount) { return { views: [] }; } var pageView = this._pages[this._currentPageNumber - 1]; var element = pageView.div; var view = { id: pageView.id, x: element.offsetLeft + element.clientLeft, y: element.offsetTop + element.clientTop, view: pageView }; return { first: view, last: view, views: [view] }; } }, { key: "_getVisiblePages", value: function _getVisiblePages() { return (0, _ui_utils.getVisibleElements)({ scrollEl: this.container, views: this._pages, sortByVisibility: true, horizontal: this._isScrollModeHorizontal, rtl: this._isScrollModeHorizontal && this._isContainerRtl }); } }, { key: "isPageVisible", value: function isPageVisible(pageNumber) { if (!this.pdfDocument) { return false; } if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) { console.error("".concat(this._name, ".isPageVisible: \"").concat(pageNumber, "\" is not a valid page.")); return false; } return this._getVisiblePages().views.some(function (view) { return view.id === pageNumber; }); } }, { key: "isPageCached", value: function isPageCached(pageNumber) { if (!this.pdfDocument || !this._buffer) { return false; } if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) { console.error("".concat(this._name, ".isPageCached: \"").concat(pageNumber, "\" is not a valid page.")); return false; } var pageView = this._pages[pageNumber - 1]; if (!pageView) { return false; } return this._buffer.has(pageView); } }, { key: "cleanup", value: function cleanup() { for (var i = 0, ii = this._pages.length; i < ii; i++) { if (this._pages[i] && this._pages[i].renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) { this._pages[i].reset(); } } } }, { key: "_cancelRendering", value: function _cancelRendering() { for (var i = 0, ii = this._pages.length; i < ii; i++) { if (this._pages[i]) { this._pages[i].cancelRendering(); } } } }, { key: "_ensurePdfPageLoaded", value: function _ensurePdfPageLoaded(pageView) { var _this3 = this; if (pageView.pdfPage) { return Promise.resolve(pageView.pdfPage); } if (this._pagesRequests.has(pageView)) { return this._pagesRequests.get(pageView); } var promise = this.pdfDocument.getPage(pageView.id).then(function (pdfPage) { if (!pageView.pdfPage) { pageView.setPdfPage(pdfPage); } _this3._pagesRequests["delete"](pageView); return pdfPage; })["catch"](function (reason) { console.error("Unable to get page for page view", reason); _this3._pagesRequests["delete"](pageView); }); this._pagesRequests.set(pageView, promise); return promise; } }, { key: "forceRendering", value: function forceRendering(currentlyVisiblePages) { var _this4 = this; var visiblePages = currentlyVisiblePages || this._getVisiblePages(); var scrollAhead = this._isScrollModeHorizontal ? this.scroll.right : this.scroll.down; var pageView = this.renderingQueue.getHighestPriority(visiblePages, this._pages, scrollAhead); if (pageView) { this._ensurePdfPageLoaded(pageView).then(function () { _this4.renderingQueue.renderView(pageView); }); return true; } return false; } }, { key: "createTextLayerBuilder", value: function createTextLayerBuilder(textLayerDiv, pageIndex, viewport) { var enhanceTextSelection = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; var eventBus = arguments.length > 4 ? arguments[4] : undefined; return new _text_layer_builder.TextLayerBuilder({ textLayerDiv: textLayerDiv, eventBus: eventBus, pageIndex: pageIndex, viewport: viewport, findController: this.isInPresentationMode ? null : this.findController, enhanceTextSelection: this.isInPresentationMode ? false : enhanceTextSelection }); } }, { key: "createAnnotationLayerBuilder", value: function createAnnotationLayerBuilder(pageDiv, pdfPage) { var _this$pdfDocument, _this$pdfDocument2; var annotationStorage = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var imageResourcesPath = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; var renderInteractiveForms = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; var l10n = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : _ui_utils.NullL10n; var enableScripting = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : false; var hasJSActionsPromise = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null; var mouseState = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : null; return new _annotation_layer_builder.AnnotationLayerBuilder({ pageDiv: pageDiv, pdfPage: pdfPage, annotationStorage: annotationStorage || ((_this$pdfDocument = this.pdfDocument) === null || _this$pdfDocument === void 0 ? void 0 : _this$pdfDocument.annotationStorage), imageResourcesPath: imageResourcesPath, renderInteractiveForms: renderInteractiveForms, linkService: this.linkService, downloadManager: this.downloadManager, l10n: l10n, enableScripting: enableScripting, hasJSActionsPromise: hasJSActionsPromise || ((_this$pdfDocument2 = this.pdfDocument) === null || _this$pdfDocument2 === void 0 ? void 0 : _this$pdfDocument2.hasJSActions()), mouseState: mouseState || this._mouseState }); } }, { key: "hasEqualPageSizes", get: function get() { var firstPageView = this._pages[0]; for (var i = 1, ii = this._pages.length; i < ii; ++i) { var pageView = this._pages[i]; if (pageView.width !== firstPageView.width || pageView.height !== firstPageView.height) { return false; } } return true; } }, { key: "getPagesOverview", value: function getPagesOverview() { var pagesOverview = this._pages.map(function (pageView) { var viewport = pageView.pdfPage.getViewport({ scale: 1 }); return { width: viewport.width, height: viewport.height, rotation: viewport.rotation }; }); if (!this.enablePrintAutoRotate) { return pagesOverview; } return pagesOverview.map(function (size) { if ((0, _ui_utils.isPortraitOrientation)(size)) { return size; } return { width: size.height, height: size.width, rotation: (size.rotation + 90) % 360 }; }); } }, { key: "optionalContentConfigPromise", get: function get() { if (!this.pdfDocument) { return Promise.resolve(null); } if (!this._optionalContentConfigPromise) { return this.pdfDocument.getOptionalContentConfig(); } return this._optionalContentConfigPromise; }, set: function set(promise) { if (!(promise instanceof Promise)) { throw new Error("Invalid optionalContentConfigPromise: ".concat(promise)); } if (!this.pdfDocument) { return; } if (!this._optionalContentConfigPromise) { return; } this._optionalContentConfigPromise = promise; var _iterator = _createForOfIteratorHelper(this._pages), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var pageView = _step.value; pageView.update(pageView.scale, pageView.rotation, promise); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } this.update(); this.eventBus.dispatch("optionalcontentconfigchanged", { source: this, promise: promise }); } }, { key: "scrollMode", get: function get() { return this._scrollMode; }, set: function set(mode) { if (this._scrollMode === mode) { return; } if (!(0, _ui_utils.isValidScrollMode)(mode)) { throw new Error("Invalid scroll mode: ".concat(mode)); } this._scrollMode = mode; this.eventBus.dispatch("scrollmodechanged", { source: this, mode: mode }); this._updateScrollMode(this._currentPageNumber); } }, { key: "_updateScrollMode", value: function _updateScrollMode() { var pageNumber = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var scrollMode = this._scrollMode, viewer = this.viewer; viewer.classList.toggle("scrollHorizontal", scrollMode === _ui_utils.ScrollMode.HORIZONTAL); viewer.classList.toggle("scrollWrapped", scrollMode === _ui_utils.ScrollMode.WRAPPED); if (!this.pdfDocument || !pageNumber) { return; } if (this._currentScaleValue && isNaN(this._currentScaleValue)) { this._setScale(this._currentScaleValue, true); } this._setCurrentPageNumber(pageNumber, true); this.update(); } }, { key: "spreadMode", get: function get() { return this._spreadMode; }, set: function set(mode) { if (this._spreadMode === mode) { return; } if (!(0, _ui_utils.isValidSpreadMode)(mode)) { throw new Error("Invalid spread mode: ".concat(mode)); } this._spreadMode = mode; this.eventBus.dispatch("spreadmodechanged", { source: this, mode: mode }); this._updateSpreadMode(this._currentPageNumber); } }, { key: "_updateSpreadMode", value: function _updateSpreadMode() { var pageNumber = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; if (!this.pdfDocument) { return; } var viewer = this.viewer, pages = this._pages; viewer.textContent = ""; if (this._spreadMode === _ui_utils.SpreadMode.NONE) { for (var i = 0, iMax = pages.length; i < iMax; ++i) { viewer.appendChild(pages[i].div); } } else { var parity = this._spreadMode - 1; var spread = null; for (var _i = 0, _iMax = pages.length; _i < _iMax; ++_i) { if (spread === null) { spread = document.createElement("div"); spread.className = "spread"; viewer.appendChild(spread); } else if (_i % 2 === parity) { spread = spread.cloneNode(false); viewer.appendChild(spread); } spread.appendChild(pages[_i].div); } } if (!pageNumber) { return; } if (this._currentScaleValue && isNaN(this._currentScaleValue)) { this._setScale(this._currentScaleValue, true); } this._setCurrentPageNumber(pageNumber, true); this.update(); } }, { key: "_getPageAdvance", value: function _getPageAdvance(currentPageNumber) { var previous = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; if (this.isInPresentationMode) { return 1; } switch (this._scrollMode) { case _ui_utils.ScrollMode.WRAPPED: { var _this$_getVisiblePage = this._getVisiblePages(), views = _this$_getVisiblePage.views, pageLayout = new Map(); var _iterator2 = _createForOfIteratorHelper(views), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var _step2$value = _step2.value, id = _step2$value.id, y = _step2$value.y, percent = _step2$value.percent, widthPercent = _step2$value.widthPercent; if (percent === 0 || widthPercent < 100) { continue; } var yArray = pageLayout.get(y); if (!yArray) { pageLayout.set(y, yArray || (yArray = [])); } yArray.push(id); } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } var _iterator3 = _createForOfIteratorHelper(pageLayout.values()), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var _yArray = _step3.value; var currentIndex = _yArray.indexOf(currentPageNumber); if (currentIndex === -1) { continue; } var numPages = _yArray.length; if (numPages === 1) { break; } if (previous) { for (var i = currentIndex - 1, ii = 0; i >= ii; i--) { var currentId = _yArray[i], expectedId = _yArray[i + 1] - 1; if (currentId < expectedId) { return currentPageNumber - expectedId; } } } else { for (var _i2 = currentIndex + 1, _ii = numPages; _i2 < _ii; _i2++) { var _currentId = _yArray[_i2], _expectedId = _yArray[_i2 - 1] + 1; if (_currentId > _expectedId) { return _expectedId - currentPageNumber; } } } if (previous) { var firstId = _yArray[0]; if (firstId < currentPageNumber) { return currentPageNumber - firstId + 1; } } else { var lastId = _yArray[numPages - 1]; if (lastId > currentPageNumber) { return lastId - currentPageNumber + 1; } } break; } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } break; } case _ui_utils.ScrollMode.HORIZONTAL: { break; } case _ui_utils.ScrollMode.VERTICAL: { if (this._spreadMode === _ui_utils.SpreadMode.NONE) { break; } var parity = this._spreadMode - 1; if (previous && currentPageNumber % 2 !== parity) { break; } else if (!previous && currentPageNumber % 2 === parity) { break; } var _this$_getVisiblePage2 = this._getVisiblePages(), _views = _this$_getVisiblePage2.views, _expectedId2 = previous ? currentPageNumber - 1 : currentPageNumber + 1; var _iterator4 = _createForOfIteratorHelper(_views), _step4; try { for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { var _step4$value = _step4.value, _id = _step4$value.id, _percent = _step4$value.percent, _widthPercent = _step4$value.widthPercent; if (_id !== _expectedId2) { continue; } if (_percent > 0 && _widthPercent === 100) { return 2; } break; } } catch (err) { _iterator4.e(err); } finally { _iterator4.f(); } break; } } return 1; } }, { key: "nextPage", value: function nextPage() { var currentPageNumber = this._currentPageNumber, pagesCount = this.pagesCount; if (currentPageNumber >= pagesCount) { return false; } var advance = this._getPageAdvance(currentPageNumber, false) || 1; this.currentPageNumber = Math.min(currentPageNumber + advance, pagesCount); return true; } }, { key: "previousPage", value: function previousPage() { var currentPageNumber = this._currentPageNumber; if (currentPageNumber <= 1) { return false; } var advance = this._getPageAdvance(currentPageNumber, true) || 1; this.currentPageNumber = Math.max(currentPageNumber - advance, 1); return true; } }, { key: "initializeScriptingEvents", value: function initializeScriptingEvents() { var _this5 = this; if (!this.enableScripting || this._pageOpenPendingSet) { return; } var eventBus = this.eventBus, pageOpenPendingSet = this._pageOpenPendingSet = new Set(), scriptingEvents = this._scriptingEvents || (this._scriptingEvents = Object.create(null)); var dispatchPageClose = function dispatchPageClose(pageNumber) { if (pageOpenPendingSet.has(pageNumber)) { return; } eventBus.dispatch("pageclose", { source: _this5, pageNumber: pageNumber }); }; var dispatchPageOpen = function dispatchPageOpen(pageNumber) { var pageView = _this5._pages[pageNumber - 1]; if ((pageView === null || pageView === void 0 ? void 0 : pageView.renderingState) === _pdf_rendering_queue.RenderingStates.FINISHED) { var _pageView$pdfPage; pageOpenPendingSet["delete"](pageNumber); eventBus.dispatch("pageopen", { source: _this5, pageNumber: pageNumber, actionsPromise: (_pageView$pdfPage = pageView.pdfPage) === null || _pageView$pdfPage === void 0 ? void 0 : _pageView$pdfPage.getJSActions() }); } else { pageOpenPendingSet.add(pageNumber); } }; scriptingEvents.onPageChanging = function (_ref4) { var pageNumber = _ref4.pageNumber, previous = _ref4.previous; if (pageNumber === previous) { return; } dispatchPageClose(previous); dispatchPageOpen(pageNumber); }; eventBus._on("pagechanging", scriptingEvents.onPageChanging); scriptingEvents.onPageRendered = function (_ref5) { var pageNumber = _ref5.pageNumber; if (!pageOpenPendingSet.has(pageNumber)) { return; } if (pageNumber !== _this5._currentPageNumber) { return; } dispatchPageOpen(pageNumber); }; eventBus._on("pagerendered", scriptingEvents.onPageRendered); scriptingEvents.onPagesDestroy = function () { dispatchPageClose(_this5._currentPageNumber); }; eventBus._on("pagesdestroy", scriptingEvents.onPagesDestroy); dispatchPageOpen(this._currentPageNumber); } }, { key: "_resetScriptingEvents", value: function _resetScriptingEvents() { if (!this.enableScripting || !this._pageOpenPendingSet) { return; } var eventBus = this.eventBus, scriptingEvents = this._scriptingEvents; eventBus._off("pagechanging", scriptingEvents.onPageChanging); scriptingEvents.onPageChanging = null; eventBus._off("pagerendered", scriptingEvents.onPageRendered); scriptingEvents.onPageRendered = null; eventBus._off("pagesdestroy", scriptingEvents.onPagesDestroy); scriptingEvents.onPagesDestroy = null; this._pageOpenPendingSet = null; } }]); return BaseViewer; }(); exports.BaseViewer = BaseViewer; /***/ }), /* 30 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.DefaultAnnotationLayerFactory = exports.AnnotationLayerBuilder = void 0; var _pdfjsLib = __webpack_require__(7); var _ui_utils = __webpack_require__(6); var _pdf_link_service = __webpack_require__(21); function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var AnnotationLayerBuilder = /*#__PURE__*/function () { function AnnotationLayerBuilder(_ref) { var pageDiv = _ref.pageDiv, pdfPage = _ref.pdfPage, linkService = _ref.linkService, downloadManager = _ref.downloadManager, _ref$annotationStorag = _ref.annotationStorage, annotationStorage = _ref$annotationStorag === void 0 ? null : _ref$annotationStorag, _ref$imageResourcesPa = _ref.imageResourcesPath, imageResourcesPath = _ref$imageResourcesPa === void 0 ? "" : _ref$imageResourcesPa, _ref$renderInteractiv = _ref.renderInteractiveForms, renderInteractiveForms = _ref$renderInteractiv === void 0 ? true : _ref$renderInteractiv, _ref$l10n = _ref.l10n, l10n = _ref$l10n === void 0 ? _ui_utils.NullL10n : _ref$l10n, _ref$enableScripting = _ref.enableScripting, enableScripting = _ref$enableScripting === void 0 ? false : _ref$enableScripting, _ref$hasJSActionsProm = _ref.hasJSActionsPromise, hasJSActionsPromise = _ref$hasJSActionsProm === void 0 ? null : _ref$hasJSActionsProm, _ref$mouseState = _ref.mouseState, mouseState = _ref$mouseState === void 0 ? null : _ref$mouseState; _classCallCheck(this, AnnotationLayerBuilder); this.pageDiv = pageDiv; this.pdfPage = pdfPage; this.linkService = linkService; this.downloadManager = downloadManager; this.imageResourcesPath = imageResourcesPath; this.renderInteractiveForms = renderInteractiveForms; this.l10n = l10n; this.annotationStorage = annotationStorage; this.enableScripting = enableScripting; this._hasJSActionsPromise = hasJSActionsPromise; this._mouseState = mouseState; this.div = null; this._cancelled = false; } _createClass(AnnotationLayerBuilder, [{ key: "render", value: function render(viewport) { var _this = this; var intent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "display"; return Promise.all([this.pdfPage.getAnnotations({ intent: intent }), this._hasJSActionsPromise]).then(function (_ref2) { var _ref3 = _slicedToArray(_ref2, 2), annotations = _ref3[0], _ref3$ = _ref3[1], hasJSActions = _ref3$ === void 0 ? false : _ref3$; if (_this._cancelled) { return; } if (annotations.length === 0) { return; } var parameters = { viewport: viewport.clone({ dontFlip: true }), div: _this.div, annotations: annotations, page: _this.pdfPage, imageResourcesPath: _this.imageResourcesPath, renderInteractiveForms: _this.renderInteractiveForms, linkService: _this.linkService, downloadManager: _this.downloadManager, annotationStorage: _this.annotationStorage, enableScripting: _this.enableScripting, hasJSActions: hasJSActions, mouseState: _this._mouseState }; if (_this.div) { _pdfjsLib.AnnotationLayer.update(parameters); } else { _this.div = document.createElement("div"); _this.div.className = "annotationLayer"; _this.pageDiv.appendChild(_this.div); parameters.div = _this.div; _pdfjsLib.AnnotationLayer.render(parameters); _this.l10n.translate(_this.div); } }); } }, { key: "cancel", value: function cancel() { this._cancelled = true; } }, { key: "hide", value: function hide() { if (!this.div) { return; } this.div.setAttribute("hidden", "true"); } }]); return AnnotationLayerBuilder; }(); exports.AnnotationLayerBuilder = AnnotationLayerBuilder; var DefaultAnnotationLayerFactory = /*#__PURE__*/function () { function DefaultAnnotationLayerFactory() { _classCallCheck(this, DefaultAnnotationLayerFactory); } _createClass(DefaultAnnotationLayerFactory, [{ key: "createAnnotationLayerBuilder", value: function createAnnotationLayerBuilder(pageDiv, pdfPage) { var annotationStorage = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var imageResourcesPath = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; var renderInteractiveForms = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; var l10n = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : _ui_utils.NullL10n; var enableScripting = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : false; var hasJSActionsPromise = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null; var mouseState = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : null; return new AnnotationLayerBuilder({ pageDiv: pageDiv, pdfPage: pdfPage, imageResourcesPath: imageResourcesPath, renderInteractiveForms: renderInteractiveForms, linkService: new _pdf_link_service.SimpleLinkService(), l10n: l10n, annotationStorage: annotationStorage, enableScripting: enableScripting, hasJSActionsPromise: hasJSActionsPromise, mouseState: mouseState }); } }]); return DefaultAnnotationLayerFactory; }(); exports.DefaultAnnotationLayerFactory = DefaultAnnotationLayerFactory; /***/ }), /* 31 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFPageView = void 0; var _regenerator = _interopRequireDefault(__webpack_require__(4)); var _ui_utils = __webpack_require__(6); var _pdfjsLib = __webpack_require__(7); var _pdf_rendering_queue = __webpack_require__(10); var _viewer_compatibility = __webpack_require__(2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var MAX_CANVAS_PIXELS = _viewer_compatibility.viewerCompatibilityParams.maxCanvasPixels || 16777216; var PDFPageView = /*#__PURE__*/function () { function PDFPageView(options) { _classCallCheck(this, PDFPageView); var container = options.container; var defaultViewport = options.defaultViewport; this.id = options.id; this.renderingId = "page" + this.id; this.pdfPage = null; this.pageLabel = null; this.rotation = 0; this.scale = options.scale || _ui_utils.DEFAULT_SCALE; this.viewport = defaultViewport; this.pdfPageRotate = defaultViewport.rotation; this._optionalContentConfigPromise = options.optionalContentConfigPromise || null; this.hasRestrictedScaling = false; this.textLayerMode = Number.isInteger(options.textLayerMode) ? options.textLayerMode : _ui_utils.TextLayerMode.ENABLE; this.imageResourcesPath = options.imageResourcesPath || ""; this.renderInteractiveForms = typeof options.renderInteractiveForms === "boolean" ? options.renderInteractiveForms : true; this.useOnlyCssZoom = options.useOnlyCssZoom || false; this.maxCanvasPixels = options.maxCanvasPixels || MAX_CANVAS_PIXELS; this.eventBus = options.eventBus; this.renderingQueue = options.renderingQueue; this.textLayerFactory = options.textLayerFactory; this.annotationLayerFactory = options.annotationLayerFactory; this.renderer = options.renderer || _ui_utils.RendererType.CANVAS; this.enableWebGL = options.enableWebGL || false; this.l10n = options.l10n || _ui_utils.NullL10n; this.enableScripting = options.enableScripting || false; this.paintTask = null; this.paintedViewportMap = new WeakMap(); this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL; this.resume = null; this._renderError = null; this.annotationLayer = null; this.textLayer = null; this.zoomLayer = null; var div = document.createElement("div"); div.className = "page"; div.style.width = Math.floor(this.viewport.width) + "px"; div.style.height = Math.floor(this.viewport.height) + "px"; div.setAttribute("data-page-number", this.id); this.div = div; container.appendChild(div); } _createClass(PDFPageView, [{ key: "setPdfPage", value: function setPdfPage(pdfPage) { this.pdfPage = pdfPage; this.pdfPageRotate = pdfPage.rotate; var totalRotation = (this.rotation + this.pdfPageRotate) % 360; this.viewport = pdfPage.getViewport({ scale: this.scale * _ui_utils.CSS_UNITS, rotation: totalRotation }); this.reset(); } }, { key: "destroy", value: function destroy() { this.reset(); if (this.pdfPage) { this.pdfPage.cleanup(); } } }, { key: "_renderAnnotationLayer", value: function () { var _renderAnnotationLayer2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() { var error; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: error = null; _context.prev = 1; _context.next = 4; return this.annotationLayer.render(this.viewport, "display"); case 4: _context.next = 9; break; case 6: _context.prev = 6; _context.t0 = _context["catch"](1); error = _context.t0; case 9: _context.prev = 9; this.eventBus.dispatch("annotationlayerrendered", { source: this, pageNumber: this.id, error: error }); return _context.finish(9); case 12: case "end": return _context.stop(); } } }, _callee, this, [[1, 6, 9, 12]]); })); function _renderAnnotationLayer() { return _renderAnnotationLayer2.apply(this, arguments); } return _renderAnnotationLayer; }() }, { key: "_resetZoomLayer", value: function _resetZoomLayer() { var removeFromDOM = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; if (!this.zoomLayer) { return; } var zoomLayerCanvas = this.zoomLayer.firstChild; this.paintedViewportMap["delete"](zoomLayerCanvas); zoomLayerCanvas.width = 0; zoomLayerCanvas.height = 0; if (removeFromDOM) { this.zoomLayer.remove(); } this.zoomLayer = null; } }, { key: "reset", value: function reset() { var _this$annotationLayer; var keepZoomLayer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var keepAnnotations = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; this.cancelRendering(keepAnnotations); this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL; var div = this.div; div.style.width = Math.floor(this.viewport.width) + "px"; div.style.height = Math.floor(this.viewport.height) + "px"; var childNodes = div.childNodes; var currentZoomLayerNode = keepZoomLayer && this.zoomLayer || null; var currentAnnotationNode = keepAnnotations && ((_this$annotationLayer = this.annotationLayer) === null || _this$annotationLayer === void 0 ? void 0 : _this$annotationLayer.div) || null; for (var i = childNodes.length - 1; i >= 0; i--) { var node = childNodes[i]; if (currentZoomLayerNode === node || currentAnnotationNode === node) { continue; } div.removeChild(node); } div.removeAttribute("data-loaded"); if (currentAnnotationNode) { this.annotationLayer.hide(); } else if (this.annotationLayer) { this.annotationLayer.cancel(); this.annotationLayer = null; } if (!currentZoomLayerNode) { if (this.canvas) { this.paintedViewportMap["delete"](this.canvas); this.canvas.width = 0; this.canvas.height = 0; delete this.canvas; } this._resetZoomLayer(); } if (this.svg) { this.paintedViewportMap["delete"](this.svg); delete this.svg; } this.loadingIconDiv = document.createElement("div"); this.loadingIconDiv.className = "loadingIcon"; div.appendChild(this.loadingIconDiv); } }, { key: "update", value: function update(scale, rotation) { var optionalContentConfigPromise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; this.scale = scale || this.scale; if (typeof rotation !== "undefined") { this.rotation = rotation; } if (optionalContentConfigPromise instanceof Promise) { this._optionalContentConfigPromise = optionalContentConfigPromise; } var totalRotation = (this.rotation + this.pdfPageRotate) % 360; this.viewport = this.viewport.clone({ scale: this.scale * _ui_utils.CSS_UNITS, rotation: totalRotation }); if (this.svg) { this.cssTransform(this.svg, true); this.eventBus.dispatch("pagerendered", { source: this, pageNumber: this.id, cssTransform: true, timestamp: performance.now(), error: this._renderError }); return; } var isScalingRestricted = false; if (this.canvas && this.maxCanvasPixels > 0) { var outputScale = this.outputScale; if ((Math.floor(this.viewport.width) * outputScale.sx | 0) * (Math.floor(this.viewport.height) * outputScale.sy | 0) > this.maxCanvasPixels) { isScalingRestricted = true; } } if (this.canvas) { if (this.useOnlyCssZoom || this.hasRestrictedScaling && isScalingRestricted) { this.cssTransform(this.canvas, true); this.eventBus.dispatch("pagerendered", { source: this, pageNumber: this.id, cssTransform: true, timestamp: performance.now(), error: this._renderError }); return; } if (!this.zoomLayer && !this.canvas.hasAttribute("hidden")) { this.zoomLayer = this.canvas.parentNode; this.zoomLayer.style.position = "absolute"; } } if (this.zoomLayer) { this.cssTransform(this.zoomLayer.firstChild); } this.reset(true, true); } }, { key: "cancelRendering", value: function cancelRendering() { var keepAnnotations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; if (this.paintTask) { this.paintTask.cancel(); this.paintTask = null; } this.resume = null; if (this.textLayer) { this.textLayer.cancel(); this.textLayer = null; } if (!keepAnnotations && this.annotationLayer) { this.annotationLayer.cancel(); this.annotationLayer = null; } } }, { key: "cssTransform", value: function cssTransform(target) { var redrawAnnotations = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var width = this.viewport.width; var height = this.viewport.height; var div = this.div; target.style.width = target.parentNode.style.width = div.style.width = Math.floor(width) + "px"; target.style.height = target.parentNode.style.height = div.style.height = Math.floor(height) + "px"; var relativeRotation = this.viewport.rotation - this.paintedViewportMap.get(target).rotation; var absRotation = Math.abs(relativeRotation); var scaleX = 1, scaleY = 1; if (absRotation === 90 || absRotation === 270) { scaleX = height / width; scaleY = width / height; } target.style.transform = "rotate(".concat(relativeRotation, "deg) scale(").concat(scaleX, ", ").concat(scaleY, ")"); if (this.textLayer) { var textLayerViewport = this.textLayer.viewport; var textRelativeRotation = this.viewport.rotation - textLayerViewport.rotation; var textAbsRotation = Math.abs(textRelativeRotation); var scale = width / textLayerViewport.width; if (textAbsRotation === 90 || textAbsRotation === 270) { scale = width / textLayerViewport.height; } var textLayerDiv = this.textLayer.textLayerDiv; var transX, transY; switch (textAbsRotation) { case 0: transX = transY = 0; break; case 90: transX = 0; transY = "-" + textLayerDiv.style.height; break; case 180: transX = "-" + textLayerDiv.style.width; transY = "-" + textLayerDiv.style.height; break; case 270: transX = "-" + textLayerDiv.style.width; transY = 0; break; default: console.error("Bad rotation value."); break; } textLayerDiv.style.transform = "rotate(".concat(textAbsRotation, "deg) ") + "scale(".concat(scale, ") ") + "translate(".concat(transX, ", ").concat(transY, ")"); textLayerDiv.style.transformOrigin = "0% 0%"; } if (redrawAnnotations && this.annotationLayer) { this._renderAnnotationLayer(); } } }, { key: "width", get: function get() { return this.viewport.width; } }, { key: "height", get: function get() { return this.viewport.height; } }, { key: "getPagePoint", value: function getPagePoint(x, y) { return this.viewport.convertToPdfPoint(x, y); } }, { key: "draw", value: function draw() { var _this$annotationLayer2, _this = this; if (this.renderingState !== _pdf_rendering_queue.RenderingStates.INITIAL) { console.error("Must be in new state before drawing"); this.reset(); } var div = this.div, pdfPage = this.pdfPage; if (!pdfPage) { this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED; if (this.loadingIconDiv) { div.removeChild(this.loadingIconDiv); delete this.loadingIconDiv; } return Promise.reject(new Error("pdfPage is not loaded")); } this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING; var canvasWrapper = document.createElement("div"); canvasWrapper.style.width = div.style.width; canvasWrapper.style.height = div.style.height; canvasWrapper.classList.add("canvasWrapper"); if ((_this$annotationLayer2 = this.annotationLayer) !== null && _this$annotationLayer2 !== void 0 && _this$annotationLayer2.div) { div.insertBefore(canvasWrapper, this.annotationLayer.div); } else { div.appendChild(canvasWrapper); } var textLayer = null; if (this.textLayerMode !== _ui_utils.TextLayerMode.DISABLE && this.textLayerFactory) { var _this$annotationLayer3; var textLayerDiv = document.createElement("div"); textLayerDiv.className = "textLayer"; textLayerDiv.style.width = canvasWrapper.style.width; textLayerDiv.style.height = canvasWrapper.style.height; if ((_this$annotationLayer3 = this.annotationLayer) !== null && _this$annotationLayer3 !== void 0 && _this$annotationLayer3.div) { div.insertBefore(textLayerDiv, this.annotationLayer.div); } else { div.appendChild(textLayerDiv); } textLayer = this.textLayerFactory.createTextLayerBuilder(textLayerDiv, this.id - 1, this.viewport, this.textLayerMode === _ui_utils.TextLayerMode.ENABLE_ENHANCE, this.eventBus); } this.textLayer = textLayer; var renderContinueCallback = null; if (this.renderingQueue) { renderContinueCallback = function renderContinueCallback(cont) { if (!_this.renderingQueue.isHighestPriority(_this)) { _this.renderingState = _pdf_rendering_queue.RenderingStates.PAUSED; _this.resume = function () { _this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING; cont(); }; return; } cont(); }; } var finishPaintTask = /*#__PURE__*/function () { var _ref = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { var error, _args2 = arguments; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: error = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : null; if (paintTask === _this.paintTask) { _this.paintTask = null; } if (!(error instanceof _pdfjsLib.RenderingCancelledException)) { _context2.next = 5; break; } _this._renderError = null; return _context2.abrupt("return"); case 5: _this._renderError = error; _this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED; if (_this.loadingIconDiv) { div.removeChild(_this.loadingIconDiv); delete _this.loadingIconDiv; } _this._resetZoomLayer(true); _this.eventBus.dispatch("pagerendered", { source: _this, pageNumber: _this.id, cssTransform: false, timestamp: performance.now(), error: _this._renderError }); if (!error) { _context2.next = 12; break; } throw error; case 12: case "end": return _context2.stop(); } } }, _callee2); })); return function finishPaintTask() { return _ref.apply(this, arguments); }; }(); var paintTask = this.renderer === _ui_utils.RendererType.SVG ? this.paintOnSvg(canvasWrapper) : this.paintOnCanvas(canvasWrapper); paintTask.onRenderContinue = renderContinueCallback; this.paintTask = paintTask; var resultPromise = paintTask.promise.then(function () { return finishPaintTask(null).then(function () { if (textLayer) { var readableStream = pdfPage.streamTextContent({ normalizeWhitespace: true }); textLayer.setTextContentStream(readableStream); textLayer.render(); } }); }, function (reason) { return finishPaintTask(reason); }); if (this.annotationLayerFactory) { if (!this.annotationLayer) { this.annotationLayer = this.annotationLayerFactory.createAnnotationLayerBuilder(div, pdfPage, null, this.imageResourcesPath, this.renderInteractiveForms, this.l10n, this.enableScripting, null, null); } this._renderAnnotationLayer(); } div.setAttribute("data-loaded", true); this.eventBus.dispatch("pagerender", { source: this, pageNumber: this.id }); return resultPromise; } }, { key: "paintOnCanvas", value: function paintOnCanvas(canvasWrapper) { var renderCapability = (0, _pdfjsLib.createPromiseCapability)(); var result = { promise: renderCapability.promise, onRenderContinue: function onRenderContinue(cont) { cont(); }, cancel: function cancel() { renderTask.cancel(); } }; var viewport = this.viewport; var canvas = document.createElement("canvas"); this.l10n.get("page_canvas", { page: this.id }, "Page {{page}}").then(function (msg) { canvas.setAttribute("aria-label", msg); }); canvas.setAttribute("hidden", "hidden"); var isCanvasHidden = true; var showCanvas = function showCanvas() { if (isCanvasHidden) { canvas.removeAttribute("hidden"); isCanvasHidden = false; } }; canvasWrapper.appendChild(canvas); this.canvas = canvas; canvas.mozOpaque = true; var ctx = canvas.getContext("2d", { alpha: false }); var outputScale = (0, _ui_utils.getOutputScale)(ctx); this.outputScale = outputScale; if (this.useOnlyCssZoom) { var actualSizeViewport = viewport.clone({ scale: _ui_utils.CSS_UNITS }); outputScale.sx *= actualSizeViewport.width / viewport.width; outputScale.sy *= actualSizeViewport.height / viewport.height; outputScale.scaled = true; } if (this.maxCanvasPixels > 0) { var pixelsInViewport = viewport.width * viewport.height; var maxScale = Math.sqrt(this.maxCanvasPixels / pixelsInViewport); if (outputScale.sx > maxScale || outputScale.sy > maxScale) { outputScale.sx = maxScale; outputScale.sy = maxScale; outputScale.scaled = true; this.hasRestrictedScaling = true; } else { this.hasRestrictedScaling = false; } } var sfx = (0, _ui_utils.approximateFraction)(outputScale.sx); var sfy = (0, _ui_utils.approximateFraction)(outputScale.sy); canvas.width = (0, _ui_utils.roundToDivide)(viewport.width * outputScale.sx, sfx[0]); canvas.height = (0, _ui_utils.roundToDivide)(viewport.height * outputScale.sy, sfy[0]); canvas.style.width = (0, _ui_utils.roundToDivide)(viewport.width, sfx[1]) + "px"; canvas.style.height = (0, _ui_utils.roundToDivide)(viewport.height, sfy[1]) + "px"; this.paintedViewportMap.set(canvas, viewport); var transform = !outputScale.scaled ? null : [outputScale.sx, 0, 0, outputScale.sy, 0, 0]; var renderContext = { canvasContext: ctx, transform: transform, viewport: this.viewport, enableWebGL: this.enableWebGL, renderInteractiveForms: this.renderInteractiveForms, optionalContentConfigPromise: this._optionalContentConfigPromise }; var renderTask = this.pdfPage.render(renderContext); renderTask.onContinue = function (cont) { showCanvas(); if (result.onRenderContinue) { result.onRenderContinue(cont); } else { cont(); } }; renderTask.promise.then(function () { showCanvas(); renderCapability.resolve(undefined); }, function (error) { showCanvas(); renderCapability.reject(error); }); return result; } }, { key: "paintOnSvg", value: function paintOnSvg(wrapper) { var _this2 = this; var cancelled = false; var ensureNotCancelled = function ensureNotCancelled() { if (cancelled) { throw new _pdfjsLib.RenderingCancelledException("Rendering cancelled, page ".concat(_this2.id), "svg"); } }; var pdfPage = this.pdfPage; var actualSizeViewport = this.viewport.clone({ scale: _ui_utils.CSS_UNITS }); var promise = pdfPage.getOperatorList().then(function (opList) { ensureNotCancelled(); var svgGfx = new _pdfjsLib.SVGGraphics(pdfPage.commonObjs, pdfPage.objs); return svgGfx.getSVG(opList, actualSizeViewport).then(function (svg) { ensureNotCancelled(); _this2.svg = svg; _this2.paintedViewportMap.set(svg, actualSizeViewport); svg.style.width = wrapper.style.width; svg.style.height = wrapper.style.height; _this2.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED; wrapper.appendChild(svg); }); }); return { promise: promise, onRenderContinue: function onRenderContinue(cont) { cont(); }, cancel: function cancel() { cancelled = true; } }; } }, { key: "setPageLabel", value: function setPageLabel(label) { this.pageLabel = typeof label === "string" ? label : null; if (this.pageLabel !== null) { this.div.setAttribute("data-page-label", this.pageLabel); } else { this.div.removeAttribute("data-page-label"); } } }]); return PDFPageView; }(); exports.PDFPageView = PDFPageView; /***/ }), /* 32 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.TextLayerBuilder = exports.DefaultTextLayerFactory = void 0; var _pdfjsLib = __webpack_require__(7); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var EXPAND_DIVS_TIMEOUT = 300; var TextLayerBuilder = /*#__PURE__*/function () { function TextLayerBuilder(_ref) { var textLayerDiv = _ref.textLayerDiv, eventBus = _ref.eventBus, pageIndex = _ref.pageIndex, viewport = _ref.viewport, _ref$findController = _ref.findController, findController = _ref$findController === void 0 ? null : _ref$findController, _ref$enhanceTextSelec = _ref.enhanceTextSelection, enhanceTextSelection = _ref$enhanceTextSelec === void 0 ? false : _ref$enhanceTextSelec; _classCallCheck(this, TextLayerBuilder); this.textLayerDiv = textLayerDiv; this.eventBus = eventBus; this.textContent = null; this.textContentItemsStr = []; this.textContentStream = null; this.renderingDone = false; this.pageIdx = pageIndex; this.pageNumber = this.pageIdx + 1; this.matches = []; this.viewport = viewport; this.textDivs = []; this.findController = findController; this.textLayerRenderTask = null; this.enhanceTextSelection = enhanceTextSelection; this._onUpdateTextLayerMatches = null; this._bindMouse(); } _createClass(TextLayerBuilder, [{ key: "_finishRendering", value: function _finishRendering() { this.renderingDone = true; if (!this.enhanceTextSelection) { var endOfContent = document.createElement("div"); endOfContent.className = "endOfContent"; this.textLayerDiv.appendChild(endOfContent); } this.eventBus.dispatch("textlayerrendered", { source: this, pageNumber: this.pageNumber, numTextDivs: this.textDivs.length }); } }, { key: "render", value: function render() { var _this = this; var timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; if (!(this.textContent || this.textContentStream) || this.renderingDone) { return; } this.cancel(); this.textDivs = []; var textLayerFrag = document.createDocumentFragment(); this.textLayerRenderTask = (0, _pdfjsLib.renderTextLayer)({ textContent: this.textContent, textContentStream: this.textContentStream, container: textLayerFrag, viewport: this.viewport, textDivs: this.textDivs, textContentItemsStr: this.textContentItemsStr, timeout: timeout, enhanceTextSelection: this.enhanceTextSelection }); this.textLayerRenderTask.promise.then(function () { _this.textLayerDiv.appendChild(textLayerFrag); _this._finishRendering(); _this._updateMatches(); }, function (reason) {}); if (!this._onUpdateTextLayerMatches) { this._onUpdateTextLayerMatches = function (evt) { if (evt.pageIndex === _this.pageIdx || evt.pageIndex === -1) { _this._updateMatches(); } }; this.eventBus._on("updatetextlayermatches", this._onUpdateTextLayerMatches); } } }, { key: "cancel", value: function cancel() { if (this.textLayerRenderTask) { this.textLayerRenderTask.cancel(); this.textLayerRenderTask = null; } if (this._onUpdateTextLayerMatches) { this.eventBus._off("updatetextlayermatches", this._onUpdateTextLayerMatches); this._onUpdateTextLayerMatches = null; } } }, { key: "setTextContentStream", value: function setTextContentStream(readableStream) { this.cancel(); this.textContentStream = readableStream; } }, { key: "setTextContent", value: function setTextContent(textContent) { this.cancel(); this.textContent = textContent; } }, { key: "_convertMatches", value: function _convertMatches(matches, matchesLength) { if (!matches) { return []; } var textContentItemsStr = this.textContentItemsStr; var i = 0, iIndex = 0; var end = textContentItemsStr.length - 1; var result = []; for (var m = 0, mm = matches.length; m < mm; m++) { var matchIdx = matches[m]; while (i !== end && matchIdx >= iIndex + textContentItemsStr[i].length) { iIndex += textContentItemsStr[i].length; i++; } if (i === textContentItemsStr.length) { console.error("Could not find a matching mapping"); } var match = { begin: { divIdx: i, offset: matchIdx - iIndex } }; matchIdx += matchesLength[m]; while (i !== end && matchIdx > iIndex + textContentItemsStr[i].length) { iIndex += textContentItemsStr[i].length; i++; } match.end = { divIdx: i, offset: matchIdx - iIndex }; result.push(match); } return result; } }, { key: "_renderMatches", value: function _renderMatches(matches) { if (matches.length === 0) { return; } var findController = this.findController, pageIdx = this.pageIdx, textContentItemsStr = this.textContentItemsStr, textDivs = this.textDivs; var isSelectedPage = pageIdx === findController.selected.pageIdx; var selectedMatchIdx = findController.selected.matchIdx; var highlightAll = findController.state.highlightAll; var prevEnd = null; var infinity = { divIdx: -1, offset: undefined }; function beginText(begin, className) { var divIdx = begin.divIdx; textDivs[divIdx].textContent = ""; appendTextToDiv(divIdx, 0, begin.offset, className); } function appendTextToDiv(divIdx, fromOffset, toOffset, className) { var div = textDivs[divIdx]; var content = textContentItemsStr[divIdx].substring(fromOffset, toOffset); var node = document.createTextNode(content); if (className) { var span = document.createElement("span"); span.className = className; span.appendChild(node); div.appendChild(span); return; } div.appendChild(node); } var i0 = selectedMatchIdx, i1 = i0 + 1; if (highlightAll) { i0 = 0; i1 = matches.length; } else if (!isSelectedPage) { return; } for (var i = i0; i < i1; i++) { var match = matches[i]; var begin = match.begin; var end = match.end; var isSelected = isSelectedPage && i === selectedMatchIdx; var highlightSuffix = isSelected ? " selected" : ""; if (isSelected) { findController.scrollMatchIntoView({ element: textDivs[begin.divIdx], pageIndex: pageIdx, matchIndex: selectedMatchIdx }); } if (!prevEnd || begin.divIdx !== prevEnd.divIdx) { if (prevEnd !== null) { appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset); } beginText(begin); } else { appendTextToDiv(prevEnd.divIdx, prevEnd.offset, begin.offset); } if (begin.divIdx === end.divIdx) { appendTextToDiv(begin.divIdx, begin.offset, end.offset, "highlight" + highlightSuffix); } else { appendTextToDiv(begin.divIdx, begin.offset, infinity.offset, "highlight begin" + highlightSuffix); for (var n0 = begin.divIdx + 1, n1 = end.divIdx; n0 < n1; n0++) { textDivs[n0].className = "highlight middle" + highlightSuffix; } beginText(end, "highlight end" + highlightSuffix); } prevEnd = end; } if (prevEnd) { appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset); } } }, { key: "_updateMatches", value: function _updateMatches() { if (!this.renderingDone) { return; } var findController = this.findController, matches = this.matches, pageIdx = this.pageIdx, textContentItemsStr = this.textContentItemsStr, textDivs = this.textDivs; var clearedUntilDivIdx = -1; for (var i = 0, ii = matches.length; i < ii; i++) { var match = matches[i]; var begin = Math.max(clearedUntilDivIdx, match.begin.divIdx); for (var n = begin, end = match.end.divIdx; n <= end; n++) { var div = textDivs[n]; div.textContent = textContentItemsStr[n]; div.className = ""; } clearedUntilDivIdx = match.end.divIdx + 1; } if (!(findController !== null && findController !== void 0 && findController.highlightMatches)) { return; } var pageMatches = findController.pageMatches[pageIdx] || null; var pageMatchesLength = findController.pageMatchesLength[pageIdx] || null; this.matches = this._convertMatches(pageMatches, pageMatchesLength); this._renderMatches(this.matches); } }, { key: "_bindMouse", value: function _bindMouse() { var _this2 = this; var div = this.textLayerDiv; var expandDivsTimer = null; div.addEventListener("mousedown", function (evt) { if (_this2.enhanceTextSelection && _this2.textLayerRenderTask) { _this2.textLayerRenderTask.expandTextDivs(true); if (expandDivsTimer) { clearTimeout(expandDivsTimer); expandDivsTimer = null; } return; } var end = div.querySelector(".endOfContent"); if (!end) { return; } var adjustTop = evt.target !== div; adjustTop = adjustTop && window.getComputedStyle(end).getPropertyValue("-moz-user-select") !== "none"; if (adjustTop) { var divBounds = div.getBoundingClientRect(); var r = Math.max(0, (evt.pageY - divBounds.top) / divBounds.height); end.style.top = (r * 100).toFixed(2) + "%"; } end.classList.add("active"); }); div.addEventListener("mouseup", function () { if (_this2.enhanceTextSelection && _this2.textLayerRenderTask) { expandDivsTimer = setTimeout(function () { if (_this2.textLayerRenderTask) { _this2.textLayerRenderTask.expandTextDivs(false); } expandDivsTimer = null; }, EXPAND_DIVS_TIMEOUT); return; } var end = div.querySelector(".endOfContent"); if (!end) { return; } end.style.top = ""; end.classList.remove("active"); }); } }]); return TextLayerBuilder; }(); exports.TextLayerBuilder = TextLayerBuilder; var DefaultTextLayerFactory = /*#__PURE__*/function () { function DefaultTextLayerFactory() { _classCallCheck(this, DefaultTextLayerFactory); } _createClass(DefaultTextLayerFactory, [{ key: "createTextLayerBuilder", value: function createTextLayerBuilder(textLayerDiv, pageIndex, viewport) { var enhanceTextSelection = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; var eventBus = arguments.length > 4 ? arguments[4] : undefined; return new TextLayerBuilder({ textLayerDiv: textLayerDiv, pageIndex: pageIndex, viewport: viewport, enhanceTextSelection: enhanceTextSelection, eventBus: eventBus }); } }]); return DefaultTextLayerFactory; }(); exports.DefaultTextLayerFactory = DefaultTextLayerFactory; /***/ }), /* 33 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.SecondaryToolbar = void 0; var _ui_utils = __webpack_require__(6); var _pdf_cursor_tools = __webpack_require__(8); var _pdf_single_page_viewer = __webpack_require__(34); function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var SecondaryToolbar = /*#__PURE__*/function () { function SecondaryToolbar(options, mainContainer, eventBus) { var _this = this; _classCallCheck(this, SecondaryToolbar); this.toolbar = options.toolbar; this.toggleButton = options.toggleButton; this.toolbarButtonContainer = options.toolbarButtonContainer; this.buttons = [{ element: options.presentationModeButton, eventName: "presentationmode", close: true }, { element: options.openFileButton, eventName: "openfile", close: true }, { element: options.printButton, eventName: "print", close: true }, { element: options.downloadButton, eventName: "download", close: true }, { element: options.viewBookmarkButton, eventName: null, close: true }, { element: options.firstPageButton, eventName: "firstpage", close: true }, { element: options.lastPageButton, eventName: "lastpage", close: true }, { element: options.pageRotateCwButton, eventName: "rotatecw", close: false }, { element: options.pageRotateCcwButton, eventName: "rotateccw", close: false }, { element: options.cursorSelectToolButton, eventName: "switchcursortool", eventDetails: { tool: _pdf_cursor_tools.CursorTool.SELECT }, close: true }, { element: options.cursorHandToolButton, eventName: "switchcursortool", eventDetails: { tool: _pdf_cursor_tools.CursorTool.HAND }, close: true }, { element: options.scrollVerticalButton, eventName: "switchscrollmode", eventDetails: { mode: _ui_utils.ScrollMode.VERTICAL }, close: true }, { element: options.scrollHorizontalButton, eventName: "switchscrollmode", eventDetails: { mode: _ui_utils.ScrollMode.HORIZONTAL }, close: true }, { element: options.scrollWrappedButton, eventName: "switchscrollmode", eventDetails: { mode: _ui_utils.ScrollMode.WRAPPED }, close: true }, { element: options.spreadNoneButton, eventName: "switchspreadmode", eventDetails: { mode: _ui_utils.SpreadMode.NONE }, close: true }, { element: options.spreadOddButton, eventName: "switchspreadmode", eventDetails: { mode: _ui_utils.SpreadMode.ODD }, close: true }, { element: options.spreadEvenButton, eventName: "switchspreadmode", eventDetails: { mode: _ui_utils.SpreadMode.EVEN }, close: true }, { element: options.documentPropertiesButton, eventName: "documentproperties", close: true }]; this.items = { firstPage: options.firstPageButton, lastPage: options.lastPageButton, pageRotateCw: options.pageRotateCwButton, pageRotateCcw: options.pageRotateCcwButton }; this.mainContainer = mainContainer; this.eventBus = eventBus; this.opened = false; this.containerHeight = null; this.previousContainerHeight = null; this.reset(); this._bindClickListeners(); this._bindCursorToolsListener(options); this._bindScrollModeListener(options); this._bindSpreadModeListener(options); this.eventBus._on("resize", this._setMaxHeight.bind(this)); this.eventBus._on("baseviewerinit", function (evt) { if (evt.source instanceof _pdf_single_page_viewer.PDFSinglePageViewer) { _this.toolbarButtonContainer.classList.add("hiddenScrollModeButtons", "hiddenSpreadModeButtons"); } else { _this.toolbarButtonContainer.classList.remove("hiddenScrollModeButtons", "hiddenSpreadModeButtons"); } }); } _createClass(SecondaryToolbar, [{ key: "isOpen", get: function get() { return this.opened; } }, { key: "setPageNumber", value: function setPageNumber(pageNumber) { this.pageNumber = pageNumber; this._updateUIState(); } }, { key: "setPagesCount", value: function setPagesCount(pagesCount) { this.pagesCount = pagesCount; this._updateUIState(); } }, { key: "reset", value: function reset() { this.pageNumber = 0; this.pagesCount = 0; this._updateUIState(); this.eventBus.dispatch("secondarytoolbarreset", { source: this }); } }, { key: "_updateUIState", value: function _updateUIState() { this.items.firstPage.disabled = this.pageNumber <= 1; this.items.lastPage.disabled = this.pageNumber >= this.pagesCount; this.items.pageRotateCw.disabled = this.pagesCount === 0; this.items.pageRotateCcw.disabled = this.pagesCount === 0; } }, { key: "_bindClickListeners", value: function _bindClickListeners() { var _this2 = this; this.toggleButton.addEventListener("click", this.toggle.bind(this)); var _iterator = _createForOfIteratorHelper(this.buttons), _step; try { var _loop = function _loop() { var _step$value = _step.value, element = _step$value.element, eventName = _step$value.eventName, close = _step$value.close, eventDetails = _step$value.eventDetails; element.addEventListener("click", function (evt) { if (eventName !== null) { var details = { source: _this2 }; for (var property in eventDetails) { details[property] = eventDetails[property]; } _this2.eventBus.dispatch(eventName, details); } if (close) { _this2.close(); } }); }; for (_iterator.s(); !(_step = _iterator.n()).done;) { _loop(); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } } }, { key: "_bindCursorToolsListener", value: function _bindCursorToolsListener(buttons) { this.eventBus._on("cursortoolchanged", function (_ref) { var tool = _ref.tool; buttons.cursorSelectToolButton.classList.toggle("toggled", tool === _pdf_cursor_tools.CursorTool.SELECT); buttons.cursorHandToolButton.classList.toggle("toggled", tool === _pdf_cursor_tools.CursorTool.HAND); }); } }, { key: "_bindScrollModeListener", value: function _bindScrollModeListener(buttons) { var _this3 = this; function scrollModeChanged(_ref2) { var mode = _ref2.mode; buttons.scrollVerticalButton.classList.toggle("toggled", mode === _ui_utils.ScrollMode.VERTICAL); buttons.scrollHorizontalButton.classList.toggle("toggled", mode === _ui_utils.ScrollMode.HORIZONTAL); buttons.scrollWrappedButton.classList.toggle("toggled", mode === _ui_utils.ScrollMode.WRAPPED); var isScrollModeHorizontal = mode === _ui_utils.ScrollMode.HORIZONTAL; buttons.spreadNoneButton.disabled = isScrollModeHorizontal; buttons.spreadOddButton.disabled = isScrollModeHorizontal; buttons.spreadEvenButton.disabled = isScrollModeHorizontal; } this.eventBus._on("scrollmodechanged", scrollModeChanged); this.eventBus._on("secondarytoolbarreset", function (evt) { if (evt.source === _this3) { scrollModeChanged({ mode: _ui_utils.ScrollMode.VERTICAL }); } }); } }, { key: "_bindSpreadModeListener", value: function _bindSpreadModeListener(buttons) { var _this4 = this; function spreadModeChanged(_ref3) { var mode = _ref3.mode; buttons.spreadNoneButton.classList.toggle("toggled", mode === _ui_utils.SpreadMode.NONE); buttons.spreadOddButton.classList.toggle("toggled", mode === _ui_utils.SpreadMode.ODD); buttons.spreadEvenButton.classList.toggle("toggled", mode === _ui_utils.SpreadMode.EVEN); } this.eventBus._on("spreadmodechanged", spreadModeChanged); this.eventBus._on("secondarytoolbarreset", function (evt) { if (evt.source === _this4) { spreadModeChanged({ mode: _ui_utils.SpreadMode.NONE }); } }); } }, { key: "open", value: function open() { if (this.opened) { return; } this.opened = true; this._setMaxHeight(); this.toggleButton.classList.add("toggled"); this.toggleButton.setAttribute("aria-expanded", "true"); this.toolbar.classList.remove("hidden"); } }, { key: "close", value: function close() { if (!this.opened) { return; } this.opened = false; this.toolbar.classList.add("hidden"); this.toggleButton.classList.remove("toggled"); this.toggleButton.setAttribute("aria-expanded", "false"); } }, { key: "toggle", value: function toggle() { if (this.opened) { this.close(); } else { this.open(); } } }, { key: "_setMaxHeight", value: function _setMaxHeight() { if (!this.opened) { return; } this.containerHeight = this.mainContainer.clientHeight; if (this.containerHeight === this.previousContainerHeight) { return; } this.toolbarButtonContainer.style.maxHeight = "".concat(this.containerHeight - _ui_utils.SCROLLBAR_PADDING, "px"); this.previousContainerHeight = this.containerHeight; } }]); return SecondaryToolbar; }(); exports.SecondaryToolbar = SecondaryToolbar; /***/ }), /* 34 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFSinglePageViewer = void 0; var _base_viewer = __webpack_require__(29); var _pdfjsLib = __webpack_require__(7); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } var PDFSinglePageViewer = /*#__PURE__*/function (_BaseViewer) { _inherits(PDFSinglePageViewer, _BaseViewer); var _super = _createSuper(PDFSinglePageViewer); function PDFSinglePageViewer(options) { var _this; _classCallCheck(this, PDFSinglePageViewer); _this = _super.call(this, options); _this.eventBus._on("pagesinit", function (evt) { _this._ensurePageViewVisible(); }); return _this; } _createClass(PDFSinglePageViewer, [{ key: "_viewerElement", get: function get() { return (0, _pdfjsLib.shadow)(this, "_viewerElement", this._shadowViewer); } }, { key: "_pageWidthScaleFactor", get: function get() { return 1; } }, { key: "_resetView", value: function _resetView() { _get(_getPrototypeOf(PDFSinglePageViewer.prototype), "_resetView", this).call(this); this._previousPageNumber = 1; this._shadowViewer = document.createDocumentFragment(); this._updateScrollDown = null; } }, { key: "_ensurePageViewVisible", value: function _ensurePageViewVisible() { var pageView = this._pages[this._currentPageNumber - 1]; var previousPageView = this._pages[this._previousPageNumber - 1]; var viewerNodes = this.viewer.childNodes; switch (viewerNodes.length) { case 0: this.viewer.appendChild(pageView.div); break; case 1: if (viewerNodes[0] !== previousPageView.div) { throw new Error("_ensurePageViewVisible: Unexpected previously visible page."); } if (pageView === previousPageView) { break; } this._shadowViewer.appendChild(previousPageView.div); this.viewer.appendChild(pageView.div); this.container.scrollTop = 0; break; default: throw new Error("_ensurePageViewVisible: Only one page should be visible at a time."); } this._previousPageNumber = this._currentPageNumber; } }, { key: "_scrollUpdate", value: function _scrollUpdate() { if (this._updateScrollDown) { this._updateScrollDown(); } _get(_getPrototypeOf(PDFSinglePageViewer.prototype), "_scrollUpdate", this).call(this); } }, { key: "_scrollIntoView", value: function _scrollIntoView(_ref) { var _this2 = this; var pageDiv = _ref.pageDiv, _ref$pageSpot = _ref.pageSpot, pageSpot = _ref$pageSpot === void 0 ? null : _ref$pageSpot, _ref$pageNumber = _ref.pageNumber, pageNumber = _ref$pageNumber === void 0 ? null : _ref$pageNumber; if (pageNumber) { this._setCurrentPageNumber(pageNumber); } var scrolledDown = this._currentPageNumber >= this._previousPageNumber; this._ensurePageViewVisible(); this.update(); _get(_getPrototypeOf(PDFSinglePageViewer.prototype), "_scrollIntoView", this).call(this, { pageDiv: pageDiv, pageSpot: pageSpot, pageNumber: pageNumber }); this._updateScrollDown = function () { _this2.scroll.down = scrolledDown; _this2._updateScrollDown = null; }; } }, { key: "_getVisiblePages", value: function _getVisiblePages() { return this._getCurrentVisiblePage(); } }, { key: "_updateHelper", value: function _updateHelper(visiblePages) {} }, { key: "_isScrollModeHorizontal", get: function get() { return (0, _pdfjsLib.shadow)(this, "_isScrollModeHorizontal", false); } }, { key: "_updateScrollMode", value: function _updateScrollMode() {} }, { key: "_updateSpreadMode", value: function _updateSpreadMode() {} }, { key: "_getPageAdvance", value: function _getPageAdvance() { return 1; } }]); return PDFSinglePageViewer; }(_base_viewer.BaseViewer); exports.PDFSinglePageViewer = PDFSinglePageViewer; /***/ }), /* 35 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Toolbar = void 0; var _regenerator = _interopRequireDefault(__webpack_require__(4)); var _ui_utils = __webpack_require__(6); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var PAGE_NUMBER_LOADING_INDICATOR = "visiblePageIsLoading"; var SCALE_SELECT_CONTAINER_WIDTH = 140; var SCALE_SELECT_WIDTH = 162; var Toolbar = /*#__PURE__*/function () { function Toolbar(options, eventBus) { var l10n = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _ui_utils.NullL10n; _classCallCheck(this, Toolbar); this.toolbar = options.container; this.eventBus = eventBus; this.l10n = l10n; this.buttons = [{ element: options.previous, eventName: "previouspage" }, { element: options.next, eventName: "nextpage" }, { element: options.zoomIn, eventName: "zoomin" }, { element: options.zoomOut, eventName: "zoomout" }, { element: options.openFile, eventName: "openfile" }, { element: options.print, eventName: "print" }, { element: options.presentationModeButton, eventName: "presentationmode" }, { element: options.download, eventName: "download" }, { element: options.viewBookmark, eventName: null }]; this.items = { numPages: options.numPages, pageNumber: options.pageNumber, scaleSelectContainer: options.scaleSelectContainer, scaleSelect: options.scaleSelect, customScaleOption: options.customScaleOption, previous: options.previous, next: options.next, zoomIn: options.zoomIn, zoomOut: options.zoomOut }; this._wasLocalized = false; this.reset(); this._bindListeners(); } _createClass(Toolbar, [{ key: "setPageNumber", value: function setPageNumber(pageNumber, pageLabel) { this.pageNumber = pageNumber; this.pageLabel = pageLabel; this._updateUIState(false); } }, { key: "setPagesCount", value: function setPagesCount(pagesCount, hasPageLabels) { this.pagesCount = pagesCount; this.hasPageLabels = hasPageLabels; this._updateUIState(true); } }, { key: "setPageScale", value: function setPageScale(pageScaleValue, pageScale) { this.pageScaleValue = (pageScaleValue || pageScale).toString(); this.pageScale = pageScale; this._updateUIState(false); } }, { key: "reset", value: function reset() { this.pageNumber = 0; this.pageLabel = null; this.hasPageLabels = false; this.pagesCount = 0; this.pageScaleValue = _ui_utils.DEFAULT_SCALE_VALUE; this.pageScale = _ui_utils.DEFAULT_SCALE; this._updateUIState(true); this.updateLoadingIndicatorState(); } }, { key: "_bindListeners", value: function _bindListeners() { var _this = this; var _this$items = this.items, pageNumber = _this$items.pageNumber, scaleSelect = _this$items.scaleSelect; var self = this; var _iterator = _createForOfIteratorHelper(this.buttons), _step; try { var _loop = function _loop() { var _step$value = _step.value, element = _step$value.element, eventName = _step$value.eventName; element.addEventListener("click", function (evt) { if (eventName !== null) { _this.eventBus.dispatch(eventName, { source: _this }); } }); }; for (_iterator.s(); !(_step = _iterator.n()).done;) { _loop(); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } pageNumber.addEventListener("click", function () { this.select(); }); pageNumber.addEventListener("change", function () { self.eventBus.dispatch("pagenumberchanged", { source: self, value: this.value }); }); scaleSelect.addEventListener("change", function () { if (this.value === "custom") { return; } self.eventBus.dispatch("scalechanged", { source: self, value: this.value }); }); scaleSelect.oncontextmenu = _ui_utils.noContextMenuHandler; this.eventBus._on("localized", function () { _this._wasLocalized = true; _this._adjustScaleWidth(); _this._updateUIState(true); }); } }, { key: "_updateUIState", value: function _updateUIState() { var resetNumPages = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; if (!this._wasLocalized) { return; } var pageNumber = this.pageNumber, pagesCount = this.pagesCount, pageScaleValue = this.pageScaleValue, pageScale = this.pageScale, items = this.items; if (resetNumPages) { if (this.hasPageLabels) { items.pageNumber.type = "text"; } else { items.pageNumber.type = "number"; this.l10n.get("of_pages", { pagesCount: pagesCount }, "of {{pagesCount}}").then(function (msg) { items.numPages.textContent = msg; }); } items.pageNumber.max = pagesCount; } if (this.hasPageLabels) { items.pageNumber.value = this.pageLabel; this.l10n.get("page_of_pages", { pageNumber: pageNumber, pagesCount: pagesCount }, "({{pageNumber}} of {{pagesCount}})").then(function (msg) { items.numPages.textContent = msg; }); } else { items.pageNumber.value = pageNumber; } items.previous.disabled = pageNumber <= 1; items.next.disabled = pageNumber >= pagesCount; items.zoomOut.disabled = pageScale <= _ui_utils.MIN_SCALE; items.zoomIn.disabled = pageScale >= _ui_utils.MAX_SCALE; var customScale = Math.round(pageScale * 10000) / 100; this.l10n.get("page_scale_percent", { scale: customScale }, "{{scale}}%").then(function (msg) { var predefinedValueFound = false; var _iterator2 = _createForOfIteratorHelper(items.scaleSelect.options), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var option = _step2.value; if (option.value !== pageScaleValue) { option.selected = false; continue; } option.selected = true; predefinedValueFound = true; } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } if (!predefinedValueFound) { items.customScaleOption.textContent = msg; items.customScaleOption.selected = true; } }); } }, { key: "updateLoadingIndicatorState", value: function updateLoadingIndicatorState() { var loading = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var pageNumberInput = this.items.pageNumber; pageNumberInput.classList.toggle(PAGE_NUMBER_LOADING_INDICATOR, loading); } }, { key: "_adjustScaleWidth", value: function () { var _adjustScaleWidth2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() { var items, l10n, predefinedValuesPromise, canvas, ctx, _getComputedStyle, fontSize, fontFamily, maxWidth, _iterator3, _step3, predefinedValue, _ctx$measureText, width, overflow; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: items = this.items, l10n = this.l10n; predefinedValuesPromise = Promise.all([l10n.get("page_scale_auto", null, "Automatic Zoom"), l10n.get("page_scale_actual", null, "Actual Size"), l10n.get("page_scale_fit", null, "Page Fit"), l10n.get("page_scale_width", null, "Page Width")]); canvas = document.createElement("canvas"); canvas.mozOpaque = true; ctx = canvas.getContext("2d", { alpha: false }); _context.next = 7; return _ui_utils.animationStarted; case 7: _getComputedStyle = getComputedStyle(items.scaleSelect), fontSize = _getComputedStyle.fontSize, fontFamily = _getComputedStyle.fontFamily; ctx.font = "".concat(fontSize, " ").concat(fontFamily); maxWidth = 0; _context.t0 = _createForOfIteratorHelper; _context.next = 13; return predefinedValuesPromise; case 13: _context.t1 = _context.sent; _iterator3 = (0, _context.t0)(_context.t1); try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { predefinedValue = _step3.value; _ctx$measureText = ctx.measureText(predefinedValue), width = _ctx$measureText.width; if (width > maxWidth) { maxWidth = width; } } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } overflow = SCALE_SELECT_WIDTH - SCALE_SELECT_CONTAINER_WIDTH; maxWidth += 2 * overflow; if (maxWidth > SCALE_SELECT_CONTAINER_WIDTH) { items.scaleSelect.style.width = "".concat(maxWidth + overflow, "px"); items.scaleSelectContainer.style.width = "".concat(maxWidth, "px"); } canvas.width = 0; canvas.height = 0; canvas = ctx = null; case 22: case "end": return _context.stop(); } } }, _callee, this); })); function _adjustScaleWidth() { return _adjustScaleWidth2.apply(this, arguments); } return _adjustScaleWidth; }() }]); return Toolbar; }(); exports.Toolbar = Toolbar; /***/ }), /* 36 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ViewHistory = void 0; var _regenerator = _interopRequireDefault(__webpack_require__(4)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var DEFAULT_VIEW_HISTORY_CACHE_SIZE = 20; var ViewHistory = /*#__PURE__*/function () { function ViewHistory(fingerprint) { var _this = this; var cacheSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_VIEW_HISTORY_CACHE_SIZE; _classCallCheck(this, ViewHistory); this.fingerprint = fingerprint; this.cacheSize = cacheSize; this._initializedPromise = this._readFromStorage().then(function (databaseStr) { var database = JSON.parse(databaseStr || "{}"); var index = -1; if (!Array.isArray(database.files)) { database.files = []; } else { while (database.files.length >= _this.cacheSize) { database.files.shift(); } for (var i = 0, ii = database.files.length; i < ii; i++) { var branch = database.files[i]; if (branch.fingerprint === _this.fingerprint) { index = i; break; } } } if (index === -1) { index = database.files.push({ fingerprint: _this.fingerprint }) - 1; } _this.file = database.files[index]; _this.database = database; }); } _createClass(ViewHistory, [{ key: "_writeToStorage", value: function () { var _writeToStorage2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() { var databaseStr; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: databaseStr = JSON.stringify(this.database); localStorage.setItem("pdfjs.history", databaseStr); case 2: case "end": return _context.stop(); } } }, _callee, this); })); function _writeToStorage() { return _writeToStorage2.apply(this, arguments); } return _writeToStorage; }() }, { key: "_readFromStorage", value: function () { var _readFromStorage2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: return _context2.abrupt("return", localStorage.getItem("pdfjs.history")); case 1: case "end": return _context2.stop(); } } }, _callee2); })); function _readFromStorage() { return _readFromStorage2.apply(this, arguments); } return _readFromStorage; }() }, { key: "set", value: function () { var _set = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee3(name, val) { return _regenerator["default"].wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: _context3.next = 2; return this._initializedPromise; case 2: this.file[name] = val; return _context3.abrupt("return", this._writeToStorage()); case 4: case "end": return _context3.stop(); } } }, _callee3, this); })); function set(_x, _x2) { return _set.apply(this, arguments); } return set; }() }, { key: "setMultiple", value: function () { var _setMultiple = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee4(properties) { var name; return _regenerator["default"].wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: _context4.next = 2; return this._initializedPromise; case 2: for (name in properties) { this.file[name] = properties[name]; } return _context4.abrupt("return", this._writeToStorage()); case 4: case "end": return _context4.stop(); } } }, _callee4, this); })); function setMultiple(_x3) { return _setMultiple.apply(this, arguments); } return setMultiple; }() }, { key: "get", value: function () { var _get = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee5(name, defaultValue) { var val; return _regenerator["default"].wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: _context5.next = 2; return this._initializedPromise; case 2: val = this.file[name]; return _context5.abrupt("return", val !== undefined ? val : defaultValue); case 4: case "end": return _context5.stop(); } } }, _callee5, this); })); function get(_x4, _x5) { return _get.apply(this, arguments); } return get; }() }, { key: "getMultiple", value: function () { var _getMultiple = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee6(properties) { var values, name, val; return _regenerator["default"].wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: _context6.next = 2; return this._initializedPromise; case 2: values = Object.create(null); for (name in properties) { val = this.file[name]; values[name] = val !== undefined ? val : properties[name]; } return _context6.abrupt("return", values); case 5: case "end": return _context6.stop(); } } }, _callee6, this); })); function getMultiple(_x6) { return _getMultiple.apply(this, arguments); } return getMultiple; }() }]); return ViewHistory; }(); exports.ViewHistory = ViewHistory; /***/ }), /* 37 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", ({ value: true })); exports.GenericCom = void 0; var _regenerator = _interopRequireDefault(__webpack_require__(4)); var _app = __webpack_require__(3); var _preferences = __webpack_require__(38); var _download_manager = __webpack_require__(39); var _genericl10n = __webpack_require__(40); var _generic_scripting = __webpack_require__(42); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } ; var GenericCom = {}; exports.GenericCom = GenericCom; var GenericPreferences = /*#__PURE__*/function (_BasePreferences) { _inherits(GenericPreferences, _BasePreferences); var _super = _createSuper(GenericPreferences); function GenericPreferences() { _classCallCheck(this, GenericPreferences); return _super.apply(this, arguments); } _createClass(GenericPreferences, [{ key: "_writeToStorage", value: function () { var _writeToStorage2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(prefObj) { return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: localStorage.setItem("pdfjs.preferences", JSON.stringify(prefObj)); case 1: case "end": return _context.stop(); } } }, _callee); })); function _writeToStorage(_x) { return _writeToStorage2.apply(this, arguments); } return _writeToStorage; }() }, { key: "_readFromStorage", value: function () { var _readFromStorage2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2(prefObj) { return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: return _context2.abrupt("return", JSON.parse(localStorage.getItem("pdfjs.preferences"))); case 1: case "end": return _context2.stop(); } } }, _callee2); })); function _readFromStorage(_x2) { return _readFromStorage2.apply(this, arguments); } return _readFromStorage; }() }]); return GenericPreferences; }(_preferences.BasePreferences); var GenericExternalServices = /*#__PURE__*/function (_DefaultExternalServi) { _inherits(GenericExternalServices, _DefaultExternalServi); var _super2 = _createSuper(GenericExternalServices); function GenericExternalServices() { _classCallCheck(this, GenericExternalServices); return _super2.apply(this, arguments); } _createClass(GenericExternalServices, null, [{ key: "createDownloadManager", value: function createDownloadManager(options) { return new _download_manager.DownloadManager(); } }, { key: "createPreferences", value: function createPreferences() { return new GenericPreferences(); } }, { key: "createL10n", value: function createL10n(_ref) { var _ref$locale = _ref.locale, locale = _ref$locale === void 0 ? "en-US" : _ref$locale; return new _genericl10n.GenericL10n(locale); } }, { key: "createScripting", value: function createScripting(_ref2) { var sandboxBundleSrc = _ref2.sandboxBundleSrc; return new _generic_scripting.GenericScripting(sandboxBundleSrc); } }]); return GenericExternalServices; }(_app.DefaultExternalServices); _app.PDFViewerApplication.externalServices = GenericExternalServices; /***/ }), /* 38 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.BasePreferences = void 0; var _regenerator = _interopRequireDefault(__webpack_require__(4)); var _app_options = __webpack_require__(1); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var BasePreferences = /*#__PURE__*/function () { function BasePreferences() { var _this = this; _classCallCheck(this, BasePreferences); if (this.constructor === BasePreferences) { throw new Error("Cannot initialize BasePreferences."); } Object.defineProperty(this, "defaults", { value: Object.freeze({ "cursorToolOnLoad": 0, "defaultZoomValue": "", "disablePageLabels": false, "enablePermissions": false, "enablePrintAutoRotate": false, "enableScripting": false, "enableWebGL": false, "externalLinkTarget": 0, "historyUpdateUrl": false, "ignoreDestinationZoom": false, "pdfBugEnabled": false, "renderer": "canvas", "renderInteractiveForms": true, "sidebarViewOnLoad": -1, "scrollModeOnLoad": -1, "spreadModeOnLoad": -1, "textLayerMode": 1, "useOnlyCssZoom": false, "viewerCssTheme": 0, "viewOnLoad": 0, "disableAutoFetch": false, "disableFontFace": false, "disableRange": false, "disableStream": false }), writable: false, enumerable: true, configurable: false }); this.prefs = Object.assign(Object.create(null), this.defaults); this._initializedPromise = this._readFromStorage(this.defaults).then(function (prefs) { if (!prefs) { return; } for (var name in prefs) { var defaultValue = _this.defaults[name], prefValue = prefs[name]; if (defaultValue === undefined || _typeof(prefValue) !== _typeof(defaultValue)) { continue; } _this.prefs[name] = prefValue; } }); } _createClass(BasePreferences, [{ key: "_writeToStorage", value: function () { var _writeToStorage2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(prefObj) { return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: throw new Error("Not implemented: _writeToStorage"); case 1: case "end": return _context.stop(); } } }, _callee); })); function _writeToStorage(_x) { return _writeToStorage2.apply(this, arguments); } return _writeToStorage; }() }, { key: "_readFromStorage", value: function () { var _readFromStorage2 = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2(prefObj) { return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: throw new Error("Not implemented: _readFromStorage"); case 1: case "end": return _context2.stop(); } } }, _callee2); })); function _readFromStorage(_x2) { return _readFromStorage2.apply(this, arguments); } return _readFromStorage; }() }, { key: "reset", value: function () { var _reset = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee3() { return _regenerator["default"].wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: _context3.next = 2; return this._initializedPromise; case 2: this.prefs = Object.assign(Object.create(null), this.defaults); return _context3.abrupt("return", this._writeToStorage(this.defaults)); case 4: case "end": return _context3.stop(); } } }, _callee3, this); })); function reset() { return _reset.apply(this, arguments); } return reset; }() }, { key: "set", value: function () { var _set = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee4(name, value) { var defaultValue, valueType, defaultType; return _regenerator["default"].wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: _context4.next = 2; return this._initializedPromise; case 2: defaultValue = this.defaults[name]; if (!(defaultValue === undefined)) { _context4.next = 7; break; } throw new Error("Set preference: \"".concat(name, "\" is undefined.")); case 7: if (!(value === undefined)) { _context4.next = 9; break; } throw new Error("Set preference: no value is specified."); case 9: valueType = _typeof(value); defaultType = _typeof(defaultValue); if (!(valueType !== defaultType)) { _context4.next = 19; break; } if (!(valueType === "number" && defaultType === "string")) { _context4.next = 16; break; } value = value.toString(); _context4.next = 17; break; case 16: throw new Error("Set preference: \"".concat(value, "\" is a ").concat(valueType, ", ") + "expected a ".concat(defaultType, ".")); case 17: _context4.next = 21; break; case 19: if (!(valueType === "number" && !Number.isInteger(value))) { _context4.next = 21; break; } throw new Error("Set preference: \"".concat(value, "\" must be an integer.")); case 21: this.prefs[name] = value; return _context4.abrupt("return", this._writeToStorage(this.prefs)); case 23: case "end": return _context4.stop(); } } }, _callee4, this); })); function set(_x3, _x4) { return _set.apply(this, arguments); } return set; }() }, { key: "get", value: function () { var _get = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee5(name) { var defaultValue, prefValue; return _regenerator["default"].wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: _context5.next = 2; return this._initializedPromise; case 2: defaultValue = this.defaults[name]; if (!(defaultValue === undefined)) { _context5.next = 7; break; } throw new Error("Get preference: \"".concat(name, "\" is undefined.")); case 7: prefValue = this.prefs[name]; if (!(prefValue !== undefined)) { _context5.next = 10; break; } return _context5.abrupt("return", prefValue); case 10: return _context5.abrupt("return", defaultValue); case 11: case "end": return _context5.stop(); } } }, _callee5, this); })); function get(_x5) { return _get.apply(this, arguments); } return get; }() }, { key: "getAll", value: function () { var _getAll = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee6() { return _regenerator["default"].wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: _context6.next = 2; return this._initializedPromise; case 2: return _context6.abrupt("return", Object.assign(Object.create(null), this.defaults, this.prefs)); case 3: case "end": return _context6.stop(); } } }, _callee6, this); })); function getAll() { return _getAll.apply(this, arguments); } return getAll; }() }]); return BasePreferences; }(); exports.BasePreferences = BasePreferences; /***/ }), /* 39 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.DownloadManager = void 0; var _pdfjsLib = __webpack_require__(7); var _viewer_compatibility = __webpack_require__(2); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } ; function _download(blobUrl, filename) { var a = document.createElement("a"); if (!a.click) { throw new Error('DownloadManager: "a.click()" is not supported.'); } a.href = blobUrl; a.target = "_parent"; if ("download" in a) { a.download = filename; } (document.body || document.documentElement).appendChild(a); a.click(); a.remove(); } var DownloadManager = /*#__PURE__*/function () { function DownloadManager() { _classCallCheck(this, DownloadManager); } _createClass(DownloadManager, [{ key: "downloadUrl", value: function downloadUrl(url, filename) { if (!(0, _pdfjsLib.createValidAbsoluteUrl)(url, "http://example.com")) { return; } _download(url + "#pdfjs.action=download", filename); } }, { key: "downloadData", value: function downloadData(data, filename, contentType) { var blobUrl = (0, _pdfjsLib.createObjectURL)(data, contentType, _viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL); _download(blobUrl, filename); } }, { key: "download", value: function download(blob, url, filename) { var sourceEventType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "download"; if (_viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL) { this.downloadUrl(url, filename); return; } var blobUrl = URL.createObjectURL(blob); _download(blobUrl, filename); } }]); return DownloadManager; }(); exports.DownloadManager = DownloadManager; /***/ }), /* 40 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.GenericL10n = void 0; var _regenerator = _interopRequireDefault(__webpack_require__(4)); __webpack_require__(41); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var webL10n = document.webL10n; var GenericL10n = /*#__PURE__*/function () { function GenericL10n(lang) { _classCallCheck(this, GenericL10n); this._lang = lang; this._ready = new Promise(function (resolve, reject) { webL10n.setLanguage(lang, function () { resolve(webL10n); }); }); } _createClass(GenericL10n, [{ key: "getLanguage", value: function () { var _getLanguage = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee() { var l10n; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return this._ready; case 2: l10n = _context.sent; return _context.abrupt("return", l10n.getLanguage()); case 4: case "end": return _context.stop(); } } }, _callee, this); })); function getLanguage() { return _getLanguage.apply(this, arguments); } return getLanguage; }() }, { key: "getDirection", value: function () { var _getDirection = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { var l10n; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return this._ready; case 2: l10n = _context2.sent; return _context2.abrupt("return", l10n.getDirection()); case 4: case "end": return _context2.stop(); } } }, _callee2, this); })); function getDirection() { return _getDirection.apply(this, arguments); } return getDirection; }() }, { key: "get", value: function () { var _get = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee3(property, args, fallback) { var l10n; return _regenerator["default"].wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: _context3.next = 2; return this._ready; case 2: l10n = _context3.sent; return _context3.abrupt("return", l10n.get(property, args, fallback)); case 4: case "end": return _context3.stop(); } } }, _callee3, this); })); function get(_x, _x2, _x3) { return _get.apply(this, arguments); } return get; }() }, { key: "translate", value: function () { var _translate = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee4(element) { var l10n; return _regenerator["default"].wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: _context4.next = 2; return this._ready; case 2: l10n = _context4.sent; return _context4.abrupt("return", l10n.translate(element)); case 4: case "end": return _context4.stop(); } } }, _callee4, this); })); function translate(_x4) { return _translate.apply(this, arguments); } return translate; }() }]); return GenericL10n; }(); exports.GenericL10n = GenericL10n; /***/ }), /* 41 */ /***/ (() => { document.webL10n = function (window, document, undefined) { var gL10nData = {}; var gTextData = ''; var gTextProp = 'textContent'; var gLanguage = ''; var gMacros = {}; var gReadyState = 'loading'; var gAsyncResourceLoading = true; function getL10nResourceLinks() { return document.querySelectorAll('link[type="application/l10n"]'); } function getL10nDictionary() { var script = document.querySelector('script[type="application/l10n"]'); return script ? JSON.parse(script.innerHTML) : null; } function getTranslatableChildren(element) { return element ? element.querySelectorAll('*[data-l10n-id]') : []; } function getL10nAttributes(element) { if (!element) return {}; var l10nId = element.getAttribute('data-l10n-id'); var l10nArgs = element.getAttribute('data-l10n-args'); var args = {}; if (l10nArgs) { try { args = JSON.parse(l10nArgs); } catch (e) { console.warn('could not parse arguments for #' + l10nId); } } return { id: l10nId, args: args }; } function xhrLoadText(url, onSuccess, onFailure) { onSuccess = onSuccess || function _onSuccess(data) {}; onFailure = onFailure || function _onFailure() {}; var xhr = new XMLHttpRequest(); xhr.open('GET', url, gAsyncResourceLoading); if (xhr.overrideMimeType) { xhr.overrideMimeType('text/plain; charset=utf-8'); } xhr.onreadystatechange = function () { if (xhr.readyState == 4) { if (xhr.status == 200 || xhr.status === 0) { onSuccess(xhr.responseText); } else { onFailure(); } } }; xhr.onerror = onFailure; xhr.ontimeout = onFailure; try { xhr.send(null); } catch (e) { onFailure(); } } function parseResource(href, lang, successCallback, failureCallback) { var baseURL = href.replace(/[^\/]*$/, '') || './'; function evalString(text) { if (text.lastIndexOf('\\') < 0) return text; return text.replace(/\\\\/g, '\\').replace(/\\n/g, '\n').replace(/\\r/g, '\r').replace(/\\t/g, '\t').replace(/\\b/g, '\b').replace(/\\f/g, '\f').replace(/\\{/g, '{').replace(/\\}/g, '}').replace(/\\"/g, '"').replace(/\\'/g, "'"); } function parseProperties(text, parsedPropertiesCallback) { var dictionary = {}; var reBlank = /^\s*|\s*$/; var reComment = /^\s*#|^\s*$/; var reSection = /^\s*\[(.*)\]\s*$/; var reImport = /^\s*@import\s+url\((.*)\)\s*$/i; var reSplit = /^([^=\s]*)\s*=\s*(.+)$/; function parseRawLines(rawText, extendedSyntax, parsedRawLinesCallback) { var entries = rawText.replace(reBlank, '').split(/[\r\n]+/); var currentLang = '*'; var genericLang = lang.split('-', 1)[0]; var skipLang = false; var match = ''; function nextEntry() { while (true) { if (!entries.length) { parsedRawLinesCallback(); return; } var line = entries.shift(); if (reComment.test(line)) continue; if (extendedSyntax) { match = reSection.exec(line); if (match) { currentLang = match[1].toLowerCase(); skipLang = currentLang !== '*' && currentLang !== lang && currentLang !== genericLang; continue; } else if (skipLang) { continue; } match = reImport.exec(line); if (match) { loadImport(baseURL + match[1], nextEntry); return; } } var tmp = line.match(reSplit); if (tmp && tmp.length == 3) { dictionary[tmp[1]] = evalString(tmp[2]); } } } nextEntry(); } function loadImport(url, callback) { xhrLoadText(url, function (content) { parseRawLines(content, false, callback); }, function () { console.warn(url + ' not found.'); callback(); }); } parseRawLines(text, true, function () { parsedPropertiesCallback(dictionary); }); } xhrLoadText(href, function (response) { gTextData += response; parseProperties(response, function (data) { for (var key in data) { var id, prop, index = key.lastIndexOf('.'); if (index > 0) { id = key.substring(0, index); prop = key.substring(index + 1); } else { id = key; prop = gTextProp; } if (!gL10nData[id]) { gL10nData[id] = {}; } gL10nData[id][prop] = data[key]; } if (successCallback) { successCallback(); } }); }, failureCallback); } function loadLocale(lang, callback) { if (lang) { lang = lang.toLowerCase(); } callback = callback || function _callback() {}; clear(); gLanguage = lang; var langLinks = getL10nResourceLinks(); var langCount = langLinks.length; if (langCount === 0) { var dict = getL10nDictionary(); if (dict && dict.locales && dict.default_locale) { console.log('using the embedded JSON directory, early way out'); gL10nData = dict.locales[lang]; if (!gL10nData) { var defaultLocale = dict.default_locale.toLowerCase(); for (var anyCaseLang in dict.locales) { anyCaseLang = anyCaseLang.toLowerCase(); if (anyCaseLang === lang) { gL10nData = dict.locales[lang]; break; } else if (anyCaseLang === defaultLocale) { gL10nData = dict.locales[defaultLocale]; } } } callback(); } else { console.log('no resource to load, early way out'); } gReadyState = 'complete'; return; } var onResourceLoaded = null; var gResourceCount = 0; onResourceLoaded = function onResourceLoaded() { gResourceCount++; if (gResourceCount >= langCount) { callback(); gReadyState = 'complete'; } }; function L10nResourceLink(link) { var href = link.href; this.load = function (lang, callback) { parseResource(href, lang, callback, function () { console.warn(href + ' not found.'); console.warn('"' + lang + '" resource not found'); gLanguage = ''; callback(); }); }; } for (var i = 0; i < langCount; i++) { var resource = new L10nResourceLink(langLinks[i]); resource.load(lang, onResourceLoaded); } } function clear() { gL10nData = {}; gTextData = ''; gLanguage = ''; } function getPluralRules(lang) { var locales2rules = { 'af': 3, 'ak': 4, 'am': 4, 'ar': 1, 'asa': 3, 'az': 0, 'be': 11, 'bem': 3, 'bez': 3, 'bg': 3, 'bh': 4, 'bm': 0, 'bn': 3, 'bo': 0, 'br': 20, 'brx': 3, 'bs': 11, 'ca': 3, 'cgg': 3, 'chr': 3, 'cs': 12, 'cy': 17, 'da': 3, 'de': 3, 'dv': 3, 'dz': 0, 'ee': 3, 'el': 3, 'en': 3, 'eo': 3, 'es': 3, 'et': 3, 'eu': 3, 'fa': 0, 'ff': 5, 'fi': 3, 'fil': 4, 'fo': 3, 'fr': 5, 'fur': 3, 'fy': 3, 'ga': 8, 'gd': 24, 'gl': 3, 'gsw': 3, 'gu': 3, 'guw': 4, 'gv': 23, 'ha': 3, 'haw': 3, 'he': 2, 'hi': 4, 'hr': 11, 'hu': 0, 'id': 0, 'ig': 0, 'ii': 0, 'is': 3, 'it': 3, 'iu': 7, 'ja': 0, 'jmc': 3, 'jv': 0, 'ka': 0, 'kab': 5, 'kaj': 3, 'kcg': 3, 'kde': 0, 'kea': 0, 'kk': 3, 'kl': 3, 'km': 0, 'kn': 0, 'ko': 0, 'ksb': 3, 'ksh': 21, 'ku': 3, 'kw': 7, 'lag': 18, 'lb': 3, 'lg': 3, 'ln': 4, 'lo': 0, 'lt': 10, 'lv': 6, 'mas': 3, 'mg': 4, 'mk': 16, 'ml': 3, 'mn': 3, 'mo': 9, 'mr': 3, 'ms': 0, 'mt': 15, 'my': 0, 'nah': 3, 'naq': 7, 'nb': 3, 'nd': 3, 'ne': 3, 'nl': 3, 'nn': 3, 'no': 3, 'nr': 3, 'nso': 4, 'ny': 3, 'nyn': 3, 'om': 3, 'or': 3, 'pa': 3, 'pap': 3, 'pl': 13, 'ps': 3, 'pt': 3, 'rm': 3, 'ro': 9, 'rof': 3, 'ru': 11, 'rwk': 3, 'sah': 0, 'saq': 3, 'se': 7, 'seh': 3, 'ses': 0, 'sg': 0, 'sh': 11, 'shi': 19, 'sk': 12, 'sl': 14, 'sma': 7, 'smi': 7, 'smj': 7, 'smn': 7, 'sms': 7, 'sn': 3, 'so': 3, 'sq': 3, 'sr': 11, 'ss': 3, 'ssy': 3, 'st': 3, 'sv': 3, 'sw': 3, 'syr': 3, 'ta': 3, 'te': 3, 'teo': 3, 'th': 0, 'ti': 4, 'tig': 3, 'tk': 3, 'tl': 4, 'tn': 3, 'to': 0, 'tr': 0, 'ts': 3, 'tzm': 22, 'uk': 11, 'ur': 3, 've': 3, 'vi': 0, 'vun': 3, 'wa': 4, 'wae': 3, 'wo': 0, 'xh': 3, 'xog': 3, 'yo': 0, 'zh': 0, 'zu': 3 }; function isIn(n, list) { return list.indexOf(n) !== -1; } function isBetween(n, start, end) { return start <= n && n <= end; } var pluralRules = { '0': function _(n) { return 'other'; }, '1': function _(n) { if (isBetween(n % 100, 3, 10)) return 'few'; if (n === 0) return 'zero'; if (isBetween(n % 100, 11, 99)) return 'many'; if (n == 2) return 'two'; if (n == 1) return 'one'; return 'other'; }, '2': function _(n) { if (n !== 0 && n % 10 === 0) return 'many'; if (n == 2) return 'two'; if (n == 1) return 'one'; return 'other'; }, '3': function _(n) { if (n == 1) return 'one'; return 'other'; }, '4': function _(n) { if (isBetween(n, 0, 1)) return 'one'; return 'other'; }, '5': function _(n) { if (isBetween(n, 0, 2) && n != 2) return 'one'; return 'other'; }, '6': function _(n) { if (n === 0) return 'zero'; if (n % 10 == 1 && n % 100 != 11) return 'one'; return 'other'; }, '7': function _(n) { if (n == 2) return 'two'; if (n == 1) return 'one'; return 'other'; }, '8': function _(n) { if (isBetween(n, 3, 6)) return 'few'; if (isBetween(n, 7, 10)) return 'many'; if (n == 2) return 'two'; if (n == 1) return 'one'; return 'other'; }, '9': function _(n) { if (n === 0 || n != 1 && isBetween(n % 100, 1, 19)) return 'few'; if (n == 1) return 'one'; return 'other'; }, '10': function _(n) { if (isBetween(n % 10, 2, 9) && !isBetween(n % 100, 11, 19)) return 'few'; if (n % 10 == 1 && !isBetween(n % 100, 11, 19)) return 'one'; return 'other'; }, '11': function _(n) { if (isBetween(n % 10, 2, 4) && !isBetween(n % 100, 12, 14)) return 'few'; if (n % 10 === 0 || isBetween(n % 10, 5, 9) || isBetween(n % 100, 11, 14)) return 'many'; if (n % 10 == 1 && n % 100 != 11) return 'one'; return 'other'; }, '12': function _(n) { if (isBetween(n, 2, 4)) return 'few'; if (n == 1) return 'one'; return 'other'; }, '13': function _(n) { if (isBetween(n % 10, 2, 4) && !isBetween(n % 100, 12, 14)) return 'few'; if (n != 1 && isBetween(n % 10, 0, 1) || isBetween(n % 10, 5, 9) || isBetween(n % 100, 12, 14)) return 'many'; if (n == 1) return 'one'; return 'other'; }, '14': function _(n) { if (isBetween(n % 100, 3, 4)) return 'few'; if (n % 100 == 2) return 'two'; if (n % 100 == 1) return 'one'; return 'other'; }, '15': function _(n) { if (n === 0 || isBetween(n % 100, 2, 10)) return 'few'; if (isBetween(n % 100, 11, 19)) return 'many'; if (n == 1) return 'one'; return 'other'; }, '16': function _(n) { if (n % 10 == 1 && n != 11) return 'one'; return 'other'; }, '17': function _(n) { if (n == 3) return 'few'; if (n === 0) return 'zero'; if (n == 6) return 'many'; if (n == 2) return 'two'; if (n == 1) return 'one'; return 'other'; }, '18': function _(n) { if (n === 0) return 'zero'; if (isBetween(n, 0, 2) && n !== 0 && n != 2) return 'one'; return 'other'; }, '19': function _(n) { if (isBetween(n, 2, 10)) return 'few'; if (isBetween(n, 0, 1)) return 'one'; return 'other'; }, '20': function _(n) { if ((isBetween(n % 10, 3, 4) || n % 10 == 9) && !(isBetween(n % 100, 10, 19) || isBetween(n % 100, 70, 79) || isBetween(n % 100, 90, 99))) return 'few'; if (n % 1000000 === 0 && n !== 0) return 'many'; if (n % 10 == 2 && !isIn(n % 100, [12, 72, 92])) return 'two'; if (n % 10 == 1 && !isIn(n % 100, [11, 71, 91])) return 'one'; return 'other'; }, '21': function _(n) { if (n === 0) return 'zero'; if (n == 1) return 'one'; return 'other'; }, '22': function _(n) { if (isBetween(n, 0, 1) || isBetween(n, 11, 99)) return 'one'; return 'other'; }, '23': function _(n) { if (isBetween(n % 10, 1, 2) || n % 20 === 0) return 'one'; return 'other'; }, '24': function _(n) { if (isBetween(n, 3, 10) || isBetween(n, 13, 19)) return 'few'; if (isIn(n, [2, 12])) return 'two'; if (isIn(n, [1, 11])) return 'one'; return 'other'; } }; var index = locales2rules[lang.replace(/-.*$/, '')]; if (!(index in pluralRules)) { console.warn('plural form unknown for [' + lang + ']'); return function () { return 'other'; }; } return pluralRules[index]; } gMacros.plural = function (str, param, key, prop) { var n = parseFloat(param); if (isNaN(n)) return str; if (prop != gTextProp) return str; if (!gMacros._pluralRules) { gMacros._pluralRules = getPluralRules(gLanguage); } var index = '[' + gMacros._pluralRules(n) + ']'; if (n === 0 && key + '[zero]' in gL10nData) { str = gL10nData[key + '[zero]'][prop]; } else if (n == 1 && key + '[one]' in gL10nData) { str = gL10nData[key + '[one]'][prop]; } else if (n == 2 && key + '[two]' in gL10nData) { str = gL10nData[key + '[two]'][prop]; } else if (key + index in gL10nData) { str = gL10nData[key + index][prop]; } else if (key + '[other]' in gL10nData) { str = gL10nData[key + '[other]'][prop]; } return str; }; function getL10nData(key, args, fallback) { var data = gL10nData[key]; if (!data) { console.warn('#' + key + ' is undefined.'); if (!fallback) { return null; } data = fallback; } var rv = {}; for (var prop in data) { var str = data[prop]; str = substIndexes(str, args, key, prop); str = substArguments(str, args, key); rv[prop] = str; } return rv; } function substIndexes(str, args, key, prop) { var reIndex = /\{\[\s*([a-zA-Z]+)\(([a-zA-Z]+)\)\s*\]\}/; var reMatch = reIndex.exec(str); if (!reMatch || !reMatch.length) return str; var macroName = reMatch[1]; var paramName = reMatch[2]; var param; if (args && paramName in args) { param = args[paramName]; } else if (paramName in gL10nData) { param = gL10nData[paramName]; } if (macroName in gMacros) { var macro = gMacros[macroName]; str = macro(str, param, key, prop); } return str; } function substArguments(str, args, key) { var reArgs = /\{\{\s*(.+?)\s*\}\}/g; return str.replace(reArgs, function (matched_text, arg) { if (args && arg in args) { return args[arg]; } if (arg in gL10nData) { return gL10nData[arg]; } console.log('argument {{' + arg + '}} for #' + key + ' is undefined.'); return matched_text; }); } function translateElement(element) { var l10n = getL10nAttributes(element); if (!l10n.id) return; var data = getL10nData(l10n.id, l10n.args); if (!data) { console.warn('#' + l10n.id + ' is undefined.'); return; } if (data[gTextProp]) { if (getChildElementCount(element) === 0) { element[gTextProp] = data[gTextProp]; } else { var children = element.childNodes; var found = false; for (var i = 0, l = children.length; i < l; i++) { if (children[i].nodeType === 3 && /\S/.test(children[i].nodeValue)) { if (found) { children[i].nodeValue = ''; } else { children[i].nodeValue = data[gTextProp]; found = true; } } } if (!found) { var textNode = document.createTextNode(data[gTextProp]); element.insertBefore(textNode, element.firstChild); } } delete data[gTextProp]; } for (var k in data) { element[k] = data[k]; } } function getChildElementCount(element) { if (element.children) { return element.children.length; } if (typeof element.childElementCount !== 'undefined') { return element.childElementCount; } var count = 0; for (var i = 0; i < element.childNodes.length; i++) { count += element.nodeType === 1 ? 1 : 0; } return count; } function translateFragment(element) { element = element || document.documentElement; var children = getTranslatableChildren(element); var elementCount = children.length; for (var i = 0; i < elementCount; i++) { translateElement(children[i]); } translateElement(element); } return { get: function get(key, args, fallbackString) { var index = key.lastIndexOf('.'); var prop = gTextProp; if (index > 0) { prop = key.substring(index + 1); key = key.substring(0, index); } var fallback; if (fallbackString) { fallback = {}; fallback[prop] = fallbackString; } var data = getL10nData(key, args, fallback); if (data && prop in data) { return data[prop]; } return '{{' + key + '}}'; }, getData: function getData() { return gL10nData; }, getText: function getText() { return gTextData; }, getLanguage: function getLanguage() { return gLanguage; }, setLanguage: function setLanguage(lang, callback) { loadLocale(lang, function () { if (callback) callback(); }); }, getDirection: function getDirection() { var rtlList = ['ar', 'he', 'fa', 'ps', 'ur']; var shortCode = gLanguage.split('-', 1)[0]; return rtlList.indexOf(shortCode) >= 0 ? 'rtl' : 'ltr'; }, translate: translateFragment, getReadyState: function getReadyState() { return gReadyState; }, ready: function ready(callback) { if (!callback) { return; } else if (gReadyState == 'complete' || gReadyState == 'interactive') { window.setTimeout(function () { callback(); }); } else if (document.addEventListener) { document.addEventListener('localized', function once() { document.removeEventListener('localized', once); callback(); }); } } }; }(window, document); /***/ }), /* 42 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.GenericScripting = void 0; var _regenerator = _interopRequireDefault(__webpack_require__(4)); var _pdfjsLib = __webpack_require__(7); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var GenericScripting = /*#__PURE__*/function () { function GenericScripting(sandboxBundleSrc) { _classCallCheck(this, GenericScripting); this._ready = (0, _pdfjsLib.loadScript)(sandboxBundleSrc, true).then(function () { return window.pdfjsSandbox.QuickJSSandbox(); }); } _createClass(GenericScripting, [{ key: "createSandbox", value: function () { var _createSandbox = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee(data) { var sandbox; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return this._ready; case 2: sandbox = _context.sent; sandbox.create(data); case 4: case "end": return _context.stop(); } } }, _callee, this); })); function createSandbox(_x) { return _createSandbox.apply(this, arguments); } return createSandbox; }() }, { key: "dispatchEventInSandbox", value: function () { var _dispatchEventInSandbox = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee2(event) { var sandbox; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return this._ready; case 2: sandbox = _context2.sent; sandbox.dispatchEvent(event); case 4: case "end": return _context2.stop(); } } }, _callee2, this); })); function dispatchEventInSandbox(_x2) { return _dispatchEventInSandbox.apply(this, arguments); } return dispatchEventInSandbox; }() }, { key: "destroySandbox", value: function () { var _destroySandbox = _asyncToGenerator( /*#__PURE__*/_regenerator["default"].mark(function _callee3() { var sandbox; return _regenerator["default"].wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: _context3.next = 2; return this._ready; case 2: sandbox = _context3.sent; sandbox.nukeSandbox(); case 4: case "end": return _context3.stop(); } } }, _callee3, this); })); function destroySandbox() { return _destroySandbox.apply(this, arguments); } return destroySandbox; }() }]); return GenericScripting; }(); exports.GenericScripting = GenericScripting; /***/ }), /* 43 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFPrintService = PDFPrintService; var _ui_utils = __webpack_require__(6); var _app = __webpack_require__(3); var _viewer_compatibility = __webpack_require__(2); var activeService = null; var overlayManager = null; function renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size, printResolution, optionalContentConfigPromise) { var scratchCanvas = activeService.scratchCanvas; var PRINT_UNITS = printResolution / 72.0; scratchCanvas.width = Math.floor(size.width * PRINT_UNITS); scratchCanvas.height = Math.floor(size.height * PRINT_UNITS); var width = Math.floor(size.width * _ui_utils.CSS_UNITS) + "px"; var height = Math.floor(size.height * _ui_utils.CSS_UNITS) + "px"; var ctx = scratchCanvas.getContext("2d"); ctx.save(); ctx.fillStyle = "rgb(255, 255, 255)"; ctx.fillRect(0, 0, scratchCanvas.width, scratchCanvas.height); ctx.restore(); return pdfDocument.getPage(pageNumber).then(function (pdfPage) { var renderContext = { canvasContext: ctx, transform: [PRINT_UNITS, 0, 0, PRINT_UNITS, 0, 0], viewport: pdfPage.getViewport({ scale: 1, rotation: size.rotation }), intent: "print", annotationStorage: pdfDocument.annotationStorage, optionalContentConfigPromise: optionalContentConfigPromise }; return pdfPage.render(renderContext).promise; }).then(function () { return { width: width, height: height }; }); } function PDFPrintService(pdfDocument, pagesOverview, printContainer, printResolution) { var optionalContentConfigPromise = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null; var l10n = arguments.length > 5 ? arguments[5] : undefined; this.pdfDocument = pdfDocument; this.pagesOverview = pagesOverview; this.printContainer = printContainer; this._printResolution = printResolution || 150; this._optionalContentConfigPromise = optionalContentConfigPromise || pdfDocument.getOptionalContentConfig(); this.l10n = l10n || _ui_utils.NullL10n; this.currentPage = -1; this.scratchCanvas = document.createElement("canvas"); } PDFPrintService.prototype = { layout: function layout() { this.throwIfInactive(); var body = document.querySelector("body"); body.setAttribute("data-pdfjsprinting", true); var hasEqualPageSizes = this.pagesOverview.every(function (size) { return size.width === this.pagesOverview[0].width && size.height === this.pagesOverview[0].height; }, this); if (!hasEqualPageSizes) { console.warn("Not all pages have the same size. The printed " + "result may be incorrect!"); } this.pageStyleSheet = document.createElement("style"); var pageSize = this.pagesOverview[0]; this.pageStyleSheet.textContent = "@supports ((size:A4) and (size:1pt 1pt)) {" + "@page { size: " + pageSize.width + "pt " + pageSize.height + "pt;}" + "}"; body.appendChild(this.pageStyleSheet); }, destroy: function destroy() { if (activeService !== this) { return; } this.printContainer.textContent = ""; var body = document.querySelector("body"); body.removeAttribute("data-pdfjsprinting"); if (this.pageStyleSheet) { this.pageStyleSheet.remove(); this.pageStyleSheet = null; } this.scratchCanvas.width = this.scratchCanvas.height = 0; this.scratchCanvas = null; activeService = null; ensureOverlay().then(function () { if (overlayManager.active !== "printServiceOverlay") { return; } overlayManager.close("printServiceOverlay"); }); }, renderPages: function renderPages() { var _this = this; var pageCount = this.pagesOverview.length; var renderNextPage = function renderNextPage(resolve, reject) { _this.throwIfInactive(); if (++_this.currentPage >= pageCount) { renderProgress(pageCount, pageCount, _this.l10n); resolve(); return; } var index = _this.currentPage; renderProgress(index, pageCount, _this.l10n); renderPage(_this, _this.pdfDocument, index + 1, _this.pagesOverview[index], _this._printResolution, _this._optionalContentConfigPromise).then(_this.useRenderedPage.bind(_this)).then(function () { renderNextPage(resolve, reject); }, reject); }; return new Promise(renderNextPage); }, useRenderedPage: function useRenderedPage(printItem) { this.throwIfInactive(); var img = document.createElement("img"); img.style.width = printItem.width; img.style.height = printItem.height; var scratchCanvas = this.scratchCanvas; if ("toBlob" in scratchCanvas && !_viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL) { scratchCanvas.toBlob(function (blob) { img.src = URL.createObjectURL(blob); }); } else { img.src = scratchCanvas.toDataURL(); } var wrapper = document.createElement("div"); wrapper.appendChild(img); this.printContainer.appendChild(wrapper); return new Promise(function (resolve, reject) { img.onload = resolve; img.onerror = reject; }); }, performPrint: function performPrint() { var _this2 = this; this.throwIfInactive(); return new Promise(function (resolve) { setTimeout(function () { if (!_this2.active) { resolve(); return; } print.call(window); setTimeout(resolve, 20); }, 0); }); }, get active() { return this === activeService; }, throwIfInactive: function throwIfInactive() { if (!this.active) { throw new Error("This print request was cancelled or completed."); } } }; var print = window.print; window.print = function () { if (activeService) { console.warn("Ignored window.print() because of a pending print job."); return; } ensureOverlay().then(function () { if (activeService) { overlayManager.open("printServiceOverlay"); } }); try { dispatchEvent("beforeprint"); } finally { if (!activeService) { console.error("Expected print service to be initialized."); ensureOverlay().then(function () { if (overlayManager.active === "printServiceOverlay") { overlayManager.close("printServiceOverlay"); } }); return; } var activeServiceOnEntry = activeService; activeService.renderPages().then(function () { return activeServiceOnEntry.performPrint(); })["catch"](function () {}).then(function () { if (activeServiceOnEntry.active) { abort(); } }); } }; function dispatchEvent(eventType) { var event = document.createEvent("CustomEvent"); event.initCustomEvent(eventType, false, false, "custom"); window.dispatchEvent(event); } function abort() { if (activeService) { activeService.destroy(); dispatchEvent("afterprint"); } } function renderProgress(index, total, l10n) { var progressContainer = document.getElementById("printServiceOverlay"); var progress = Math.round(100 * index / total); var progressBar = progressContainer.querySelector("progress"); var progressPerc = progressContainer.querySelector(".relative-progress"); progressBar.value = progress; l10n.get("print_progress_percent", { progress: progress }, progress + "%").then(function (msg) { progressPerc.textContent = msg; }); } window.addEventListener("keydown", function (event) { if (event.keyCode === 80 && (event.ctrlKey || event.metaKey) && !event.altKey && (!event.shiftKey || window.chrome || window.opera)) { window.print(); event.preventDefault(); if (event.stopImmediatePropagation) { event.stopImmediatePropagation(); } else { event.stopPropagation(); } } }, true); if ("onbeforeprint" in window) { var stopPropagationIfNeeded = function stopPropagationIfNeeded(event) { if (event.detail !== "custom" && event.stopImmediatePropagation) { event.stopImmediatePropagation(); } }; window.addEventListener("beforeprint", stopPropagationIfNeeded); window.addEventListener("afterprint", stopPropagationIfNeeded); } var overlayPromise; function ensureOverlay() { if (!overlayPromise) { overlayManager = _app.PDFViewerApplication.overlayManager; if (!overlayManager) { throw new Error("The overlay manager has not yet been initialized."); } overlayPromise = overlayManager.register("printServiceOverlay", document.getElementById("printServiceOverlay"), abort, true); document.getElementById("printCancel").onclick = abort; } return overlayPromise; } _app.PDFPrintServiceFactory.instance = { supportsPrinting: true, createPrintService: function createPrintService(pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise, l10n) { if (activeService) { throw new Error("The print service is created and active."); } activeService = new PDFPrintService(pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise, l10n); return activeService; } }; /***/ }) /******/ ]); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ if(__webpack_module_cache__[moduleId]) { /******/ return __webpack_module_cache__[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ id: moduleId, /******/ loaded: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.loaded = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/node module decorator */ /******/ (() => { /******/ __webpack_require__.nmd = (module) => { /******/ module.paths = []; /******/ if (!module.children) module.children = []; /******/ return module; /******/ }; /******/ })(); /******/ /************************************************************************/ /******/ // startup /******/ // Load entry module /******/ __webpack_require__(0); /******/ // This entry module used 'exports' so it can't be inlined /******/ })() ; //# sourceMappingURL=viewer.js.map ================================================ FILE: projects/minimal-api/README.md ================================================ # Minimal API (39) * [Hello World](hello-world) This is Hello World ASP.NET Core 6 app using the new `WebApplication` instead of `IHostBuilder`. ## Minimal Routing (9) In these examples we are using the familiar `Host.CreateDefaultBuilder(args)` host configuration style to emphasis that the new Minimal Routing feature works in both existing style and also in the new minimal hosting API. * [Map](map) This is a brand new feature that allows the creation of Web API without using Controllers. * [Accessing HttpContext in Map](map-2) This sample shows how to access HttpContext in `Map`. * [Accessing Objects in Map](map-3) This sample shows how to access objects `Map`. * [Setup Open API support](map-4) This sample shows how to setup Open API support using .NET 10 built-in OpenAPI. * [HttpRequest injection](map-5) This sample shows how to use `HttpRequest` directly without relying on `HttpContext`. * [IEndpointRouteBuilder](map-6) This sample shows the use of `IEndPointRouteBuilder` to organize code. * [MapPost with JSON model binder](map-post) This sample shows how JSON model binder works in `MapPost`. * [MapPost with JSON model binder - 2](map-post-2) This sample shows how JSON model binder works in `MapPost` using static method. * [MapMethods with JSON model binder](map-methods) This sample shows how to handle multiple HTTP Verbs request using `MapMethods`. In this example we send 'PUT', 'POST' and 'PATCH' requests. ## Route Constraints (12) * [Route Constraints - int, min, max and range](route-constraints-int) This example shows route constraint for integer, the minimum and maximum value, and the range. * [Route Constraints - decimal, float and double](route-constraints-decimal) This example shows route constraint for decimal, float and double. ## Link Generator (1) * [Link Generator - Generate path from a route name](link-generator-path-by-route-name) This sample shows how to generate a url path from a route name. ## Parameter Binding (10) * [Route binding - implicit](parameter-binding-route-implicit) This example shows usage of implicit route parameter binding of `int` and `string` types. * [Route binding - explicit](parameter-binding-route-explicit) This example shows usage of explicit route parameter binding of `int` and `string` types using `[FromRoute]` attribute. * [Query string binding - implicit](parameter-binding-query-string-implicit) This example shows usage of implicit query string parameter binding of `int` and `string` types. * [Query string binding - explicit](parameter-binding-query-string-explicit) This example shows usage of explicit query string parameter binding of `int` and `string` types using '[FromQuery]' attribute. * [Special types binding](parameter-binding-special-types) This example shows usage of special types binding e.g. - `HttpContext`, `HttpRequest`, `HttpResponse`, `CancellationToken`, and `ClaimsPrincipal`. * [Header binding - explicit](parameter-binding-header-explicit) This example shows usage of explicit header parameter binding of `string` type using '[FromHeader]' attribute. * [Json binding - implicit](parameter-binding-json-implicit) This example shows usage of explicit json parameter. * [Json binding - explicit](parameter-binding-json-explicit) This example shows usage of explicit json parameter binding using '[FromBody]' attribute. * [Custom binding to types over Route, Query or Header](parameter-binding-custom-try-parse) This example shows usage of custom binding to types over Route, Query or Header via implementation of static `TryParse` method. * [Custom binding - full control](parameter-binding-custom-bind-async) This shows how to take full control of the binding process by implementing `BindAsync` static method in your type. ## Antiforgery * [Antiforgery Token on HTML form](anti-forgery-1) This shows how to use the IAntiforgery interface to generate a token for use in an HTML form. * [Antiforgery Token on AJAX call](anti-forgery-2) This shows how to use the IAntiforgery interface to generate a token for use in AJAX call. * [Cross site antiforgery](anti-forgery-3) This shows how to implement cross site antiforgery (e.g. the API is located in a different domain). ## Endpoint Filter * [Endpoint Filter - 1](endpoint-filter-1) This sample shows how to apply an Endpoint filter to your minimal API. * [Endpoint Filter - 2](endpoint-filter-2) This sample shows how to apply multiple Endpoint filters to your minimal APIs. * [Endpoint Filter - 3](endpoint-filter-3) This examples shows the sequence of code execution before `RouteHandlerFilterDelegate ` and after `RouteHandlerFilterDelegate` in multiple endpoint filters. * [Endpoint Filter - 4](endpoint-filter-4) Use `IStatusCodeHttpResult` to detect return result in filter. ## Route Group * [Route Group - 1](map-group-1) `MapGroup()` extension methods allow grouping of endpoints with a common prefix. It also allow group metadata to be attached to the group. * [Route Group - 2](map-group-2) Use `.WithTags()`, `.WithDescription()`, `.WithSummary()` to enrich OpenAPI information for all the endpoints in the group. Uses .NET 10 built-in OpenAPI. * [Route Group - 3](map-group-3) Use `.ExcludeFromDescription` to exclude endpoints from OpenAPI description. Uses .NET 10 built-in OpenAPI. ## Minimal API Improvements * [Minimal API Form Model Binding](minimal-api-form-model-binding) This sample demonstrates the ability to use `[FromForm]` binding in Minimal API. * [Typed Results - 1](typed-results-1) `Microsoft.AspNetCore.Http.TypedResults` static class is the “typed” equivalent of the existing `Microsoft.AspNetCore.Http.Results` class. * [WithOpenApi - 1](open-api-1) This sample demonstrates .NET 10 built-in OpenAPI support using XML comments and `AddOpenApi()`. * [Results<> Union Type](open-api-2) `Results` provides better description of the result of the operation. Uses .NET 10 built-in OpenAPI. * [IFormFile](iform-file) This sample demonstrates the usage of `IFormFile` to upload a file in Minimal API. * [IFormFileCollection](iform-file-collection) This sample demonstrates the usage of `IFormFileCollection` to upload multiple files in Minimal API. dotnet8 ================================================ FILE: projects/minimal-api/anti-forgery-1/Program.cs ================================================ using Microsoft.AspNetCore.Antiforgery; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); WebApplication app = builder.Build(); app.MapGet("/", (HttpContext context, IAntiforgery antiforgery) => { var token = antiforgery.GetAndStoreTokens(context); var html = $@"

    Implement AntiForgery Manually on Form



    "; return Results.Content(html, "text/html"); }); app.MapPost("/validate", async (HttpContext context, IAntiforgery antiforgery) => { try { await antiforgery.ValidateRequestAsync(context); return Results.Ok(context.Request.Form["name"]); } catch (Exception ex) { return Results.Problem(ex?.Message ?? string.Empty); } }); app.Run(); ================================================ FILE: projects/minimal-api/anti-forgery-1/README.md ================================================ # Antiforgery Token using IAntiforgery This shows how to use the IAntiforgery interface to generate a token for use in an HTML form. ================================================ FILE: projects/minimal-api/anti-forgery-1/anti-forgery-1.csproj ================================================ net10.0 true preview ================================================ FILE: projects/minimal-api/anti-forgery-2/Program.cs ================================================ using Microsoft.AspNetCore.Antiforgery; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); WebApplication app = builder.Build(); app.MapGet("/", (HttpContext context, IAntiforgery antiforgery) => { var token = antiforgery.GetAndStoreTokens(context); var html = $@"

    Implement Antiforgery on AJAX call

    "; return Results.Content(html, "text/html"); }); app.MapPost("/validate", async (HttpContext context, IAntiforgery antiforgery) => { try { await antiforgery.ValidateRequestAsync(context); return Results.Ok(new { Name = "hi Anne"}); } catch (Exception ex) { return Results.Problem(ex?.Message ?? string.Empty); } }); app.Run(); ================================================ FILE: projects/minimal-api/anti-forgery-2/README.md ================================================ # Antiforgery Token using IAntiforgery This shows how to use the IAntiforgery interface to generate a token for use in an AJAX call. ================================================ FILE: projects/minimal-api/anti-forgery-2/anti-forgery-2.csproj ================================================ net10.0 true preview ================================================ FILE: projects/minimal-api/anti-forgery-3/README.md ================================================ # Implementing cross site antiforgery This example shows how to implement antiforgery for APIs located in different domain. ================================================ FILE: projects/minimal-api/anti-forgery-3/api/Program.cs ================================================ using Microsoft.AspNetCore.Antiforgery; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(options => options.HeaderName = "X-XSRF-TOKEN"); builder.Services.AddCors(options => { options.AddPolicy(name: "localhostOnly", policy => { policy.WithOrigins(builder.Configuration["origin"]) .AllowAnyHeader() .AllowAnyMethod() .AllowCredentials(); }); }); WebApplication app = builder.Build(); app.Urls.Add("https://localhost:5001"); app.UseCors("localhostOnly"); app.MapGet("/", (HttpContext context) => { var html = $@" System is UP "; return Results.Content(html, "text/html"); }); app.MapGet("/test-cors", () => Results.Ok(new { Message = "cors works" })); app.MapGet("/antiforgery", (IAntiforgery antiforgery, HttpContext context) => { var tokens = antiforgery.GetAndStoreTokens(context); context.Response.Cookies.Append("XSRF-TOKEN", tokens.RequestToken!, new CookieOptions { HttpOnly = false }); }); app.MapPost("/validate", async (HttpContext context, IAntiforgery antiforgery) => { try { await antiforgery.ValidateRequestAsync(context); return Results.Ok(new { Name = "hi Anne"}); } catch (Exception ex) { return Results.Problem(ex?.Message ?? string.Empty); } }); app.Run(); public class AntiforgeryMiddleware : IMiddleware { private readonly IAntiforgery _antiforgery; public AntiforgeryMiddleware(IAntiforgery antiforgery) { _antiforgery = antiforgery; } public async Task InvokeAsync(HttpContext context, RequestDelegate next) { var isGetRequest = string.Equals("GET", context.Request.Method, StringComparison.OrdinalIgnoreCase); if (!isGetRequest) await _antiforgery.ValidateRequestAsync(context); await next(context); } } ================================================ FILE: projects/minimal-api/anti-forgery-3/api/api.csproj ================================================ net10.0 true preview ================================================ FILE: projects/minimal-api/anti-forgery-3/api/appsettings.json ================================================ { "origin" : "https://localhost:5002" } ================================================ FILE: projects/minimal-api/anti-forgery-3/frontend/Pages/Index.cshtml ================================================ @page @inject IConfiguration Config;

    Implement Antiforgery on AJAX call



    ================================================ FILE: projects/minimal-api/anti-forgery-3/frontend/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); WebApplication app = builder.Build(); app.Urls.Add("https://localhost:5002"); app.MapRazorPages(); app.Run(); ================================================ FILE: projects/minimal-api/anti-forgery-3/frontend/appsettings.json ================================================ { "endpoint" : "https://localhost:5001" } ================================================ FILE: projects/minimal-api/anti-forgery-3/frontend/frontend.csproj ================================================ net10.0 true preview ================================================ FILE: projects/minimal-api/build.bat ================================================ dotnet build anti-forgery-1 dotnet build anti-forgery-2 dotnet build anti-forgery-3 dotnet build endpoint-filter-1 dotnet build endpoint-filter-2 dotnet build endpoint-filter-3 dotnet build endpoint-filter-4 dotnet build hello-world dotnet build iform-file dotnet build iform-file-collection dotnet build link-generator-path-by-route-name dotnet build map dotnet build map-2 dotnet build map-3 dotnet build map-4 dotnet build map-5 dotnet build map-6 dotnet build map-group-1 dotnet build map-group-2 dotnet build map-group-3 dotnet build map-methods dotnet build map-post dotnet build map-post-2 dotnet build minimal-api-form-model-binding dotnet build open-api-1 dotnet build open-api-2 dotnet build parameter-binding-custom-bind-async dotnet build parameter-binding-custom-try-parse dotnet build parameter-binding-header-explicit dotnet build parameter-binding-json-explicit dotnet build parameter-binding-json-implicit dotnet build parameter-binding-query-string-explicit dotnet build parameter-binding-query-string-implicit dotnet build parameter-binding-route-explicit dotnet build parameter-binding-route-implicit dotnet build parameter-binding-special-types dotnet build route-constraints-decimal dotnet build route-constraints-int dotnet test typed-results-1 ================================================ FILE: projects/minimal-api/build.sh ================================================ #!/bin/bash dotnet build anti-forgery-1 dotnet build anti-forgery-2 dotnet build anti-forgery-3 dotnet build endpoint-filter-1 dotnet build endpoint-filter-2 dotnet build endpoint-filter-3 dotnet build endpoint-filter-4 dotnet build hello-world dotnet build iform-file dotnet build iform-file-collection dotnet build link-generator-path-by-route-name dotnet build map dotnet build map-2 dotnet build map-3 dotnet build map-4 dotnet build map-5 dotnet build map-6 dotnet build map-group-1 dotnet build map-group-2 dotnet build map-group-3 dotnet build map-methods dotnet build map-post dotnet build map-post-2 dotnet build minimal-api-form-model-binding dotnet build open-api-1 dotnet build open-api-2 dotnet build parameter-binding-custom-bind-async dotnet build parameter-binding-custom-try-parse dotnet build parameter-binding-header-explicit dotnet build parameter-binding-json-explicit dotnet build parameter-binding-json-implicit dotnet build parameter-binding-query-string-explicit dotnet build parameter-binding-query-string-implicit dotnet build parameter-binding-route-explicit dotnet build parameter-binding-route-implicit dotnet build parameter-binding-special-types dotnet build route-constraints-decimal dotnet build route-constraints-int dotnet test typed-results-1 ================================================ FILE: projects/minimal-api/endpoint-filter-1/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.MapGet("/", (HttpContext context) => Results.Content($$"""
    {{ context.Items["message"]}}
    """, "text/html")) .AddEndpointFilter((context, next) => { context.HttpContext.Items["message"] = "hello from filter"; return next(context); }); app.Run(); ================================================ FILE: projects/minimal-api/endpoint-filter-1/README.md ================================================ # Apply EndpointFilter to your minimal API This shows how to apply an EndpointFilter to your minimal API. ================================================ FILE: projects/minimal-api/endpoint-filter-1/endpoint-filter-1.csproj ================================================ net10.0 true preview ================================================ FILE: projects/minimal-api/endpoint-filter-2/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.MapGet("/", (HttpContext context) => Results.Content($$"""
    {{ context.Items["message"]}}
    """, "text/html")) .AddEndpointFilter((context, next) => { context.HttpContext.Items["message"] = "filter 1"; return next(context); }) .AddEndpointFilter((context, next) => { context.HttpContext.Items["message"] += " filter 2"; return next(context); }) .AddEndpointFilter((context, next) => { context.HttpContext.Items["message"] += " filter 3"; return next(context); }); app.Run(); ================================================ FILE: projects/minimal-api/endpoint-filter-2/README.md ================================================ # Apply multiple EndpointFilters to your minimal APIs This shows how to apply multiple EndpointFilters to your minimal API. ================================================ FILE: projects/minimal-api/endpoint-filter-2/endpoint-filter-2.csproj ================================================ net10.0 true preview ================================================ FILE: projects/minimal-api/endpoint-filter-3/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.MapGet("/", (HttpContext context) => Results.Content($$"""
    {{ context.Items["message"]}}
    """, "text/html")) .AddEndpointFilter((context, next) => { context.HttpContext.Items["message"] = "filter 1"; var result = next(context); context.HttpContext.Response.Headers["x-application"] += "filter 1 "; return result; }) .AddEndpointFilter((context, next) => { context.HttpContext.Items["message"] += " filter 2"; var result = next(context); context.HttpContext.Response.Headers["x-application"] += "filter 2 "; return result; }) .AddEndpointFilter((context, next) => { context.HttpContext.Items["message"] += " filter 3"; var result = next(context); context.HttpContext.Response.Headers["x-application"] += "filter 3 "; return result; }); app.Run(); ================================================ FILE: projects/minimal-api/endpoint-filter-3/README.md ================================================ # RouteHandlerFilterDelegate sequence in multiple endpoint filters This examples shows the sequence of code execution before `RouteHandlerFilterDelegate ` and after `RouteHandlerFilterDelegate` in multiple endpoint filters. In this case, inspect the response for `x-application` header on your browser. ================================================ FILE: projects/minimal-api/endpoint-filter-3/endpoint-filter-3.csproj ================================================ net10.0 true preview ================================================ FILE: projects/minimal-api/endpoint-filter-4/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.MapGet("/", (HttpContext context) => Results.Content($$""" """, "text/html")); app.MapGet("/about/{name}", (string name) => { if (name.Equals("anne")) return Results.Ok(name); else return Results.BadRequest(); }).AddEndpointFilter(async (context, next) => { var result = await next(context); return result switch { IStatusCodeHttpResult a when a.StatusCode == StatusCodes.Status400BadRequest => Results.Ok("Bad Request"), _ => result }; }); app.Run(); ================================================ FILE: projects/minimal-api/endpoint-filter-4/README.md ================================================ # Use IStatusCodeHttpResult to detect return result in filter These are the new available HttpResults interfaces. ``` csharp Microsoft.AspNetCore.Http.IContentTypeHttpResult Microsoft.AspNetCore.Http.IFileHttpResult Microsoft.AspNetCore.Http.INestedHttpResult Microsoft.AspNetCore.Http.IStatusCodeHttpResult Microsoft.AspNetCore.Http.IValueHttpResult Microsoft.AspNetCore.Http.IValueHttpResult ``` ================================================ FILE: projects/minimal-api/endpoint-filter-4/endpoint-filter-4.csproj ================================================ net10.0 true preview ================================================ FILE: projects/minimal-api/hello-world/Program.cs ================================================ using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Hosting; WebApplication app = WebApplication.Create(); app.Run(async context => { // Duplicate the code below and write more messages. Save and refresh your browser to see the result. await context.Response.WriteAsync("Hello world .NET 6. Make sure you run this app using 'dotnet watch run'."); }); await app.RunAsync(); ================================================ FILE: projects/minimal-api/hello-world/README.md ================================================ # Hello World using the new simplified hosting This hello world sample uses the brand new `WebApplication` hosting class. This simplifies configuring an ASP.NET Core application by a mile. This is how this code sample used to look like using `IHostBuilder`. ``` C# namespace PracticalAspNetCore { public class Startup { public void Configure(IApplicationBuilder app) { app.Run(async context => { // Duplicate the code below and write more messages. Save and refresh your browser to see the result. await context.Response.WriteAsync("Hello world .NET 6. Make sure you run this app using 'dotnet watch run'."); }); } } public class Program { public static void Main(string[] args) => CreateHostBuilder(args).Build().Run(); public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup() ); } } ``` and now ``` c# using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Hosting; WebApplication app = WebApplication.Create(); app.Run(async context => { // Duplicate the code below and write more messages. Save and refresh your browser to see the result. await context.Response.WriteAsync("Hello world .NET 6. Make sure you run this app using 'dotnet watch run'."); }); await app.RunAsync(); ``` You can read the implementation of ```WebApplication``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplication.cs). ================================================ FILE: projects/minimal-api/hello-world/hello-world.csproj ================================================ net10.0 true preview ================================================ FILE: projects/minimal-api/iform-file/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.MapGet("/", (HttpContext context) => Results.Content($$"""

    Upload File

    You can find the uploaded file in 'uploaded' directory

    """, "text/html")); app.MapPost("/upload", async (IFormFile file, IWebHostEnvironment env) => { if (file is not null && file.Length > 0) { var folder = Path.Combine(env.ContentRootPath, "uploaded"); if (Directory.Exists(folder) is false) Directory.CreateDirectory(folder); var path = Path.Combine(folder, file.FileName); Console.WriteLine(path); using var stream = System.IO.File.OpenWrite(path); await file.CopyToAsync(stream); } return Results.LocalRedirect("/"); }); app.Run(); ================================================ FILE: projects/minimal-api/iform-file/README.md ================================================ # Use IFormFile in Minimal API Use IFormFile in Minimal API to upload a file. ================================================ FILE: projects/minimal-api/iform-file/i-form-file.csproj ================================================ net10.0 true preview ================================================ FILE: projects/minimal-api/iform-file-collection/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.MapGet("/", (HttpContext context) => Results.Content($$"""

    Upload Files

    You can find the uploaded file in 'uploaded' directory

    """, "text/html")); app.MapPost("/upload", async (IFormFileCollection files, IWebHostEnvironment env) => { var folder = Path.Combine(env.ContentRootPath, "uploaded"); if (Directory.Exists(folder) is false) Directory.CreateDirectory(folder); foreach(var file in files) { if (file is not null && file.Length > 0) { var path = Path.Combine(folder, file.FileName); Console.WriteLine(path); using var stream = System.IO.File.OpenWrite(path); await file.CopyToAsync(stream); } } return Results.LocalRedirect("/"); }); app.Run(); ================================================ FILE: projects/minimal-api/iform-file-collection/README.md ================================================ # Use IFormFileCollection in Minimal API Use IFormFileCollection in Minimal API to upload multiple files. ================================================ FILE: projects/minimal-api/iform-file-collection/i-form-file-collection.csproj ================================================ net10.0 true preview ================================================ FILE: projects/minimal-api/link-generator-path-by-route-name/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Routing; static IResult Index(LinkGenerator linker) => Results.Text(@$" " , "text/html"); static IResult About(string? name) => Results.Text(@$"

    About {name}

    " , "text/html"); var app = WebApplication.Create(); app.Map("/", Index); app.Map("/about", About).WithName("about"); app.Run(); ================================================ FILE: projects/minimal-api/link-generator-path-by-route-name/README.md ================================================ # LinkGenerator - Generate path from a route name Use `LinkGenerator.GetPathByName` to generate path from a route name. You name a route by using `WithName` extension method `app.Map("/about", About).WithName("about");`. **Route name is case sensitive!** ================================================ FILE: projects/minimal-api/link-generator-path-by-route-name/link-generator-path-by-route-name.csproj ================================================ net10.0 preview true ================================================ FILE: projects/minimal-api/map/Program.cs ================================================ IResult Index() => Results.Json(new Greeting("Hello World")); IResult About() => Results.Json(new { about = "me" }); var app = WebApplication.Create(); app.Map("/", Index); app.Map("/about", About); app.Run(); public record Greeting(string Message); ================================================ FILE: projects/minimal-api/map/README.md ================================================ # Map to JsonResult This is a new functionality in ASP.NET Core to enable creating API without using Controller. In this example we create two endpoints, `/` and `/about`. `IEndpointConventionBuilder.Map` responds to all HTTP Verbs. ================================================ FILE: projects/minimal-api/map/map.csproj ================================================ net10.0 true`n preview ================================================ FILE: projects/minimal-api/map-2/Program.cs ================================================ IResult TryContext(HttpContext context) => Results.Json(new { path = context.Request.Path }); var app = WebApplication.Create(); app.Map("/", TryContext); app.Run(); ================================================ FILE: projects/minimal-api/map-2/README.md ================================================ # Accessing HttpContext in Map This example shows how to access `HttpContext` in Map. ================================================ FILE: projects/minimal-api/map-2/map-2.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-api/map-3/Program.cs ================================================ IResult TryContext(MyData data) => Results.Json(new { greetings = $"Hello {data.Name}" }); var builder = WebApplication.CreateBuilder(); builder.Services.AddSingleton(); var app = builder.Build(); app.Map("/", TryContext); app.Run(); public class MyData { public string Name => "Anne"; } ================================================ FILE: projects/minimal-api/map-3/README.md ================================================ # Accessing your objects in Map This example shows how to access your objects in Map. ================================================ FILE: projects/minimal-api/map-3/map-3.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-api/map-4/Program.cs ================================================ using Scalar.AspNetCore; var builder = WebApplication.CreateBuilder(args); builder.Services.AddOpenApi(); var app = builder.Build(); app.MapOpenApi(); app.MapScalarApiReference(); string Plaintext() => "Hello, World!"; app.MapGet("/hello", Plaintext); Greeting Json() => new Greeting("Hello, World!"); app.MapGet("/json", Json); app.MapGet("/hello/{name}", (string name) => new Greeting($"Hello, {name}!")); app.Run(); public record Greeting(string Message); ================================================ FILE: projects/minimal-api/map-4/README.md ================================================ # Built-in OpenAPI with Scalar UI This sample demonstrates ASP.NET Core 10's built-in OpenAPI 3.1 support with basic endpoints. ## Key Features - No external packages required (Swashbuckle/NSwag removed) - OpenAPI 3.1 document generated automatically - Modern Scalar UI for interactive documentation - AOT-compatible ## Running the Sample ```bash dotnet watch run ``` ## Viewing the Documentation - **Scalar UI:** Navigate to `/scalar` - **OpenAPI JSON:** Navigate to `/openapi/v1.json` ## Migration Notes This sample was migrated from Swashbuckle to .NET 10's built-in OpenAPI support. **Changes:** - Removed `Swashbuckle.AspNetCore` package dependency - Added `Microsoft.AspNetCore.OpenApi` (built-in) - Added `Scalar.AspNetCore` for modern UI - Enabled `GenerateDocumentationFile` in .csproj See `OUT-OF-DATE.md` for migration details. ================================================ FILE: projects/minimal-api/map-4/map-4.csproj ================================================ net10.0 true true $(NoWarn);1591 ================================================ FILE: projects/minimal-api/map-5/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; var app = WebApplication.Create(); IResult Plaintext(HttpRequest request) { var name = request.Query["name"]; if (!string.IsNullOrWhiteSpace(name)) return Results.Text("hello " + name, "text/html"); else return Results.Text("hello", "text/html"); } app.MapGet("/hello", Plaintext); app.MapGet("/", () => { return Results.Text( $@" ", "text/html"); }); app.Run(); ================================================ FILE: projects/minimal-api/map-5/README.md ================================================ # Use injected HttpRequest You can inject `HttpRequest` directly instead of having to rely on `HttpContext` (e.g `HttpContext.Request`). ================================================ FILE: projects/minimal-api/map-5/map-5.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-api/map-6/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Routing; using Microsoft.AspNetCore.Http; var app = WebApplication.Create(); MapEndpoints(app); Pages.AllPages(app); app.Run(); void MapEndpoints(IEndpointRouteBuilder endpoints) { var header = ""; var footer = ""; endpoints.Map("/", () => Results.Text(header + @"About Us
    Contact Us" + footer, "text/html") ); } public static class Pages { public static void AllPages(IEndpointRouteBuilder endpoints) { endpoints.Map("/about-us", () => "About Us" ); endpoints.Map("/contact-us", () => "Contact Us" ); } } ================================================ FILE: projects/minimal-api/map-6/README.md ================================================ # IEndpointRouteBuilder In this example we use use `IEndpointRouteBuilder` interface in a method as a way to organize our endpoints configuration. This gives flexibility on how we organize our code. ================================================ FILE: projects/minimal-api/map-6/map-6.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-api/map-group-1/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.MapGet("/", () => Results.Content(""" """, "text/html")); app.MapGroup("/about").MapAboutApi(); app.Run(); public static class AboutApi { public static RouteGroupBuilder MapAboutApi(this RouteGroupBuilder group) { group.MapGet("/", () => Results.Ok("about")); group.MapGet("/us", () => Results.Ok("Us")); group.MapGet("/all", () => Results.Ok("All")); return group; } } ================================================ FILE: projects/minimal-api/map-group-1/README.md ================================================ # Route Groups `MapGroup()` extension methods allow grouping of endpoints with a common prefix. It also allow group metadata to be attached to the group. ================================================ FILE: projects/minimal-api/map-group-1/map-group-1.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-api/map-group-2/Program.cs ================================================ using Scalar.AspNetCore; var builder = WebApplication.CreateBuilder(); builder.Services.AddOpenApi(); var app = builder.Build(); app.MapOpenApi(); app.MapScalarApiReference(); app.MapGet("/", () => Results.Content(""" """, "text/html")); app.MapGroup("/about") .MapAboutApi() .WithTags("about_apis") .WithDescription("This is a group of API related to About"); app.Run(); public static class AboutApi { public static RouteGroupBuilder MapAboutApi(this RouteGroupBuilder group) { group.MapGet("/", () => Results.Ok("about")); group.MapGet("/us", () => Results.Ok("Us")); group.MapGet("/all", () => Results.Ok("All")); return group; } } ================================================ FILE: projects/minimal-api/map-group-2/README.md ================================================ # Built-in OpenAPI with Scalar UI This sample demonstrates ASP.NET Core 10's built-in OpenAPI 3.1 support with route groups. ## Key Features - No external packages required (Swashbuckle/NSwag removed) - OpenAPI 3.1 document generated automatically - Modern Scalar UI for interactive documentation - Demonstrates route grouping with `WithTags()` and `WithDescription()` - AOT-compatible ## Running the Sample ```bash dotnet watch run ``` ## Viewing the Documentation - **Scalar UI:** Navigate to `/scalar` - **OpenAPI JSON:** Navigate to `/openapi/v1.json` ## Migration Notes This sample was migrated from Swashbuckle to .NET 10's built-in OpenAPI support. **Changes:** - Removed `Swashbuckle.AspNetCore` package dependency - Added `Microsoft.AspNetCore.OpenApi` (built-in) - Added `Scalar.AspNetCore` for modern UI - Enabled `GenerateDocumentationFile` in .csproj See `OUT-OF-DATE.md` for migration details. ================================================ FILE: projects/minimal-api/map-group-2/map-group-2.csproj ================================================ net10.0 true true $(NoWarn);1591 ================================================ FILE: projects/minimal-api/map-group-3/Program.cs ================================================ using Scalar.AspNetCore; var builder = WebApplication.CreateBuilder(); builder.Services.AddOpenApi(); var app = builder.Build(); app.MapOpenApi(); app.MapScalarApiReference(); app.MapGet("/", () => Results.Content(""" """, "text/html")).ExcludeFromDescription(); app.MapGroup("/about") .MapAboutApi(); app.MapGroup("/transaction") .MapTransactionApi(); app.Run(); public static class AboutApi { public static RouteGroupBuilder MapAboutApi(this RouteGroupBuilder group) { group.MapGet("/", () => Results.Ok("about")).ExcludeFromDescription(); group.MapGet("/us", () => Results.Ok("Us")); group.MapGet("/all", () => Results.Ok("All")); return group; } } public static class TransactionAPI { public static RouteGroupBuilder MapTransactionApi(this RouteGroupBuilder group) { group.MapGet("/", () => Results.Ok("transaction")).ExcludeFromDescription(); group.MapGet("/pay", () => Results.Ok("Pay")); return group; } } ================================================ FILE: projects/minimal-api/map-group-3/README.md ================================================ # Built-in OpenAPI with Scalar UI This sample demonstrates ASP.NET Core 10's built-in OpenAPI 3.1 support with route groups and endpoint exclusion. ## Key Features - No external packages required (Swashbuckle/NSwag removed) - OpenAPI 3.1 document generated automatically - Modern Scalar UI for interactive documentation - Demonstrates `ExcludeFromDescription()` to hide endpoints from API docs - Multiple route groups - AOT-compatible ## Running the Sample ```bash dotnet watch run ``` ## Viewing the Documentation - **Scalar UI:** Navigate to `/scalar` - **OpenAPI JSON:** Navigate to `/openapi/v1.json` ## Migration Notes This sample was migrated from Swashbuckle to .NET 10's built-in OpenAPI support. **Changes:** - Removed `Swashbuckle.AspNetCore` package dependency - Added `Microsoft.AspNetCore.OpenApi` (built-in) - Added `Scalar.AspNetCore` for modern UI - Enabled `GenerateDocumentationFile` in .csproj See `OUT-OF-DATE.md` for migration details. ================================================ FILE: projects/minimal-api/map-group-3/map-group-3.csproj ================================================ net10.0 true true $(NoWarn);1591 ================================================ FILE: projects/minimal-api/map-methods/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; object Greet([FromBody] Greeting greet, HttpContext context) => new { Message = context.Request.Method + ":" + greet.Message }; var app = WebApplication.Create(); app.MapMethods("/greet", new[] { "POST", "PUT", "PATCH" }, Greet); app.MapGet("/", async context => { string page = @"
    "; context.Response.Headers.Append("Content-Type", "text/html"); await context.Response.WriteAsync(page); }); app.Run(); public record Greeting(string Message); ================================================ FILE: projects/minimal-api/map-methods/README.md ================================================ # Handle multiple HTTP Verbs with JSON model binder This shows how to setup `MapMethods` to handle multiple HTTP Verbs request and with JSON model binder. In this sample we send 'PUT', 'POST' and 'PATCH' verbs. ================================================ FILE: projects/minimal-api/map-methods/map-methods.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-api/map-post/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; IResult Greet([FromBody] Greeting greet) => Results.Json(new { greet.Message }); var app = WebApplication.Create(); app.MapPost("/greet", Greet); app.MapGet("/", async context => { string page = @"
    "; context.Response.Headers.Append("Content-Type", "text/html"); await context.Response.WriteAsync(page); }); app.Run(); public record Greeting(string Message); ================================================ FILE: projects/minimal-api/map-post/README.md ================================================ # MapPost with JSON model binder This shows how to setup `MapPost` to handle POST request and with JSON model binder. ================================================ FILE: projects/minimal-api/map-post/map-post.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-api/map-post-2/Program.cs ================================================ using System; using Microsoft.AspNetCore.Mvc; var app = WebApplication.Create(); app.MapPost("/greet", MyApi.Greet); app.MapGet("/", async context => { string page = @"
    "; context.Response.Headers.Append("Content-Type", "text/html"); await context.Response.WriteAsync(page); }); app.Run(); public record Greeting(string Message); public static class MyApi { public static IResult Greet([FromBody] Greeting greet) => Results.Json(new { greet.Message }); } ================================================ FILE: projects/minimal-api/map-post-2/README.md ================================================ # MapPost with JSON model binder This shows how to setup `MapPost` to handle POST request and with JSON model binder with static method. ================================================ FILE: projects/minimal-api/map-post-2/map-post-2.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-api/minimal-api-form-model-binding/.vscode/settings.json ================================================ { "dotnet.defaultSolution": "minimal-api-form-model-binding.sln" } ================================================ FILE: projects/minimal-api/minimal-api-form-model-binding/Program.cs ================================================ using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.UseAntiforgery(); app.MapGet("/", (HttpContext context, IAntiforgery antiforgery) => { var token = antiforgery.GetAndStoreTokens(context); return Results.Content(Template($$"""
    """), "text/html"); }); app.MapPost("/", async ([FromForm] BlogPostInput input, HttpContext context, IAntiforgery antiforgery) => { try { await antiforgery.ValidateRequestAsync(context); return Results.Content(Template($$"""
    Title : {{input.Title}}
    Body : {{input.Body}}
    """), "text/html"); } catch (AntiforgeryValidationException) { return TypedResults.BadRequest("Invalid anti-forgery token"); } }); app.Run(); static string Template(string body) { return $$""" Form Model Binding

    Form Model Binding

    {{body}}
    """; } public class BlogPostInput(string? title, string body) { public string? Title { get; set; } = title; public string Body { get; set; } = body; } ================================================ FILE: projects/minimal-api/minimal-api-form-model-binding/README.md ================================================ # Minimal API form model binding This sample demonstrates the ability to use `[FromForm]` binding in Minimal API. ================================================ FILE: projects/minimal-api/minimal-api-form-model-binding/minimal-api-form-model-binding.csproj ================================================ net10.0 true enable ================================================ FILE: projects/minimal-api/minimal-api-form-model-binding/minimal-api-form-model-binding.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "minimal-api-form-model-binding", "minimal-api-form-model-binding.csproj", "{9F6FC559-2A87-4F9F-BFF5-1E340B790048}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {9F6FC559-2A87-4F9F-BFF5-1E340B790048}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9F6FC559-2A87-4F9F-BFF5-1E340B790048}.Debug|Any CPU.Build.0 = Debug|Any CPU {9F6FC559-2A87-4F9F-BFF5-1E340B790048}.Release|Any CPU.ActiveCfg = Release|Any CPU {9F6FC559-2A87-4F9F-BFF5-1E340B790048}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {B1D5D49B-74DE-4DE6-9327-C9BA5F19073B} EndGlobalSection EndGlobal ================================================ FILE: projects/minimal-api/open-api-1/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#da4ff0", "activityBar.background": "#da4ff0", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#ebce14", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#da4ff0", "statusBar.background": "#d020ec", "statusBar.debuggingBackground": "#3cec20", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#da4ff0", "statusBarItem.remoteBackground": "#d020ec", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#d020ec", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#d020ec99", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#d020ec" } ================================================ FILE: projects/minimal-api/open-api-1/Program.cs ================================================ using Scalar.AspNetCore; var builder = WebApplication.CreateBuilder(); builder.Services.AddOpenApi(); var app = builder.Build(); app.MapOpenApi(); app.MapScalarApiReference(); app.MapGet("/", () => Results.Content(""" """, "text/html")); app.MapGet("/greeting", Hello.GetGreeting); app.Run(); public record Person(string Name); /// /// Return greeting given name /// public static class Hello { /// The name of the person to greet public static IResult GetGreeting(string name) => Results.Ok(new Person(name)); } ================================================ FILE: projects/minimal-api/open-api-1/README.md ================================================ # Built-in OpenAPI with Scalar UI This sample demonstrates ASP.NET Core 10's built-in OpenAPI 3.1 support. ## Key Features - No external packages required (Swashbuckle/NSwag removed) - OpenAPI 3.1 document generated automatically - XML doc comments populate API descriptions - Modern Scalar UI for interactive documentation - AOT-compatible ## Running the Sample ```bash dotnet watch run ``` ## Viewing the Documentation - **Scalar UI:** Navigate to `/scalar` - **OpenAPI JSON:** Navigate to `/openapi/v1.json` ## Migration Notes This sample was migrated from Swashbuckle to .NET 10's built-in OpenAPI support. **Changes:** - Removed `Swashbuckle.AspNetCore` package dependency - Added `Microsoft.AspNetCore.OpenApi` (built-in) - Added `Scalar.AspNetCore` for modern UI - Replaced `WithOpenApi()` with XML documentation comments - Enabled `GenerateDocumentationFile` in .csproj See `OUT-OF-DATE.md` for migration details. ================================================ FILE: projects/minimal-api/open-api-1/open-api-1.csproj ================================================ net10.0 true true $(NoWarn);1591 ================================================ FILE: projects/minimal-api/open-api-1/open-api-1.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "open-api-1", "open-api-1.csproj", "{C6BC3FA7-3E7A-4CF2-9144-7CFACD62FD3E}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {C6BC3FA7-3E7A-4CF2-9144-7CFACD62FD3E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C6BC3FA7-3E7A-4CF2-9144-7CFACD62FD3E}.Debug|Any CPU.Build.0 = Debug|Any CPU {C6BC3FA7-3E7A-4CF2-9144-7CFACD62FD3E}.Release|Any CPU.ActiveCfg = Release|Any CPU {C6BC3FA7-3E7A-4CF2-9144-7CFACD62FD3E}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {1F7849BD-034F-4345-A5D2-DA51D2977B1E} EndGlobalSection EndGlobal ================================================ FILE: projects/minimal-api/open-api-2/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#700713", "activityBar.background": "#700713", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#147808", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#700713", "statusBar.background": "#40040b", "statusBar.debuggingBackground": "#044039", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#700713", "statusBarItem.remoteBackground": "#40040b", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#40040b", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#40040b99", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#40040b" } ================================================ FILE: projects/minimal-api/open-api-2/Program.cs ================================================ using Microsoft.AspNetCore.Http.HttpResults; using Scalar.AspNetCore; var builder = WebApplication.CreateBuilder(); builder.Services.AddOpenApi(); var app = builder.Build(); app.MapOpenApi(); app.MapScalarApiReference(); app.MapGet("/", () => Results.Content(""" """, "text/html")); app.MapGet("/greeting", Hello.GetGreeting); app.Run(); public record Person(string Name); /// /// Return greeting given name /// public static class Hello { /// The name of the person to greet /// Returns the person with the greeting /// If name is null or whitespace public static Results, NotFound> GetGreeting(string name) { if (string.IsNullOrWhiteSpace(name)) return TypedResults.NotFound(); return TypedResults.Ok(new Person(name)); } } ================================================ FILE: projects/minimal-api/open-api-2/README.md ================================================ # Built-in OpenAPI with Scalar UI This sample demonstrates ASP.NET Core 10's built-in OpenAPI 3.1 support with multiple response types. ## Key Features - No external packages required (Swashbuckle/NSwag removed) - OpenAPI 3.1 document generated automatically - XML doc comments populate API descriptions and response codes - Modern Scalar UI for interactive documentation - AOT-compatible - Demonstrates `Results` pattern with proper response documentation ## Running the Sample ```bash dotnet watch run ``` ## Viewing the Documentation - **Scalar UI:** Navigate to `/scalar` - **OpenAPI JSON:** Navigate to `/openapi/v1.json` ## Migration Notes This sample was migrated from Swashbuckle to .NET 10's built-in OpenAPI support. **Changes:** - Removed `Swashbuckle.AspNetCore` package dependency - Added `Microsoft.AspNetCore.OpenApi` (built-in) - Added `Scalar.AspNetCore` for modern UI - Replaced `WithOpenApi()` with XML documentation comments - Enabled `GenerateDocumentationFile` in .csproj - Added response code documentation (200, 404) See `OUT-OF-DATE.md` for migration details. ================================================ FILE: projects/minimal-api/open-api-2/open-api-2.csproj ================================================ net10.0 true true $(NoWarn);1591 ================================================ FILE: projects/minimal-api/open-api-2/open-api-2.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "open-api-2", "open-api-2.csproj", "{CBB8035F-8242-422E-8C95-4817A0816F73}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {CBB8035F-8242-422E-8C95-4817A0816F73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CBB8035F-8242-422E-8C95-4817A0816F73}.Debug|Any CPU.Build.0 = Debug|Any CPU {CBB8035F-8242-422E-8C95-4817A0816F73}.Release|Any CPU.ActiveCfg = Release|Any CPU {CBB8035F-8242-422E-8C95-4817A0816F73}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {6ABA987D-8496-49EC-A983-FBA7754F785D} EndGlobalSection EndGlobal ================================================ FILE: projects/minimal-api/parameter-binding-custom-bind-async/Program.cs ================================================ using System; using System.Collections.Generic; using System.Reflection; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; WebApplication app = WebApplication.Create(); app.MapGet("/", () => Results.Text(@$" Click for Directions ", "text/html")); app.MapGet("/direction", (DrivingDirection directions) => Results.Text(@$"

    Directions

    { String.Join(", ", directions.Directions)} ", "text/html")); app.Run(); public enum Direction { Left, Right, Straight } public class DrivingDirection { public List Directions { get; set; } = new(); public static ValueTask BindAsync(HttpContext context, ParameterInfo parameter) { DrivingDirection? result; try { // format is (Left, Right, Straight) var trimmedValue = context.Request.Query["directions"].ToString().TrimStart('(').TrimEnd(')'); var segments = trimmedValue?.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries); if (segments is null) return ValueTask.FromResult(null); result = new(); foreach(var s in segments) { if (Enum.TryParse(typeof(Direction), s, true, out var dir)) { result.Directions.Add((Direction)dir!); } } return ValueTask.FromResult(result); } catch { return ValueTask.FromResult(null); } } } ================================================ FILE: projects/minimal-api/parameter-binding-custom-bind-async/README.md ================================================ # Custom binding - complete control This shows how to take full control of the binding process. Make sure that the parameter does not use any of the binding attributes e.g. `[FromHeader]` or `[FromQuery]`. Your type must implement this static method: ``` csharp public static ValueTask BindAsync(HttpContext context, ParameterInfo parameter); ``` ================================================ FILE: projects/minimal-api/parameter-binding-custom-bind-async/parameter-binder-custom-bind-async.csproj ================================================ net10.0 enable true ================================================ FILE: projects/minimal-api/parameter-binding-custom-try-parse/Program.cs ================================================ using System; using System.Collections.Generic; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; WebApplication app = WebApplication.Create(); app.MapGet("/", () => Results.Text(@$" Click for Directions ", "text/html")); app.MapGet("/direction", ([FromQuery]DrivingDirection directions) => Results.Text(@$"

    Directions

    { String.Join(", ", directions.Directions)} ", "text/html")); app.Run(); public enum Direction { Left, Right, Straight } public class DrivingDirection { public List Directions { get; set; } = new(); public static bool TryParse(string value, out DrivingDirection? result) { try { // format is (Left, Right, Straight) var trimmedValue = value?.TrimStart('(').TrimEnd(')'); var segments = trimmedValue?.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries); result = new(); foreach(var s in segments) { if (Enum.TryParse(typeof(Direction), s, true, out var dir)) { result.Directions.Add((Direction)dir); } } return true; } catch { result = null; return false; } } } ================================================ FILE: projects/minimal-api/parameter-binding-custom-try-parse/README.md ================================================ # Custom binding to types over Route, Query or Header This shows how to bind custom types over Route, Query or Header. Your type must implement either of this static methods: ``` csharp public static bool TryParse(string value, T out result); public static bool TryParse(string value, IFormatProvider provider, T out result); ``` ================================================ FILE: projects/minimal-api/parameter-binding-custom-try-parse/parameter-binder-custom-try-parse.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-api/parameter-binding-header-explicit/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; WebApplication app = WebApplication.Create(); app.MapGet("/", ([FromHeader(Name = "Accept-Language")] string lang, [FromHeaderAttribute(Name = "User-Agent")] string userAgent) => Results.Text(@$" Header `Accept-Language` = { lang }
    Header `User-Agent` = { userAgent } ", "text/html")); app.MapGet("/{number:int}/{name:alpha}", (int number, string name) => Results.Text(@$" Hello {name}. You are number {number}. ", "text/html")); app.Run(); ================================================ FILE: projects/minimal-api/parameter-binding-header-explicit/README.md ================================================ # Explicit header binding This example shows usage of explicit header binding `string` type using `[FromHeader]` attribute. ================================================ FILE: projects/minimal-api/parameter-binding-header-explicit/parameter-binding-header-explicit.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-api/parameter-binding-json-explicit/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; var web = WebApplication.Create(); web.MapPost("/greet", ([FromBody] Greeting greet) => Results.Json(new { Message = greet.Message + " from the server" })); web.MapGet("/", () => Results.Text(@"
    ", "text/html")); web.Run(); public record Greeting(string Message); ================================================ FILE: projects/minimal-api/parameter-binding-json-explicit/README.md ================================================ # Explicit JSON body parameter binding This shows how to bind a JSON request body to a parameter using `[FromBody]` attribute. ================================================ FILE: projects/minimal-api/parameter-binding-json-explicit/parameter-binding-json-explicit.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-api/parameter-binding-json-implicit/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; var web = WebApplication.Create(); web.MapPost("/greet", (Greeting greet) => Results.Json(new { Message = greet.Message + " from the server via implicit binding" })); web.MapGet("/", () => Results.Text(@"
    ", "text/html")); web.Run(); public record Greeting(string Message); ================================================ FILE: projects/minimal-api/parameter-binding-json-implicit/README.md ================================================ # Implict JSON body parameter binding This shows how to bind a JSON request body to a parameter. ================================================ FILE: projects/minimal-api/parameter-binding-json-implicit/parameter-binding-json-implicit.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-api/parameter-binding-query-string-explicit/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; WebApplication app = WebApplication.Create(); app.MapGet("/", () => Results.Text(@" Click here ", "text/html")); app.MapGet("/greet", ([FromQuery] int number, [FromQuery(Name="nm")]string name) => Results.Text(@$" Hello {name}. You are number {number}. ", "text/html")); await app.RunAsync(); ================================================ FILE: projects/minimal-api/parameter-binding-query-string-explicit/README.md ================================================ # Explicit query string parameter binding This example shows usage of explicit query string parameter binding of `int` and `string` types using '[FromQuery]' attribute. ================================================ FILE: projects/minimal-api/parameter-binding-query-string-explicit/parameter-binding-query-string-explicit.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-api/parameter-binding-query-string-implicit/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; WebApplication app = WebApplication.Create(); app.MapGet("/", () => Results.Text(@" Click here ", "text/html")); app.MapGet("/greet", (int number, string name) => Results.Text(@$" Hello {name}. You are number {number}. ", "text/html")); await app.RunAsync(); ================================================ FILE: projects/minimal-api/parameter-binding-query-string-implicit/README.md ================================================ # Implicit query string parameter binding This example shows usage of implicit query string parameter binding of `int` and `string` types. ================================================ FILE: projects/minimal-api/parameter-binding-query-string-implicit/parameter-binding-query-string-implicit.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-api/parameter-binding-route-explicit/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; WebApplication app = WebApplication.Create(); app.MapGet("/", () => Results.Text(@" Click here ", "text/html")); app.MapGet("/{number:int}/{nm:alpha}", ([FromRoute]int number, [FromRoute(Name = "nm")]string name) => Results.Text(@$" Hello {name}. You are number {number}. ", "text/html")); await app.RunAsync(); ================================================ FILE: projects/minimal-api/parameter-binding-route-explicit/README.md ================================================ # Explicit route parameter binding This example shows usage of explicit route parameter binding of `int` and `string` types using `[FromRoute]` attribute. Note: This example isn't working yet in RC2. There is a confirmed bug with FromRouteAttribute Name property that that has already been fixed but not available in RC2 (https://github.com/dotnet/aspnetcore/issues/37268) ================================================ FILE: projects/minimal-api/parameter-binding-route-explicit/parameter-binding-route-explicit.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-api/parameter-binding-route-implicit/Program.cs ================================================ using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Hosting; WebApplication app = WebApplication.Create(); app.MapGet("/", () => Results.Text(@" Click here ", "text/html")); app.MapGet("/{number:int}/{name:alpha}", (int number, string name) => Results.Text(@$" Hello {name}. You are number {number}. ", "text/html")); await app.RunAsync(); ================================================ FILE: projects/minimal-api/parameter-binding-route-implicit/README.md ================================================ # Implicit route parameter binding This example shows usage of implicit route parameter binding of `int` and `string` types. ================================================ FILE: projects/minimal-api/parameter-binding-route-implicit/parameter-binding-route-implicit.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-api/parameter-binding-special-types/Program.cs ================================================ using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Hosting; using System.Threading; using System.Security.Claims; WebApplication app = WebApplication.Create(); app.MapGet("/", (HttpContext context) => Results.Text(@$"

    Special types binding - HttpContext

    This is the value from HttpContext.TraceIdentifier { context.TraceIdentifier }

    ", "text/html")); app.MapGet("/claims-principal", (ClaimsPrincipal claims) => Results.Text(@$"

    Special types binding - ClaimsPrincipal

    This is the value of ClaimsPrincipal.Identity.IsAuthenticated { claims.Identity.IsAuthenticated } ", "text/html")); app.MapGet("/cancellation-token", (CancellationToken token) => Results.Text(@$"

    Special types binding - CancellationToken

    This is the value of CancellationToken.IsCancellationRequested { token.IsCancellationRequested } ", "text/html")); app.MapGet("/http-response", (HttpResponse response) => Results.Text(@$"

    Special types binding - HttpRequest

    This is the value of HttpResponse.StatusCode { response.StatusCode } ", "text/html")); app.MapGet("/http-request", (HttpRequest request) => Results.Text(@$"

    Special types binding - HttpRequest

    This is the value of HttpRequest.Path { request.Path } ", "text/html")); await app.RunAsync(); ================================================ FILE: projects/minimal-api/parameter-binding-special-types/README.md ================================================ # Special types binding These are special types that the framework supports binding without any explicit attributes: - `HttpContext` - `HttpRequest` - `HttpResponse` - `CancellationToken` - `ClaimsPrincipal` - From (HttpContext.User). ================================================ FILE: projects/minimal-api/parameter-binding-special-types/parameter-binding-special-types.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-api/route-constraints-decimal/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Hosting; var app = WebApplication.CreateBuilder(new WebApplicationOptions { EnvironmentName = Environments.Development }).Build(); app.UseStatusCodePages(); app.MapGet("/", () => { return Results.Text(@"

    Sample for {decimal}, {float}, and {double} route constraints

    ", "text/html"); }); app.MapGet("decimal/{id:decimal}", (decimal id) => id.ToString()); app.MapGet("float/{yid:float}", (float id) => id.ToString()); app.MapGet("double/{id:double}", (double id) => id.ToString()); app.Run(); ================================================ FILE: projects/minimal-api/route-constraints-decimal/README.md ================================================ # Route Constraints - decimal, float and double This example shows route constraint for decimal, float and double. ================================================ FILE: projects/minimal-api/route-constraints-decimal/route-constraints-decimal.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-api/route-constraints-int/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Hosting; var app = WebApplication.CreateBuilder(new WebApplicationOptions { EnvironmentName = Environments.Development }).Build(); app.UseStatusCodePages(); app.MapGet("/", () => { return Results.Text(@"

    Sample for {int}, {min()}, {max()}, and {range(min, max))} route constraints

    ", "text/html"); }); app.MapGet("/{id:int}", (int id) => id.ToString()); app.MapGet("/min/{minId:min(1)}", (int minId) => minId.ToString()); app.MapGet("/max/{maxId:max(10)}", (int maxId) => maxId.ToString()); app.MapGet("/range/{rangeId:range(1, 10)}", (int rangeId) => rangeId.ToString()); app.Run(); ================================================ FILE: projects/minimal-api/route-constraints-int/README.md ================================================ # Route Constraint - int, min, max, range This example shows route constraint for integer, the minimum and maximum value, and the range. ================================================ FILE: projects/minimal-api/route-constraints-int/route-constraints-int.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-api/typed-results-1/Program.cs ================================================ using Xunit; using Microsoft.AspNetCore.Http.HttpResults; var app = WebApplication.Create(); app.MapGet("/", Hello.GetGreeting); app.Run(); public record Person(string Name); public static class Hello { public static IResult GetGreeting(string name) => TypedResults.Json(new Person(name)); } public static class Tests { [Fact] public static void MyTest() { var result = Hello.GetGreeting("anne"); Assert.IsType>(result); var result2 = (JsonHttpResult) result; Assert.Equal(result2.Value.Name, "anne"); } } ================================================ FILE: projects/minimal-api/typed-results-1/README.md ================================================ # TypedResults > The new `Microsoft.AspNetCore.Http.TypedResults` static class is the “typed” equivalent of the existing `Microsoft.AspNetCore.Http.Results` class. You can use TypedResults in your minimal APIs to create instances of the in-framework IResult-implementing types and preserve the concrete type information. > > [Microsoft](https://devblogs.microsoft.com/dotnet/asp-net-core-updates-in-dotnet-7-preview-4/) This allows you to check the full concrete type of the result of your minimal API method. Run `dotnet test` to see the result. ================================================ FILE: projects/minimal-api/typed-results-1/typed-results-1.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-hosting/README.md ================================================ # Minimal Hosting (25) ## Alternative Builders (2) * [SlimBuilder](slim-builder) `WebApplication.CreateSlimBuilder` creates `WebApplicationBuilder` with minimal configuration defaults. * [EmptyBuilder](empty-builder) `WebApplication.CreateEmptyBuilder` creates `WebApplicationBuilder` with no built-in behavior. ## WebApplication (6) This is a set of samples that demonstrates things that you can do with the default configuration using `WebApplication.Create()` before you have to resort to `WebApplication.CreateBuilder()`. * [WebApplication - Welcome Page](web-application-welcome-page) This uses the new minimalistic hosting code `WebApplication` and show ASP.NET Core welcome page. * [WebApplication - Default Logger](web-application-logging) `WebApplication.Logger` is available for use immediately without any further configuration. However the default logger is not available via DI. * [WebApplication - Application lifetime events](web-application-lifetime-events) In this sample we learn how to respond to the application lifetime events. * [WebApplication - Middleware](web-application-middleware) In this sample we learn how to use middleware by creating two simple middleware. * [WebApplication - Middleware Pipelines](web-application-middleware-pipeline) In this sample we learn how to use `UseRouter` and `MapMiddlewareGet` to compose two different middleware pipelines. * [WebApplication - Middleware Pipelines 2](web-application-middleware-pipeline-2) In this sample we use `EndpointRouteBuilderExtensions.Map` and `IEndPointRouteBuilder.CreateApplicationBuilder` to build two separate middleware pipelines. ### Configuration (2) * [WebApplication - Configuration](web-application-configuration) This sample list all the information available in the `Configuration` property. * [WebApplication - Configuration as JSON](web-application-configuration-json) This sample list all the information available in the `Configuration` property and return it as JSON. WARNING: Do not use this in your application. It is a terrible idea. Do not expose your configuration information over the wire. This sample is just to demonstrate a technique. ### Server (6) * [WebApplication - Default Urls](web-application-server-default-urls) This sample shows the default Urls that the web server listens to. * [WebApplication - Set Url and Port](web-application-server-specific-url-port) This sample shows how to set the Kestrel web server to listen to a specific Url and port. * [WebApplication - Listen to multiple Urls and Ports](web-application-server-multiple-urls-ports) This sample shows how to set the Kestrel web server to listen to multiple Urls and Ports. * [WebApplication - Set Port from an Environment Variable](web-application-server-port-env-variable) This sample shows how to set the Kestrel web server to listen to a specific port set from an environment variable. * [WebApplication - Set Urls and Port via ASPNETCORE_URLS Environment Variable](web-application-server-aspnetcore-urls) This sample shows how to set the Kestrel web server to listen to a specific url and port via `ASPNETCORE_URLS` environment variable. * [WebApplication - Listening to all interfaces on a specific port](web-application-server-listen-all) This sample shows how to set the Kestrel web server to listen to all IPs (IP4/IP6) on a specific port. ### Standard ASP.NET Core Middlewares (2) * [WebApplication - UseFileServer](web-application-use-file-server) This uses the new minimalistic hosting code `WebApplication` and server default static files. * [WebApplication - UseWebSockets](web-application-use-web-sockets) This sample shows how to use WebSockets by creating a simple echo server. ## WebApplicationBuilder - Minimal Hosting (5) In most cases using ```WebApplication``` isn't enough because you need to configure additional services to be used in your system. This is where ```WebApplicationBuilder``` comes. It allows you to configure services and other properties. * [WebApplicationBuilder - enable MVC](web-application-builder-mvc) This sample shows how to enable MVC. * [WebApplicationBuilder - enable Razor Pages](web-application-builder-razor-pages) This sample shows how to enable Razor Pages. * [WebApplicationBuilder - change environment](web-application-builder-change-environment) This sample shows how to change the environment via code. * [WebApplicationBuilder - change logging minimum level](web-application-builder-logging-set-minimum-level) This sample shows how to set logging minimum level via code. * [WebApplicationBuilder - change web root folder](web-application-builder-change-default-web-root-folder) This samples shows how to use `WebApplicationOptions.WebRootPath` to change the default web root folder. ### WebApplicationOptions (2) Use ```WebApplicationOptions``` to configure initial values of the ```WebApplicationBuilder``` object. * [WebApplicationOptions - set environment](web-application-options-set-environment) This sample shows how to set the environment. * [WebApplicationOptions - change the content root path](web-application-options-change-content-root-path) This sample shows how to change the content root path of the application. dotnet8 ================================================ FILE: projects/minimal-hosting/build.bat ================================================ dotnet build empty-builder dotnet build slim-builder dotnet build web-application-builder-change-default-web-root-folder dotnet build web-application-builder-change-environment dotnet build web-application-builder-logging-set-minimum-level dotnet build web-application-builder-mvc dotnet build web-application-builder-razor-pages dotnet build web-application-configuration dotnet build web-application-configuration-json dotnet build web-application-lifetime-events dotnet build web-application-logging dotnet build web-application-middleware dotnet build web-application-middleware-pipeline dotnet build web-application-middleware-pipeline-2 dotnet build web-application-options-change-content-root-path dotnet build web-application-options-set-environment dotnet build web-application-server-aspnetcore-urls dotnet build web-application-server-default-urls dotnet build web-application-server-listen-all dotnet build web-application-server-multiple-urls-ports dotnet build web-application-server-port-env-variable dotnet build web-application-server-specific-url-port dotnet build web-application-use-file-server dotnet build web-application-use-web-sockets dotnet build web-application-welcome-page ================================================ FILE: projects/minimal-hosting/build.sh ================================================ #!/bin/bash dotnet build empty-builder dotnet build slim-builder dotnet build web-application-builder-change-default-web-root-folder dotnet build web-application-builder-change-environment dotnet build web-application-builder-logging-set-minimum-level dotnet build web-application-builder-mvc dotnet build web-application-builder-razor-pages dotnet build web-application-configuration dotnet build web-application-configuration-json dotnet build web-application-lifetime-events dotnet build web-application-logging dotnet build web-application-middleware dotnet build web-application-middleware-pipeline dotnet build web-application-middleware-pipeline-2 dotnet build web-application-options-change-content-root-path dotnet build web-application-options-set-environment dotnet build web-application-server-aspnetcore-urls dotnet build web-application-server-default-urls dotnet build web-application-server-listen-all dotnet build web-application-server-multiple-urls-ports dotnet build web-application-server-port-env-variable dotnet build web-application-server-specific-url-port dotnet build web-application-use-file-server dotnet build web-application-use-web-sockets dotnet build web-application-welcome-page ================================================ FILE: projects/minimal-hosting/empty-builder/.vscode/settings.json ================================================ { "dotnet.defaultSolution": "empty-builder.sln" } ================================================ FILE: projects/minimal-hosting/empty-builder/Program.cs ================================================ var builder = WebApplication.CreateEmptyBuilder(new WebApplicationOptions()); builder.WebHost.UseKestrelCore(); builder.Services.AddRouting(); var app = builder.Build(); app.MapGet("/", () => { return Results.Content(""" hello world with WebApplication.CreateEmptyBuilder() """, "text/html"); }); app.Run(); ================================================ FILE: projects/minimal-hosting/empty-builder/README.md ================================================ # WebApplication.CreateEmptyBuilder `WebApplication.CreateEmptyBuilder` creates `WebApplicationBuilder` with no built-in behavior. You will need to add services and middleware as needed. ================================================ FILE: projects/minimal-hosting/empty-builder/empty-builder.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-hosting/slim-builder/Program.cs ================================================ var builder = WebApplication.CreateSlimBuilder(); var app = builder.Build(); app.MapGet("/", () => { return Results.Content(""" hello world with WebApplication.CreateSlimBuilder() """, "text/html"); }); app.Run(); ================================================ FILE: projects/minimal-hosting/slim-builder/README.md ================================================ # WebApplication.CreateSlimBuilder `WebApplication.CreateSlimBuilder` creates `WebApplicationBuilder` with minimal defaults. ================================================ FILE: projects/minimal-hosting/slim-builder/slim-builder.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-hosting/web-application-builder-change-default-web-root-folder/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; const string Page = @""; var builder = WebApplication.CreateBuilder(new WebApplicationOptions { WebRootPath = "wwwroot2" }); var app = builder.Build(); app.UseStaticFiles(); app.MapGet("/", () => Results.Text(Page, "text/html")); app.Run(); ================================================ FILE: projects/minimal-hosting/web-application-builder-change-default-web-root-folder/README.md ================================================ # WebApplicationOptions - change the default web root folder Use `WebApplicationOptions.WebRootPath` to change the default web root folder. ================================================ FILE: projects/minimal-hosting/web-application-builder-change-default-web-root-folder/web-application-builder-change-default-web-root-folder.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-hosting/web-application-builder-change-environment/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Hosting; var options = new WebApplicationOptions { EnvironmentName = Environments.Development }; WebApplicationBuilder builder = WebApplication.CreateBuilder(options); var app = builder.Build(); app.Run(async context => { await context.Response.WriteAsync(@"Environment name " + app.Environment.EnvironmentName); }); app.Run(); ================================================ FILE: projects/minimal-hosting/web-application-builder-change-environment/README.md ================================================ # WebApplicationBuilder - Set environment by code In most cases using ```WebApplication``` isn't enough because you need to configure additional services to be used in your system. This is where ```WebApplicationBuilder``` comes. It allows you to configure services and other properties. In this example we show how to set the environment of the application by using `WebApplicationOptions`. You can read the implementation of ```WebApplication``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplication.cs) and its sibling ```WebApplicationBuilder``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplicationBuilder.cs) ================================================ FILE: projects/minimal-hosting/web-application-builder-change-environment/web-application-builder-change-environment.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-hosting/web-application-builder-logging-set-minimum-level/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; var builder = WebApplication.CreateBuilder(); builder.Logging.SetMinimumLevel(LogLevel.Trace); var app = builder.Build(); app.Logger.LogInformation("System is starting up"); app.Run(async (context) => { await context.Response.WriteAsync("Log Level Trace is " + app.Logger.IsEnabled(LogLevel.Trace)); }); await app.RunAsync(); ================================================ FILE: projects/minimal-hosting/web-application-builder-logging-set-minimum-level/README.md ================================================ # WebApplicationBuilder - Set logging minimum level Use `WebApplicationBuilder.Logging.SetMinimumLevel` to set the minimum level of logging via code. In this sample we set the minimum logging to Trace. You can read the implementation of ```WebApplication``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplication.cs) and its sibling ```WebApplicationBuilder``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplicationBuilder.cs) ================================================ FILE: projects/minimal-hosting/web-application-builder-logging-set-minimum-level/web-application-builder-logging-set-minimum-level.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-hosting/web-application-builder-mvc/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.DependencyInjection; WebApplicationBuilder builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapControllers(); await app.RunAsync(); public class HomeController { [HttpGet("/")] public string Index() => "Hello World"; } ================================================ FILE: projects/minimal-hosting/web-application-builder-mvc/README.md ================================================ # WebApplicationBuilder - MVC In most cases using ```WebApplication``` isn't enough because you need to configure additional services to be used in your system. This is where ```WebApplicationBuilder``` comes. It allows you to configure services and other properties. This example shows how to enable MVC using the minimalistic approach. ``` csharp using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.DependencyInjection; WebApplicationBuilder builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapControllers(); await app.RunAsync(); ``` In contrast this is how it is done using [Startup](/projects/mvc/hello-world/src/Program.cs) class (not all code included) ``` csharp public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); } public void Configure(IApplicationBuilder app) { app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapDefaultControllerRoute(); }); } } ``` You can read the implementation of ```WebApplication``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplication.cs) and its sibling ```WebApplicationBuilder``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplicationBuilder.cs) ================================================ FILE: projects/minimal-hosting/web-application-builder-mvc/web-application-builder-mvc.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-hosting/web-application-builder-razor-pages/Pages/Index.cshtml ================================================ @page Page Title

    Hello World Razor Pages with Minimal Hosting

    ================================================ FILE: projects/minimal-hosting/web-application-builder-razor-pages/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; WebApplicationBuilder builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); var app = builder.Build(); app.MapRazorPages(); await app.RunAsync(); ================================================ FILE: projects/minimal-hosting/web-application-builder-razor-pages/README.md ================================================ # WebApplicationBuilder - Razor Pages In most cases using ```WebApplication``` isn't enough because you need to configure additional services to be used in your system. This is where ```WebApplicationBuilder``` comes. It allows you to configure services and other properties. This example shows how to enable Razor Pages using the minimal hosting approach. ``` csharp using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; WebApplicationBuilder builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); var app = builder.Build(); app.MapRazorPages(); await app.RunAsync(); ``` In contrast this is how it is done using [Startup.cs](/projects/razor-pages/hello-world/src/Program.cs) (not all codes included). ``` csharp public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); } public void Configure(IApplicationBuilder app) { app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); }); } } ``` You can read the implementation of ```WebApplication``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplication.cs) and its sibling ```WebApplicationBuilder``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplicationBuilder.cs) ================================================ FILE: projects/minimal-hosting/web-application-builder-razor-pages/web-application-builder-razor-pages.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-hosting/web-application-configuration/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; var app = WebApplication.Create(); app.Run(async (context) => { await context.Response.WriteAsync("Check the configuration information on your console log. This configuration information should never be transmitted because they expose sensitive information."); app.Logger.LogInformation((app.Configuration as IConfigurationRoot).GetDebugView()); }); await app.RunAsync(); ================================================ FILE: projects/minimal-hosting/web-application-configuration/README.md ================================================ # WebApplication - list all the configuration information available This sample uses the brand new `WebApplication` hosting class. In this example we list all the information available in the `app.Configuration` property. You can read the implementation of ```WebApplication``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplication.cs) and its sibling ```WebApplicationBuilder``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplicationBuilder.cs) ================================================ FILE: projects/minimal-hosting/web-application-configuration/web-application-configuration.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-hosting/web-application-configuration-json/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Configuration; using System.Collections.Generic; using System.Linq; var app = WebApplication.Create(); // WARNING: THIS IS A TERRIBLE IDEA IN REAL LIFE. DO not expose your configuration file over the wire this way!. app.MapGet("/", (HttpContext context) => { var env = new List(); env.AddRange(app.Configuration.AsEnumerable().Select(x => new ConfigInfo(x.Key, x.Value))); return env; }); await app.RunAsync(); record ConfigInfo(string Key, string Value); ================================================ FILE: projects/minimal-hosting/web-application-configuration-json/README.md ================================================ # WebApplication - list all the configuration information available as JSON This sample uses the brand new `WebApplication` hosting class. In this example we list all the information available in the `app.Configuration` property and return it as JSON. ## WARNING Exposing your sensitive configuration information over the wire like this is a terrible idea. Do not do this in your application. This sample is just meant to demonstrate a technique. You can read the implementation of ```WebApplication``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplication.cs) and its sibling ```WebApplicationBuilder``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplicationBuilder.cs) ================================================ FILE: projects/minimal-hosting/web-application-configuration-json/web-application-configuration-json.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-hosting/web-application-lifetime-events/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; var app = WebApplication.Create(); app.Run(async (context) => { await context.Response.WriteAsync("Check the log to see when the log messages displayed in response to application lifetime event"); }); app.Lifetime.ApplicationStarted.Register(() => { app.Logger.LogWarning("Application started"); }); app.Lifetime.ApplicationStopping.Register(() => { app.Logger.LogWarning("Application stopping"); }); app.Lifetime.ApplicationStopped.Register(() => { app.Logger.LogWarning("Application stopped"); }); await app.RunAsync(); ================================================ FILE: projects/minimal-hosting/web-application-lifetime-events/README.md ================================================ # WebApplication - application lifetime events This sample uses the brand new `WebApplication` hosting class. In this example we learn how to respond to the application lifetime events available. You can read the implementation of ```WebApplication``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplication.cs) and its sibling ```WebApplicationBuilder``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplicationBuilder.cs) ================================================ FILE: projects/minimal-hosting/web-application-lifetime-events/web-application-lifetime-events.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-hosting/web-application-logging/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; using Microsoft.Extensions.DependencyInjection; var app = WebApplication.Create(); app.Logger.LogInformation("System is starting up"); app.Run(async (context) => { var logger = context.RequestServices.GetService(); if (logger is null) app.Logger.LogWarning("GetService is null."); await context.Response.WriteAsync("hello world"); }); await app.RunAsync(); ================================================ FILE: projects/minimal-hosting/web-application-logging/README.md ================================================ # WebApplication - Default Logging This sample uses the brand new `WebApplication` hosting class. `WebApplication.Logger` is available for use immediately without any further configuration. However the default logger is not available via DI. You can read the implementation of ```WebApplication``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplication.cs) and its sibling ```WebApplicationBuilder``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplicationBuilder.cs) ================================================ FILE: projects/minimal-hosting/web-application-logging/web-application-logging.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-hosting/web-application-middleware/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; var app = WebApplication.Create(); app.Use((context, next) => { context.Items["start"] = context.Request.Path.ToString() switch { "/about-us" => @"", _ => "" }; return next(context); }); app.Use((context, next) => { context.Items["end"] = ""; return next(context); }); app.MapGet("/", (HttpContext context) => { return Results.Text(context.Items["start"] + @"Hello world
    Go to about us" + context.Items["end"], "text/html"); }); app.MapGet("/about-us", (HttpContext context) => { return Results.Text(context.Items["start"] + "About Us" + context.Items["end"], "text/html"); }); app.Run(); ================================================ FILE: projects/minimal-hosting/web-application-middleware/README.md ================================================ # WebApplication - middleware This sample uses the brand new `WebApplication` hosting class. In this example we create two simple middleware that executes before the `app.MapGet`. ================================================ FILE: projects/minimal-hosting/web-application-middleware/web-application-middleware.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-hosting/web-application-middleware-pipeline/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Routing; var app = WebApplication.Create(); app.UseRouter(MapPipeline(app)); app.UseRouter(MapPipeline2(app)); IApplicationBuilder x = app; app.Run(); IRouter MapPipeline(IApplicationBuilder applicationBuilder) { var builder = new RouteBuilder(applicationBuilder); builder.MapMiddlewareGet("/", appBuilder => { appBuilder.Use((context, next ) => { context.Items["message"] = "hello world from items"; return next(context); }); appBuilder.Run(async context => { await context.Response.WriteAsync("" + context.Items["message"] + @"
    about us" + ""); }); }); return builder.Build(); } IRouter MapPipeline2(IApplicationBuilder applicationBuilder) { var builder = new RouteBuilder(applicationBuilder); builder.MapMiddlewareGet("/about-us", appBuilder => { appBuilder.Run(async context => { await context.Response.WriteAsync("About us"); }); }); return builder.Build(); } ================================================ FILE: projects/minimal-hosting/web-application-middleware-pipeline/README.md ================================================ # WebApplication - middleware pipeline This sample uses the brand new `WebApplication` hosting class. In this example we use `RouteBuilder` and `MapMiddlewareGet` to build two separate middleware pipelines than handle "/" and "/about-us" routes. ================================================ FILE: projects/minimal-hosting/web-application-middleware-pipeline/web-application-middleware-pipeline.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-hosting/web-application-middleware-pipeline-2/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Routing; var app = WebApplication.Create(); IEndpointRouteBuilder endpoints = app; IApplicationBuilder pipeline = endpoints.CreateApplicationBuilder(); pipeline.Use((context, next) => { context.Items["message"] = "Hello World"; return next(context); }) .Run(async context => { await context.Response.WriteAsync("" + context.Items["message"] + @"
    about us" + ""); }); IApplicationBuilder pipeline2 = endpoints.CreateApplicationBuilder(); pipeline2.Use((context, next) => { context.Items["message"] = "About Us"; return next(context); }) .Run(async context => { await context.Response.WriteAsync(context.Items["message"].ToString()); }); app.Map("/", pipeline.Build()); app.Map("/about-us", pipeline2.Build()); app.Run(); ================================================ FILE: projects/minimal-hosting/web-application-middleware-pipeline-2/README.md ================================================ # WebApplication - middleware pipeline 2 This sample uses the brand new `WebApplication` hosting class. In this example we use `EndpointRouteBuilderExtensions.Map` and `IEndPointRouteBuilder.CreateApplicationBuilder` to build two separate middleware pipelines than handle "/" and "/about-us" routes. ================================================ FILE: projects/minimal-hosting/web-application-middleware-pipeline-2/web-application-middleware-pipeline-2.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-hosting/web-application-options-change-content-root-path/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Hosting; using System.IO; using System.Reflection; var options = new WebApplicationOptions { // Here we are trying to get the path to the root of the project. This is just useful for this sample;it's not really applicable for general purpose use. ContentRootPath = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location.Substring(0, Assembly.GetEntryAssembly().Location.IndexOf("bin\\"))), "root") }; var builder = WebApplication.CreateBuilder(options); var app = builder.Build(); app.UseStaticFiles(); app.Run(async (context) => { await context.Response.WriteAsync(@""); }); await app.RunAsync(); ================================================ FILE: projects/minimal-hosting/web-application-options-change-content-root-path/README.md ================================================ # WebApplicationOptions - change the default content root path Use ```WebApplicationOptions``` to configure initial values of the ```WebApplication``` and ```WebApplicationBuilder``` objects. In this example we will change the default content root path to 'root' folder inside this sample application project directory. ================================================ FILE: projects/minimal-hosting/web-application-options-change-content-root-path/web-application-options-change-content-root-path.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-hosting/web-application-options-set-environment/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Hosting; var options = new WebApplicationOptions { EnvironmentName = Environments.Development }; var builder = WebApplication.CreateBuilder(options); var app = builder.Build(); app.Run(async (context) => { await context.Response.WriteAsync($"Environment {options.EnvironmentName}"); }); await app.RunAsync(); ================================================ FILE: projects/minimal-hosting/web-application-options-set-environment/README.md ================================================ # WebApplicationOptions - set environment Use ```WebApplicationOptions``` to configure initial values of the ```WebApplicationBuilder``` object. In this example we change the environment to Development. ================================================ FILE: projects/minimal-hosting/web-application-options-set-environment/web-application-options-set-environment.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-hosting/web-application-server-aspnetcore-urls/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; var app = WebApplication.Create(args); app.Run(async (context) => { foreach(var u in app.Urls) await context.Response.WriteAsync(u + "\n"); }); app.Run(); ================================================ FILE: projects/minimal-hosting/web-application-server-aspnetcore-urls/README.md ================================================ # WebApplication - Set urls and ports via ASPNETCORE_URLS environment variable This sample uses the brand new `WebApplication` hosting class. This sample shows how to set the Kestrel web server to listen to a specific url and port via `ASPNETCORE_URLS` environment variable. ## How to set Environment Variable ASPNETCORE_URLS on Windows using PowerShell `dir env:` will show all environment variables. `$env:ASPNETCORE_URLS = "http://localhost:3000;http://localhost:5000"` will set the environment variable `ASPNETCORE_URLS` to `http://localhost:3000;http://localhost:5000`. ================================================ FILE: projects/minimal-hosting/web-application-server-aspnetcore-urls/web-application-server-aspnetcore-urls.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-hosting/web-application-server-default-urls/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; var app = WebApplication.Create(); app.Run(async (context) => { foreach(var u in app.Urls) await context.Response.WriteAsync(u + "\n"); }); await app.RunAsync(); ================================================ FILE: projects/minimal-hosting/web-application-server-default-urls/README.md ================================================ # WebApplication - Default Urls This sample uses the brand new `WebApplication` hosting class. In this example we shows the urls that Kestrel web server by default is listening to (`WebApplication.Urls`). You can read the implementation of ```WebApplication``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplication.cs) and its sibling ```WebApplicationBuilder``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplicationBuilder.cs) ================================================ FILE: projects/minimal-hosting/web-application-server-default-urls/web-application-server-default-urls.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-hosting/web-application-server-listen-all/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; var app = WebApplication.Create(args); //app.Urls.Add("http://*:3000"); //app.Urls.Add("http://+:3000"); //You can also use this. They are equivalent: Bind to all IP4 and IP6 addresses. app.Urls.Add("http://0.0.0.0:3000"); //You can also use this. This means bind to all IP4 addresses app.Run(async (context) => { foreach(var u in app.Urls) await context.Response.WriteAsync(u + "\n"); }); await app.RunAsync(); ================================================ FILE: projects/minimal-hosting/web-application-server-listen-all/README.md ================================================ # WebApplication - Listen to all interfaces (IP4 and IP6) on specific port. This sample uses the brand new `WebApplication` hosting class. In this example we set the Kestrel web server to listen to all interfaces on a specific port. You can open the page at `http://localhost:3000` or any host/ip on your machine at port 3000. ================================================ FILE: projects/minimal-hosting/web-application-server-listen-all/web-application-server-listen-all.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-hosting/web-application-server-multiple-urls-ports/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; var app = WebApplication.Create(args); app.Urls.Add("http://localhost:3000"); app.Urls.Add("http://localhost:5000"); app.Run(async (context) => { foreach(var u in app.Urls) await context.Response.WriteAsync(u + "\n"); }); await app.RunAsync(); ================================================ FILE: projects/minimal-hosting/web-application-server-multiple-urls-ports/README.md ================================================ # WebApplication - Listen to multiple ports. This sample uses the brand new `WebApplication` hosting class. In this example we set the Kestrel web server to listen to multiple urls and ports. You can open the page at `http://localhost:3000` or `http://localhost:5000`. ================================================ FILE: projects/minimal-hosting/web-application-server-multiple-urls-ports/web-application-server-multiple-urls-ports.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-hosting/web-application-server-port-env-variable/Program.cs ================================================ using System; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; var app = WebApplication.Create(args); var port = Environment.GetEnvironmentVariable("PORT") ?? "3000"; app.Run(async (context) => { foreach(var u in app.Urls) await context.Response.WriteAsync(u + "\n"); }); app.Run($"http://localhost:{port}"); ================================================ FILE: projects/minimal-hosting/web-application-server-port-env-variable/README.md ================================================ # WebApplication - Reading the port from environment This sample uses the brand new `WebApplication` hosting class. In this example we set Kestrel port from an environment variable `PORT`. You can open the page at `http://localhost:3000` or `http://localhost:5000` if you have set up the environment variable PORT to 5000. ## How to set Environment Variable PORT on Windows using PowerShell `dir env:` will show all environment variables. `$env:PORT = 5000` will set the environment variable `PORT` to `5000`. ================================================ FILE: projects/minimal-hosting/web-application-server-port-env-variable/web-application-server-port-env-variable.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-hosting/web-application-server-specific-url-port/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; var app = WebApplication.Create(); app.Run(async (context) => { foreach(var u in app.Urls) await context.Response.WriteAsync(u + "\n"); }); await app.RunAsync("http://localhost:3000"); ================================================ FILE: projects/minimal-hosting/web-application-server-specific-url-port/README.md ================================================ # WebApplication - Listen to a specific url and port This sample uses the brand new `WebApplication` hosting class. In this example we set the Kestrel web server to listen to a specific url and port. You can open the page at `http://localhost:3000`. You can read the implementation of ```WebApplication``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplication.cs) and its sibling ```WebApplicationBuilder``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplicationBuilder.cs) ================================================ FILE: projects/minimal-hosting/web-application-server-specific-url-port/web-application-server-specific-url-port.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-hosting/web-application-use-file-server/Program.cs ================================================ using Microsoft.AspNetCore.Builder; var app = WebApplication.Create(); app.UseFileServer(); await app.RunAsync(); ================================================ FILE: projects/minimal-hosting/web-application-use-file-server/README.md ================================================ # WebApplication - UseFileServer() This sample uses the brand new `WebApplication` hosting class. ```app.UseFileServer();``` enables Kestrel to server static files and automatically look for the following files * default.htm * default.html * index.htm * index.html at `wwwroot`. You can read the implementation of ```WebApplication``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplication.cs) and its sibling ```WebApplicationBuilder``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplicationBuilder.cs) ================================================ FILE: projects/minimal-hosting/web-application-use-file-server/web-application-use-file-server.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-hosting/web-application-use-file-server/wwwroot/index.html ================================================ Hello Kitty ================================================ FILE: projects/minimal-hosting/web-application-use-web-sockets/Program.cs ================================================ using System; using System.Net.WebSockets; using System.Text; using System.Threading; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; var app = WebApplication.Create(args); app.UseWebSockets(); app.Use(async (context, next) => { if (!context.WebSockets.IsWebSocketRequest) { // Not a web socket request await next(); return; } var socket = await context.WebSockets.AcceptWebSocketAsync(); var bufferSize = new byte[1024 * 4]; var receiveBuffer = new ArraySegment(bufferSize); var result = await socket.ReceiveAsync(receiveBuffer, CancellationToken.None); while (!result.CloseStatus.HasValue) { if (result.MessageType == WebSocketMessageType.Text) { var clientRequest = Encoding.UTF8.GetString(receiveBuffer.Array, receiveBuffer.Offset, result.Count); var serverReply = Encoding.UTF8.GetBytes("Echo " + clientRequest); var replyBuffer = new ArraySegment(serverReply); await socket.SendAsync(replyBuffer, WebSocketMessageType.Text, true, CancellationToken.None); receiveBuffer = new ArraySegment(bufferSize); result = await socket.ReceiveAsync(receiveBuffer, CancellationToken.None); } } }); app.Run(async context => { context.Response.Headers.Append("content-type", "text/html"); await context.Response.WriteAsync(@"

    Web Socket


    "); }); app.Run(); ================================================ FILE: projects/minimal-hosting/web-application-use-web-sockets/README.md ================================================ # WebApplication - UseWebSockets This sample uses the brand new `WebApplication` hosting class. This sample shows how to create a simple echo server using WebSockets. ================================================ FILE: projects/minimal-hosting/web-application-use-web-sockets/web-application-use-web-sockets.csproj ================================================ net10.0 true ================================================ FILE: projects/minimal-hosting/web-application-welcome-page/Program.cs ================================================ using Microsoft.AspNetCore.Builder; WebApplication app = WebApplication.Create(); app.UseWelcomePage(); await app.RunAsync(); ================================================ FILE: projects/minimal-hosting/web-application-welcome-page/README.md ================================================ # WebApplication - Welcome Page This sample uses the brand new `WebApplication` hosting class. This simplifies configuring an ASP.NET Core application by a mile. `app.UseWelcomePage();` shows standard ASP.NET Core Welcome Page. You can read the implementation of ```WebApplication``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplication.cs) and its sibling ```WebApplicationBuilder``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplicationBuilder.cs) ================================================ FILE: projects/minimal-hosting/web-application-welcome-page/web-application-welcome-page.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/README.md ================================================ # MVC (50) | Sections | | | -------------------------------------------------------------- | --- | | [MVC - Localization](/projects/mvc/localization) | 10 | | [MVC - Routing](/projects/mvc/routing) | 9 | | [MVC - Razor Class Library](/projects/mvc/razor-class-library) | 3 | | [MVC - Tag Helpers](/projects/mvc/tag-helper) | 7 | | [MVC - View Component](/projects/mvc/view-component) | 4 | | | 33 | * [Hello World](/projects/mvc/hello-world) A "hello world" MVC app. * [Infer dependency from action parameter](mvc-infer-dependency-from-action) There is no need for `[FromServices]` attribute anymore to inject a dependency to your action method. ## Authentication/Authorization (1) * [JWT](/projects/mvc/jwt) Show how to generate and decode [JSON Web Tokens](https://jwt.io/). ## API (2) * [Use Microsoft.AspNetCore.Mvc.ProblemDetails](/projects/mvc/api-problem-details) Use `Microsoft.AspNetCore.Mvc.ProblemDetails` as part of your Web API error reply. It is implementing [RFC 7807](https://tools.ietf.org/html/rfc7807). It will make life easier for everybody. * [Extends Microsoft.AspNetCore.Mvc.ProblemDetails](/projects/mvc/api-problem-details-2) Extend `Microsoft.AspNetCore.Mvc.ProblemDetails` to make it easier for day to day use. It will adjust what kind of information it shows based on your development environment. ## Model Binding (2) We are exploring everything related to model binding in this section. * [Model binding using a class and FromQuery attribute](/projects/mvc/model-binding-from-query) Use `[FromQuery]` attribute to have MVC put all the query string values nicely in a class instead of using primitives e.g. `int userId`. * [Model binding using a class and FromRoute attribute](/projects/mvc/model-binding-from-route) Use `[FromRoute]` attribute to have MVC put all the route values nicely in a class instead of using primitives e.g. `int userId`. ## Action Results (3) We are exploring various that an Action returns. * [FileStreamResult](/projects/mvc/result-filestream) An example on how to return a file to the browser when you have a stream available. * [PhysicalFileResult](/projects/mvc/result-physicalfile) An example on how to return a file to the browser when you have a path to a file on disk. * [JsonResult](/projects/mvc/result-json) Makes it easy to returns JSON content from an action. ## Formatters (1) * [Returning XML Response](/projects/mvc/mvc-output-xml) Return XML response using `Microsoft.AspNetCore.Mvc.Formatters.Xml`. ## Swagger (API Documentation) (2) * [Using NSwag](/projects/mvc/nswag) Generate automatic documentation for your Web API using .NET 10 built-in OpenAPI (previously used NSwag). * [Customizing NSwag](/projects/mvc/nswag-2) Use attribute such as `OpenApiTag` to organize your API or `OpenApiIgnore` to hide an API from the definition (using `[ApiExplorerSettings(IgnoreApi = true)]` also works). Uses NSwag as alternative to built-in OpenAPI. ## Syndication Output Formatter (1) We are building a RSS/ATOM Output formatter starting from the very basic. * [Output Formatter Syndication](/projects/mvc/output-formatter-syndication) This is a very rudimentary RSS output formatter. It's valid but it does not do much other than providing RSS items. ## Newtonsoft.Json (1) * [Using Newtonsoft.Json](/projects/mvc/newtonsoft-json) Use `Microsoft.AspNetCore.Mvc.NewtonsoftJson` to have MVC use `Newtonsoft.Json` instead of `System.Text.Json`. dotnet8 ================================================ FILE: projects/mvc/api/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllers(); var app = builder.Build(); app.MapControllers(); app.Run(); [Route("api")] public class ToDoItemsController : Controller { [HttpGet("[Action]")] public IActionResult AnEndpoint() { return new ObjectResult("This string is returned with this controller endpoint"); } } ================================================ FILE: projects/mvc/api/README.md ================================================ # A sample MVC API in .NET 6 Open to `http://localhost:5000/api/anendpoint` ================================================ FILE: projects/mvc/api/api.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/api-problem-details/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapControllers(); app.Run(); [ApiController] public class HomeController : Controller { [HttpGet("")] public ActionResult Index() { try { throw new ApplicationException("Catch this one"); } catch (Exception ex) { return new ObjectResult( new ProblemDetails { Title = "Use Microsoft.AspNetCore.Mvc.ProblemDetails to describe error in your web APIs", Detail = "It is implemeting this RFC https://tools.ietf.org/html/rfc7807 and can be easily extended.", Status = Microsoft.AspNetCore.Http.StatusCodes.Status500InternalServerError }); } } } ================================================ FILE: projects/mvc/api-problem-details/api-problem-details.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/api-problem-details-2/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; using System.Net; using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.AspNetCore.Http.Extensions; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.UseRouting(); app.MapControllers(); app.Run(); [ApiController] public class HomeController : Controller { [HttpGet("")] public ActionResult Index() { try { throw new ApplicationException("Catch this one"); } catch (Exception ex) { return this.ApiProblemDetails(HttpStatusCode.InternalServerError, exception: ex); } } } public class ApiProblemsDetails : ProblemDetails { public string RequestPath { get; set; } public object RequestPayload { get; set; } public IReadOnlyDictionary ValidationMessages { get; set; } = new Dictionary(); public string StackTrace { get; set; } } public static class ControllerExtensions { public static ActionResult ApiProblemDetails(this Controller self, HttpStatusCode statusCode, string title = "", string detail = "", IReadOnlyDictionary validationMessages = null, ModelStateDictionary modelState = null, Exception exception = null, object request = null) { var details = new ApiProblemsDetails { Title = title, Detail = detail, RequestPath = self.Request.GetDisplayUrl(), Status = (int)statusCode }; if (validationMessages != null) details.ValidationMessages = validationMessages; if (modelState != null) { var modelStateMessages = modelState .Where(x => x.Value.Errors.Count > 0) .ToDictionary( kvp => kvp.Key, kvp => string.Join(",", kvp.Value.Errors.Select(e => e.ErrorMessage).ToArray()) ); if (details.ValidationMessages == null) details.ValidationMessages = modelStateMessages; else details.ValidationMessages = details.ValidationMessages.Union(modelStateMessages).ToDictionary(x => x.Key, x => x.Value); } var host = self.HttpContext.RequestServices.GetService(typeof(IWebHostEnvironment)) as IWebHostEnvironment; if (exception != null && host.EnvironmentName == Environments.Development) { if (string.IsNullOrWhiteSpace(details.Detail)) details.Detail = "Exception Message: " + exception.Message; else details.Detail += "\n\n Exception Message: " + exception.Message; details.StackTrace = exception.StackTrace; } if (request != null) details.RequestPayload = request; return self.StatusCode((int)statusCode, details); } } ================================================ FILE: projects/mvc/api-problem-details-2/api-problem-details-2.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/api-versioning/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); builder.Services.AddApiVersioning(o => o.ReportApiVersions = true); var app = builder.Build(); app.MapDefaultControllerRoute(); app.Run(); [ApiVersion("1.0")] [Route("api/v{version:apiVersion}/[controller]")] [ApiController] public class HelloWorldController : ControllerBase { [HttpGet] public IActionResult Get(ApiVersion apiVersion) => Ok(new { Controller = GetType().Name, Version = apiVersion.ToString() }); } public class HomeController : Controller { public ActionResult Index() { return new ContentResult { Content = @" ", ContentType = "text/html" }; } } ================================================ FILE: projects/mvc/api-versioning/api-versioning.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/build.bat ================================================ dotnet build api dotnet build api-problem-details dotnet build api-problem-details-2 dotnet build api-versioning dotnet build hello-world dotnet build jwt dotnet build localization\mvc-localization-1 dotnet build localization\mvc-localization-2 dotnet build localization\mvc-localization-3 dotnet build localization\mvc-localization-4 dotnet build localization\mvc-localization-5 dotnet build localization\mvc-localization-6 dotnet build localization\mvc-localization-7 dotnet build localization\mvc-localization-8 dotnet build localization\mvc-localization-9 dotnet build localization\mvc-localization-10 dotnet build model-binding-from-query dotnet build model-binding-from-route dotnet build mvc-infer-dependency-from-action dotnet build mvc-output-xml dotnet build newtonsoft-json dotnet build nswag dotnet build nswag-2 dotnet build output-formatter-syndication dotnet build razor-class-library\razor-class-library-1 dotnet build razor-class-library\razor-class-library-with-controllers dotnet build razor-class-library\razor-class-library-with-static-files dotnet build result-filestream dotnet build result-json dotnet build result-physicalfile dotnet build routing\routing-1 dotnet build routing\routing-2 dotnet build routing\routing-3 dotnet build routing\routing-4 dotnet build routing\routing-5 dotnet build routing\routing-6 dotnet build routing\routing-7 dotnet build routing\routing-8 dotnet build routing\routing-9 dotnet build tag-helper\tag-helper-1 dotnet build tag-helper\tag-helper-2 dotnet build tag-helper\tag-helper-3 dotnet build tag-helper\tag-helper-4 dotnet build tag-helper\tag-helper-5 dotnet build tag-helper\tag-helper-img dotnet build tag-helper\tag-helper-link dotnet build view-component\view-component-1 dotnet build view-component\view-component-2 dotnet build view-component\view-component-3 dotnet build view-component\view-component-4 ================================================ FILE: projects/mvc/build.sh ================================================ #!/bin/bash dotnet build api dotnet build api-problem-details dotnet build api-problem-details-2 dotnet build api-versioning dotnet build hello-world dotnet build jwt dotnet build localization/mvc-localization-1 dotnet build localization/mvc-localization-2 dotnet build localization/mvc-localization-3 dotnet build localization/mvc-localization-4 dotnet build localization/mvc-localization-5 dotnet build localization/mvc-localization-6 dotnet build localization/mvc-localization-7 dotnet build localization/mvc-localization-8 dotnet build localization/mvc-localization-9 dotnet build localization/mvc-localization-10 dotnet build model-binding-from-query dotnet build model-binding-from-route dotnet build mvc-infer-dependency-from-action dotnet build mvc-output-xml dotnet build newtonsoft-json dotnet build nswag dotnet build nswag-2 dotnet build output-formatter-syndication dotnet build razor-class-library/razor-class-library-1 dotnet build razor-class-library/razor-class-library-with-controllers dotnet build razor-class-library/razor-class-library-with-static-files dotnet build result-filestream dotnet build result-json dotnet build result-physicalfile dotnet build routing/routing-1 dotnet build routing/routing-2 dotnet build routing/routing-3 dotnet build routing/routing-4 dotnet build routing/routing-5 dotnet build routing/routing-6 dotnet build routing/routing-7 dotnet build routing/routing-8 dotnet build routing/routing-9 dotnet build tag-helper/tag-helper-1 dotnet build tag-helper/tag-helper-2 dotnet build tag-helper/tag-helper-3 dotnet build tag-helper/tag-helper-4 dotnet build tag-helper/tag-helper-5 dotnet build tag-helper/tag-helper-img dotnet build tag-helper/tag-helper-link dotnet build view-component/view-component-1 dotnet build view-component/view-component-2 dotnet build view-component/view-component-3 dotnet build view-component/view-component-4 ================================================ FILE: projects/mvc/hello-world/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapDefaultControllerRoute(); app.Run(); public class HomeController : Controller { public ActionResult Index() { return new ContentResult { Content = "Hello World", ContentType = "text/html" }; } } ================================================ FILE: projects/mvc/hello-world/hello-world.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/jwt/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#ebb4de", "activityBar.background": "#ebb4de", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#687e22", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#ebb4de", "statusBar.background": "#e18bcc", "statusBar.debuggingBackground": "#8be1a0", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#d762ba", "statusBarItem.remoteBackground": "#e18bcc", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#e18bcc", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#e18bcc99", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#e18bcc" } ================================================ FILE: projects/mvc/jwt/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; using Microsoft.IdentityModel.Tokens; using Microsoft.Extensions.Options; using System.Text; using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; var builder = WebApplication.CreateBuilder(); builder.Services.Configure(options => { options.Issuer = "SimpleServer"; options.Audience = "http://localhost"; options.SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(Encoding.ASCII.GetBytes("12345678901234567890")), SecurityAlgorithms.HmacSha256); }); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapDefaultControllerRoute(); app.Run(); public class JwtIssuerOptions { public string Issuer { get; set; } public string Audience { get; set; } public SigningCredentials SigningCredentials { get; set; } } public class HomeController : Controller { readonly IOptions _options; public HomeController(IOptions options) { _options = options; } [HttpGet] public ActionResult Index() { return new ContentResult { Content = $@"
    ", ContentType = "text/html" }; } [HttpPost] public ActionResult Jwt() { var claims = new[] { new Claim(ClaimTypes.Name, "Anne"), new Claim(ClaimTypes.Role, "Admin") }; var option = _options.Value; var token = new JwtSecurityToken ( issuer: option.Issuer, audience: option.Audience, claims: claims, expires: DateTime.Now.AddMinutes(60), signingCredentials: option.SigningCredentials ); var outputToken = new JwtSecurityTokenHandler().WriteToken(token); var content = $@" Content: {token}

    Encoded Token: {outputToken}
    Copy the encoded token here to get the content of the token back
    "; return new ContentResult { Content = content, ContentType = "text/html" }; } [HttpPost] public ActionResult DecodeJwt([FromForm] string token) { var jwt = new JwtSecurityToken(token); var content = $@" Content: {jwt} "; return new ContentResult { Content = content, ContentType = "text/html" }; } } ================================================ FILE: projects/mvc/jwt/jwt.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/jwt/jwt.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "jwt", "jwt.csproj", "{A0F8E38E-F6EE-4A24-97E5-3429AF05BF8A}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {A0F8E38E-F6EE-4A24-97E5-3429AF05BF8A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A0F8E38E-F6EE-4A24-97E5-3429AF05BF8A}.Debug|Any CPU.Build.0 = Debug|Any CPU {A0F8E38E-F6EE-4A24-97E5-3429AF05BF8A}.Release|Any CPU.ActiveCfg = Release|Any CPU {A0F8E38E-F6EE-4A24-97E5-3429AF05BF8A}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {D54F338C-7BBA-45F9-ACB5-5F12D3F1BF9C} EndGlobalSection EndGlobal ================================================ FILE: projects/mvc/localization/README.md ================================================ ## Localization (10) We are exploring all the nitty gritty of localization with MVC here. * [MVC Localization - 1](/projects/mvc/localization/mvc-localization-1) Demonstrate the sample of naming resource file using the "." dot naming convention. In this case, our Assembly Name differs from our namespace so we use full type name in our resource. This allows `IStringLocalizer<>` to be used in Controllers. * [MVC Localization - 2](/projects/mvc/localization/mvc-localization-2) This sample is identical as previous example except that we are using the path naming convention. * [MVC Localization - 3](/projects/mvc/localization/mvc-localization-3) Demonstrate an easy way to use shared resources. The class name, `Global`, is just a name. It can be `Common` or `CommonResources`, etc. It does not matter. * [MVC Localization - 4](/projects/mvc/localization/mvc-localization-4) Similar to `MVC Localization - 3` except that now the assembly name and namespace share the same name. This is in contrast to `MVC Localization - 1` and `MVC Localization`. * [MVC Localization - 5](/projects/mvc/localization/mvc-localization-5) Use shared resource on View. * [MVC Localization - 6](/projects/mvc/localization/mvc-localization-6) If you keep wondering why your default request language doesn't work, this example is for you. This example demonstrates on how to ignore browser language preference by removing `AcceptLanguageHeaderRequestCultureProvider` and forcing your default language. This [article](https://dotnetcoretutorials.com/2017/06/22/request-culture-asp-net-core/) has a useful explanation on this provider. * [MVC Localization - 7](/projects/mvc/localization/mvc-localization-7) This sample shows how to use localization resources located in a separate project. Notice how the namespace correspondents to the folder name at the resource project. * [MVC Localization - 8](/projects/mvc/localization/mvc-localization-8) This sample demonstrates the usage of `AcceptLanguageHeaderRequestCultureProvider` and `Accept-Language` HTTP header. * [MVC Localization - 9](/projects/mvc/localization/mvc-localization-9) This sample demonstrates the situation of `cultural fallback` behaviour - `Starting from the requested culture, if not found, it reverts to the parent culture of that culture.`[doc](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-3.1#culture-fallback-behavior). * [MVC Localization - 10](/projects/mvc/localization/mvc-localization-10) This sample uses `CustomRequestCultureProvider` to provide fine localization based on the first part of a url segment e.g. /en/my-page, /fr. dotnet6 ================================================ FILE: projects/mvc/localization/mvc-localization-1/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-localization.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart", "launchBrowser": { "enabled": true, "args": "${auto-detect-url}", "windows": { "command": "cmd.exe", "args": "/C start ${auto-detect-url}" }, "osx": { "command": "open" }, "linux": { "command": "xdg-open" } }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ,] } ================================================ FILE: projects/mvc/localization/mvc-localization-1/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/mvc-localization.csproj" ], "problemMatcher": "$msCompile" } ] } ================================================ FILE: projects/mvc/localization/mvc-localization-1/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; using System.Globalization; using Microsoft.AspNetCore.Localization; using Microsoft.Extensions.Localization; var builder = WebApplication.CreateBuilder(); builder.Services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; }); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.UseStaticFiles(); var supportedCultures = new List { new CultureInfo("fr-FR") }; var options = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("fr-FR"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; app.UseRequestLocalization(options); app.MapDefaultControllerRoute(); app.Run(); namespace MvcLocalization { public class HomeController : Controller { readonly IStringLocalizer _local; public HomeController(IStringLocalizer local) { _local = local; } public ActionResult Index() { var culture = this.HttpContext.Features.Get(); return new ContentResult { Content = $@"

    MVC Localization Resource File Naming - Dot Naming Convention

    Resources are named for the full type name of their class minus the assembly name. For example, a French resource in a project whose main assembly is LocalizationWebsite.Web.dll for the class LocalizationWebsite.Web.Startup would be named Startup.fr.resx. A resource for the class LocalizationWebsite.Web.Controllers.HomeController would be named Controllers.HomeController.fr.resx. If your targeted class's namespace isn't the same as the assembly name you will need the full type name. For example, in the sample project a resource for the type ExtraNamespace.Tools would be named ExtraNamespace.Tools.fr.resx. Doc

    In this sample, the assembly name is ""mvc-localization"" however the namespace used is ""MvcLocalization"". Since the namespace differs from the Assembly Name, we use full type path.

    Culture requested {culture.RequestCulture.Culture}
    UI Culture requested {culture.RequestCulture.UICulture}
    Text: {_local["Hello"]}
    Text: {_local["Goodbye"]}", ContentType = "text/html" }; } } } ================================================ FILE: projects/mvc/localization/mvc-localization-1/Resources/MvcLocalization.HomeController.fr.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Au Revoir Bonjour Oui Non ================================================ FILE: projects/mvc/localization/mvc-localization-1/mvc-localization.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/localization/mvc-localization-10/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; using System.Globalization; using Microsoft.AspNetCore.Localization; using Microsoft.Extensions.Localization; var builder = WebApplication.CreateBuilder(); builder.Services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; }); builder.Services.AddControllersWithViews(); builder.Services.Configure(options => { options.RequestCultureProviders.Clear(); var supportedCultures = new List { new CultureInfo("fr"), new CultureInfo("en-US"), new CultureInfo("en"), }; options.DefaultRequestCulture = new RequestCulture("fr"); options.SupportedCultures = supportedCultures; options.SupportedUICultures = supportedCultures; options.AddInitialRequestCultureProvider(new CustomRequestCultureProvider(context => { var defaultCulture = options.DefaultRequestCulture.Culture; var segments = context.Request.Path.Value.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries); if (segments.Length > 0) { foreach (var c in options.SupportedCultures) { if (c.Name.Equals(segments[0], StringComparison.InvariantCulture)) return Task.FromResult(new ProviderCultureResult(c.Name)); } } return Task.FromResult(new ProviderCultureResult(defaultCulture.Name)); })); }); var app = builder.Build(); app.UseStaticFiles(); app.UseRequestLocalization(); app.MapDefaultControllerRoute(); app.Run(); namespace MvcLocalization { // Leave this class empty public class Global { } [Route("api")] [Produces("application/json")] [ApiController] public class ApiController : ControllerBase { IStringLocalizer _global; public ApiController(IStringLocalizer global) { _global = global; } [HttpGet("{word}")] public ActionResult Get(string word) { return Ok(new { Greeting = _global[word].ToString() }); } } public class HomeController : Controller { [Route("{*url}")] public ActionResult Index() { return View(); } } } ================================================ FILE: projects/mvc/localization/mvc-localization-10/README.md ================================================ # Custom Culture Provider This sample uses `CustomRequestCultureProvider` to provide fine localization based on the first part of a url segment e.g. /en/my-page, /fr. ================================================ FILE: projects/mvc/localization/mvc-localization-10/Resources/MvcLocalization/Global.en-US.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 So long ================================================ FILE: projects/mvc/localization/mvc-localization-10/Resources/MvcLocalization/Global.en.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 See you again How do you do ================================================ FILE: projects/mvc/localization/mvc-localization-10/Resources/MvcLocalization/Global.fr.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Au Revoir Bonjour ================================================ FILE: projects/mvc/localization/mvc-localization-10/Views/Home/Index.cshtml ================================================ @using Microsoft.Extensions.Localization @using Microsoft.AspNetCore.Localization @inject IStringLocalizer Local @{ var culture = Context.Features.Get(); }

    Custom Culture Provider

    As you can see here we are providing culture based on the first segment of the url. If the first segment doesn't exist (e.g. /) or doesn't match our list of supported culture, the default culture is returned. The default culture in this case is 'fr'.

    Key Value
    Hello @Local["Hello"]
    Goodbye @Local["Goodbye"]
    ================================================ FILE: projects/mvc/localization/mvc-localization-10/mvc-localization-10.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/localization/mvc-localization-2/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-localization-2.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart", "launchBrowser": { "enabled": true, "args": "${auto-detect-url}", "windows": { "command": "cmd.exe", "args": "/C start ${auto-detect-url}" }, "osx": { "command": "open" }, "linux": { "command": "xdg-open" } }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ,] } ================================================ FILE: projects/mvc/localization/mvc-localization-2/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/mvc-localization-2.csproj" ], "problemMatcher": "$msCompile" } ] } ================================================ FILE: projects/mvc/localization/mvc-localization-2/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; using System.Globalization; using Microsoft.AspNetCore.Localization; using Microsoft.Extensions.Localization; var builder = WebApplication.CreateBuilder(); builder.Services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; }); builder.Services.AddControllersWithViews(); var app = builder.Build(); var supportedCultures = new List { new CultureInfo("fr-FR") }; var options = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("fr-FR"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; app.UseRequestLocalization(options); app.MapDefaultControllerRoute(); app.Run(); namespace MvcLocalization { public class HomeController : Controller { readonly IStringLocalizer _local; public HomeController(IStringLocalizer local) { _local = local; } public ActionResult Index() { var culture = this.HttpContext.Features.Get(); return new ContentResult { Content = $@"

    MVC Localization Resource File Naming - Path Naming Convention

    Resources are named for the full type name of their class minus the assembly name. For example, a French resource in a project whose main assembly is LocalizationWebsite.Web.dll for the class LocalizationWebsite.Web.Startup would be named Startup.fr.resx. A resource for the class LocalizationWebsite.Web.Controllers.HomeController would be named Controllers.HomeController.fr.resx. If your targeted class's namespace isn't the same as the assembly name you will need the full type name. For example, in the sample project a resource for the type ExtraNamespace.Tools would be named ExtraNamespace.Tools.fr.resx. Doc

    In this sample, the assembly name is ""mvc-localization"" however the namespace used is ""MvcLocalization"". Since the namespace differs from the Assembly Name, we use full type path.

    Culture requested {culture.RequestCulture.Culture}
    UI Culture requested {culture.RequestCulture.UICulture}
    Text: {_local["Hello"]}
    Text: {_local["Goodbye"]}", ContentType = "text/html" }; } } } ================================================ FILE: projects/mvc/localization/mvc-localization-2/Resources/MvcLocalization/HomeController.fr.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Au Revoir Bonjour Mon Ami Oui Non ================================================ FILE: projects/mvc/localization/mvc-localization-2/mvc-localization-2.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/localization/mvc-localization-3/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-localization-2.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart", "launchBrowser": { "enabled": true, "args": "${auto-detect-url}", "windows": { "command": "cmd.exe", "args": "/C start ${auto-detect-url}" }, "osx": { "command": "open" }, "linux": { "command": "xdg-open" } }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ,] } ================================================ FILE: projects/mvc/localization/mvc-localization-3/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/mvc-localization-2.csproj" ], "problemMatcher": "$msCompile" } ] } ================================================ FILE: projects/mvc/localization/mvc-localization-3/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; using System.Globalization; using Microsoft.AspNetCore.Localization; using Microsoft.Extensions.Localization; var builder = WebApplication.CreateBuilder(); builder.Services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; }); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.UseStaticFiles(); var supportedCultures = new List { new CultureInfo("fr-FR") }; var options = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("fr-FR"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; app.UseRequestLocalization(options); app.MapDefaultControllerRoute(); app.Run(); namespace MvcLocalization { // Leave this class empty public class Global { } public class HomeController : Controller { readonly IStringLocalizer _local; public HomeController(IStringLocalizer local) { _local = local; } public ActionResult Index() { var culture = this.HttpContext.Features.Get(); return new ContentResult { Content = $@"

    MVC Shared Resources - Home

    About

    Culture requested {culture.RequestCulture.Culture}
    UI Culture requested {culture.RequestCulture.UICulture}
    Text: {_local["Hello"]}
    Text: {_local["Goodbye"]}", ContentType = "text/html" }; } } public class AboutController : Controller { readonly IStringLocalizer _local; public AboutController(IStringLocalizer local) { _local = local; } public ActionResult Index() { var culture = this.HttpContext.Features.Get(); return new ContentResult { Content = $@"

    MVC Shared Resources - About

    Home

    Culture requested {culture.RequestCulture.Culture}
    UI Culture requested {culture.RequestCulture.UICulture}
    Text: {_local["Hello"]}
    Text: {_local["Goodbye"]}", ContentType = "text/html" }; } } } ================================================ FILE: projects/mvc/localization/mvc-localization-3/Resources/MvcLocalization/Global.fr.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Au Revoir Bonjour Oui Non ================================================ FILE: projects/mvc/localization/mvc-localization-3/mvc-localization-3.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/localization/mvc-localization-4/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-localization-3.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart", "launchBrowser": { "enabled": true, "args": "${auto-detect-url}", "windows": { "command": "cmd.exe", "args": "/C start ${auto-detect-url}" }, "osx": { "command": "open" }, "linux": { "command": "xdg-open" } }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ,] } ================================================ FILE: projects/mvc/localization/mvc-localization-4/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/mvc-localization-4.csproj" ], "problemMatcher": "$msCompile" } ] } ================================================ FILE: projects/mvc/localization/mvc-localization-4/MvcLocalization.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/localization/mvc-localization-4/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; using System.Globalization; using Microsoft.AspNetCore.Localization; using Microsoft.Extensions.Localization; var builder = WebApplication.CreateBuilder(); builder.Services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; }); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.UseStaticFiles(); var supportedCultures = new List { new CultureInfo("fr-FR") }; var options = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("fr-FR"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; app.UseRequestLocalization(options); app.MapDefaultControllerRoute(); app.Run(); // Leave this class empty public class Global { } public class HomeController : Controller { readonly IStringLocalizer _local; public HomeController(IStringLocalizer local) { _local = local; } public ActionResult Index() { var culture = this.HttpContext.Features.Get(); return new ContentResult { Content = $@"

    MVC Shared Resources - Home - Where namespace and assembly name are the same

    Please note that the project name is `MvcLocalization.csproj`, the Assembly Name value is also `MvcLocalization` and the root namespace is `MvcLocalization` as well.

    This means that we do not have to fully qualify the name of the resource file based on the following naming rules

    Resources are named for the full type name of their class minus the assembly name. For example, a French resource in a project whose main assembly is LocalizationWebsite.Web.dll for the class LocalizationWebsite.Web.Startup would be named Startup.fr.resx. A resource for the class LocalizationWebsite.Web.Controllers.HomeController would be named Controllers.HomeController.fr.resx. If your targeted class's namespace isn't the same as the assembly name you will need the full type name. For example, in the sample project a resource for the type ExtraNamespace.Tools would be named ExtraNamespace.Tools.fr.resx. Doc

    About

    Culture requested {culture.RequestCulture.Culture}
    UI Culture requested {culture.RequestCulture.UICulture}
    Text: {_local["Hello"]}
    Text: {_local["Goodbye"]}", ContentType = "text/html" }; } } public class AboutController : Controller { readonly IStringLocalizer _local; public AboutController(IStringLocalizer local) { _local = local; } public ActionResult Index() { var culture = this.HttpContext.Features.Get(); return new ContentResult { Content = $@"

    MVC Shared Resources - About

    Home

    Culture requested {culture.RequestCulture.Culture}
    UI Culture requested {culture.RequestCulture.UICulture}
    Text: {_local["Hello"]}
    Text: {_local["Goodbye"]}", ContentType = "text/html" }; } } ================================================ FILE: projects/mvc/localization/mvc-localization-4/Resources/Global.fr.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Au Revoir Bonjour Oui Non ================================================ FILE: projects/mvc/localization/mvc-localization-5/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-localization-5.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart", "launchBrowser": { "enabled": true, "args": "${auto-detect-url}", "windows": { "command": "cmd.exe", "args": "/C start ${auto-detect-url}" }, "osx": { "command": "open" }, "linux": { "command": "xdg-open" } }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ,] } ================================================ FILE: projects/mvc/localization/mvc-localization-5/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/mvc-localization-5.csproj" ], "problemMatcher": "$msCompile" } ] } ================================================ FILE: projects/mvc/localization/mvc-localization-5/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; using System.Globalization; using Microsoft.AspNetCore.Localization; var builder = WebApplication.CreateBuilder(); builder.Services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; }); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.UseStaticFiles(); var supportedCultures = new List { new CultureInfo("fr-FR") }; var options = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("fr-FR"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; app.UseRequestLocalization(options); app.MapDefaultControllerRoute(); app.Run(); namespace MvcLocalization { // Leave this class empty public class Global { } public class HomeController : Controller { public ActionResult Index() { return View(); } } } ================================================ FILE: projects/mvc/localization/mvc-localization-5/Resources/MvcLocalization/Global.fr.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Au Revoir Bonjour Oui Non ================================================ FILE: projects/mvc/localization/mvc-localization-5/Views/Home/Index.cshtml ================================================ @using Microsoft.Extensions.Localization @using Microsoft.AspNetCore.Localization @inject IStringLocalizer local @{ var culture = Context.Features.Get(); }

    MVC Shared Resources - Using View

    Culture requested @culture.RequestCulture.Culture
    UI Culture requested @culture.RequestCulture.UICulture
    @local["Hello"]
    @local["Goodbye"]
    ================================================ FILE: projects/mvc/localization/mvc-localization-5/mvc-localization-5.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/localization/mvc-localization-6/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; using System.Globalization; using Microsoft.AspNetCore.Localization; var builder = WebApplication.CreateBuilder(); builder.Services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; }); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.UseStaticFiles(); var supportedCultures = new List { new CultureInfo("fr-FR"), new CultureInfo("en-US") }; var options = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("fr-FR"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; /* By default you have the following providers. - QueryStringRequestCultureProvider - CookieRequestCultureProvider - AcceptLanguageHeaderRequestCultureProvider AcceptLanguageHeaderRequestCultureProvider is the one that check for client's language preference. We don't want this. */ options.RequestCultureProviders.Clear(); options.RequestCultureProviders.Add(new QueryStringRequestCultureProvider()); options.RequestCultureProviders.Add(new CookieRequestCultureProvider()); app.UseRequestLocalization(options); app.MapDefaultControllerRoute(); app.Run(); namespace MvcLocalization { // Leave this class empty public class Global { } public class HomeController : Controller { public ActionResult Index() { return View(); } } } ================================================ FILE: projects/mvc/localization/mvc-localization-6/Resources/MvcLocalization/Global.en.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 So long Howdy Hell Yeah No ================================================ FILE: projects/mvc/localization/mvc-localization-6/Resources/MvcLocalization/Global.fr.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Au Revoir Bonjour Oui Non ================================================ FILE: projects/mvc/localization/mvc-localization-6/Views/Home/Index.cshtml ================================================ @using Microsoft.Extensions.Localization @using Microsoft.AspNetCore.Localization @inject IStringLocalizer local @{ var culture = Context.Features.Get(); }

    MVC Shared Resources - Forcing the default language to be French although your browser wants (probably) English

    Culture requested @culture.RequestCulture.Culture
    UI Culture requested @culture.RequestCulture.UICulture
    @local["Hello"]
    @local["Goodbye"]
    ================================================ FILE: projects/mvc/localization/mvc-localization-6/mvc-localization-6.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/localization/mvc-localization-7/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/src/Web/bin/Debug/netcoreapp3.1/mvc-localization-3.dll", "args": [], "cwd": "${workspaceFolder}/src/Web", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart", "launchBrowser": { "enabled": true, "args": "${auto-detect-url}", "windows": { "command": "cmd.exe", "args": "/C start ${auto-detect-url}" }, "osx": { "command": "open" }, "linux": { "command": "xdg-open" } }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ,] } ================================================ FILE: projects/mvc/localization/mvc-localization-7/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/src/Web/mvc-localization-7.csproj" ], "problemMatcher": "$msCompile" } ] } ================================================ FILE: projects/mvc/localization/mvc-localization-7/ProjectWithResources/ClassLibrary.csproj ================================================ netstandard2.1 true ClassLibrary ================================================ FILE: projects/mvc/localization/mvc-localization-7/ProjectWithResources/Messages.cs ================================================ namespace ClassLibrary { public class Messages { } } ================================================ FILE: projects/mvc/localization/mvc-localization-7/ProjectWithResources/Messages.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 A Demain ================================================ FILE: projects/mvc/localization/mvc-localization-7/ProjectWithResources/Resources/Global.cs ================================================ namespace ClassLibrary.Resources { public class Global { } } ================================================ FILE: projects/mvc/localization/mvc-localization-7/ProjectWithResources/Resources/Global.fr.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Au Revoir Bonjour Oui Non ================================================ FILE: projects/mvc/localization/mvc-localization-7/Web/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; using System.Globalization; using Microsoft.AspNetCore.Localization; using Microsoft.Extensions.Localization; using ClassLibrary.Resources; using ClassLibrary; var builder = WebApplication.CreateBuilder(); builder.Services.AddLocalization(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.UseStaticFiles(); var supportedCultures = new List { new CultureInfo("fr-FR") }; var options = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("fr-FR"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; app.UseRequestLocalization(options); app.MapDefaultControllerRoute(); app.Run(); // Leave this class empty public class HomeController : Controller { readonly IStringLocalizer _local; readonly IStringLocalizer _local2; public HomeController(IStringLocalizer local, IStringLocalizer local2) { _local = local; _local2 = local2; } public ActionResult Index() { var culture = this.HttpContext.Features.Get(); return new ContentResult { Content = $@"

    MVC Shared Resources - Home

    About

    Culture requested {culture.RequestCulture.Culture}
    UI Culture requested {culture.RequestCulture.UICulture}

    From ClassLibrary.Resources.Global

    Text: {_local["Hello"]}
    Text: {_local["Goodbye"]}

    From ClassLibrary.Messages

    Text: {_local2["SeeYouTomorrow"]} ", ContentType = "text/html" }; } } public class AboutController : Controller { readonly IStringLocalizer _local; public AboutController(IStringLocalizer local) { _local = local; } public ActionResult Index() { var culture = this.HttpContext.Features.Get(); return new ContentResult { Content = $@"

    MVC Shared Resources - About

    Home

    Culture requested {culture.RequestCulture.Culture}
    UI Culture requested {culture.RequestCulture.UICulture}
    Text: {_local["Hello"]}
    Text: {_local["Goodbye"]}", ContentType = "text/html" }; } } ================================================ FILE: projects/mvc/localization/mvc-localization-7/Web/mvc-localization-7.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/localization/mvc-localization-8/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; using System.Globalization; using Microsoft.AspNetCore.Localization; using Microsoft.Extensions.Localization; var builder = WebApplication.CreateBuilder(); builder.Services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; }); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.UseStaticFiles(); var supportedCultures = new List { new CultureInfo("fr-FR"), new CultureInfo("en-US"), }; var options = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("fr-FR"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; /* By default you have the following providers. - QueryStringRequestCultureProvider - CookieRequestCultureProvider - AcceptLanguageHeaderRequestCultureProvider */ options.RequestCultureProviders.Clear(); options.RequestCultureProviders.Add(new AcceptLanguageHeaderRequestCultureProvider()); app.UseRequestLocalization(options); app.MapDefaultControllerRoute(); app.Run(); // Leave this class empty public class Global { } [Route("api")] [Produces("application/json")] [ApiController] public class ApiController : ControllerBase { IStringLocalizer _global; public ApiController(IStringLocalizer global) { _global = global; } [HttpGet("")] public ActionResult Get() { return Ok(new { Greeting = _global["Hello"].ToString() }); } } public class HomeController : Controller { public ActionResult Index() { return View(); } } ================================================ FILE: projects/mvc/localization/mvc-localization-8/README.md ================================================ # Using Accept-Language HTTP Header This example uses `AcceptLanguageHeaderRequestCultureProvider` to demonstrate on how sending `Accept-Language` header in your Web API call changes the culture information in a ASP.NET Core request. ================================================ FILE: projects/mvc/localization/mvc-localization-8/Resources/Global.en.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 So long Howdy Hell Yeah No ================================================ FILE: projects/mvc/localization/mvc-localization-8/Resources/Global.fr.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Au Revoir Bonjour Oui Non ================================================ FILE: projects/mvc/localization/mvc-localization-8/Views/Home/Index.cshtml ================================================ @using Microsoft.Extensions.Localization @using Microsoft.AspNetCore.Localization @inject IStringLocalizer local @{ var culture = Context.Features.Get(); }

    Using `Accept-Language` header in your API call

    In this example, we only use AcceptLanguageHeaderRequestCultureProvider to demonstrate on how you can affect culture information in your WebAPI request.

    Each of the following AJAX call send 'Accept-Language' header with 'en-US' and 'fr-FR' for their respective languages.



    ================================================ FILE: projects/mvc/localization/mvc-localization-8/mvc-localization-8.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/localization/mvc-localization-9/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; using System.Globalization; using Microsoft.AspNetCore.Localization; using Microsoft.Extensions.Localization; var builder = WebApplication.CreateBuilder(); builder.Services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; }); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.UseStaticFiles(); var supportedCultures = new List { new CultureInfo("fr-FR"), new CultureInfo("en-US"), new CultureInfo("en"), }; var options = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("fr-FR"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; /* By default you have the following providers. - QueryStringRequestCultureProvider - CookieRequestCultureProvider - AcceptLanguageHeaderRequestCultureProvider */ options.RequestCultureProviders.Clear(); options.RequestCultureProviders.Add(new AcceptLanguageHeaderRequestCultureProvider()); app.UseRequestLocalization(options); app.MapDefaultControllerRoute(); app.Run(); namespace MvcLocalization { // Leave this class empty public class Global { } [Route("api")] [Produces("application/json")] [ApiController] public class ApiController : ControllerBase { IStringLocalizer _global; public ApiController(IStringLocalizer global) { _global = global; } [HttpGet("{word}")] public ActionResult Get(string word) { return Ok(new { Greeting = _global[word].ToString() }); } } public class HomeController : Controller { public ActionResult Index() { return View(); } } } ================================================ FILE: projects/mvc/localization/mvc-localization-9/README.md ================================================ # Culture fallback This example uses `AcceptLanguageHeaderRequestCultureProvider` to demonstrate "culture fallback". ``` When searching for a resource, localization engages in "culture fallback". Starting from the requested culture, if not found, it reverts to the parent culture of that culture. As an aside, the CultureInfo.Parent property represents the parent culture. This usually (but not always) means removing the national signifier from the ISO. For example, the dialect of Spanish spoken in Mexico is "es-MX". It has the parent "es"—Spanish non-specific to any country. ``` [doc](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-2.2#culture-fallback-behavior) ================================================ FILE: projects/mvc/localization/mvc-localization-9/Resources/MvcLocalization/Global.en-US.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 So long ================================================ FILE: projects/mvc/localization/mvc-localization-9/Resources/MvcLocalization/Global.en.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 See you again How do you do ================================================ FILE: projects/mvc/localization/mvc-localization-9/Resources/MvcLocalization/Global.fr.resx ================================================ text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Au Revoir Bonjour ================================================ FILE: projects/mvc/localization/mvc-localization-9/Views/Home/Index.cshtml ================================================ @using Microsoft.Extensions.Localization @using Microsoft.AspNetCore.Localization @inject IStringLocalizer local @{ var culture = Context.Features.Get(); }

    Culture Fallback

    • Global.en-US.resx has no entry for 'Hello' so it uses the entry contained in Global.en.resx when the request has `en-US` language culture.
    • For `Goodbye`, both Global.en-US.resx and Global.en.resx have their own entries so they show different results.


    ================================================ FILE: projects/mvc/localization/mvc-localization-9/mvc-localization-9.csproj ================================================ net10.0 mvc-localization-9 mvc-localization true ================================================ FILE: projects/mvc/model-binding-from-query/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapDefaultControllerRoute(); app.Run(); public class GreetingParams { public int UserId { get; set; } public string Name { get; set; } public bool IsAmazing { get; set; } public short? Age { get; set; } public override string ToString() => $"User Id: {UserId}, Name: {Name}, Is Amazing: {IsAmazing}, Age: {Age}"; } public class HomeController : Controller { public ActionResult Index([FromQuery] GreetingParams greet) { return new ContentResult { Content = $@"

    Class binding with [FromQuery]

    You can see the difference in behavior between the nullable type and non nullable types here. Age is short? and User Id is int.

    {greet}

    ", ContentType = "text/html" }; } } ================================================ FILE: projects/mvc/model-binding-from-query/model-binding-from-query.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/model-binding-from-route/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapDefaultControllerRoute(); app.Run(); public class GreetingParams { public int UserId { get; set; } public string Name { get; set; } public bool IsAmazing { get; set; } public short? Age { get; set; } public override string ToString() => $"User Id: {UserId}, Name: {Name}, Is Amazing: {IsAmazing}, Age: {Age}"; } public class HomeController : Controller { string _nav = @" "; [HttpGet("")] public ActionResult Index([FromRoute] GreetingParams greet) { return new ContentResult { Content = $@"

    Class binding with [FromRoute]

    {greet} {_nav} ", ContentType = "text/html" }; } [HttpGet("{name}")] public ActionResult Name([FromRoute] GreetingParams greet) { return new ContentResult { Content = $@"

    Class binding with [FromRoute]

    {greet} {_nav} ", ContentType = "text/html" }; } [HttpGet("{isamazing:bool}")] public ActionResult IsAmazing([FromRoute] GreetingParams greet) { return new ContentResult { Content = $@"

    Class binding with [FromRoute]

    {greet} {_nav} ", ContentType = "text/html" }; } [HttpGet("/user/{userid:int}")] public ActionResult UserId([FromRoute] GreetingParams greet) { return new ContentResult { Content = $@"

    Class binding with [FromRoute]

    {greet} {_nav} ", ContentType = "text/html" }; } [HttpGet("{age:int}")] public ActionResult Age([FromRoute] GreetingParams greet) { return new ContentResult { Content = $@"

    Class binding with [FromRoute]

    {greet} {_nav} ", ContentType = "text/html" }; } [HttpGet("/{name}/{isamazing:bool}/{age:int}/{userid:int}")] public ActionResult All([FromRoute] GreetingParams greet) { return new ContentResult { Content = $@"

    Class binding with [FromRoute]

    {greet} {_nav} ", ContentType = "text/html" }; } } ================================================ FILE: projects/mvc/model-binding-from-route/model-binding-from-route.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/mvc-infer-dependency-from-action/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllers(); builder.Services.AddTransient(); var app = builder.Build(); app.MapControllers(); app.Run(); public class Greetings { public string SayHello() => "Hello World"; } public class HomeController: ControllerBase { [HttpGet("/")] public ActionResult Index(Greetings greeting) { var page = $@" {greeting.SayHello()} "; return Content(page, "text/html"); } } ================================================ FILE: projects/mvc/mvc-infer-dependency-from-action/README.md ================================================ # Infer injected services from action parameter In previous version of ASP.NET Core you have to decorate any dependency to your action method with `[FromServices]` attribute e.g. `public ActionResult Index([FromServices] Greetings greeting)`. Now there is no need for the attribute anymore. This is enough ``public ActionResult Index(Greetings greeting)`. You can disable this behavior by setting ```csharp Services.Configure(options => { options.DisableImplicitFromServicesParameters = true; }) ``` ================================================ FILE: projects/mvc/mvc-infer-dependency-from-action/mvc-infer-dependency-from-action.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/mvc-output-xml/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Formatters; var builder = WebApplication.CreateBuilder(); builder.Services.AddMvc(config => { config.OutputFormatters.Add(new XmlSerializerOutputFormatter()); }); var app = builder.Build(); app.MapDefaultControllerRoute(); app.Run(); public class Greeting { public bool Hello { get; set; } public bool World { get; set; } } public class HomeController : Controller { [HttpGet("")] public IActionResult Index() { var h = new Greeting { Hello = true, World = true }; Response.ContentType = "text/xml"; return Ok(h); } } ================================================ FILE: projects/mvc/mvc-output-xml/mvc-output-xml.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/newtonsoft-json/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddMvc().AddNewtonsoftJson(options => { options.UseMemberCasing(); }); var app = builder.Build(); app.MapControllers(); app.Run(); [ApiController] [Route("")] public class HomeController : ControllerBase { public IActionResult Index() { return Ok(new { Greeting = "Hello World" }); } } ================================================ FILE: projects/mvc/newtonsoft-json/README.md ================================================ # Bringing Newtonsoft.Json back If for any reasons you need to use `Newtonsoft.Json` in your app, add `Microsoft.AspNetCore.Mvc.NewtonsoftJson` reference to your project. This sample shows how to bring back Newtonsoft.Json and configure it. ================================================ FILE: projects/mvc/newtonsoft-json/newtonsoft-json.csproj ================================================ net10.0 newtonsoft-json newtonsoft-json true ================================================ FILE: projects/mvc/nswag/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#baadcc", "activityBar.background": "#baadcc", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#8a6b56", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#baadcc", "statusBar.background": "#a08eb9", "statusBar.debuggingBackground": "#a7b98e", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#866ea5", "statusBarItem.remoteBackground": "#a08eb9", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#a08eb9", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#a08eb999", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#a08eb9" } ================================================ FILE: projects/mvc/nswag/Program.cs ================================================ using Scalar.AspNetCore; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(args); builder.Services.AddOpenApi(); builder.Services.AddControllers(); var app = builder.Build(); app.MapOpenApi(); app.MapScalarApiReference(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapControllers(); app.Run(); [Route("")] [ApiExplorerSettings(IgnoreApi = true)] public class HomeController : ControllerBase { [HttpGet("")] public ActionResult Index() { return new ContentResult { Content = "View API Documentation", ContentType = "text/html" }; } } [Produces("application/json")] [Route("api/[controller]")] [ApiController] public class GreetingController : ControllerBase { public class Greeting { public string Message { get; set; } public string PersonName { get; set; } public string PersonAddressCity { get; set; } } /// /// This is an API to return a "Hello World" message (this text comes from the Action comment) /// /// The "Hello World" text [HttpGet("")] public ActionResult Index() { return new Greeting { Message = "Hello World" }; } [HttpPost("goodbye")] public ActionResult Goodbye(string name) { return new Greeting { Message = "Goodbye", PersonName = name }; } [HttpPut("")] public ActionResult Relay(Greeting greet) { return greet; } [HttpDelete("greetings/{name}")] public ActionResult Remove(string name) { return Ok($"{name} removed"); } [HttpPatch("")] public ActionResult Update(string city) { return new Greeting { Message = "Hello World", PersonAddressCity = city }; } } ================================================ FILE: projects/mvc/nswag/nswag.csproj ================================================ net10.0 true preview true $(NoWarn);1591 ================================================ FILE: projects/mvc/nswag/nswag.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "nswag", "nswag.csproj", "{9D9B59D2-E313-4A59-8B11-4533F73570CC}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {9D9B59D2-E313-4A59-8B11-4533F73570CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9D9B59D2-E313-4A59-8B11-4533F73570CC}.Debug|Any CPU.Build.0 = Debug|Any CPU {9D9B59D2-E313-4A59-8B11-4533F73570CC}.Release|Any CPU.ActiveCfg = Release|Any CPU {9D9B59D2-E313-4A59-8B11-4533F73570CC}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {9806BCAB-F587-4C7E-9DF2-35167F2CB511} EndGlobalSection EndGlobal ================================================ FILE: projects/mvc/nswag-2/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#6d0e38", "activityBar.background": "#6d0e38", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#3a710f", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#6d0e38", "statusBar.background": "#400821", "statusBar.debuggingBackground": "#084027", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#6d0e38", "statusBarItem.remoteBackground": "#400821", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#400821", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#40082199", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#400821" } ================================================ FILE: projects/mvc/nswag-2/Program.cs ================================================ using Scalar.AspNetCore; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddOpenApi(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapOpenApi(); app.MapScalarApiReference(); app.UseStaticFiles(); app.MapDefaultControllerRoute(); app.Run(); [Route("")] [ApiExplorerSettings(IgnoreApi = true)] public class HomeController : ControllerBase { [HttpGet("")] public ActionResult Index() { return new ContentResult { Content = "View API Documentation", ContentType = "text/html" }; } } [Produces("application/json")] [Route("api/[controller]")] [ApiController] [ApiExplorerSettings()] public class GreetingController : ControllerBase { public class Greeting { public string Message { get; set; } public string PersonName { get; set; } public string PersonAddressCity { get; set; } } /// /// This is an API to return a "Hello World" message (this text comes from the Action comment) /// /// The "Hello World" text [HttpGet("")] [Tags("Basic")] public ActionResult Index() { return new Greeting { Message = "Hello World" }; } [HttpPost("goodbye")] [Tags("Basic")] public ActionResult Goodbye(string name) { return new Greeting { Message = "Goodbye", PersonName = name }; } [HttpPut("")] [Tags("Intermediate")] public ActionResult Relay(Greeting greet) { return greet; } [HttpDelete("greetings/{name}")] [Tags("Intermediate")] public ActionResult Remove(string name) { return Ok($"{name} removed"); } [HttpPatch("")] [Tags("Advanced")] public ActionResult Update(string city) { return new Greeting { Message = "Hello World", PersonAddressCity = city }; } [HttpGet("hide/this")] [ApiExplorerSettings(IgnoreApi = true)] public ActionResult HideThis() { return Ok(new { gretting = "hello" }); } [HttpGet("hide/this2")] [ApiExplorerSettings(IgnoreApi = true)] public ActionResult HideThisToo() { return Ok(new { gretting = "hello" }); } [HttpGet("hide/fail")] public ActionResult NotHidden() { return Ok(new { gretting = "hello" }); } } ================================================ FILE: projects/mvc/nswag-2/README.md ================================================ # Built-in OpenAPI with MVC Controllers This sample demonstrates ASP.NET Core 10's built-in OpenAPI support with MVC controllers and tags. ## Key Features - No external packages required (NSwag removed) - OpenAPI 3.1 document generated automatically - XML doc comments populate API descriptions - Modern Scalar UI for interactive documentation - Demonstrates tag grouping with `[Tags("Category")]` attribute - Shows endpoint exclusion with `[ApiExplorerSettings(IgnoreApi = true)]` - AOT-compatible ## Running the Sample ```bash dotnet watch run ``` Navigate to `http://localhost:5000/` to see the home page. ## Viewing the Documentation - **Scalar UI:** Navigate to `/scalar` - **OpenAPI JSON:** Navigate to `/openapi/v1.json` ## Endpoints ### Basic - `GET /api/greeting` - Returns "Hello World" message - `POST /api/greeting/goodbye` - Returns goodbye message with name ### Intermediate - `PUT /api/greeting` - Relays a greeting - `DELETE /api/greeting/greetings/{name}` - Removes a greeting ### Advanced - `PATCH /api/greeting` - Updates greeting with city ## Migration Notes This sample was migrated from NSwag to .NET 10's built-in OpenAPI support. **Changes:** - Removed `NSwag.AspNetCore` and `NSwag.Annotations` package dependencies - Added `Microsoft.AspNetCore.OpenApi` (built-in) - Added `Scalar.AspNetCore` for modern UI - Replaced `[OpenApiTag("Basic")]` with `[Tags("Basic")]` - Replaced `[OpenApiIgnore]` with `[ApiExplorerSettings(IgnoreApi = true)]` - Enabled `GenerateDocumentationFile` in .csproj **Benefits:** - Uses built-in .NET 10 OpenAPI support - Cleaner tag management - Modern Scalar UI instead of Swagger UI - Better AOT compatibility See `OUT-OF-DATE.md` for migration details. ================================================ FILE: projects/mvc/nswag-2/nswag-2.csproj ================================================ net10.0 true preview true $(NoWarn);1591 ================================================ FILE: projects/mvc/nswag-2/nswag-2.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "nswag-2", "nswag-2.csproj", "{58CB82AA-EDC2-4433-9930-E61E2FF80F36}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {58CB82AA-EDC2-4433-9930-E61E2FF80F36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {58CB82AA-EDC2-4433-9930-E61E2FF80F36}.Debug|Any CPU.Build.0 = Debug|Any CPU {58CB82AA-EDC2-4433-9930-E61E2FF80F36}.Release|Any CPU.ActiveCfg = Release|Any CPU {58CB82AA-EDC2-4433-9930-E61E2FF80F36}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {94796678-F11D-4DAF-AF6F-3820A4772C20} EndGlobalSection EndGlobal ================================================ FILE: projects/mvc/output-formatter-syndication/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; using Microsoft.SyndicationFeed; var builder = WebApplication.CreateBuilder(); builder.Services.AddMvc(options => { options.OutputFormatters.Add(new RssOutputFormatter()); }); var app = builder.Build(); app.MapDefaultControllerRoute(); app.Run(); public class HomeController : Controller { public ActionResult Index() { var item = new SyndicationItem() { Title = "Rss Writer Available", Description = "The new Rss Writer is now available as a NuGet Package!", Id = "https://www.nuget.org/packages/Microsoft.SyndicationFeed.ReaderWriter", Published = DateTimeOffset.UtcNow }; item.AddCategory(new SyndicationCategory("Technology")); item.AddContributor(new SyndicationPerson("test", "test@mail.com")); var item2 = new SyndicationItem() { Title = "We need RSS 'frame'", Description = "We need a structure that hold the RSS/feed information", Id = "xx", Published = DateTimeOffset.UtcNow }; return Ok(new[] { item, item2 }); } } ================================================ FILE: projects/mvc/output-formatter-syndication/RssOutputFormatter.cs ================================================ using System.Text; using System.Xml; using Microsoft.AspNetCore.Mvc.Formatters; using Microsoft.Net.Http.Headers; using Microsoft.SyndicationFeed; using Microsoft.SyndicationFeed.Rss; public class RssOutputFormatter : TextOutputFormatter { public RssOutputFormatter() { SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("application/rss+xml")); SupportedEncodings.Add(Encoding.UTF8); SupportedEncodings.Add(Encoding.Unicode); } protected override bool CanWriteType(Type type) { if (typeof(SyndicationItem).IsAssignableFrom(type) || typeof(IEnumerable).IsAssignableFrom(type)) { return base.CanWriteType(type); } return false; } public override async Task WriteResponseBodyAsync(OutputFormatterWriteContext context, Encoding selectedEncoding) { IServiceProvider serviceProvider = context.HttpContext.RequestServices; var response = context.HttpContext.Response; var sw = new StringWriterWithEncoding(selectedEncoding); var list = new List(); if (context.Object is SyndicationItem) { list.Add(context.Object as SyndicationItem); } else if (context.Object is IEnumerable) { list.AddRange(context.Object as IEnumerable); } using (XmlWriter xmlWriter = XmlWriter.Create(sw, new XmlWriterSettings() { Async = true, Indent = true })) { var writer = new RssFeedWriter(xmlWriter); // Create item foreach (var i in list) await writer.Write(i); xmlWriter.Flush(); } await response.WriteAsync(sw.ToString(), selectedEncoding); } } class StringWriterWithEncoding : StringWriter { private readonly Encoding _encoding; public StringWriterWithEncoding(Encoding encoding) { this._encoding = encoding; } public override Encoding Encoding { get { return _encoding; } } } ================================================ FILE: projects/mvc/output-formatter-syndication/output-formatter-syndication.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/razor-class-library/README.md ================================================ # Razor Class Library (3) We are exploring Razor Class Library (RCL) functionalities in this section. RCL allows you to create reusable UI libraries. * [Razor Class Library - Hello World](/projects/mvc/razor-class-library/razor-class-library-1) This is the simplest example to demonstrate the functionality of RCL. The library uses Razor Pages. Go to `src/WebApplication` folder and run `dotnet watch run` to run the sample. Thanks to [@AdrienTorris](https://twitter.com/AdrienTorris). * [Razor Class Library - Include static files](/projects/mvc/razor-class-library/razor-class-library-with-static-files) This is similar to previous example except now you can including static files (javascript, images, css, etc) with your RCL. Go to `src/WebApplication` folder and run `dotnet watch run` to run the sample. Thanks to [@AdrienTorris](https://twitter.com/AdrienTorris). * [Razor Class Library - using Controllers and Views](/projects/mvc/razor-class-library/razor-class-library-with-controllers) This sample demonstrates on how to use Controllers and Views in your Razor Class Library in contrast to previous examples that uses Razor Pages. Thanks to [@AdrienTorris](https://twitter.com/AdrienTorris). dotnet6 ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-1/README.md ================================================ Razor Class Libraries ===================== 'Hello World' sample with Razor Class Libraries. List of commands to execute to create this sample from scratch: * cd /src * dotnet new razorclasslib -n RazorClassLibrary1 * dotnet new razorclasslib -n RazorClassLibrary2 * dotnet new web -n WebApplication * dotnet add WebApplication/WebApplication.csproj reference RazorClassLibrary1/RazorClassLibrary1.csproj RazorClassLibrary2/RazorClassLibrary2.csproj * cd RazorClassLibrary1 * dotnet new page -n Index -o Areas/Module1/Pages * cd ../ * cd RazorClassLibrary2 * dotnet new page -n Index -o Areas/Module2/Pages ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-1/src/RazorClassLibrary1/Areas/Module1/Pages/Index.cshtml ================================================ @page @model Module1.Pages.IndexModel; @{ Layout = null; } Razor class library 1

    Razor class library 1

    Hello world from: RazorClassLibrary1/Areas/Module1/Pages/Index.cshml

    ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-1/src/RazorClassLibrary1/Areas/Module1/Pages/Index.cshtml.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; namespace Module1.Pages { public class IndexModel : PageModel { public void OnGet() { } } } ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-1/src/RazorClassLibrary1/RazorClassLibrary1.csproj ================================================ net10.0 true true ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-1/src/RazorClassLibrary2/Areas/Module2/Pages/Index.cshtml ================================================ @page @model Module2.Pages.IndexModel; @{ Layout = null; } Razor class library 2

    Razor class library 2

    Hello world from: RazorClassLibrary2/Areas/Module1/Pages/Index.cshml

    ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-1/src/RazorClassLibrary2/Areas/Module2/Pages/Index.cshtml.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; namespace Module2.Pages { public class IndexModel : PageModel { public void OnGet() { } } } ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-1/src/RazorClassLibrary2/RazorClassLibrary2.csproj ================================================ net10.0 true true ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-1/src/WebApplication/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); var app = builder.Build(); app.MapRazorPages(); app.Run(async (context) => { context.Response.Headers.Append("Content-Type", "text/html"); await context.Response.WriteAsync(@"

    Hello World from the Web Application!

    Visit page from RazorClassLibrary1 and RazorClassLibrary2. "); }); app.Run(); ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-1/src/WebApplication/WebApplication.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-1/src/WebApplication/appsettings.Development.json ================================================ { "Logging": { "LogLevel": { "Default": "Debug", "System": "Information", "Microsoft": "Information" } } } ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-1/src/WebApplication/appsettings.json ================================================ { "Logging": { "LogLevel": { "Default": "Warning" } }, "AllowedHosts": "*" } ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-controllers/README.md ================================================ Razor Class Libraries ===================== With Controllers and Views -------------------------- List of commands to execute to build this sample from scratch: * cd /src * dotnet new razorclasslib -n RazorClassLibrary1 * dotnet new web -n WebApplication * dotnet add WebApplication/WebApplication.csproj reference RazorClassLibrary1/RazorClassLibrary1.csproj ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-controllers/src/RazorClassLibrary1/Areas/MyFeature/Controllers/AboutController.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; // For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 namespace RazorClassLibrary1.Areas.MyFeature.Controllers { [Area("MyFeature")] [Route("[area]/about")] public class AboutController : Controller { [HttpGet] public IActionResult Index() { return View(); } } } ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-controllers/src/RazorClassLibrary1/Areas/MyFeature/Controllers/HomeController.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; // For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 namespace RazorClassLibrary1.Areas.MyFeature.Controllers { [Area("MyFeature")] public class HomeController : Controller { [HttpGet] public IActionResult Index() { return View(); } } } ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-controllers/src/RazorClassLibrary1/Areas/MyFeature/Views/About/Index.cshtml ================================================ @* For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 *@ @{ Layout = null; } Hello world from RazorClassLibrary1

    RazorClassLibrary1 - About

    Hello world from: RazorClassLibrary1/Areas/MyFeature/Views/About/Index.cshtml

    ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-controllers/src/RazorClassLibrary1/Areas/MyFeature/Views/Home/Index.cshtml ================================================ @* For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 *@ @{ Layout = null; } Hello world from RazorClassLibrary1

    RazorClassLibrary1

    Hello world from: RazorClassLibrary1/Areas/MyFeature/Views/Home/Index.cshtml

    ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-controllers/src/RazorClassLibrary1/RazorClassLibrary1.csproj ================================================ net10.0 true true ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-controllers/src/WebApplication/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapControllerRoute("areas", "{area}/{controller=Home}/{action=Index}/{id?}"); app.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}"); app.Run(async (context) => { context.Response.Headers.Append("Content-Type", "text/html"); await context.Response.WriteAsync(@"

    Razor Class Library sample with MVC structure (controllers and views)

    "); }); app.Run(); ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-controllers/src/WebApplication/WebApplication.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-controllers/src/WebApplication/appsettings.Development.json ================================================ { "Logging": { "LogLevel": { "Default": "Debug", "System": "Information", "Microsoft": "Information" } } } ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-controllers/src/WebApplication/appsettings.json ================================================ { "Logging": { "LogLevel": { "Default": "Warning" } }, "AllowedHosts": "*" } ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-static-files/README.md ================================================ Razor Class Libraries ===================== With static files serving ------------------------- 'Hello World' sample with Razor Class Libraries serving some static files (css, images and JavaScript files). List of commands to execute to build this sample from scratch: * cd /src * dotnet new razorclasslib -n RazorClassLibrary1 * dotnet new razorclasslib -n RazorClassLibrary2 * dotnet new classlib -n RazorClassLibraries.Mvc.Core * dotnet new web -n PracticalAspNetCore * dotnet add RazorClassLibrary1/RazorClassLibrary1.csproj reference RazorClassLibraries.Mvc.Core/RazorClassLibraries.Mvc.Core.csproj * dotnet add RazorClassLibrary2/RazorClassLibrary2.csproj reference RazorClassLibraries.Mvc.Core/RazorClassLibraries.Mvc.Core.csproj * dotnet add PracticalAspNetCore/PracticalAspNetCore.csproj reference RazorClassLibrary1/RazorClassLibrary1.csproj RazorClassLibrary2/RazorClassLibrary2.csproj * cd RazorClassLibrary1 * dotnet new page -n Index -o Areas/Module1/Pages * cd ../ * cd RazorClassLibrary2 * dotnet new page -n Index -o Areas/Module2/Pages ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibraries.Mvc.Core/BaseModuleUiConfigureOptions.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.StaticFiles; using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Options; using System; namespace RazorClassLibraries.Mvc { public abstract class BaseModuleUiConfigureOptions : IPostConfigureOptions { public BaseModuleUiConfigureOptions(IWebHostEnvironment environment) { Environment = environment; } public IWebHostEnvironment Environment { get; } public void PostConfigure(string name, StaticFileOptions options) { name = name ?? throw new ArgumentNullException(nameof(name)); options = options ?? throw new ArgumentNullException(nameof(options)); // Basic initialization in case the options weren't initialized by any other component options.ContentTypeProvider = options.ContentTypeProvider ?? new FileExtensionContentTypeProvider(); if (options.FileProvider == null && Environment.WebRootFileProvider == null) { throw new InvalidOperationException("Missing FileProvider."); } options.FileProvider = options.FileProvider ?? Environment.WebRootFileProvider; var basePath = "wwwroot"; var filesProvider = new ManifestEmbeddedFileProvider(GetType().Assembly, basePath); options.FileProvider = new CompositeFileProvider(options.FileProvider, filesProvider); } } } ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibraries.Mvc.Core/RazorClassLibraries.Mvc.Core.csproj ================================================ net10.0 true true ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary1/Areas/Module1/Pages/Index.cshtml ================================================ @page @model Module1.Pages.IndexModel @{ Layout = null; } Hello world from RazorClassLibrary1

    Module 1

    Hello world from: RazorClassLibrary1/Areas/Module1/Pages/Index.cshtml

    [Waiting for JavaScript execution]

    This is a colored text.

    ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary1/Areas/Module1/Pages/Index.cshtml.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; namespace Module1.Pages { public class IndexModel : PageModel { public void OnGet() { } } } ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary1/RazorClassLibrary1.csproj ================================================ net10.0 true true true ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary1/UiConfigureOptions.cs ================================================ using RazorClassLibraries.Mvc; using Microsoft.AspNetCore.Hosting; namespace RazorClassLibrary1 { public sealed class UiConfigureOptions : BaseModuleUiConfigureOptions { public UiConfigureOptions(IWebHostEnvironment environment) : base(environment) { } } } ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary1/wwwroot/css/module1.css ================================================ p.colored-text { color:Purple !important; } ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary1/wwwroot/js/script.js ================================================ //alert('Hello!'); document.getElementById('js-text-container').innerHTML = 'Welcome from JavaScript!'; ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary2/Areas/Module2/Pages/Index.cshtml ================================================ @page @model Module2.Pages.IndexModel @{ Layout = null; } Hello world from RazorClassLibrary2

    Module 2

    Hello world from: RazorClassLibrary2/Areas/Module2/Pages/Index.cshtml

    [Waiting for JavaScript execution]

    This is a colored text.

    ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary2/Areas/Module2/Pages/Index.cshtml.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; namespace Module2.Pages { public class IndexModel : PageModel { public void OnGet() { } } } ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary2/RazorClassLibrary2.csproj ================================================ net10.0 true true true ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary2/UiConfigureOptions.cs ================================================ using Microsoft.AspNetCore.Hosting; using RazorClassLibraries.Mvc; namespace RazorClassLibrary2 { public sealed class UiConfigureOptions : BaseModuleUiConfigureOptions { public UiConfigureOptions(IWebHostEnvironment environment) : base(environment) { } } } ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary2/wwwroot/css/module2.css ================================================ p.colored-text { color:aqua !important; } ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary2/wwwroot/js/script.js ================================================ //alert('Hello!'); document.getElementById('js-text-container').innerHTML = 'Welcome from JavaScript!'; ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-static-files/src/WebApplication/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); builder.Services.ConfigureOptions(typeof(RazorClassLibrary1.UiConfigureOptions)); builder.Services.ConfigureOptions(typeof(RazorClassLibrary2.UiConfigureOptions)); var app = builder.Build(); app.UseRouting(); app.UseStaticFiles(); app.MapRazorPages(); app.Run(async (context) => { context.Response.Headers.Append("Content-Type", "text/html"); await context.Response.WriteAsync(@"

    Razor Class Library sample with static files (image, css, js)

    Visit page from RazorClassLibrary1 and RazorClassLibrary2. "); }); app.Run(); ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-static-files/src/WebApplication/WebApplication.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-static-files/src/WebApplication/appsettings.Development.json ================================================ { "Logging": { "LogLevel": { "Default": "Debug", "System": "Information", "Microsoft": "Information" } } } ================================================ FILE: projects/mvc/razor-class-library/razor-class-library-with-static-files/src/WebApplication/appsettings.json ================================================ { "Logging": { "LogLevel": { "Default": "Warning" } }, "AllowedHosts": "*" } ================================================ FILE: projects/mvc/result-filestream/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapDefaultControllerRoute(); app.Run(); public class HomeController : Controller { IWebHostEnvironment _env; public HomeController(IWebHostEnvironment env) { _env = env; } public ActionResult Index() { return new ContentResult { Content = "

    Download File

    Download a copy of Hegel (pdf)", ContentType = "text/html" }; } public FileStreamResult Hegel() { var pathToIdeas = System.IO.Path.Combine(_env.WebRootPath, "hegel.pdf"); //This is a contrite example to demonstrate returning a stream. If you have a physical file on disk, just use PhySicalFileResult that takes a path. return new FileStreamResult(System.IO.File.OpenRead(pathToIdeas), "application/pdf") { FileDownloadName = "hegel.pdf" }; } } ================================================ FILE: projects/mvc/result-filestream/README.md ================================================ # Return a FileStreamResult Return a file to a HTTP request by returning a stream. This allows you to stream big files to browsers. ================================================ FILE: projects/mvc/result-filestream/result-filestream.csproj ================================================ net10.0 result result true ================================================ FILE: projects/mvc/result-json/Program.cs ================================================ using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Hosting; using System; namespace PracticalAspNetCore { public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); } public void Configure(IApplicationBuilder app) { app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapDefaultControllerRoute(); }); } } public class HomeController : Controller { IWebHostEnvironment _env; public HomeController(IWebHostEnvironment env) { _env = env; } /// /// If you navigate to /Home/JsonPersonResult /// You'll get a JSON response. ///{"id":"Some guid","name":"Jane","lastName":"Doe"} /// public JsonResult JsonPersonResult() { var person = new Person { Id = Guid.NewGuid(), Name = "Jane", LastName = "Doe" }; return Json(person); } public ActionResult Index() { var jsonData = JsonPersonResult(); return new ContentResult { Content = $@" Click here to view the endpoint with JsonResult ", ContentType = "text/html" }; } } public class Person { public Guid Id { get; set; } public string Name { get; set; } public string LastName { get; set; } } public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup() ); } } ================================================ FILE: projects/mvc/result-json/README.md ================================================ # Return Json Makes it easy to returns JSON content from an action. Sample contributed by [genesisrrios](https://github.com/genesisrrios). ================================================ FILE: projects/mvc/result-json/result-json.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/result-physicalfile/Program.cs ================================================ using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Hosting; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapDefaultControllerRoute(); app.Run(); public class HomeController : Controller { IWebHostEnvironment _env; public HomeController(IWebHostEnvironment env) { _env = env; } public ActionResult Index() { return new ContentResult { Content = "

    Download File

    Download a copy of Hegel (pdf)", ContentType = "text/html" }; } public PhysicalFileResult Hegel() { var pathToIdeas = System.IO.Path.Combine(_env.WebRootPath, "hegel.pdf"); return new PhysicalFileResult(pathToIdeas, "application/pdf"); } } ================================================ FILE: projects/mvc/result-physicalfile/README.md ================================================ # Return a PhysicalFileResult Return a file to a HTTP request by giving a path to a file in a disk to `PhysicalFileResult`. ================================================ FILE: projects/mvc/result-physicalfile/result-physicalpath.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/routing/README.md ================================================ # MVC Routing (9) We are exploring every single boring details about MVC routing in this section. * [MVC Routing - 1](/projects/mvc/routing/routing-1) Demonstrates fixed routing and default conventional routing for ASP.NET MVC. * [MVC Routing - 2](/projects/mvc/routing/routing-2) Use `endpoints.MapDefaultControllerRoute();` to specify default convention routing for ASP.NET MVC. * [MVC Routing - 3](/projects/mvc/routing/routing-3) The simplest example for attribute routing. We use the `Route` attribute at the Controller. This only allows you to have one Action per Controller. * [MVC Routing - 4](/projects/mvc/routing/routing-4) We use the `Route` attribute at Action methods (in contrast to previous example). This allows you to have multiple Actions in a Controller. * [MVC Routing - 5](/projects/mvc/routing/routing-5) Demonstrate the usage of `HttpGet` and `HttpPost`. * [MVC Routing - 6](/projects/mvc/routing/routing-6) Demonstrate the usage of `[controller]` replacement token at the `Route` attribute. * [MVC Routing - 7](/projects/mvc/routing/routing-7) Demonstrate the usage of `[controller]` and `[action]` replacement tokens at the `Route` attribute. * [MVC Routing - 8](/projects/mvc/routing/routing-8) Demonstrate the usage of `[action]` replacement tokens at the `HttpGet` attribute. * [MVC Routing - 9](/projects/mvc/routing/routing-9) Demonstrate the usage of `IActionConstraint` attribute. The following map routing will search all HomeController.About action accross the assembly regardless of namespace. If you have multiple HomeController.About, it will generate error because the framework cannot decide which method to use. This sample demonstrates on how using a custom `IActionConstraint` attribute solves this problem. dotnet6 ================================================ FILE: projects/mvc/routing/routing-1/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapControllerRoute( name: "home", pattern: "/", defaults: new { controller = "Home", action = "Index" }); app.MapControllerRoute( name: "default", pattern: "{controller}/{action}", defaults: new { controller = "Home", action = "Index" }); app.Run(); public class HomeController : Controller { public ActionResult Index() { return new ContentResult { Content = @" Hello World

    The following links call the same controller and action. ", ContentType = "text/html" }; } } ================================================ FILE: projects/mvc/routing/routing-1/routing-1.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/routing/routing-2/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapDefaultControllerRoute(); app.Run(); public class HomeController : Controller { public ActionResult Index() { return new ContentResult { Content = @" Hello World

    The following links call the same controller and action. ", ContentType = "text/html" }; } } ================================================ FILE: projects/mvc/routing/routing-2/routing-2.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/routing/routing-3/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-routing-2.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart", "launchBrowser": { "enabled": true, "args": "${auto-detect-url}", "windows": { "command": "cmd.exe", "args": "/C start ${auto-detect-url}" }, "osx": { "command": "open" }, "linux": { "command": "xdg-open" } }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ,] } ================================================ FILE: projects/mvc/routing/routing-3/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/routing-4.csproj" ], "problemMatcher": "$msCompile" } ] } ================================================ FILE: projects/mvc/routing/routing-3/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapControllers(); app.Run(); [Route("")] [Route("Home")] [Route("Home/Index")] public class HomeController : Controller { public ActionResult Index() { return new ContentResult { Content = @" Hello World

    The following links call the same controller and action. ", ContentType = "text/html" }; } } ================================================ FILE: projects/mvc/routing/routing-3/routing-3.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/routing/routing-4/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-routing-2.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart", "launchBrowser": { "enabled": true, "args": "${auto-detect-url}", "windows": { "command": "cmd.exe", "args": "/C start ${auto-detect-url}" }, "osx": { "command": "open" }, "linux": { "command": "xdg-open" } }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ,] } ================================================ FILE: projects/mvc/routing/routing-4/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/routing-4.csproj" ], "problemMatcher": "$msCompile" } ] } ================================================ FILE: projects/mvc/routing/routing-4/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapControllers(); app.Run(); public class HomeController : Controller { [Route("")] [Route("Home")] [Route("Home/Index")] public ActionResult Index() { return new ContentResult { Content = @" Hello World

    ", ContentType = "text/html" }; } [Route("About")] public ActionResult About() { return new ContentResult { Content = @" About Page

    ", ContentType = "text/html" }; } } ================================================ FILE: projects/mvc/routing/routing-4/routing-4.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/routing/routing-5/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-routing-2.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart", "launchBrowser": { "enabled": true, "args": "${auto-detect-url}", "windows": { "command": "cmd.exe", "args": "/C start ${auto-detect-url}" }, "osx": { "command": "open" }, "linux": { "command": "xdg-open" } }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ,] } ================================================ FILE: projects/mvc/routing/routing-5/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/routing-4.csproj" ], "problemMatcher": "$msCompile" } ] } ================================================ FILE: projects/mvc/routing/routing-5/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapControllers(); app.Run(); public class HomeController : Controller { [Route("")] [Route("Home")] [Route("Home/Index")] public ActionResult Index() { return new ContentResult { Content = @"

    [HttpGet] and [HttpPost]

    ", ContentType = "text/html" }; } [HttpGet("About")] public ActionResult About() { return new ContentResult { Content = @" About Page - GET", ContentType = "text/html" }; } [HttpPost("About")] public ActionResult About2() { return new ContentResult { Content = @" About Page - POST", ContentType = "text/html" }; } } ================================================ FILE: projects/mvc/routing/routing-5/routing-5.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/routing/routing-6/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-routing-2.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart", "launchBrowser": { "enabled": true, "args": "${auto-detect-url}", "windows": { "command": "cmd.exe", "args": "/C start ${auto-detect-url}" }, "osx": { "command": "open" }, "linux": { "command": "xdg-open" } }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ,] } ================================================ FILE: projects/mvc/routing/routing-6/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/routing-4.csproj" ], "problemMatcher": "$msCompile" } ] } ================================================ FILE: projects/mvc/routing/routing-6/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapControllers(); app.Run(); [Route("[controller]")] public class HomeController : Controller { [HttpGet("/")] [HttpGet("")] //You have to do this otherwise /Home/Index won't work public ActionResult Index() { return new ContentResult { Content = @"

    [controller] replacement token examples

    ", ContentType = "text/html" }; } [HttpGet("about")] public ActionResult About() { return new ContentResult { Content = @" About Page", ContentType = "text/html" }; } [HttpGet("/about")] public ActionResult About2() { return new ContentResult { Content = @" About Page 2", ContentType = "text/html" }; } } ================================================ FILE: projects/mvc/routing/routing-6/routing-6.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/routing/routing-7/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-routing-2.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart", "launchBrowser": { "enabled": true, "args": "${auto-detect-url}", "windows": { "command": "cmd.exe", "args": "/C start ${auto-detect-url}" }, "osx": { "command": "open" }, "linux": { "command": "xdg-open" } }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ,] } ================================================ FILE: projects/mvc/routing/routing-7/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/routing-4.csproj" ], "problemMatcher": "$msCompile" } ] } ================================================ FILE: projects/mvc/routing/routing-7/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapControllers(); app.Run(); [Route("[controller]/[action]")] public class HomeController : Controller { [HttpGet("/")] [HttpGet("")] public ActionResult Index() { return new ContentResult { Content = @"

    [controller] and [action] replacement tokens examples

    ", ContentType = "text/html" }; } public ActionResult About() { return new ContentResult { Content = @" About Page", ContentType = "text/html" }; } [HttpGet("/about")] public ActionResult About2() { return new ContentResult { Content = @" About Page 2", ContentType = "text/html" }; } } ================================================ FILE: projects/mvc/routing/routing-7/routing-7.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/routing/routing-8/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-routing-2.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart", "launchBrowser": { "enabled": true, "args": "${auto-detect-url}", "windows": { "command": "cmd.exe", "args": "/C start ${auto-detect-url}" }, "osx": { "command": "open" }, "linux": { "command": "xdg-open" } }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ,] } ================================================ FILE: projects/mvc/routing/routing-8/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/routing-4.csproj" ], "problemMatcher": "$msCompile" } ] } ================================================ FILE: projects/mvc/routing/routing-8/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapControllers(); app.Run(); [Route("[controller]/")] public class HomeController : Controller { [HttpGet("/")] [HttpGet("")] public ActionResult Index() { return new ContentResult { Content = @"

    [controller] and [action] replacement tokens examples

    ", ContentType = "text/html" }; } [HttpGet("[action]")] public ActionResult About() { return new ContentResult { Content = @" About Page using replacement token [action]", ContentType = "text/html" }; } [HttpGet("/about")] [HttpGet("/2/[action]")] public ActionResult About2() { return new ContentResult { Content = @" About Page 2", ContentType = "text/html" }; } } ================================================ FILE: projects/mvc/routing/routing-8/routing-8.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/routing/routing-9/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-routing-2.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart", "launchBrowser": { "enabled": true, "args": "${auto-detect-url}", "windows": { "command": "cmd.exe", "args": "/C start ${auto-detect-url}" }, "osx": { "command": "open" }, "linux": { "command": "xdg-open" } }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ,] } ================================================ FILE: projects/mvc/routing/routing-9/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/routing-4.csproj" ], "problemMatcher": "$msCompile" } ] } ================================================ FILE: projects/mvc/routing/routing-9/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.ActionConstraints; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapControllerRoute( "About", "{id}/About", defaults: new { controller = "Home", Action = "About" } ); app.Run(); public class NumberAttribute : Attribute, IActionConstraint { private readonly int _number; public NumberAttribute(int number) { _number = number; } public int Order { get { return 0; } } public bool Accept(ActionConstraintContext context) { return Convert.ToInt32(context.RouteContext.RouteData.Values["id"]) == _number; } } [Route("[controller]/")] public class HomeController : Controller { [HttpGet("/")] [HttpGet("")] public ActionResult Index() { return new ContentResult { Content = @"

    Custom Routing Constraint Attribute

    ", ContentType = "text/html" }; } } namespace PracticalAspNetCore.Route1 { public class HomeController : Controller { [Number(1)] public ActionResult About() { return new ContentResult { Content = @" About Page 1", ContentType = "text/html" }; } } } namespace PracticalAspNetCore.Route2 { public class HomeController : Controller { [Number(2)] public ActionResult About() { return new ContentResult { Content = @" About Page 2", ContentType = "text/html" }; } } } namespace PracticalAspNetCore.Route3 { public class HomeController : Controller { [Number(3)] public ActionResult About() { return new ContentResult { Content = @" About Page 3", ContentType = "text/html" }; } } } ================================================ FILE: projects/mvc/routing/routing-9/routing-9.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/tag-helper/README.md ================================================ # Tag Helpers (5) * [Tag Helper - Hello World](/projects/mvc/tag-helper/tag-helper-1) This is the simplest tag helper you can do. It just prints 'hello world'. * [Tag Helper - Alert Tag Helper](/projects/mvc/tag-helper/tag-helper-2) Convert a message to become an alert message (bootstrap 4). * [Tag Helper - Alert Tag Helper With Style](/projects/mvc/tag-helper/tag-helper-3) Convert a message to become an alert message with 4 style of alerts (bootstrap 4). * [Tag Helper - Alert Tag Helper with other enclosed Tag Helpers](/projects/mvc/tag-helper/tag-helper-4) Demonstrate the usage of other tag helpers within the enclosure of an Alert Tag Helper. * [Tag Helper - Nested Alert Tag Helper](/projects/mvc/tag-helper/tag-helper-5) Demonstrate passing values from Parent Tag to Child Tag. ## Extras (2) * [Cache Busting Tag Helper](/projects/mvc/tag-helper/tag-helper-link) Use `asp-append-version` to your css and script link to make sure that your visitors always use the latest version of your style and script files. * [Cache Busting Image Tag Helper](/projects/mvc/tag-helper/tag-helper-img) Use `asp-append-version` to your images to make sure that your visitors always use the latest version of images. dotnet6 ================================================ FILE: projects/mvc/tag-helper/tag-helper-1/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Razor.TagHelpers; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapDefaultControllerRoute(); app.Run(); [HtmlTargetElement("helloworld")] public class HelloWorld : TagHelper { public override void Process(TagHelperContext context, TagHelperOutput output) { output.TagName = "div"; output.TagMode = TagMode.StartTagAndEndTag; output.Content.SetContent("hello world from tag helper"); } } public class HomeController : Controller { public ActionResult Index() { return View("Index"); } } ================================================ FILE: projects/mvc/tag-helper/tag-helper-1/Views/Home/Index.cshtml ================================================ @addTagHelper *, TagHelpers ================================================ FILE: projects/mvc/tag-helper/tag-helper-1/tag-helper.csproj ================================================ net10.0 true TagHelpers ================================================ FILE: projects/mvc/tag-helper/tag-helper-2/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Razor.TagHelpers; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapDefaultControllerRoute(); app.Run(); [HtmlTargetElement("alert")] public class HelloWorld : TagHelper { public override void Process(TagHelperContext context, TagHelperOutput output) { output.TagName = "div"; output.TagMode = TagMode.StartTagAndEndTag; output.Attributes.Add("class", "alert alert-warning"); } } public class HomeController : Controller { public ActionResult Index() { return View("Index"); } } ================================================ FILE: projects/mvc/tag-helper/tag-helper-2/Views/Home/Index.cshtml ================================================ @addTagHelper *, TagHelpers hello Anne ================================================ FILE: projects/mvc/tag-helper/tag-helper-2/tag-helper-2.csproj ================================================ net10.0 true TagHelpers ================================================ FILE: projects/mvc/tag-helper/tag-helper-3/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Razor.TagHelpers; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapDefaultControllerRoute(); app.Run(); public enum AlertType { Success, Warning, Info, Danger } [HtmlTargetElement("alert")] public class AlertHelper : TagHelper { public AlertType Type { get; set; } public override void Process(TagHelperContext context, TagHelperOutput output) { output.TagName = "div"; output.TagMode = TagMode.StartTagAndEndTag; output.Attributes.Add("class", $"alert {GetAlertType()}"); } string GetAlertType() { switch (Type) { case AlertType.Success: return "alert-success"; case AlertType.Warning: return "alert-warning"; case AlertType.Info: return "alert-info"; case AlertType.Danger: return "alert-danger"; default: throw new System.ArgumentOutOfRangeException(); } } } public class HomeController : Controller { public ActionResult Index() { return View("Index"); } } ================================================ FILE: projects/mvc/tag-helper/tag-helper-3/Views/Home/Index.cshtml ================================================ @addTagHelper *, TagHelpers Hello World Danger Style ================================================ FILE: projects/mvc/tag-helper/tag-helper-3/tag-helper-3.csproj ================================================ net10.0 TagHelpers true ================================================ FILE: projects/mvc/tag-helper/tag-helper-4/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Razor.TagHelpers; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapDefaultControllerRoute(); app.Run(); public enum AlertType { Success, Warning, Info, Danger } [HtmlTargetElement("hello")] public class HelloHelper : TagHelper { public override void Process(TagHelperContext context, TagHelperOutput output) { output.TagName = "b"; output.TagMode = TagMode.StartTagAndEndTag; output.Content.SetContent("hello"); } } [HtmlTargetElement("world")] public class WorldHelper : TagHelper { public override void Process(TagHelperContext context, TagHelperOutput output) { output.TagName = "b"; output.TagMode = TagMode.StartTagAndEndTag; output.Content.SetContent("world"); } } [HtmlTargetElement("alert")] public class AlertHelper : TagHelper { public AlertType Type { get; set; } public override void Process(TagHelperContext context, TagHelperOutput output) { output.TagName = "div"; output.TagMode = TagMode.StartTagAndEndTag; output.Attributes.Add("class", $"alert {GetAlertType()}"); } string GetAlertType() { switch (Type) { case AlertType.Success: return "alert-success"; case AlertType.Warning: return "alert-warning"; case AlertType.Info: return "alert-info"; case AlertType.Danger: return "alert-danger"; default: throw new System.ArgumentOutOfRangeException(); } } } public class HomeController : Controller { public ActionResult Index() { return View("Index"); } } ================================================ FILE: projects/mvc/tag-helper/tag-helper-4/Views/Home/Index.cshtml ================================================ @addTagHelper *, TagHelpers Greeting hooman:
    ================================================ FILE: projects/mvc/tag-helper/tag-helper-4/tag-helper-4.csproj ================================================ net10.0 true TagHelpers ================================================ FILE: projects/mvc/tag-helper/tag-helper-5/Program.cs ================================================ using Microsoft.AspNetCore.Razor.TagHelpers; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapDefaultControllerRoute(); app.Run(); public enum AlertType { Success, Warning, Info, Danger } [HtmlTargetElement("danger")] public class DangerTagHelper : TagHelper { public override void Init(TagHelperContext context) { context.Items["AlertType"] = AlertType.Danger; } } [HtmlTargetElement("warning")] public class WarningTagHelper : TagHelper { public override void Init(TagHelperContext context) { context.Items["AlertType"] = AlertType.Warning; } } [HtmlTargetElement("alert")] public class AlertHelper : TagHelper { AlertType _type { get; set; } = AlertType.Info; public override void Init(TagHelperContext context) { if (context.Items.ContainsKey("AlertType")) { _type = (AlertType)context.Items["AlertType"]; } } public override void Process(TagHelperContext context, TagHelperOutput output) { output.TagName = "div"; output.TagMode = TagMode.StartTagAndEndTag; output.Attributes.Add("class", $"alert {GetAlertType()}"); } string GetAlertType() { switch (_type) { case AlertType.Success: return "alert-success"; case AlertType.Warning: return "alert-warning"; case AlertType.Info: return "alert-info"; case AlertType.Danger: return "alert-danger"; default: throw new System.ArgumentOutOfRangeException(); } } } public class HomeController : Controller { public ActionResult Index() { return View("Index"); } } ================================================ FILE: projects/mvc/tag-helper/tag-helper-5/Views/Home/Index.cshtml ================================================ @addTagHelper *, TagHelpers Info Alert Danger Alert You can pass data from 'parent' tag to child tag. Unfortunately you cannot pass data from child tag to parent. ================================================ FILE: projects/mvc/tag-helper/tag-helper-5/tag-helper-5.csproj ================================================ net10.0 true TagHelpers ================================================ FILE: projects/mvc/tag-helper/tag-helper-img/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.UseStaticFiles(); app.MapDefaultControllerRoute(); app.Run(); public class HomeController : Controller { public ActionResult Index() { return View(); } } ================================================ FILE: projects/mvc/tag-helper/tag-helper-img/Views/Home/Index.cshtml ================================================ @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

    Cache Busting

    View the source of this page and see how the image file contains extra string other than just /kitty.png. Everytime you update your image, the links will change which force your browser to download your images. ================================================ FILE: projects/mvc/tag-helper/tag-helper-img/tag-helper-img.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/tag-helper/tag-helper-link/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.UseStaticFiles(); app.MapDefaultControllerRoute(); app.Run(); public class HomeController : Controller { public ActionResult Index() { return View(); } } ================================================ FILE: projects/mvc/tag-helper/tag-helper-link/Views/Home/Index.cshtml ================================================ @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

    Cache Busting

    View the source of this page and see how the stylesheet and js links are generated by the tag helper. Everytime you update your files, the links will change which force your browser to download your latest version of CSS/Javascript. ================================================ FILE: projects/mvc/tag-helper/tag-helper-link/tag-helper-link.csproj ================================================ net10.0 true TagHelpers ================================================ FILE: projects/mvc/tag-helper/tag-helper-link/wwwroot/hello.js ================================================ alert('hello world'); ================================================ FILE: projects/mvc/tag-helper/tag-helper-link/wwwroot/style.css ================================================ ================================================ FILE: projects/mvc/view-component/README.md ================================================ # View Component (4) We are exploring everything about ViewComponent in this section. * [ View Component - Hello world](/projects/mvc/view-component/view-component-1) This is the simplest sample of a `ViewComponent` that accept parameters. As you can see, the file for the `ViewComponent` class can be located anywhere. From the [doc](https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-components?view=aspnetcore-2.2#view-search-path) > The runtime searches for the view in the following paths: > * /Pages/Components/{View Component Name}/{View Name} > * /Views/{Controller Name}/Components/{View Component Name}/{View Name} > * /Views/Shared/Components/{View Component Name}/{View Name} > We recommend you name the view file Default.cshtml... So you will find the code for this `HelloWorldViewComponent` at `/Views/Shared/Components/HelloWorld/HelloWorld.cs` and the view at `/Views/Shared/Components/HelloWorld/Default.cshtml`. * [ View Component - Alternative Declaration](/projects/mvc/view-component/view-component-2) This sample is the same as previous sample except the use of Tag Helper invocation. Use `@addTagHelper *, ` to enable the invocation of view component as a Tag Helper. Pascal-cased view component class and properties are translated into their lower kebab case. * [ View Component - Return View Component result directly from a controller](/projects/mvc/view-component/view-component-3) This sample shows how to return the output of a View Component directly from a controller. Don't forget that your `_Layout.cshtml` won't be used here. It will just return whatever your View Component is producing. * [ View Component - Passing complex object as parameter](/projects/mvc/view-component/view-component-4) This sample shows you how to pass complex object to the View Component. dotnet6 ================================================ FILE: projects/mvc/view-component/view-component-1/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapDefaultControllerRoute(); app.Run(); public class HomeController : Controller { public ActionResult Index() => ViewComponent("HelloWorld", new { message = "Hello World", times = 10 }); } ================================================ FILE: projects/mvc/view-component/view-component-1/Views/Home/Index.cshtml ================================================ @await Component.InvokeAsync("HelloWorld", new { message = "Hello World Dear", times = 3}) ================================================ FILE: projects/mvc/view-component/view-component-1/Views/Shared/Components/HelloWorld/Default.cshtml ================================================ @model Greeting @for(var x = 0; x < Model.Repeat; x++) {

    @Model.Message

    } ================================================ FILE: projects/mvc/view-component/view-component-1/Views/Shared/Components/HelloWorld/HelloWorld.cs ================================================ using Microsoft.AspNetCore.Mvc; public class Greeting { public string Message { get; set; } public int Repeat { get; set; } } public class HelloWorldViewComponent : ViewComponent { public IViewComponentResult Invoke(string message, int times) { return View(new Greeting { Message = message, Repeat = times }); } } ================================================ FILE: projects/mvc/view-component/view-component-1/view-component.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/view-component/view-component-2/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapDefaultControllerRoute(); app.Run(); public class HomeController : Controller { public ActionResult Index() => View(); } ================================================ FILE: projects/mvc/view-component/view-component-2/Views/Home/Index.cshtml ================================================ @addTagHelper *, view-component-2 ================================================ FILE: projects/mvc/view-component/view-component-2/Views/Shared/Components/HelloWorld/Default.cshtml ================================================ @model Greeting @for(var x = 0; x < Model.Repeat; x++) {

    @Model.Message

    } ================================================ FILE: projects/mvc/view-component/view-component-2/Views/Shared/Components/HelloWorld/HelloWorld.cs ================================================ using Microsoft.AspNetCore.Mvc; using System.Threading.Tasks; public class Greeting { public string Message { get; set; } public int Repeat { get; set; } } public class HelloWorldViewComponent : ViewComponent { public IViewComponentResult Invoke(string message, int times) { return View(new Greeting { Message = message, Repeat = times }); } } ================================================ FILE: projects/mvc/view-component/view-component-2/view-component-2.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/view-component/view-component-3/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapDefaultControllerRoute(); app.Run(); public class HomeController : Controller { public ActionResult Index() => View(); } ================================================ FILE: projects/mvc/view-component/view-component-3/Views/Home/Index.cshtml ================================================ @addTagHelper *, view-component-3 ================================================ FILE: projects/mvc/view-component/view-component-3/Views/Shared/Components/HelloWorld/Default.cshtml ================================================ @model Greeting @for(var x = 0; x < Model.Repeat; x++) {

    @Model.Message

    } ================================================ FILE: projects/mvc/view-component/view-component-3/Views/Shared/Components/HelloWorld/HelloWorld.cs ================================================ using Microsoft.AspNetCore.Mvc; using System.Threading.Tasks; public class Greeting { public string Message { get; set; } public int Repeat { get; set; } } public class HelloWorldViewComponent : ViewComponent { public async Task InvokeAsync(string message, int times) { return View(new Greeting { Message = message, Repeat = times }); } } ================================================ FILE: projects/mvc/view-component/view-component-3/view-component-3.csproj ================================================ net10.0 true ================================================ FILE: projects/mvc/view-component/view-component-4/Program.cs ================================================ using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.MapDefaultControllerRoute(); app.Run(); public class RepeatMessage { public string Content { get; set; } public int Repeat { get; set; } } public class HomeController : Controller { public ActionResult Index() => View(); } ================================================ FILE: projects/mvc/view-component/view-component-4/Views/Home/Index.cshtml ================================================ @addTagHelper *, view-component-4 @{ var msg = new RepeatMessage { Content = "Hello World", Repeat = 5 }; } ================================================ FILE: projects/mvc/view-component/view-component-4/Views/Shared/Components/HelloWorld/Default.cshtml ================================================ @model PracticalAspNetCore.Greeting @for(var x = 0; x < Model.Repeat; x++) {

    @Model.Message

    } ================================================ FILE: projects/mvc/view-component/view-component-4/Views/Shared/Components/HelloWorld/HelloWorld.cs ================================================ using Microsoft.AspNetCore.Mvc; using System.Threading.Tasks; namespace PracticalAspNetCore { public class Greeting { public string Message { get; set; } public int Repeat { get; set; } } public class HelloWorldViewComponent : ViewComponent { public IViewComponentResult Invoke(RepeatMessage message) { return View(new Greeting { Message = message.Content, Repeat = message.Repeat }); } } } ================================================ FILE: projects/mvc/view-component/view-component-4/view-component-4.csproj ================================================ net10.0 true ================================================ FILE: projects/net10/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#8dbaeb", "activityBar.background": "#8dbaeb", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#d9267c", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#8dbaeb", "statusBar.background": "#61a0e4", "statusBar.debuggingBackground": "#e4a561", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#3586dd", "statusBarItem.remoteBackground": "#61a0e4", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#61a0e4", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#61a0e499", "titleBar.inactiveForeground": "#15202b99" } } ================================================ FILE: projects/net10/README.md ================================================ # ASP.NET Core 10 (12) These samples require SDK [10.0.100](https://dotnet.microsoft.com/en-us/download/dotnet/10.0) - [dotnet run](dotnet-run) This is a sample code on how you can build an ASP.NET Core application using the new .NET 10 project-less `dotnet run xxx.cs` functionality. - [open-api-8](open-api-8) This sample shows how to populate OpenAPI document with metadata from XML doc comments on methods, class, and members. - [open-api-9](open-api-9) This sample shows how to generate OpenAPI documentation YAML format. - [open-api-10](open-api-10) This sample shows how to populate OpenAPI document responses information with XML doc comment `response` element. - [open-api-11](open-api-11) This sample shows how to populate OpenAPI document response 200 information with XML doc comment `returns` element. - [redirect-http-result-is-local-url](redirect-http-result-is-local-url) This sample how to use `RedirectHttpResult.IsLocalUrl` to detect if a URL is local. - [sse-2](sse-2) Use `Results.ServerSentEvents` to return Server Side Events on Minimal API. - [sse-3](sse-3) Use `Results.ServerSentEvents` to return Server Side Events with Event Type on Minimal API. - [sse-4](sse-4) Use `Results.ServerSentEvents` to return Server Side Events with mixed events on Minimal API. ## Validation - [validation-1](validation-1) This example shows how the to validate complex object bound with the route via `[AsParameter]` attribute. - [validation-2](validation-2) This time we implement `IValidatableObject` to implement custom validation logic. - [validation-3](validation-3) This is a demo that show how built-in validation works in [FromForm] scenario but it can't really be used in a straight HTML serving scenario because right now there is no way to obtain the validation results. ================================================ FILE: projects/net10/build.bat ================================================ dotnet build open-api-8 dotnet build open-api-9 dotnet build open-api-10 dotnet build open-api-11 dotnet build redirect-http-result-is-local-url dotnet build sse-2 dotnet build sse-3 dotnet build sse-4 dotnet build validation-1 dotnet build validation-2 dotnet build validation-3 ================================================ FILE: projects/net10/build.sh ================================================ #!/bin/bash dotnet build open-api-8 dotnet build open-api-9 dotnet build open-api-10 dotnet build open-api-11 dotnet build redirect-http-result-is-local-url dotnet build sse-2 dotnet build sse-3 dotnet build sse-4 dotnet build validation-1 dotnet build validation-2 dotnet build validation-3 ================================================ FILE: projects/net10/dotnet-run/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#88ef57", "activityBar.background": "#88ef57", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#5083ee", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#88ef57", "statusBar.background": "#67eb28", "statusBar.debuggingBackground": "#ac28eb", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#4fcd13", "statusBarItem.remoteBackground": "#67eb28", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#67eb28", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#67eb2899", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#67eb28" } ================================================ FILE: projects/net10/dotnet-run/Program.cs ================================================ #:sdk Microsoft.NET.Sdk.Web #:package markdig@0.41.1 using Markdig; var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.MapGet("/", () => { var content = """ This is a project-less **ASP.NET Core** web application. """; return Results.Content($""" {Markdown.ToHtml(content)} """, "text/html"); }); app.Run(); ================================================ FILE: projects/net10/dotnet-run/README.md ================================================ # dotnet run program.cs This is a sample code on how you can build an ASP.NET Core application using the new .NET 10 project-less `dotnet run xxx.cs` functionality. You can see more about this latest feature here https://www.youtube.com/watch?v=98MizuB7i-w. Go to command line and type `dotnet run .\Program.cs` and voilla. `dotnet watch` is not working on this project-less mode. ================================================ FILE: projects/net10/global.json ================================================ { "sdk": { "version": "10.0.100", "rollForward": "major" } } ================================================ FILE: projects/net10/open-api-10/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#b1a853", "activityBar.background": "#b1a853", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#e9f5f4", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#b1a853", "statusBar.background": "#908841", "statusBar.debuggingBackground": "#414990", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#6d6731", "statusBarItem.remoteBackground": "#908841", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#908841", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#90884199", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#908841" } ================================================ FILE: projects/net10/open-api-10/Program.cs ================================================ using Microsoft.AspNetCore.Http.HttpResults; using Scalar.AspNetCore; var builder = WebApplication.CreateBuilder(); builder.Services.AddOpenApi(); var app = builder.Build(); app.MapOpenApi(); app.MapScalarApiReference(); app.MapGet("/", () => { var html = """

    OpenAPI JSON document - use response XML comment tag to annotate API

    • You can check the generated OpenAPI document here.
    • You can check the Scalar UI here.
    • """; return TypedResults.Content(html, "text/html"); }).ExcludeFromDescription(); //This is not an API endpoint app.MapGet("/hello/{name}", Hello); app.Run(); static partial class Program { /// /// Returns a greeting message /// /// /// This is a sample endpoint that returns a greeting message. /// /// Returns a greeting message /// Show error message /// The name of the person to greet public static Results, InternalServerError> Hello(string name) { try { return TypedResults.Ok($"Hello, {name}"); } catch { return TypedResults.InternalServerError("An error occurred while processing your request."); } } } ================================================ FILE: projects/net10/open-api-10/README.md ================================================ # Populate XML doc comments into OpenAPI document This sample shows how to populate OpenAPI document with metadata from XML doc comments on methods, class, and members. - `````` corresponds to `summary` in OpenAPI. - `````` corresponds to `description` in OpenAPI. - `````` corresponds to `parameters[].description` in OpenAPI. - `````` corresponds to `responses.200.description` in OpenAPI. - `````` corresponds to `responses.500.description` in OpenAPI. We are using [Scalar](https://scalar.com/) as the API interface. ================================================ FILE: projects/net10/open-api-10/open-api-10.csproj ================================================ net10.0 true true ================================================ FILE: projects/net10/open-api-10/open-api-10.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "open-api-10", "open-api-10.csproj", "{5777E22C-D52B-6F05-FE3D-B9E5E8868896}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {5777E22C-D52B-6F05-FE3D-B9E5E8868896}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5777E22C-D52B-6F05-FE3D-B9E5E8868896}.Debug|Any CPU.Build.0 = Debug|Any CPU {5777E22C-D52B-6F05-FE3D-B9E5E8868896}.Release|Any CPU.ActiveCfg = Release|Any CPU {5777E22C-D52B-6F05-FE3D-B9E5E8868896}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {038990B5-F6AA-4D55-BE0C-521ED3A5ACD5} EndGlobalSection EndGlobal ================================================ FILE: projects/net10/open-api-11/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#b1a853", "activityBar.background": "#b1a853", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#e9f5f4", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#b1a853", "statusBar.background": "#908841", "statusBar.debuggingBackground": "#414990", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#6d6731", "statusBarItem.remoteBackground": "#908841", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#908841", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#90884199", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#908841" } ================================================ FILE: projects/net10/open-api-11/Program.cs ================================================ using Scalar.AspNetCore; var builder = WebApplication.CreateBuilder(); builder.Services.AddOpenApi(); var app = builder.Build(); app.MapOpenApi(); app.MapScalarApiReference(); app.MapGet("/", () => { var html = """

      OpenAPI JSON document - use return XML comment tag to annotate API

      • You can check the generated OpenAPI document here.
      • You can check the Scalar UI here.
      • """; return TypedResults.Content(html, "text/html"); }).ExcludeFromDescription(); //This is not an API endpoint app.MapGet("/hello/{name}", Hello); app.Run(); static partial class Program { /// /// Returns a greeting message /// /// /// This is a sample endpoint that returns a greeting message. /// /// The name of the person to greet /// Greeting string message public static string Hello(string name) { return $"Hello, {name}"; } } ================================================ FILE: projects/net10/open-api-11/README.md ================================================ # Populate XML doc comments into OpenAPI document This sample shows how to populate OpenAPI document with metadata from XML doc comments on methods, class, and members. - `````` corresponds to `summary` in OpenAPI. - `````` corresponds to `description` in OpenAPI. - `````` corresponds to `parameters[].description` in OpenAPI. - `````` corresponds to `responses.200.description` in OpenAPI. We are using [Scalar](https://scalar.com/) as the API interface. ================================================ FILE: projects/net10/open-api-11/open-api-11.csproj ================================================ net10.0 true true ================================================ FILE: projects/net10/open-api-11/open-api-11.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "open-api-11", "open-api-11.csproj", "{ADF7EEA9-1A47-9C69-8D96-A24FE3E64CD7}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {ADF7EEA9-1A47-9C69-8D96-A24FE3E64CD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {ADF7EEA9-1A47-9C69-8D96-A24FE3E64CD7}.Debug|Any CPU.Build.0 = Debug|Any CPU {ADF7EEA9-1A47-9C69-8D96-A24FE3E64CD7}.Release|Any CPU.ActiveCfg = Release|Any CPU {ADF7EEA9-1A47-9C69-8D96-A24FE3E64CD7}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {488EEBE8-DFCD-4639-880B-50EE5D2789A1} EndGlobalSection EndGlobal ================================================ FILE: projects/net10/open-api-8/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#b1a853", "activityBar.background": "#b1a853", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#e9f5f4", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#b1a853", "statusBar.background": "#908841", "statusBar.debuggingBackground": "#414990", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#6d6731", "statusBarItem.remoteBackground": "#908841", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#908841", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#90884199", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#908841" } ================================================ FILE: projects/net10/open-api-8/Program.cs ================================================ using Scalar.AspNetCore; var builder = WebApplication.CreateBuilder(); builder.Services.AddOpenApi(); var app = builder.Build(); app.MapOpenApi(); app.MapScalarApiReference(); app.MapGet("/", () => { var html = """

        OpenAPI JSON document

        • You can check the generated OpenAPI document here.
        • You can check the Scalar UI here.
        • """; return TypedResults.Content(html, "text/html"); }).ExcludeFromDescription(); //This is not an API endpoint app.MapGet("/hello/{name}", Hello); app.Run(); static partial class Program { /// /// Returns a greeting message /// /// /// This is a sample endpoint that returns a greeting message. /// /// The name of the person to greet public static string Hello(string name) { return $"Hello, {name}"; } } ================================================ FILE: projects/net10/open-api-8/README.md ================================================ # Populate XML doc comments into OpenAPI document This sample shows how to populate OpenAPI document with metadata from XML doc comments on methods, class, and members. - `````` corresponds to `summary` in OpenAPI. - `````` corresponds to `description` in OpenAPI. - `````` corresponds to `parameters[].description` in OpenAPI. We are using [Scalar](https://scalar.com/) as the API interface. ================================================ FILE: projects/net10/open-api-8/open-api-8.csproj ================================================ net10.0 true true ================================================ FILE: projects/net10/open-api-8/open-api-8.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "open-api-8", "open-api-8.csproj", "{94A2B487-3A87-D5EC-A7AE-3EA833B3961F}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {94A2B487-3A87-D5EC-A7AE-3EA833B3961F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {94A2B487-3A87-D5EC-A7AE-3EA833B3961F}.Debug|Any CPU.Build.0 = Debug|Any CPU {94A2B487-3A87-D5EC-A7AE-3EA833B3961F}.Release|Any CPU.ActiveCfg = Release|Any CPU {94A2B487-3A87-D5EC-A7AE-3EA833B3961F}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {527EDA78-4C86-4F88-B6B9-A567EE04C7C4} EndGlobalSection EndGlobal ================================================ FILE: projects/net10/open-api-9/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#b1a853", "activityBar.background": "#b1a853", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#e9f5f4", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#b1a853", "statusBar.background": "#908841", "statusBar.debuggingBackground": "#414990", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#6d6731", "statusBarItem.remoteBackground": "#908841", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#908841", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#90884199", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#908841" } ================================================ FILE: projects/net10/open-api-9/Program.cs ================================================ using Microsoft.Extensions.Options; var builder = WebApplication.CreateBuilder(); builder.Services.AddOpenApi(); builder.Services.AddOpenApiDocument(); var app = builder.Build(); app.MapOpenApi("/openapi/{documentName}.json"); app.MapOpenApi("/openapi/{documentName}.yaml"); app.UseSwaggerUi(options => { options.DocumentPath = "/openapi/{documentName}.yaml"; }); app.MapGet("/", () => { var html = """

          OpenAPI JSON/YAML documents

          • You can check the generated OpenAPI document in JSON here.
          • The OpenAPI document is also available in YAML format here.
          • You can check the Swagger UI here.
          """; return TypedResults.Content(html, "text/html"); }).ExcludeFromDescription(); //This is not an API endpoint app.MapGet("/hello/{name}", Hello); app.Run(); static partial class Program { /// /// Returns a greeting message /// /// /// This is a sample endpoint that returns a greeting message. /// /// The name of the person to greet public static string Hello(string name) { return $"Hello, {name}"; } } ================================================ FILE: projects/net10/open-api-9/README.md ================================================ # OpenAPI in Yaml This sample shows how to generate OpenAPI documentation YAML format. ================================================ FILE: projects/net10/open-api-9/open-api-9.csproj ================================================ net10.0 true true ================================================ FILE: projects/net10/open-api-9/open-api-9.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "open-api-9", "open-api-9.csproj", "{BC072E34-D8AB-295D-3EBD-703BB465FB9D}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {BC072E34-D8AB-295D-3EBD-703BB465FB9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BC072E34-D8AB-295D-3EBD-703BB465FB9D}.Debug|Any CPU.Build.0 = Debug|Any CPU {BC072E34-D8AB-295D-3EBD-703BB465FB9D}.Release|Any CPU.ActiveCfg = Release|Any CPU {BC072E34-D8AB-295D-3EBD-703BB465FB9D}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {241D2B4C-8BC7-4171-8986-A0994F48440B} EndGlobalSection EndGlobal ================================================ FILE: projects/net10/redirect-http-result-is-local-url/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#b1a853", "activityBar.background": "#b1a853", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#e9f5f4", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#b1a853", "statusBar.background": "#908841", "statusBar.debuggingBackground": "#414990", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#6d6731", "statusBarItem.remoteBackground": "#908841", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#908841", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#90884199", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#908841" } ================================================ FILE: projects/net10/redirect-http-result-is-local-url/Program.cs ================================================ using Microsoft.AspNetCore.Http.HttpResults; var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.MapGet("/", () => { var html = $$"""

          RedirectHttpResult.IsLocalUrl

          • https://www.cnn.com - {{ RedirectHttpResult.IsLocalUrl("https://www.cnn.com")}}
          • /about - {{ RedirectHttpResult.IsLocalUrl("/about")}}
          • ~/ - {{ RedirectHttpResult.IsLocalUrl("~/")}}
          • """; return TypedResults.Content(html, "text/html"); }).ExcludeFromDescription(); //This is not an API endpoint app.Run(); ================================================ FILE: projects/net10/redirect-http-result-is-local-url/README.md ================================================ # Detect if URL is local using RedirectHttpResult.IsLocalUrl `RedirectHttpResult.IsLocalUrl` is useful for validating url to prevent open redirection attack. ================================================ FILE: projects/net10/redirect-http-result-is-local-url/redirect-http-result-is-local-url.csproj ================================================ net10.0 true true ================================================ FILE: projects/net10/redirect-http-result-is-local-url/redirect-http-result-is-local-url.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "redirect-http-result-is-local-url", "redirect-http-result-is-local-url.csproj", "{A68C33B4-9131-44E9-2073-799049203E17}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {A68C33B4-9131-44E9-2073-799049203E17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A68C33B4-9131-44E9-2073-799049203E17}.Debug|Any CPU.Build.0 = Debug|Any CPU {A68C33B4-9131-44E9-2073-799049203E17}.Release|Any CPU.ActiveCfg = Release|Any CPU {A68C33B4-9131-44E9-2073-799049203E17}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {093F0EFD-9AB8-4271-A48D-B4A8ACD4F7AA} EndGlobalSection EndGlobal ================================================ FILE: projects/net10/sse-2/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#b1a853", "activityBar.background": "#b1a853", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#e9f5f4", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#b1a853", "statusBar.background": "#908841", "statusBar.debuggingBackground": "#414990", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#6d6731", "statusBarItem.remoteBackground": "#908841", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#908841", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#90884199", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#908841" } ================================================ FILE: projects/net10/sse-2/Program.cs ================================================ using System.Runtime.CompilerServices; var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.MapGet("/sse", (HttpContext context, CancellationToken cancellationToken) => { async IAsyncEnumerable CounterAsync([EnumeratorCancellation] CancellationToken cancellationToken) { int count = 0; while (true && !cancellationToken.IsCancellationRequested) { yield return $"hello world {++count}"; await Task.Delay(3000, cancellationToken); } } if (context.Request.Headers["Accept"] == "text/event-stream") { return Results.ServerSentEvents(CounterAsync(cancellationToken), "greeting"); } else { return Results.BadRequest("Unsupported Accept header. Use 'text/event-stream'."); } }); app.MapGet("/", async context => { await context.Response.WriteAsync(@"

            SSE

              "); }); app.Run(); ================================================ FILE: projects/net10/sse-2/README.md ================================================ # SSE support on Minimal API Use `Results.ServerSentEvents` to return Server Side Events on Minimal API. ================================================ FILE: projects/net10/sse-2/sse-2.csproj ================================================ net10.0 true true ================================================ FILE: projects/net10/sse-2/sse-2.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "sse-2", "sse-2.csproj", "{58FABA0E-A574-B3E4-60BD-102EED691FB2}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {58FABA0E-A574-B3E4-60BD-102EED691FB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {58FABA0E-A574-B3E4-60BD-102EED691FB2}.Debug|Any CPU.Build.0 = Debug|Any CPU {58FABA0E-A574-B3E4-60BD-102EED691FB2}.Release|Any CPU.ActiveCfg = Release|Any CPU {58FABA0E-A574-B3E4-60BD-102EED691FB2}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {3D94113F-1718-4D8E-96F9-212FDCB8A8BD} EndGlobalSection EndGlobal ================================================ FILE: projects/net10/sse-3/Program.cs ================================================ using System.Runtime.CompilerServices; var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.MapGet("/sse", (HttpContext context, CancellationToken cancellationToken) => { async IAsyncEnumerable GreetingsAsync([EnumeratorCancellation] CancellationToken cancellationToken) { int count = 0; while (true && !cancellationToken.IsCancellationRequested) { yield return $"hello world {++count}"; await Task.Delay(3000, cancellationToken); } } if (context.Request.Headers.Accept == "text/event-stream") { return Results.ServerSentEvents(GreetingsAsync(cancellationToken), eventType: "greeting"); } else { return Results.BadRequest("Unsupported Accept header. Use 'text/event-stream'."); } }); app.MapGet("/", async context => { await context.Response.WriteAsync(""" Bootstrap demo

              SSE

                  """); }); app.Run(); ================================================ FILE: projects/net10/sse-3/README.md ================================================ # SSE support on Minimal API with event type Use `Results.ServerSentEvents` to return Server Side Events with event type on Minimal API. ================================================ FILE: projects/net10/sse-3/sse-3.csproj ================================================ net10.0 true true ================================================ FILE: projects/net10/sse-3/sse-3.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "sse-3", "sse-3.csproj", "{D7CCEBA8-80AA-E7FD-FCBE-C6CBA55C4671}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {D7CCEBA8-80AA-E7FD-FCBE-C6CBA55C4671}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D7CCEBA8-80AA-E7FD-FCBE-C6CBA55C4671}.Debug|Any CPU.Build.0 = Debug|Any CPU {D7CCEBA8-80AA-E7FD-FCBE-C6CBA55C4671}.Release|Any CPU.ActiveCfg = Release|Any CPU {D7CCEBA8-80AA-E7FD-FCBE-C6CBA55C4671}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {023E918C-DF48-45CE-BAAE-7792232835EF} EndGlobalSection EndGlobal ================================================ FILE: projects/net10/sse-4/Program.cs ================================================ using System.Net.ServerSentEvents; using System.Runtime.CompilerServices; var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.MapGet("/sse", (HttpContext context, CancellationToken cancellationToken) => { async IAsyncEnumerable> GetEventsAsync([EnumeratorCancellation] CancellationToken cancellationToken) { int count = 0; while (true && !cancellationToken.IsCancellationRequested) { yield return new SseItem($"hello world {++count}", "greeting"); yield return new SseItem($"{DateTime.UtcNow}"); await Task.Delay(3000, cancellationToken); } } if (context.Request.Headers.Accept == "text/event-stream") { return Results.ServerSentEvents(GetEventsAsync(cancellationToken)); } else { return Results.BadRequest("Unsupported Accept header. Use 'text/event-stream'."); } }); app.MapGet("/", async context => { await context.Response.WriteAsync(""" Bootstrap demo

                  SSE

                      """); }); app.Run(); ================================================ FILE: projects/net10/sse-4/README.md ================================================ # SSE support on Minimal API with mixed events Use `Results.ServerSentEvents` to return Server Side Events with mixed events on Minimal API. ================================================ FILE: projects/net10/sse-4/sse-4.csproj ================================================ net10.0 true true ================================================ FILE: projects/net10/sse-4/sse-4.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "sse-4", "sse-4.csproj", "{7F33450F-EE98-14DE-94CF-03A2B26B62C6}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {7F33450F-EE98-14DE-94CF-03A2B26B62C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7F33450F-EE98-14DE-94CF-03A2B26B62C6}.Debug|Any CPU.Build.0 = Debug|Any CPU {7F33450F-EE98-14DE-94CF-03A2B26B62C6}.Release|Any CPU.ActiveCfg = Release|Any CPU {7F33450F-EE98-14DE-94CF-03A2B26B62C6}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {CFF4467F-5F29-4825-AC27-2E7A56314DF2} EndGlobalSection EndGlobal ================================================ FILE: projects/net10/validation-1/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#b1a853", "activityBar.background": "#b1a853", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#e9f5f4", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#b1a853", "statusBar.background": "#908841", "statusBar.debuggingBackground": "#414990", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#6d6731", "statusBarItem.remoteBackground": "#908841", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#908841", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#90884199", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#908841" } ================================================ FILE: projects/net10/validation-1/Program.cs ================================================ using System.ComponentModel.DataAnnotations; var builder = WebApplication.CreateBuilder(); builder.Services.AddValidation(); var app = builder.Build(); app.MapGet("/", () => { var html = """

                      Validation on Route Parameters

                      """; return TypedResults.Content(html, "text/html"); }); //This is not an API endpoint app.MapGet("/validate/{name}/{age}", ([AsParameters]RouteInput input) => { return TypedResults.Ok(input); }); app.Run(); public class RouteInput { [Required, MinLength(3), MaxLength(10)] public string Name { get; set; } = string.Empty; [Required, Range(1, 100)] public int Age { get; set; } = 1; } ================================================ FILE: projects/net10/validation-1/README.md ================================================ # Validation on Minimal API based on route parameter bound to complex object This example shows how the to validate complex object bound with the route via `[AsParameter]` attribute. ================================================ FILE: projects/net10/validation-1/validation-1.csproj ================================================ net10.0 true true $(InterceptorsNamespaces);Microsoft.AspNetCore.Http.Validation.Generated ================================================ FILE: projects/net10/validation-1/validation-1.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "validation-1", "validation-1.csproj", "{F3976B81-B0F6-E251-B5BB-9B07B562C7BE}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {F3976B81-B0F6-E251-B5BB-9B07B562C7BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F3976B81-B0F6-E251-B5BB-9B07B562C7BE}.Debug|Any CPU.Build.0 = Debug|Any CPU {F3976B81-B0F6-E251-B5BB-9B07B562C7BE}.Release|Any CPU.ActiveCfg = Release|Any CPU {F3976B81-B0F6-E251-B5BB-9B07B562C7BE}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {956BA410-4910-45D3-9AD5-4AAA7D872FDE} EndGlobalSection EndGlobal ================================================ FILE: projects/net10/validation-2/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#b1a853", "activityBar.background": "#b1a853", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#e9f5f4", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#b1a853", "statusBar.background": "#908841", "statusBar.debuggingBackground": "#414990", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#6d6731", "statusBarItem.remoteBackground": "#908841", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#908841", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#90884199", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#908841" } ================================================ FILE: projects/net10/validation-2/Program.cs ================================================ using System.ComponentModel.DataAnnotations; var builder = WebApplication.CreateBuilder(); builder.Services.AddValidation(); var app = builder.Build(); app.MapGet("/", () => { var html = """

                      Validation on Route Parameters

                      """; return TypedResults.Content(html, "text/html"); }); //This is not an API endpoint app.MapGet("/validate/{name}/{age}", ([AsParameters]RouteInput input) => { return TypedResults.Ok(input); }); app.Run(); public class RouteInput : IValidatableObject { [Required] public string Name { get; set; } = string.Empty; [Required] public int Age { get; set; } = 1; public IEnumerable Validate(ValidationContext validationContext) { if (Name.Length > 10) { if (Age > 50) yield return new ValidationResult("Age must be less than 50 when name is longer than 10 characters", [nameof(Age)]); } } } ================================================ FILE: projects/net10/validation-2/README.md ================================================ # Validation on Minimal API based on route parameter bound to complex object implementing IValidatableObject This example shows how the to validate complex object bound with the route via `[AsParameter]` attribute. We will implement `IValidatableObject` interface to implement custom validation. ================================================ FILE: projects/net10/validation-2/validation-2.csproj ================================================ net10.0 true true $(InterceptorsNamespaces);Microsoft.AspNetCore.Http.Validation.Generated ================================================ FILE: projects/net10/validation-2/validation-2.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "validation-2", "validation-2.csproj", "{2BB8C121-4760-587D-ABA0-5A5EC9D9F574}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {2BB8C121-4760-587D-ABA0-5A5EC9D9F574}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2BB8C121-4760-587D-ABA0-5A5EC9D9F574}.Debug|Any CPU.Build.0 = Debug|Any CPU {2BB8C121-4760-587D-ABA0-5A5EC9D9F574}.Release|Any CPU.ActiveCfg = Release|Any CPU {2BB8C121-4760-587D-ABA0-5A5EC9D9F574}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {295B2FCB-659B-47FE-B894-D95199AE81AE} EndGlobalSection EndGlobal ================================================ FILE: projects/net10/validation-3/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#b1a853", "activityBar.background": "#b1a853", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#e9f5f4", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#b1a853", "statusBar.background": "#908841", "statusBar.debuggingBackground": "#414990", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#6d6731", "statusBarItem.remoteBackground": "#908841", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#908841", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#90884199", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#908841" } ================================================ FILE: projects/net10/validation-3/Program.cs ================================================ using System.ComponentModel.DataAnnotations; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddValidation(); builder.Services.AddAntiforgery(); var app = builder.Build(); app.MapGet("/", (IAntiforgery token, HttpContext context) => { var html = $"""

                      Server side validation

                      This is just a demo that show how built-in validation works in [FromForm] scenario but it can't really be used in a straight HTML serving scenario because right now there is no way to obtain the validation results.

                      Person Information Name must be between 2 and 50 characters Must be a valid email address Age must be between 18 and 120
                      """; return TypedResults.Content(html, "text/html"); }); app.MapPost("/validate", async ([FromForm]PersonInput input, IAntiforgery antiforgery, HttpContext context) => { await antiforgery.ValidateRequestAsync(context); return TypedResults.Ok(new { Message = "Validation successful!", Data = input }); }); app.UseAntiforgery(); app.Run(); public class PersonInput { [Required] [StringLength(50, MinimumLength = 2)] public string Name { get; set; } = string.Empty; [Required] [EmailAddress] public string Email { get; set; } = string.Empty; [Required] [Range(18, 120)] public int? Age { get; set; } } ================================================ FILE: projects/net10/validation-3/README.md ================================================ # Form Validation on Minimal API This is a demo that show how built-in validation works in [FromForm] scenario but it can't really be used in a straight HTML serving scenario because right now there is no way to obtain the validation results. ================================================ FILE: projects/net10/validation-3/validation-3.csproj ================================================ net10.0 true true $(InterceptorsNamespaces);Microsoft.AspNetCore.Http.Validation.Generated ================================================ FILE: projects/net10/validation-3/validation-3.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "validation-3", "validation-3.csproj", "{3CF277BB-0ACC-7A24-F195-C5B250AD5EA0}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {3CF277BB-0ACC-7A24-F195-C5B250AD5EA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3CF277BB-0ACC-7A24-F195-C5B250AD5EA0}.Debug|Any CPU.Build.0 = Debug|Any CPU {3CF277BB-0ACC-7A24-F195-C5B250AD5EA0}.Release|Any CPU.ActiveCfg = Release|Any CPU {3CF277BB-0ACC-7A24-F195-C5B250AD5EA0}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {2A28F5E2-1F5E-4078-9011-593119965BF7} EndGlobalSection EndGlobal ================================================ FILE: projects/net9/README.md ================================================ # ASP.NET Core 9 (3) These samples require SDK [9.0.100](https://dotnet.microsoft.com/en-us/download/dotnet/9.0) * [TypedResults.InternalServerError](typed-results-2) This example shows how to return HTTP Status 500 using `TypedResults.InternalServerError`. * [Built in OpenAPI generator](open-api-3) This example shows how to use the built in support for generating OpenAPI document. In the previous version of ASP.NET Core you have to rely third party packages such as [NSwag](https://github.com/RicoSuter/NSwag) to do so. * [Use NSWag to visualize built-in OpenAPI generator](open-api-4) This example shows how to use [NSwag](https://github.com/RicoSuter/NSwag) UI to visualize the built-in OpenAPI generator. ================================================ FILE: projects/net9/build.bat ================================================ dotnet build open-api-3 dotnet build open-api-4 dotnet build typed-results-2 ================================================ FILE: projects/net9/build.sh ================================================ #!/bin/bash dotnet build open-api-3 dotnet build open-api-4 dotnet build typed-results-2 ================================================ FILE: projects/net9/global.json ================================================ { "sdk": { "version": "9.0.100", "rollForward": "major" } } ================================================ FILE: projects/net9/open-api-3/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#b1a853", "activityBar.background": "#b1a853", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#e9f5f4", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#b1a853", "statusBar.background": "#908841", "statusBar.debuggingBackground": "#414990", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#6d6731", "statusBarItem.remoteBackground": "#908841", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#908841", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#90884199", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#908841" } ================================================ FILE: projects/net9/open-api-3/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddOpenApi(); var app = builder.Build(); app.MapOpenApi(); app.MapGet("/", () => { var html = """

                      OpenAPI JSON document

                      You can check the generated OpenAPI document here. """; return TypedResults.Content(html, "text/html"); }).ExcludeFromDescription(); //This is not an API endpoint app.MapGet("/hello/{name}", (string name) => $"Hello {name}"!); app.Run(); ================================================ FILE: projects/net9/open-api-3/README.md ================================================ # OpenAPI Document Generator This example shows how to use the built in support for generating OpenAPI document. In the previous version of ASP.NET Core you have to rely third party packages such as [NSwag](https://github.com/RicoSuter/NSwag) to do so. You can see that we use `.ExcludeFromDescription();` to exclude `MapGet("\")` from being described in the generated OpenAPI document. ================================================ FILE: projects/net9/open-api-3/open-api-3.csproj ================================================ net10.0 true ================================================ FILE: projects/net9/open-api-3/open-api-3.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "open-api-3", "open-api-3.csproj", "{A79A546B-8EB4-4C66-AE67-6BF3A3D55CFC}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {A79A546B-8EB4-4C66-AE67-6BF3A3D55CFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A79A546B-8EB4-4C66-AE67-6BF3A3D55CFC}.Debug|Any CPU.Build.0 = Debug|Any CPU {A79A546B-8EB4-4C66-AE67-6BF3A3D55CFC}.Release|Any CPU.ActiveCfg = Release|Any CPU {A79A546B-8EB4-4C66-AE67-6BF3A3D55CFC}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {597645EA-4A9D-49D3-80A0-EA3CFA04E687} EndGlobalSection EndGlobal ================================================ FILE: projects/net9/open-api-4/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#b1a853", "activityBar.background": "#b1a853", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#e9f5f4", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#b1a853", "statusBar.background": "#908841", "statusBar.debuggingBackground": "#414990", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#6d6731", "statusBarItem.remoteBackground": "#908841", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#908841", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#90884199", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#908841" } ================================================ FILE: projects/net9/open-api-4/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddOpenApi(); builder.Services.AddOpenApiDocument(); var app = builder.Build(); app.MapOpenApi(); app.UseSwaggerUi(options => { options.DocumentPath = "/openapi/{documentName}.json"; }); app.MapGet("/", () => { var html = """

                      OpenAPI JSON document

                      • You can check the generated OpenAPI document here.
                      • You can check the Swagger UI here.
                      • """; return TypedResults.Content(html, "text/html"); }).ExcludeFromDescription(); //This is not an API endpoint app.MapGet("/hello/{name}", (string name) => $"Hello {name}"!); app.Run(); ================================================ FILE: projects/net9/open-api-4/README.md ================================================ # Use NSWag to visualize the built-in OpenAPI generator This example shows how to use [NSwag](https://github.com/RicoSuter/NSwag) UI to visualize the built-in OpenAPI generator. ================================================ FILE: projects/net9/open-api-4/open-api-4.csproj ================================================ net10.0 true ================================================ FILE: projects/net9/open-api-4/open-api-4.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "open-api-4", "open-api-4.csproj", "{18F274F2-BD7D-4164-846B-E6A1373D665B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {18F274F2-BD7D-4164-846B-E6A1373D665B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {18F274F2-BD7D-4164-846B-E6A1373D665B}.Debug|Any CPU.Build.0 = Debug|Any CPU {18F274F2-BD7D-4164-846B-E6A1373D665B}.Release|Any CPU.ActiveCfg = Release|Any CPU {18F274F2-BD7D-4164-846B-E6A1373D665B}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {6C439372-8D1E-4F3C-BD19-2AA2F74094E1} EndGlobalSection EndGlobal ================================================ FILE: projects/net9/typed-results-2/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#b1a853", "activityBar.background": "#b1a853", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#e9f5f4", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#b1a853", "statusBar.background": "#908841", "statusBar.debuggingBackground": "#414990", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#6d6731", "statusBarItem.remoteBackground": "#908841", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#908841", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#90884199", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#908841" } ================================================ FILE: projects/net9/typed-results-2/Program.cs ================================================ var app = WebApplication.Create(); app.MapGet("/", () => TypedResults.InternalServerError("Something is wrong with the server.")); app.Run(); ================================================ FILE: projects/net9/typed-results-2/README.md ================================================ # TypeResults.InternalServerError [TypeResults](https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.typedresults?view=aspnetcore-8.0) added `TypeResults.InternalServerError` on top of existing HTTP statuses supported by the class. ================================================ FILE: projects/net9/typed-results-2/typed-results-2.csproj ================================================ net10.0 true ================================================ FILE: projects/net9/typed-results-2/typed-results-2.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "typed-results-2", "typed-results-2.csproj", "{765B8E83-FA40-4D3D-BA9B-03E75FF371EA}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {765B8E83-FA40-4D3D-BA9B-03E75FF371EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {765B8E83-FA40-4D3D-BA9B-03E75FF371EA}.Debug|Any CPU.Build.0 = Debug|Any CPU {765B8E83-FA40-4D3D-BA9B-03E75FF371EA}.Release|Any CPU.ActiveCfg = Release|Any CPU {765B8E83-FA40-4D3D-BA9B-03E75FF371EA}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {E1B576F2-2AC7-49E9-839E-88E98D533F3A} EndGlobalSection EndGlobal ================================================ FILE: projects/open-telemetry/Readme.md ================================================ # Open Telemetry (3) * [Open Telemetry 1](/projects/open-telemetry/open-telemetry-1) In this example we setup a basic Open Telemetry Tracing and show it to the console. We also add a service name to the trace. * [Open Telemetry 2](/projects/open-telemetry/open-telemetry-2) In this example we will set up an Open Telemetry span and record **events** to it. * [Open Telemetry 3](/projects/open-telemetry/open-telemetry-3) In this example we will set up an Open Telemetry span and record **attributes** to it. ================================================ FILE: projects/open-telemetry/build.bat ================================================ dotnet build open-telemetry-1 dotnet build open-telemetry-2 dotnet build open-telemetry-3 dotnet build open-telemetry-4 ================================================ FILE: projects/open-telemetry/build.sh ================================================ #!/bin/bash dotnet build open-telemetry-1 dotnet build open-telemetry-2 dotnet build open-telemetry-3 dotnet build open-telemetry-4 ================================================ FILE: projects/open-telemetry/open-telemetry-1/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#add061", "activityBar.background": "#add061", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#3386ac", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#add061", "statusBar.background": "#98c43a", "statusBar.debuggingBackground": "#663ac4", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#799d2e", "statusBarItem.remoteBackground": "#98c43a", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#98c43a", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#98c43a99", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#98c43a" } ================================================ FILE: projects/open-telemetry/open-telemetry-1/Program.cs ================================================ using System.Diagnostics; using OpenTelemetry.Trace; using OpenTelemetry.Resources; using OpenTelemetry.Exporter; var builder = WebApplication.CreateBuilder(); builder.Services.AddOpenTelemetry().WithTracing((b) => { b.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(builder.Environment.ApplicationName)) .AddAspNetCoreInstrumentation() .AddConsoleExporter( options => options.Targets = ConsoleExporterOutputTargets.Console); }); WebApplication app = builder.Build(); app.Run(async context => { var traceId = Activity.Current?.TraceId; await context.Response.WriteAsync($"Trace Id {traceId}"); }); await app.RunAsync(); ================================================ FILE: projects/open-telemetry/open-telemetry-1/Readme.md ================================================ # Basic Open Telemetry In this example we setup a basic Open Telemetry Tracing and show it to the console. We also add a service name to the trace. ================================================ FILE: projects/open-telemetry/open-telemetry-1/open-telemetry-1.csproj ================================================ net10.0 true ================================================ FILE: projects/open-telemetry/open-telemetry-1/open-telemetry-1.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "open-telemetry-1", "open-telemetry-1.csproj", "{17D67DD5-1DEC-4530-A7BE-A47F81614738}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {17D67DD5-1DEC-4530-A7BE-A47F81614738}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {17D67DD5-1DEC-4530-A7BE-A47F81614738}.Debug|Any CPU.Build.0 = Debug|Any CPU {17D67DD5-1DEC-4530-A7BE-A47F81614738}.Release|Any CPU.ActiveCfg = Release|Any CPU {17D67DD5-1DEC-4530-A7BE-A47F81614738}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {90D1951A-D6D2-45D4-8B31-F3EF13549C80} EndGlobalSection EndGlobal ================================================ FILE: projects/open-telemetry/open-telemetry-2/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#5dc2ed", "activityBar.background": "#5dc2ed", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#e619a9", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#5dc2ed", "statusBar.background": "#2fb1e8", "statusBar.debuggingBackground": "#e8662f", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#1797cd", "statusBarItem.remoteBackground": "#2fb1e8", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#2fb1e8", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#2fb1e899", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#2fb1e8" } ================================================ FILE: projects/open-telemetry/open-telemetry-2/Program.cs ================================================ using System.Diagnostics; using OpenTelemetry.Trace; using OpenTelemetry.Resources; using OpenTelemetry.Exporter; var builder = WebApplication.CreateBuilder(); builder.Services.AddOpenTelemetry().WithTracing(b => { b .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(builder.Environment.ApplicationName)) .AddAspNetCoreInstrumentation() .AddConsoleExporter( options => options.Targets = ConsoleExporterOutputTargets.Console); }); WebApplication app = builder.Build(); app.Run(async context => { if (context.Request.Path == "/") { await Task.Delay(2000); Activity.Current?.AddEvent(new ActivityEvent("Getting trace id")); var traceId = Activity.Current?.TraceId; await context.Response.WriteAsync($"Trace Id {traceId}"); Activity.Current?.AddEvent(new ActivityEvent("After showing trace id")); await Task.Delay(2000); await context.Response.WriteAsync($"\nHello World"); Activity.Current?.AddEvent(new ActivityEvent("After showing hello world")); } }); await app.RunAsync(); ================================================ FILE: projects/open-telemetry/open-telemetry-2/Readme.md ================================================ # Record events into a current OTel span Use existing ASP.NET Core OTel span to record events. ``` Activity.TraceId: 5e1f4ddfeecde7b52a3d7823fd2256a3 Activity.SpanId: 442681a750f843b8 Activity.TraceFlags: Recorded Activity.ActivitySourceName: OpenTelemetry.Instrumentation.AspNetCore Activity.DisplayName: / Activity.Kind: Server Activity.StartTime: 2022-06-21T08:01:16.0231599Z Activity.Duration: 00:00:04.0263921 Activity.Tags: http.host: localhost:5000 http.method: GET http.target: / http.url: http://localhost:5000/ http.user_agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0 http.status_code: 200 StatusCode : UNSET Activity.Events: Getting trace id [6/21/2022 8:01:18 AM +00:00] After showing trace id [6/21/2022 8:01:18 AM +00:00] After showing hello world [6/21/2022 8:01:20 AM +00:00] Resource associated with Activity: service.name: open-telemetry-2 service.instance.id: 49c0f853-4ba3-4920-b2d5-6c1147c40402 ``` ================================================ FILE: projects/open-telemetry/open-telemetry-2/open-telemetry-2.csproj ================================================ net10.0 true ================================================ FILE: projects/open-telemetry/open-telemetry-2/open-telemetry-2.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "open-telemetry-2", "open-telemetry-2.csproj", "{AEF8372A-0385-4CEF-B191-0695E8FD9741}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {AEF8372A-0385-4CEF-B191-0695E8FD9741}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AEF8372A-0385-4CEF-B191-0695E8FD9741}.Debug|Any CPU.Build.0 = Debug|Any CPU {AEF8372A-0385-4CEF-B191-0695E8FD9741}.Release|Any CPU.ActiveCfg = Release|Any CPU {AEF8372A-0385-4CEF-B191-0695E8FD9741}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {E8C62603-08A4-4C12-A6B2-7EFFC856DD4B} EndGlobalSection EndGlobal ================================================ FILE: projects/open-telemetry/open-telemetry-3/Program.cs ================================================ using System.Diagnostics; using OpenTelemetry.Trace; using OpenTelemetry.Resources; using OpenTelemetry.Exporter; var builder = WebApplication.CreateBuilder(); builder.Services.AddOpenTelemetry().WithTracing(b => { b.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(builder.Environment.ApplicationName)) .AddAspNetCoreInstrumentation() .AddConsoleExporter( options => options.Targets = ConsoleExporterOutputTargets.Console); }); WebApplication app = builder.Build(); app.Run(async context => { if (context.Request.Path == "/") { await Task.Delay(2000); Activity.Current?.SetTag("project", "practical-aspnetcore"); Activity.Current?.SetTag("location", "Cairo"); var traceId = Activity.Current?.TraceId; await context.Response.WriteAsync($"Trace Id {traceId}"); await Task.Delay(2000); await context.Response.WriteAsync($"\nHello World"); } }); await app.RunAsync(); ================================================ FILE: projects/open-telemetry/open-telemetry-3/Readme.md ================================================ # Record OTel attributes Record OTel attributes into a current span. ``` Activity.TraceId: d96b296d7783e5f1f17dcdb0c476e0b9 Activity.SpanId: 6f57ceb582a36727 Activity.TraceFlags: Recorded Activity.ActivitySourceName: OpenTelemetry.Instrumentation.AspNetCore Activity.DisplayName: / Activity.Kind: Server Activity.StartTime: 2022-06-23T08:17:01.8251609Z Activity.Duration: 00:00:04.2195936 Activity.Tags: http.host: localhost:5000 http.method: GET http.target: / http.url: http://localhost:5000/ http.user_agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0 project: practical-aspnetcore location: Cairo http.status_code: 200 StatusCode : UNSET Resource associated with Activity: service.name: open-telemetry-3 service.instance.id: 2fed6f53-4558-4878-a1b8-fcdbd626a087 ``` ================================================ FILE: projects/open-telemetry/open-telemetry-3/open-telemetry-3.csproj ================================================ net10.0 true ================================================ FILE: projects/open-telemetry/open-telemetry-4/Program.cs ================================================ using System.Diagnostics; using OpenTelemetry.Trace; using OpenTelemetry.Resources; var builder = WebApplication.CreateBuilder(); builder.Services.AddOpenTelemetry().WithTracing(b => { b.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(builder.Environment.ApplicationName)) .AddHttpClientInstrumentation(); }); builder.Services.AddHttpClient(); builder.Logging.SetMinimumLevel(LogLevel.Information); WebApplication app = builder.Build(); app.MapGet("/", async (HttpRequest request, IHttpClientFactory clientFactory) => { Activity.Current?.AddBaggage ("project", "practical-aspnetcore"); Activity.Current?.AddBaggage ("location", "Cairo"); var baggage = string.Join(",", Activity.Current.Baggage.ToDictionary(b => b.Key, b => b.Value).Select(x => x.Key + "=" + x.Value)); var client = clientFactory.CreateClient(); //client.DefaultRequestHeaders.Add("baggage", baggage); var url = request.Scheme + "://" + request.Host + "/baggage"; app.Logger.LogInformation("REQUEST URL " + url); var response = await client.GetAsync(url); return Results.Text("Check the log", "text/plain"); }); app.MapGet("/baggage", (HttpRequest request) => { var baggage = request.Headers["baggage"]; app.Logger.LogInformation($"BAGGAGE VALUES {baggage}"); return Results.Ok(); }); app.Run(); ================================================ FILE: projects/open-telemetry/open-telemetry-4/Readme.md ================================================ # Record OTel baggage and pass it to HttpClient This sample is about setting up [OTel baggage](https://www.w3.org/TR/baggage/), which pass user-defined properties via `baggage` HTTP header, to the next HTTP request. ================================================ FILE: projects/open-telemetry/open-telemetry-4/open-telemetry-4.csproj ================================================ net10.0 true ================================================ FILE: projects/orchard-core/README.md ================================================ # Orchard Core Framework (4) This section contains samples of project relying on [Orchard Core Framework](https://orchardcore.readthedocs.io/en/dev/). This section is a bit more advanced than the other parts of Practical ASP.NET Core. Orchard Core Framework is interesting because it provides infrastructure to modularize your application. It also go further in providing facilities to create multi tenant application, which is super hard to get right if you start from scratch. Orchard Core Framework powers Orchard Core CMS - you can use the framework independently on systems that have nothing to do with content management. Notes: - To run a sample, go to each sample folder and go to the `Host` folder. - All module will have `Module` prefix. - We will be using RC1 (or later) version of Orchard Core. - The samples in this section will receive frequent revisions as I am exploring the framework as I produce these samples. * [Routing - MVC](/projects/orchard-core/routing) This sample shows how routing works in an Orchard Core Framework app. * [Routing - Razor Pages](/projects/orchard-core/routing-2) This sample shows how routing works in an Orchard Core Framework app when you are using Razor Pages. * [Static Files](/projects/orchard-core/static-files) This sample shows how to use static files in the module. * [Multi Tenant](/projects/orchard-core/multi-tenant) This sample shows how Orchard Core Framework handles multi tenancy and how each tenant have its own configuration file. dotnet8 ================================================ FILE: projects/orchard-core/build.bat ================================================ dotnet build multi-tenant\host dotnet build routing\host dotnet build routing-2\host dotnet build routing-3\host dotnet build static-files\host ================================================ FILE: projects/orchard-core/build.sh ================================================ #!/bin/bash dotnet build multi-tenant/host dotnet build routing/host dotnet build routing-2/host dotnet build routing-3/host dotnet build static-files/host ================================================ FILE: projects/orchard-core/decoupled-cms/Pages/Index.cshtml ================================================ @page @inherits OrchardCore.DisplayManagement.RazorPages.Page @{ ViewLayout = "Layout__Frontend"; } Hello world ================================================ FILE: projects/orchard-core/decoupled-cms/Program.cs ================================================ var builder = WebApplication.CreateBuilder(args); builder.Services.AddOrchardCms(); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseOrchardCore(x => x.UsePoweredByOrchardCore(enabled: false)); app.Run(); ================================================ FILE: projects/orchard-core/decoupled-cms/Views/Layout-Frontend.cshtml ================================================ @inherits OrchardCore.DisplayManagement.Razor.RazorPage

                        This is layout

                        @await RenderBodyAsync()
                        ================================================ FILE: projects/orchard-core/decoupled-cms/decouple-cms.csproj ================================================ net10.0 enable enable true ================================================ FILE: projects/orchard-core/decoupled-cms/wwwroot/.placeholder ================================================ ================================================ FILE: projects/orchard-core/multi-tenant/Host/App_Data/Sites/CustomerA/DataProtection-Keys/key-806fccc8-1694-40a4-a114-b937a4f5f8bb.xml ================================================  2019-03-31T07:37:35.6667072Z 2019-03-31T07:37:35.6652058Z 2019-06-29T07:37:35.6652058Z ChEuLu6HlKSjBKtk1+tO4vA+7EEBnJqLGMmf22gwRnKW4ulhAYODlRNxwm0fBu9cB//hSl2eMleS4bxjdIxXgQ== ================================================ FILE: projects/orchard-core/multi-tenant/Host/App_Data/Sites/CustomerA/appSettings.json ================================================ { "CustomSetting": "Custom setting for Customer A", "CustomerLevel": "Basic" } ================================================ FILE: projects/orchard-core/multi-tenant/Host/App_Data/Sites/CustomerB/DataProtection-Keys/key-72549719-b179-4c21-8730-4e4789c067cd.xml ================================================  2019-03-31T07:47:16.7034374Z 2019-03-31T07:47:16.7020998Z 2019-06-29T07:47:16.7020998Z tYvZlyd30hGGuXIoVrnH2ai/X5ouJnrESgXr4A+UKOm9w3fcjjhD4ahPJVS7sqOvlRl7NXCy2+yW+jnw0umLbQ== ================================================ FILE: projects/orchard-core/multi-tenant/Host/App_Data/Sites/CustomerB/appSettings.json ================================================ { "CustomSetting": "Custom setting for Customer B", "CustomerLevel": "VIP" } ================================================ FILE: projects/orchard-core/multi-tenant/Host/App_Data/Sites/Default/DataProtection-Keys/key-f9f0a416-65d2-47d5-80f3-4f0272b538fe.xml ================================================  2019-03-29T20:50:57.7942781Z 2019-03-29T20:50:57.7935641Z 2019-06-27T20:50:57.7935641Z TqoLEuQqQC6biti8Z63FVhWnV4l2Cargo1oLluHrek2ytvaB7uAkFIC5jbLZEhcAUifE66PTyZzguECrRi3aWw== ================================================ FILE: projects/orchard-core/multi-tenant/Host/App_Data/Sites/Default/appSettings.json ================================================ { "CustomSetting": "Custom setting for Default tenant", "CustomerLevel": "Premium" } ================================================ FILE: projects/orchard-core/multi-tenant/Host/App_Data/tenants.json ================================================ { "Default": { "State": "Running", "RequestUrlHost": null, "RequestUrlPrefix": null }, "CustomerA": { "State": "Running", "RequestUrlHost": null, "RequestUrlPrefix": "customer-a" }, "CustomerB": { "State": "Running", "RequestUrlHost": null, "RequestUrlPrefix": "customer-b" } } ================================================ FILE: projects/orchard-core/multi-tenant/Host/Host.csproj ================================================ net10.0 true true ================================================ FILE: projects/orchard-core/multi-tenant/Host/Pages/Index.cshtml ================================================ @page @using OrchardCore.Environment.Shell @inject ShellSettings Settings

                        Shell Settings

                        Name @Settings.Name
                        State @Settings.State
                        Prefix @Settings.RequestUrlPrefix
                        Custom Setting @Settings["CustomSetting"]
                        Customer Level @Settings["CustomerLevel"]
                        ================================================ FILE: projects/orchard-core/multi-tenant/Host/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddOrchardCore().AddMvc().WithTenants(); var app = builder.Build(); app.UseOrchardCore(); app.Run(); ================================================ FILE: projects/orchard-core/multi-tenant/Host/Views/Shared/_Layout.cshtml ================================================  Orchard Core Framework @RenderSection("CssInline", required: false) @RenderBody()

                        © @DateTime.Now.Year - Orchard Core Framework

                        @RenderSection("JsInline", required: false) ================================================ FILE: projects/orchard-core/multi-tenant/Host/_ViewImports.cshtml ================================================ @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: projects/orchard-core/multi-tenant/Host/_ViewStart.cshtml ================================================ @{ Layout = "~/Views/Shared/_Layout.cshtml"; } ================================================ FILE: projects/orchard-core/multi-tenant/Host/appsettings.json ================================================ { "Logging": { "LogLevel": { "Default": "Warning" } }, "AllowedHosts": "*" } ================================================ FILE: projects/orchard-core/multi-tenant/README.md ================================================ # multi tenant configuration file Orchard Core Framework (OCF) support multi-tenancy via url, either by host or prefix. This sample shows how OCF provides the infrastructure for each tenant to have its own configuration file. The tenants are configured at `App_Data/tenants.json`. Additional tenant specific configuration information can be found at `App_Data/Sites/{TenantName}/appSettings.json`. All these information is accessible via `OrchardCore.Environment.Shell.ShellSettings`. ================================================ FILE: projects/orchard-core/routing/ForumModule/Controllers/HomeController.cs ================================================ using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ForumModule.Controllers { public class HomeController : Controller { public ActionResult Index() => Content("From Forum"); } } ================================================ FILE: projects/orchard-core/routing/ForumModule/ForumModule.csproj ================================================ net10.0 true true ================================================ FILE: projects/orchard-core/routing/ForumModule/Manifest.cs ================================================ using OrchardCore.Modules.Manifest; [assembly: Module( Name = "ForumModule", Author = "The Orchard Team", Website = "http://orchardproject.net", Version = "0.0.1", Description = "Forum Module", Category = "Forum Module" )] ================================================ FILE: projects/orchard-core/routing/ForumModule/Startup.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.DependencyInjection; using OrchardCore.Modules; namespace ForumModule; public class Startup : StartupBase { public override void ConfigureServices(IServiceCollection services) { } public override void Configure(IApplicationBuilder builder, IEndpointRouteBuilder routes, IServiceProvider serviceProvider) { routes.MapAreaControllerRoute ( name: "ForumHome", areaName: "ForumModule", pattern: "Forum", defaults: new { controller = "Home", action = "Index" } ); } } ================================================ FILE: projects/orchard-core/routing/ForumModule/Views/Home/Index.cshtml ================================================ Hello from Forum Module ================================================ FILE: projects/orchard-core/routing/Host/App_Data/Sites/Default/DataProtection-Keys/key-f9f0a416-65d2-47d5-80f3-4f0272b538fe.xml ================================================  2019-03-29T20:50:57.7942781Z 2019-03-29T20:50:57.7935641Z 2019-06-27T20:50:57.7935641Z TqoLEuQqQC6biti8Z63FVhWnV4l2Cargo1oLluHrek2ytvaB7uAkFIC5jbLZEhcAUifE66PTyZzguECrRi3aWw== ================================================ FILE: projects/orchard-core/routing/Host/Controllers/HomeController.cs ================================================ using Microsoft.AspNetCore.Mvc; namespace Host { [Route("")] public class HomeController : Controller { public IActionResult Index() => View(); } } ================================================ FILE: projects/orchard-core/routing/Host/Host.csproj ================================================ net10.0 true true ================================================ FILE: projects/orchard-core/routing/Host/Pages/Routes.cshtml ================================================ @page @inject Microsoft.AspNetCore.Mvc.Infrastructure.IActionDescriptorCollectionProvider Actions @{ Layout = null; } Orchard Core Framework

                        Routing Table

                        Interesting facts:

                        • MVC Controllers are processed first, whether it is via conventional routing or attribute routing
                        • Razor pages added last

                        Links in the routing table

                        @functions{ public List<(string type, string url)> Routes = new List<(string, string)>(); public void OnGet() { foreach (var d in Actions.ActionDescriptors.Items) { if (d.AttributeRouteInfo != null) { string rr = string.Empty; var template = $"{d.AttributeRouteInfo?.Template}"; if (template.StartsWith('/')) rr = template; else rr = $"/{template}"; Routes.Add(("Attribute Routing", rr)); } else { string routeValues = string.Empty; if (d.RouteValues.ContainsKey("area")) routeValues = $"/{d.RouteValues["area"]}/{d.RouteValues["controller"]}/{d.RouteValues["action"]}"; else routeValues = $"/{d.RouteValues["controller"]}/{d.RouteValues["action"]}"; if (!string.IsNullOrWhiteSpace(routeValues)) Routes.Add(("Conventional", routeValues)); } } } } ================================================ FILE: projects/orchard-core/routing/Host/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddOrchardCore().AddMvc(); var app = builder.Build(); app.UseOrchardCore(); app.Run(); ================================================ FILE: projects/orchard-core/routing/Host/Views/Home/Index.cshtml ================================================

                        Host App

                        ================================================ FILE: projects/orchard-core/routing/Host/Views/Shared/_Layout.cshtml ================================================  Orchard Core Framework @RenderSection("CssInline", required: false)
                        @RenderBody()

                        © @DateTime.Now.Year - Orchard Core Framework

                        @RenderSection("JsInline", required: false) ================================================ FILE: projects/orchard-core/routing/Host/_ViewImports.cshtml ================================================ @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: projects/orchard-core/routing/Host/_ViewStart.cshtml ================================================ @{ Layout = "~/Views/Shared/_Layout.cshtml"; } ================================================ FILE: projects/orchard-core/routing/Host/appsettings.json ================================================ { "Logging": { "LogLevel": { "Default": "Warning" } }, "AllowedHosts": "*" } ================================================ FILE: projects/orchard-core/routing/README.md ================================================ # Routing This sample shows how the routing works in an Orchard Core Framework application. We have two modules in this sample: * ForumModule * TicketModule Each of this module uses `OrchardCore.Module.Targets`. The host application is a normal ASP.NET Core app that uses `OrchardCore.Application.Mvc.Targets` and has references to the projects of `ForumModule` and `TicketModule`. By default, OCF creates areas based on the name of your modules. Hence we have `ForumModule` and `TicketModule` areas in this app. If you want to customize the routing of each module, you can do it via the `Startup.cs` located under each module. Make sure that `routes.MapAreaControllerRoute` `AreaName` matches the name of your module otherwise it won't work. ================================================ FILE: projects/orchard-core/routing/TicketModule/Controllers/HomeController.cs ================================================ using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TicketModule.Controllers { public class HomeController : Controller { public ActionResult Index() => Content("From Ticket"); public ActionResult About() => Content("About Ticket"); } } ================================================ FILE: projects/orchard-core/routing/TicketModule/Controllers/LoginController.cs ================================================ using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TicketModule.Controllers { public class LoginController : Controller { public ActionResult Index() => Content("From Ticket Login"); } } ================================================ FILE: projects/orchard-core/routing/TicketModule/Manifest.cs ================================================ using OrchardCore.Modules.Manifest; [assembly: Module( Name = "TicketModule", Author = "The Orchard Team", Website = "http://orchardproject.net", Version = "0.0.1", Description = "Ticket Module", Category = "Ticket Module" )] ================================================ FILE: projects/orchard-core/routing/TicketModule/Startup.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.DependencyInjection; using OrchardCore.Modules; namespace TicketModule; public class Startup : StartupBase { public override void ConfigureServices(IServiceCollection services) { } public override void Configure(IApplicationBuilder builder, IEndpointRouteBuilder routes, IServiceProvider serviceProvider) { routes.MapAreaControllerRoute( name: "TicketHome", areaName: "TicketModule", pattern: "Ticket", defaults: new { controller = "Login", action = "Index" }); } } ================================================ FILE: projects/orchard-core/routing/TicketModule/TicketModule.csproj ================================================ net10.0 true true ================================================ FILE: projects/orchard-core/routing-2/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/Host/bin/Debug/netcoreapp3.1/Host.dll", "args": [], "cwd": "${workspaceFolder}/Host", "stopAtEntry": false, "launchBrowser": { "enabled": true }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: projects/orchard-core/routing-2/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/Host/Host.csproj" ], "problemMatcher": "$tsc" }, { "label": "publish", "command": "dotnet", "type": "process", "args": [ "publish", "${workspaceFolder}/Host/Host.csproj" ], "problemMatcher": "$tsc" }, { "label": "watch", "command": "dotnet", "type": "process", "args": [ "watch", "run", "${workspaceFolder}/Host/Host.csproj" ], "problemMatcher": "$tsc" } ] } ================================================ FILE: projects/orchard-core/routing-2/ForumModule/ForumModule.csproj ================================================ net10.0 true true ================================================ FILE: projects/orchard-core/routing-2/ForumModule/Manifest.cs ================================================ using OrchardCore.Modules.Manifest; [assembly: Module( Name = "ForumModule", Author = "The Orchard Team", Website = "http://orchardproject.net", Version = "0.0.1", Description = "Forum Module", Category = "Forum Module" )] ================================================ FILE: projects/orchard-core/routing-2/ForumModule/Pages/Index.cshtml ================================================ @page ""

                        This is from the Forum Module

                        ================================================ FILE: projects/orchard-core/routing-2/ForumModule/Pages/Products.cshtml ================================================ @page "/products"

                        This product listing from Forum Module

                        ================================================ FILE: projects/orchard-core/routing-2/ForumModule/Pages/Users.cshtml ================================================ @page

                        User List from Forum Module

                        ================================================ FILE: projects/orchard-core/routing-2/ForumModule/Startup.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.DependencyInjection; using OrchardCore.Modules; namespace ForumModule; public class Startup : StartupBase { public override void ConfigureServices(IServiceCollection services) { } public override void Configure(IApplicationBuilder builder, IEndpointRouteBuilder routes, IServiceProvider serviceProvider) { } } ================================================ FILE: projects/orchard-core/routing-2/Host/App_Data/Sites/Default/DataProtection-Keys/key-f9f0a416-65d2-47d5-80f3-4f0272b538fe.xml ================================================  2019-03-29T20:50:57.7942781Z 2019-03-29T20:50:57.7935641Z 2019-06-27T20:50:57.7935641Z TqoLEuQqQC6biti8Z63FVhWnV4l2Cargo1oLluHrek2ytvaB7uAkFIC5jbLZEhcAUifE66PTyZzguECrRi3aWw== ================================================ FILE: projects/orchard-core/routing-2/Host/Controllers/HomeController.cs ================================================ using Microsoft.AspNetCore.Mvc; namespace Host { [Route("")] public class HomeController : Controller { public IActionResult Index() => View(); } } ================================================ FILE: projects/orchard-core/routing-2/Host/Host.csproj ================================================ net10.0 true true ================================================ FILE: projects/orchard-core/routing-2/Host/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddOrchardCore().AddMvc(); var app = builder.Build(); app.UseOrchardCore(); app.Run(); ================================================ FILE: projects/orchard-core/routing-2/Host/Views/Home/Index.cshtml ================================================

                        Host App

                        Here you see samples of how the @@page custom routing interact with Orchard Core Framework module system out of the box.

                        ================================================ FILE: projects/orchard-core/routing-2/Host/Views/Shared/_Layout.cshtml ================================================  Orchard Core Framework @RenderSection("CssInline", required: false)
                        @RenderBody()

                        © @DateTime.Now.Year - Orchard Core Framework

                        @RenderSection("JsInline", required: false) ================================================ FILE: projects/orchard-core/routing-2/Host/_ViewImports.cshtml ================================================ @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: projects/orchard-core/routing-2/Host/_ViewStart.cshtml ================================================ @{ Layout = "~/Views/Shared/_Layout.cshtml"; } ================================================ FILE: projects/orchard-core/routing-2/Host/appsettings.json ================================================ { "Logging": { "LogLevel": { "Default": "Warning" } }, "AllowedHosts": "*" } ================================================ FILE: projects/orchard-core/routing-2/README.md ================================================ # Routing with Razor Pages This sample shows how the routing works in an Orchard Core Framework application when you are using Razor Pages. *Note*: To see the where the custom routes are defined, go to individual page at the modules. It is defined using `@page` attribute at each page. We have two modules in this sample: * ForumModule * TicketModule Each of this module uses `OrchardCore.Module.Targets`. The host application is a normal ASP.NET Core app that uses `OrchardCore.Application.Mvc.Targets` and has references to the projects of `ForumModule` and `TicketModule`. By default, OCF creates areas based on the name of your modules. Hence we have `ForumModule` and `TicketModule` areas in this app. ================================================ FILE: projects/orchard-core/routing-2/TicketModule/Manifest.cs ================================================ using OrchardCore.Modules.Manifest; [assembly: Module( Name = "TicketModule", Author = "The Orchard Team", Website = "http://orchardproject.net", Version = "0.0.1", Description = "Ticket Module", Category = "Ticket Module" )] ================================================ FILE: projects/orchard-core/routing-2/TicketModule/Pages/Index.cshtml ================================================ @page ""

                        This is from the Ticket Module

                        ================================================ FILE: projects/orchard-core/routing-2/TicketModule/Pages/Privacy.cshtml ================================================ @page "~/privacy"

                        Privacy from from Ticket Module

                        ================================================ FILE: projects/orchard-core/routing-2/TicketModule/Pages/Users.cshtml ================================================ @page "list"

                        User List from Ticket Module

                        ================================================ FILE: projects/orchard-core/routing-2/TicketModule/Startup.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.DependencyInjection; using OrchardCore.Modules; namespace TicketModule; public class Startup : StartupBase { public override void ConfigureServices(IServiceCollection services) { } public override void Configure(IApplicationBuilder builder, IEndpointRouteBuilder routes, IServiceProvider serviceProvider) { } } ================================================ FILE: projects/orchard-core/routing-2/TicketModule/TicketModule.csproj ================================================ net10.0 true true ================================================ FILE: projects/orchard-core/static-files/ForumModule/Controllers/HomeController.cs ================================================ using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ForumModule.Controllers { public class HomeController : Controller { public ActionResult Index() => View(); } } ================================================ FILE: projects/orchard-core/static-files/ForumModule/ForumModule.csproj ================================================ net10.0 true true ================================================ FILE: projects/orchard-core/static-files/ForumModule/Manifest.cs ================================================ using OrchardCore.Modules.Manifest; [assembly: Module( Name = "ForumModule", Author = "The Orchard Team", Website = "http://orchardproject.net", Version = "0.0.1", Description = "Forum Module", Category = "Forum Module" )] ================================================ FILE: projects/orchard-core/static-files/ForumModule/Startup.cs ================================================ using System; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.DependencyInjection; using OrchardCore.Modules; namespace ForumModule { public class Startup : StartupBase { public override void ConfigureServices(IServiceCollection services) { } public override void Configure(IApplicationBuilder builder, IEndpointRouteBuilder routes, IServiceProvider serviceProvider) { routes.MapAreaControllerRoute ( name: "ForumHome", areaName: "ForumModule", pattern: "Forum", defaults: new { controller = "Home", action = "Index" } ); } } } ================================================ FILE: projects/orchard-core/static-files/ForumModule/Views/Home/Index.cshtml ================================================ @section CssInline{ }

                        Static Files

                        ================================================ FILE: projects/orchard-core/static-files/ForumModule/wwwroot/site.css ================================================ body { color: pink; } ================================================ FILE: projects/orchard-core/static-files/Host/App_Data/Sites/Default/DataProtection-Keys/key-f9f0a416-65d2-47d5-80f3-4f0272b538fe.xml ================================================  2019-03-29T20:50:57.7942781Z 2019-03-29T20:50:57.7935641Z 2019-06-27T20:50:57.7935641Z TqoLEuQqQC6biti8Z63FVhWnV4l2Cargo1oLluHrek2ytvaB7uAkFIC5jbLZEhcAUifE66PTyZzguECrRi3aWw== ================================================ FILE: projects/orchard-core/static-files/Host/Host.csproj ================================================ net10.0 true true ================================================ FILE: projects/orchard-core/static-files/Host/Pages/Index.cshtml ================================================ @page

                        Static Files

                        ================================================ FILE: projects/orchard-core/static-files/Host/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddOrchardCore().AddMvc(); var app = builder.Build(); app.UseOrchardCore(); app.Run(); ================================================ FILE: projects/orchard-core/static-files/Host/Views/Shared/_Layout.cshtml ================================================  Orchard Core Framework @RenderSection("CssInline", required: false)
                        @RenderBody()

                        © @DateTime.Now.Year - Orchard Core Framework

                        @RenderSection("JsInline", required: false) ================================================ FILE: projects/orchard-core/static-files/Host/_ViewImports.cshtml ================================================ @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: projects/orchard-core/static-files/Host/_ViewStart.cshtml ================================================ @{ Layout = "~/Views/Shared/_Layout.cshtml"; } ================================================ FILE: projects/orchard-core/static-files/Host/appsettings.json ================================================ { "Logging": { "LogLevel": { "Default": "Warning" } }, "AllowedHosts": "*" } ================================================ FILE: projects/orchard-core/static-files/README.md ================================================ #static files Each Orchard Core module can have its own static file at `wwwroot`. It just works. You just have to make sure that your links points to the right area, which is your module name. In this sample, it is `ForumModule`. ================================================ FILE: projects/orleans/README.md ================================================ # Microsoft Orleans (5) These are simple samples to play with [Microsoft Orleans](https://github.com/dotnet/orleans), a cross-platform framework for building robust, scalable distributed applications. ## Orleans 8 * [Orleans - 1](orleans-1) This sample shows how to use Orleans 8 in a minimal API application. It shows the new way on how to configure an Orleans server. * [Orleans - 2](orleans-2) This is a sample project that shows how to use Redis as a persistence provider for Orleans. * [Orleans - 3](orleans-3) This sample demonstrates the functionality of Orleans' Timer via Grain.RegisterTimer. It's useful to trigger actions to be repeated frequently (less than every minute). * [Orleans - 4](orleans-4) This sample demonstrates the functionality of Orleans' Reminder via Grain.RegisterOrUpdateReminder. It's useful to trigger actions to be repeated infrequently (more than every minute, hours or days). This is a persistent timer that survives grain restarts. [Reminder is much expensive than Timer](https://github.com/dotnet/orleans/issues/4218#issuecomment-373162275). - [Orleans - 5](orleans-5) This sample demonstrates using HttpClient in a `grain` and also introduces the concept of a Stateless Worker `grain`. ================================================ FILE: projects/orleans/build.bat ================================================ dotnet build hello-world\client\ dotnet build hello-world\silo\ dotnet build hello-world-2\client dotnet build hello-world-2\silo dotnet build hello-world-3 dotnet build hello-world-4 dotnet build http-client dotnet build reminder dotnet build rss-reader dotnet build rss-reader-2 dotnet build rss-reader-3 dotnet build rss-reader-4 dotnet build rss-reader-5 dotnet build rss-reader-6 dotnet build timer ================================================ FILE: projects/orleans/build.sh ================================================ #!/bin/bash dotnet build hello-world/client/ dotnet build hello-world/silo/ dotnet build hello-world-2/client dotnet build hello-world-2/silo dotnet build hello-world-3 dotnet build hello-world-4 dotnet build http-client dotnet build reminder dotnet build rss-reader dotnet build rss-reader-2 dotnet build rss-reader-3 dotnet build rss-reader-4 dotnet build rss-reader-5 dotnet build rss-reader-6 dotnet build timer ================================================ FILE: projects/orleans/global.json ================================================ { "sdk": { "version": "10.0.0-rc.1.25451.107", "rollForward": "major", "allowPrerelease": true } } ================================================ FILE: projects/orleans/orleans-1/Program.cs ================================================ using System.Net; using Orleans.Runtime; using Orleans.Configuration; var builder = WebApplication.CreateBuilder(); builder.Logging.SetMinimumLevel(LogLevel.Information).AddConsole(); builder.Host.UseOrleans(b => { b .UseLocalhostClustering() .Configure(options => { options.ClusterId = "dev"; options.ServiceId = "orleans-1"; }) .Configure(options => options.AdvertisedIPAddress = IPAddress.Loopback) .AddMemoryGrainStorage(name: "ArchiveStorage"); }); var app = builder.Build(); app.MapGet("/", async (IGrainFactory client) => { IHelloArchive grain = client.GetGrain(0); var _ = await grain.SayHello("Hello world"); var greetings = await grain.GetGreetings(); return $""" Keep refreshing your browser {string.Join("\n", greetings)} """; }); app.Run(); public class HelloArchiveGrain : IGrain, IHelloArchive { private readonly IPersistentState _archive; public IGrainContext GrainContext { get; } public HelloArchiveGrain(IGrainContext context, [PersistentState("archive", "ArchiveStorage")] IPersistentState archive) { _archive = archive; GrainContext = context; } public async Task SayHello(string greeting) { _archive.State.Greetings.Add(greeting); await _archive.WriteStateAsync(); return $"You said: '{greeting}', I say: Hello!"; } public Task> GetGreetings() => Task.FromResult>(_archive.State.Greetings); } [GenerateSerializer] [Alias("greeting-archive")] public class GreetingArchive { [Id(0)] public List Greetings { get; } = new(); } public interface IHelloArchive : Orleans.IGrainWithIntegerKey { Task SayHello(string greeting); Task> GetGreetings(); } ================================================ FILE: projects/orleans/orleans-1/README.md ================================================ # Orleans Hello World with ASP.NET Core This sample shows how to use Orleans 8 with ASP.NET Core 8. The changes in Orleans 7 or above compared to previous version of Orleans. - Simplified configuration of just linking to [Microsoft.Orleans.Server](https://www.nuget.org/packages/Microsoft.Orleans.Server). - Using the new serializer using `GenerateSerializer` and `Id` attributes. - Grain now implements `IGrain` instead of inheriting from `Grain` class (POCO grains). - Removing calls for `ConfigureApplicationParts`. - Using type alias > By default, Orleans will serialize your type by encoding its full name. You can override this by adding an Orleans.AliasAttribute. Doing so will result in your type being serialized using a name which is resistant to renaming the underlying class or moving it between assemblies. Type aliases are globally scoped and you cannot have two aliases with the same value in an application. For generic types, the alias value must include the number of generic parameters preceded by a backtick, for example, MyGenericType could have the alias [Alias("mytype`2")]. > > [What's new in Orleans](https://learn.microsoft.com/en-gb/dotnet/orleans/whats-new-in-orleans) ================================================ FILE: projects/orleans/orleans-1/orleans-1.csproj ================================================ net10.0 enable true ================================================ FILE: projects/orleans/orleans-2/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#8c2ac7", "activityBar.background": "#8c2ac7", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#35250b", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#8c2ac7", "statusBar.background": "#6e219d", "statusBar.debuggingBackground": "#509d21", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#8c2ac7", "statusBarItem.remoteBackground": "#6e219d", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#6e219d", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#6e219d99", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#6e219d" } ================================================ FILE: projects/orleans/orleans-2/Program.cs ================================================ using System.Net; using Orleans.Runtime; using Orleans.Configuration; var builder = WebApplication.CreateBuilder(); builder.Logging.SetMinimumLevel(LogLevel.Information).AddConsole(); builder.Host.UseOrleans(b => { b .UseLocalhostClustering() .Configure(options => { options.ClusterId = "dev"; options.ServiceId = "orleans-2"; }) .Configure(options => options.AdvertisedIPAddress = IPAddress.Loopback) .AddRedisGrainStorage("redis", options => { options.ConfigurationOptions = new StackExchange.Redis.ConfigurationOptions { EndPoints = { { "localhost", 6379 } }, AbortOnConnectFail = false }; }); }); var app = builder.Build(); app.MapGet("/", async (IGrainFactory client) => { IHelloArchive grain = client.GetGrain(0)!; await grain.SayHello("Hello world"); var res2 = await grain.GetGreetings(); var output = $$"""

                        Redis Storage

                        Keep refreshing your browser.
                        You will see the messages keep accumulating.
                        Now stop your application and start again.
                        You will see that your actor persist its data at Redis and the messages will resume at the point where you left the last time.
                          """; foreach (var g in res2) { output += ($"
                        • {g.Message} at {g.TimestampUtc}
                        • "); } output += "
                        "; return Results.Content(output, "text/html"); }); app.Run(); public class HelloArchiveGrain : IGrain, IHelloArchive { private readonly IPersistentState _archive; public IGrainContext GrainContext { get; } public HelloArchiveGrain(IGrainContext context, [PersistentState("archive", "redis")] IPersistentState archive) { _archive = archive; GrainContext = context; } public async Task SayHello(string greeting) { _archive.State.Greetings.Add(new Greeting(greeting, DateTime.UtcNow)); await _archive.WriteStateAsync(); return $"You said: '{greeting}', I say: Hello!"; } public Task> GetGreetings() => Task.FromResult>(_archive.State.Greetings); } [GenerateSerializer] [Alias("greeting-archive")] public record GreetingArchive { [Id(0)] public List Greetings { get; } = new List(); } //Record has implicit ids by default. There is no need fro [Id] attribute here. //You just have to make sure that you don't play around with the order of the member [GenerateSerializer] [Alias("greeting")] public record Greeting(string Message, DateTime TimestampUtc); public interface IHelloArchive : Orleans.IGrainWithIntegerKey { Task SayHello(string greeting); Task> GetGreetings(); } ================================================ FILE: projects/orleans/orleans-2/README.md ================================================ # Orleans with Redis persistence This is a sample project that shows how to use Redis as a persistence provider for Orleans. **Note** make sure that you have a Redis server running on your machine. ================================================ FILE: projects/orleans/orleans-2/orleans-2.csproj ================================================ net10.0 enable true ================================================ FILE: projects/orleans/orleans-2/orleans-2.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "orleans-2", "orleans-2.csproj", "{F68B7B2D-6437-462E-B109-F93C9AD01421}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {F68B7B2D-6437-462E-B109-F93C9AD01421}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F68B7B2D-6437-462E-B109-F93C9AD01421}.Debug|Any CPU.Build.0 = Debug|Any CPU {F68B7B2D-6437-462E-B109-F93C9AD01421}.Release|Any CPU.ActiveCfg = Release|Any CPU {F68B7B2D-6437-462E-B109-F93C9AD01421}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {9DD17FA2-FC45-4472-ABCE-E0B419A32139} EndGlobalSection EndGlobal ================================================ FILE: projects/orleans/orleans-3/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#c2c7c3", "activityBar.background": "#c2c7c3", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#8370cf", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#c2c7c3", "statusBar.background": "#a7afa9", "statusBar.debuggingBackground": "#afa7ad", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#8c978f", "statusBarItem.remoteBackground": "#a7afa9", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#a7afa9", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#a7afa999", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#a7afa9" } ================================================ FILE: projects/orleans/orleans-3/Program.cs ================================================ using System.Net; using Orleans.Runtime; using Orleans.Configuration; var builder = WebApplication.CreateBuilder(); builder.Logging.SetMinimumLevel(LogLevel.Information).AddConsole(); builder.Host.UseOrleans(b => { b .UseLocalhostClustering() .Configure(options => { options.ClusterId = "dev"; options.ServiceId = "orleans-2"; }) .Configure(options => options.AdvertisedIPAddress = IPAddress.Loopback) .AddRedisGrainStorage("redis-timer", options => { options.ConfigurationOptions = new StackExchange.Redis.ConfigurationOptions { EndPoints = { { "localhost", 6379 } }, AbortOnConnectFail = false }; }); }); var app = builder.Build(); app.MapGet("/", async (IGrainFactory client) => { IHelloArchive grain = client.GetGrain(0)!; await grain.SayHello("Bom dia!"); var res2 = await grain.GetGreetings(); var output = $$"""
                        Refresh your browser. There's a timer that keeps adding messages every 5 seconds.
                        """; foreach (var g in res2) { output += ($"
                      • {g.Message} at {g.TimestampUtc}
                      • "); } output += "
                      "; return Results.Content(output, "text/html"); }); app.Run(); public class HelloTimerGrain : Grain, IHelloArchive { private readonly IPersistentState _archive; private readonly ILogger _log; private string _greeting = string.Empty; private IDisposable? _timerDisposable; public HelloTimerGrain([PersistentState("archive", "redis-timer")] IPersistentState archive, ILogger log) { _archive = archive; _log = log; } public override Task OnActivateAsync(CancellationToken cancellationToken) { _timerDisposable = this.RegisterTimer(async (object data) => { var archive = data as IPersistentState; var g = new Greeting(_greeting, DateTime.UtcNow); archive!.State.Greetings.Insert(0, g); await archive!.WriteStateAsync(); _log.LogInformation($"`{g.Message}` added at {g.TimestampUtc}"); }, _archive, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(5)); return Task.CompletedTask; } public override Task OnDeactivateAsync(DeactivationReason reason, CancellationToken token) { _timerDisposable?.Dispose(); return Task.CompletedTask; } public Task SayHello(string greeting) { _greeting = greeting; return Task.CompletedTask; } public Task> GetGreetings() => Task.FromResult>(_archive.State.Greetings); } [GenerateSerializer] public record GreetingArchive { public List Greetings { get; } = new List(); } [GenerateSerializer] public record Greeting(string Message, DateTime TimestampUtc); public interface IHelloArchive : Orleans.IGrainWithIntegerKey { Task SayHello(string greeting); Task> GetGreetings(); } ================================================ FILE: projects/orleans/orleans-3/README.md ================================================ #Timer This sample requires redis. Make sure to run FLUSHALL in redis-cli between samples. This is a sample for Grain.RegisterTimer method. You can find out more about this functionality here. - Make sure you have redis installed and running. - Run the app using dotnet run. - Open localhost:5000 - When you open the page the first time, there's a timer that will add a new message every 5 seconds. We are using C# records in this sample. It works fine. ================================================ FILE: projects/orleans/orleans-3/orleans-3.csproj ================================================ net10.0 enable true ================================================ FILE: projects/orleans/orleans-3/orleans-3.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "orleans-3", "orleans-3.csproj", "{A56EC8A6-F3D6-41A1-8CC8-B20CE28C0224}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {A56EC8A6-F3D6-41A1-8CC8-B20CE28C0224}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A56EC8A6-F3D6-41A1-8CC8-B20CE28C0224}.Debug|Any CPU.Build.0 = Debug|Any CPU {A56EC8A6-F3D6-41A1-8CC8-B20CE28C0224}.Release|Any CPU.ActiveCfg = Release|Any CPU {A56EC8A6-F3D6-41A1-8CC8-B20CE28C0224}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {1BF268AA-95B8-4259-A610-128576996097} EndGlobalSection EndGlobal ================================================ FILE: projects/orleans/orleans-4/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#4228c4", "activityBar.background": "#4228c4", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#d4472b", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#4228c4", "statusBar.background": "#341f9a", "statusBar.debuggingBackground": "#859a1f", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#4228c4", "statusBarItem.remoteBackground": "#341f9a", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#341f9a", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#341f9a99", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#341f9a" } ================================================ FILE: projects/orleans/orleans-4/Program.cs ================================================ using System.Net; using Orleans.Runtime; using Orleans.Configuration; var builder = WebApplication.CreateBuilder(); builder.Logging.SetMinimumLevel(LogLevel.Information).AddConsole(); builder.Host.UseOrleans(b => { b .UseLocalhostClustering() .Configure(options => { options.ClusterId = "dev"; options.ServiceId = "orleans-2"; }) .Configure(options => options.AdvertisedIPAddress = IPAddress.Loopback) .AddRedisGrainStorage("redis-reminder", options => { options.ConfigurationOptions = new StackExchange.Redis.ConfigurationOptions { EndPoints = { { "localhost", 6379 } }, AbortOnConnectFail = false }; }) .UseInMemoryReminderService(); }); var app = builder.Build(); app.MapGet("/", async (IGrainFactory client) => { IHelloArchive grain = client.GetGrain(0)!; await grain.SayHello("Bom dia!"); var res2 = await grain.GetGreetings(); var output = $$"""
                      Click on Set reminder to start the reminder (it will run every 1 minute). Then refresh this page to see the messages being addded.
                      Set reminder - Remove reminder
                      """; foreach (var g in res2) { output += ($"
                    • {g.Message} at {g.TimestampUtc}
                    • "); } output += "
                    "; return Results.Content(output, "text/html"); }); // WARNING - changing state using GET is a terrible terrible practice. I use it here because this is a sample and I am lazy. Don't follow my bad example. app.MapGet("/set-reminder", async (IGrainFactory client) => { IHelloArchive grain = client.GetGrain(0)!; await grain.AddReminder("repeat-hello", repeatEvery: TimeSpan.FromMinutes(1)); return Results.Redirect("/"); }); // WARNING - changing state using GET is a terrible terrible practice. I use it here because this is a sample and I am lazy. Don't follow my bad example. app.MapGet("/remove-reminder", async (IGrainFactory client) => { IHelloArchive grain = client.GetGrain(0)!; await grain.RemoveReminder("repeat-hello"); return Results.Redirect("/"); }); app.Run(); public class HelloReminderGrain : Grain, IHelloArchive, IRemindable { private readonly IPersistentState _archive; private readonly ILogger _log; private string _greeting = "hello world"; public HelloReminderGrain([PersistentState("archive", "redis-reminder")] IPersistentState archive, ILogger log) { _archive = archive; _log = log; } public Task SayHello(string greeting) { _greeting = greeting; return Task.CompletedTask; } public Task> GetGreetings() => Task.FromResult>(_archive.State.Greetings); public async Task ReceiveReminder(string reminderName, TickStatus status) { _log.LogInformation($"Receive reminder {reminderName} on { DateTime.UtcNow } with status { status }"); var g = new Greeting(_greeting, DateTime.UtcNow); _archive!.State.Greetings.Insert(0, g); await _archive!.WriteStateAsync(); _log.LogInformation($"`{g.Message}` added at {g.TimestampUtc}"); } public async Task AddReminder(string reminder, TimeSpan repeatEvery) { if (string.IsNullOrWhiteSpace(reminder)) throw new ArgumentNullException(nameof(reminder)); var r = await this.GetReminder(reminder); if (r is null) { _log.LogInformation($"RegisterOrUpdateReminder {reminder}"); await this.RegisterOrUpdateReminder(reminder, TimeSpan.FromSeconds(1), repeatEvery); } } public async Task RemoveReminder(string reminder) { if (string.IsNullOrWhiteSpace(reminder)) throw new ArgumentNullException(nameof(reminder)); var r = await this.GetReminder(reminder); if (r is object) { _log.LogInformation($"UnregisterReminder {reminder}"); await this.UnregisterReminder(r); } } } [GenerateSerializer] public record GreetingArchive { public List Greetings { get; } = new List(); } [GenerateSerializer] public record Greeting(string Message, DateTime TimestampUtc); public interface IHelloArchive : Orleans.IGrainWithIntegerKey { Task AddReminder(string reminder, TimeSpan repeatEvery); Task RemoveReminder(string reminder); Task SayHello(string greeting); Task> GetGreetings(); } ================================================ FILE: projects/orleans/orleans-4/README.md ================================================ #Timer This sample requires redis. Make sure to run FLUSHALL in redis-cli between samples. This is a sample for Grain.RegisterTimer method. You can find out more about this functionality here. - Make sure you have redis installed and running. - Run the app using dotnet run. - Open localhost:5000 - When you open the page the first time, there's a timer that will add a new message every 5 seconds. We are using C# records in this sample. It works fine. ================================================ FILE: projects/orleans/orleans-4/orleans-4.csproj ================================================ net10.0 enable true ================================================ FILE: projects/orleans/orleans-4/orleans-4.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "orleans-4", "orleans-4.csproj", "{48C9BCFF-3D19-4BA0-ABB0-F32564BA03C9}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {48C9BCFF-3D19-4BA0-ABB0-F32564BA03C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {48C9BCFF-3D19-4BA0-ABB0-F32564BA03C9}.Debug|Any CPU.Build.0 = Debug|Any CPU {48C9BCFF-3D19-4BA0-ABB0-F32564BA03C9}.Release|Any CPU.ActiveCfg = Release|Any CPU {48C9BCFF-3D19-4BA0-ABB0-F32564BA03C9}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {439571F3-B56C-46F2-B2A2-764690A1A033} EndGlobalSection EndGlobal ================================================ FILE: projects/orleans/orleans-5/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#e485d3", "activityBar.background": "#e485d3", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#ecf3cb", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#e485d3", "statusBar.background": "#db5bc4", "statusBar.debuggingBackground": "#5bdb72", "statusBar.debuggingForeground": "#15202b", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#d231b5", "statusBarItem.remoteBackground": "#db5bc4", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#db5bc4", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#db5bc499", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#db5bc4" } ================================================ FILE: projects/orleans/orleans-5/Program.cs ================================================ using System.Net; using Orleans.Configuration; using Orleans.Concurrency; using System.Text.Json.Serialization; var builder = WebApplication.CreateBuilder(); builder.Services.AddHttpClient(); builder.Logging.SetMinimumLevel(LogLevel.Information).AddConsole(); builder.Host.UseOrleans(b => { b .UseLocalhostClustering() .Configure(options => { options.ClusterId = "dev"; options.ServiceId = "orleans-5"; }) .Configure(options => options.AdvertisedIPAddress = IPAddress.Loopback); }); var app = builder.Build(); app.MapGet("/", async (IGrainFactory client) => { var timezone = "Africa/Cairo"; ITimeKeeper grain = client.GetGrain(timezone)!; var localTime = await grain.GetCurrentTime(timezone); var output = $$"""
                    Local time in {{localTime.timeZone}} is {{localTime.dateTime}} """; return Results.Content(output, "text/html"); }); app.Run(); [StatelessWorker] public class TimeKeeperGrain : Grain, ITimeKeeper { private readonly ILogger _log; private readonly IHttpClientFactory _httpFactory; public TimeKeeperGrain(ILogger log, IHttpClientFactory httpFactory) { _log = log; _httpFactory = httpFactory; } public async Task<(DateTimeOffset dateTime, string timeZone)> GetCurrentTime(string timeZone) { var client = _httpFactory.CreateClient(); var result = await client.GetAsync($"http://worldtimeapi.org/api/timezone/{timeZone}"); var worldClock = await result.Content.ReadFromJsonAsync(); return (worldClock!.DateTime, timeZone); } } public interface ITimeKeeper : IGrainWithStringKey { Task<(DateTimeOffset dateTime, string timeZone)> GetCurrentTime(string timeZone); } public class WorldTime { [JsonPropertyName("datetime")] public DateTimeOffset DateTime { get; set; } } ================================================ FILE: projects/orleans/orleans-5/README.md ================================================ # HttpClient and Stateless Worker Grain This same demonstrates how to use HttpClient in a grain. It uses the same DI mechanism in your normal .NET Core app. - The `grain` is marked at `[StatelessWorker]` because in **this case**, it keeps no state and Orleans is free to create multiple activations of this grain. You can read more about **Stateless Worker** grains [here](https://learn.microsoft.com/en-us/dotnet/orleans/grains/stateless-worker-grains). - We are using `System.Json.Text` serializer `ReadFromJsonAsync` method. ================================================ FILE: projects/orleans/orleans-5/orleans-5.csproj ================================================ net10.0 enable true ================================================ FILE: projects/orleans/orleans-5/orleans-5.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "orleans-5", "orleans-5.csproj", "{E1FF1709-0A2C-40ED-BFC3-4CE2C55AF635}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {E1FF1709-0A2C-40ED-BFC3-4CE2C55AF635}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E1FF1709-0A2C-40ED-BFC3-4CE2C55AF635}.Debug|Any CPU.Build.0 = Debug|Any CPU {E1FF1709-0A2C-40ED-BFC3-4CE2C55AF635}.Release|Any CPU.ActiveCfg = Release|Any CPU {E1FF1709-0A2C-40ED-BFC3-4CE2C55AF635}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {C19CE51D-8342-41AE-ABC5-6206197F2B73} EndGlobalSection EndGlobal ================================================ FILE: projects/orleans/reminder/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#86d565", "activityBar.background": "#86d565", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", "activityBarBadge.background": "#5075cf", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#15202b99", "sash.hoverBorder": "#86d565", "statusBar.background": "#67ca3d", "statusBar.debuggingBackground": "#a03dca", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#15202b", "statusBarItem.hoverBackground": "#52a62d", "statusBarItem.remoteBackground": "#67ca3d", "statusBarItem.remoteForeground": "#15202b", "titleBar.activeBackground": "#67ca3d", "titleBar.activeForeground": "#15202b", "titleBar.inactiveBackground": "#67ca3d99", "titleBar.inactiveForeground": "#15202b99" }, "peacock.color": "#67ca3d" } ================================================ FILE: projects/orleans/reminder/Program.cs ================================================ using System.Net; using Orleans.Runtime; using Orleans.Configuration; using Microsoft.Extensions.Logging.Console; var builder = WebApplication.CreateBuilder(); builder.Logging.SetMinimumLevel(LogLevel.Information).AddConsole(); builder.Host.UseOrleans(builder => { builder .UseLocalhostClustering() .UseInMemoryReminderService() .Configure(options => { options.ClusterId = "dev"; options.ServiceId = "HelloWorldApp"; }) .Configure(options => options.AdvertisedIPAddress = IPAddress.Loopback) .AddRedisGrainStorage("redis-reminder", options => { options.ConfigurationOptions = new StackExchange.Redis.ConfigurationOptions { EndPoints = { { "localhost", 6379 } }, AbortOnConnectFail = false }; }); }); var app = builder.Build(); app.MapGet("/", async context => { IGrainFactory client = context.RequestServices.GetService()!; IHelloArchive grain = client.GetGrain(0)!; await grain.SayHello("Hello world " + new Random().Next()); var res2 = await grain.GetGreetings(); await context.Response.WriteAsync(@""); await context.Response.WriteAsync(""); await context.Response.WriteAsync("Click on Set reminder to start the reminder (it will run every 1 minute). Then refresh this page to see the messages being addded.
                    "); await context.Response.WriteAsync(@"Set reminder - Remove reminder
                    "); await context.Response.WriteAsync("
                      "); foreach(var g in res2) { await context.Response.WriteAsync($"
                    • {g.Message} at {g.TimestampUtc}
                    • "); } await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync(""); }); // WARNING - changing state using GET is a terrible terrible practice. I use it here because this is a sample and I am lazy. Don't follow my bad example. app.MapGet("/set-reminder", async context => { IGrainFactory client = context.RequestServices.GetService()!; IHelloArchive grain = client.GetGrain(0)!; await grain.AddReminder("repeat-hello", repeatEvery: TimeSpan.FromMinutes(1)); context.Response.Redirect("/"); }); // WARNING - changing state using GET is a terrible terrible practice. I use it here because this is a sample and I am lazy. Don't follow my bad example. app.MapGet("/remove-reminder", async context => { IGrainFactory client = context.RequestServices.GetService()!; IHelloArchive grain = client.GetGrain(0)!; await grain.RemoveReminder("repeat-hello"); context.Response.Redirect("/"); }); app.Run(); public class HelloReminderGrain : Grain, IHelloArchive, IRemindable { private readonly IPersistentState _archive; private readonly ILogger _log; private string _greeting = "hello world"; public HelloReminderGrain([PersistentState("archive", "redis-reminder")] IPersistentState archive, ILogger log) { _archive = archive; _log = log; } public Task SayHello(string greeting) { _greeting = greeting; return Task.CompletedTask; } public Task> GetGreetings() => Task.FromResult>(_archive.State.Greetings); public async Task ReceiveReminder(string reminderName, TickStatus status) { _log.LogInformation("Receive reminder {ReminderName} on {Timestamp} with status {Status}", reminderName, DateTime.UtcNow, status); _log.LogInformation("Receive reminder {ReminderName} on {Timestamp} with status {Status}", reminderName, DateTime.UtcNow, status); var g = new Greeting(_greeting, DateTime.UtcNow); _archive!.State.Greetings.Insert(0, g); await _archive!.WriteStateAsync(); _log.LogInformation("`{Message}` added at {Timestamp}", g.Message, g.TimestampUtc); } public async Task AddReminder(string reminder, TimeSpan repeatEvery) { if (string.IsNullOrWhiteSpace(reminder)) throw new ArgumentNullException(nameof(reminder)); var r = await this.GetReminder(reminder); if (r is null) { _log.LogInformation("RegisterOrUpdateReminder {Reminder}", reminder); await this.RegisterOrUpdateReminder(reminder, TimeSpan.FromSeconds(1), repeatEvery); } } public async Task RemoveReminder(string reminder) { if (string.IsNullOrWhiteSpace(reminder)) throw new ArgumentNullException(nameof(reminder)); var r = await this.GetReminder(reminder); if (r is object) { _log.LogInformation("UnregisterReminder {Reminder}", reminder); await this.UnregisterReminder(r); } } } [GenerateSerializer] public record GreetingArchive { public List Greetings { get; } = new List(); } [GenerateSerializer] public record Greeting(string Message, DateTime TimestampUtc); public interface IHelloArchive : Orleans.IGrainWithIntegerKey { Task AddReminder(string reminder, TimeSpan repeatEvery); Task RemoveReminder(string reminder); Task SayHello(string greeting); Task> GetGreetings(); } ================================================ FILE: projects/orleans/reminder/README.md ================================================ # Reminder **This sample requires redis**. Make sure to run FLUSHALL in redis-cli between samples. This is a sample for `Grain.RegisterOrUpdateReminder` method. You can find out more about this functionality [here](https://dotnet.github.io/orleans/1.5/Documentation/Core-Features/Timers-and-Reminders.html). - Make sure you have redis installed and running. - Run the app using `dotnet run`. - Open `localhost:5000` - When you open the page the first time, click on "Set reminder" link. It will start a reminder that will repeat every 1 minute (which is the most minimum value allowed for reminder). - This reminder will keep running until you stop it by clicking on "Remove reminder" or you restart the `silo`. We are using C# records in this sample. It works fine. ================================================ FILE: projects/orleans/reminder/reminder.csproj ================================================ net10.0 enable true ================================================ FILE: projects/orleans/reminder/reminder.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "reminder", "reminder.csproj", "{15798C7B-AF82-4098-A8FB-239DADA5C064}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {15798C7B-AF82-4098-A8FB-239DADA5C064}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {15798C7B-AF82-4098-A8FB-239DADA5C064}.Debug|Any CPU.Build.0 = Debug|Any CPU {15798C7B-AF82-4098-A8FB-239DADA5C064}.Release|Any CPU.ActiveCfg = Release|Any CPU {15798C7B-AF82-4098-A8FB-239DADA5C064}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {616E92BA-2B57-4840-9CDD-099D9888A5C6} EndGlobalSection EndGlobal ================================================ FILE: projects/orleans/rss-reader/Program.cs ================================================ using System.Net; using Orleans; using Orleans.Runtime; using Orleans.Configuration; using Orleans.Hosting; using System.Xml; using Microsoft.SyndicationFeed.Atom; using Microsoft.SyndicationFeed; using Microsoft.SyndicationFeed.Rss; var builder = WebApplication.CreateBuilder(); builder.Services.AddHttpClient(); builder.Logging.SetMinimumLevel(LogLevel.Information).AddConsole(); builder.Host.UseOrleans(builder => { builder .UseLocalhostClustering() .UseInMemoryReminderService() .Configure(options => { options.ClusterId = "dev"; options.ServiceId = "http-client"; }) .Configure(options => options.AdvertisedIPAddress = IPAddress.Loopback) .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(FeedSourceGrain).Assembly).WithReferences()) .AddRedisGrainStorage("redis-rss-reader", optionsBuilder => optionsBuilder.Configure(options => { options.ConnectionString = "localhost:6379"; options.UseJson = true; options.DatabaseNumber = 1; })); }); var app = builder.Build(); app.MapGet("/", async context => { var client = context.RequestServices.GetService()!; var feedSourceGrain = client.GetGrain(0)!; await feedSourceGrain.AddAsync(new FeedSource { Type = FeedType.Rss, Url = "http://www.scripting.com/rss.xml", Website = "http://www.scripting.com", Title = "Scripting News" }); await feedSourceGrain.AddAsync(new FeedSource { Type = FeedType.Atom, Url = "https://www.reddit.com/r/dotnet.rss", Website = "https://www.reddit.com/r/dotnet", Title = "Reddit/r/dotnet" }); var sources = await feedSourceGrain.GetAllAsync(); foreach (var s in sources) { var feedFetcherGrain = client.GetGrain(s.Url.ToString()); await feedFetcherGrain.FetchAsync(s); } var feedResultsGrain = client.GetGrain(0); var feedItems = await feedResultsGrain.GetAllAsync(); await context.Response.WriteAsync(@" Orleans RSS Reader "); await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync("
                      "); foreach (var i in feedItems) { await context.Response.WriteAsync("
                    • "); if (!string.IsNullOrWhiteSpace(i.Title)) await context.Response.WriteAsync($"{ i.Title }
                      "); await context.Response.WriteAsync(i.Description ?? ""); if (i.Url is object) await context.Response.WriteAsync($"
                      link"); await context.Response.WriteAsync($"
                      published on: {i.PublishedOn}
                      "); await context.Response.WriteAsync($""); await context.Response.WriteAsync("
                    • "); } await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync("
                    "); }); app.Run(); class FeedItemResultGrain : Grain, IFeedItemResults { private readonly IPersistentState _storage; public FeedItemResultGrain([PersistentState("feed-item-results", "redis-rss-reader")] IPersistentState storage) => _storage = storage; public async Task AddAsync(List items) { //make sure there is no duplication foreach (var i in items.Where(x => !string.IsNullOrWhiteSpace(x.Id))) { if (!_storage.State.Results.Exists(x => x.Id?.Equals(i.Id, StringComparison.OrdinalIgnoreCase) ?? false)) _storage.State.Results.Add(i); } await _storage.WriteStateAsync(); } public Task> GetAllAsync() => Task.FromResult(_storage.State.Results.OrderByDescending(x => x.PublishedOn).ToList()); public async Task ClearAsync() { _storage.State.Results.Clear(); await _storage.WriteStateAsync(); } } record FeedItemStore { public List Results { get; set; } = new List(); } interface IFeedItemResults : Orleans.IGrainWithIntegerKey { Task AddAsync(List items); Task> GetAllAsync(); Task ClearAsync(); } class FeedSourceGrain : Grain, IFeedSource { private readonly IPersistentState _storage; public FeedSourceGrain([PersistentState("feed-source", "redis-rss-reader")] IPersistentState storage) => _storage = storage; public async Task AddAsync(FeedSource source) { if (_storage.State.Sources.Find(x => x.Url == source.Url) is null) { _storage.State.Sources.Add(source); await _storage.WriteStateAsync(); } } public Task> GetAllAsync() => Task.FromResult(_storage.State.Sources); } record FeedSourceStore { public List Sources { get; set; } = new List(); } interface IFeedSource : Orleans.IGrainWithIntegerKey { Task AddAsync(FeedSource source); Task> GetAllAsync(); } interface IFeedFetcher : Orleans.IGrainWithStringKey { Task FetchAsync(FeedSource source); } class FeedFetchGrain : Grain, IFeedFetcher { readonly IGrainFactory _grainFactory; public FeedFetchGrain(IGrainFactory grainFactory) => _grainFactory = grainFactory; public async Task FetchAsync(FeedSource source) { var storage = _grainFactory.GetGrain(0); var results = await ReadFeedAsync(source); await storage.AddAsync(results); } public async Task> ReadFeedAsync(FeedSource source) { var feed = new List(); try { using var xmlReader = XmlReader.Create(source.Url.ToString(), new XmlReaderSettings() { Async = true }); if (source.Type == FeedType.Rss) { var feedReader = new RssFeedReader(xmlReader); // Read the feed while (await feedReader.Read()) { switch (feedReader.ElementType) { // Read Item case SyndicationElementType.Item: var item = await feedReader.ReadItem(); feed.Add(new FeedItem(source.ToChannel(), new SyndicationItem(item))); break; default: var content = await feedReader.ReadContent(); break; } } } else { var feedReader = new AtomFeedReader(xmlReader); while (await feedReader.Read()) { switch (feedReader.ElementType) { // Read Item case SyndicationElementType.Item: var entry = await feedReader.ReadEntry(); feed.Add(new FeedItem(source.ToChannel(), new SyndicationItem(entry))); break; default: var content = await feedReader.ReadContent(); break; } } } return feed; } catch { return new List(); } } } record FeedChannel { public string? Title { get; set; } public string? Website { get; set; } public Uri? Url { get; set; } public bool HideTitle { get; set; } public bool HideDescription { get; set; } } class FeedSource { public string Url { get; set; } = string.Empty; public string Title { get; set; } = string.Empty; public string? Website { get; set; } public FeedType Type { get; set; } public bool HideTitle { get; set; } public bool HideDescription { get; set; } public FeedChannel ToChannel() { return new FeedChannel { Title = Title, Website = Website, HideTitle = HideTitle, HideDescription = HideDescription }; } } record FeedItem { public FeedChannel? Channel { get; set; } public string? Id { get; set; } public string? Title { get; set; } public string? Description { get; set; } public Uri? Url { get; set; } public DateTimeOffset PublishedOn { get; set; } public FeedItem() { } public FeedItem(FeedChannel channel, SyndicationItem item) { Channel = channel; Id = item.Id; Title = item.Title; Description = item.Description; var link = item.Links.FirstOrDefault(); if (link is object) Url = link.Uri; if (item.LastUpdated == default(DateTimeOffset)) PublishedOn = item.Published; else PublishedOn = item.LastUpdated; } } enum FeedType { Atom, Rss } ================================================ FILE: projects/orleans/rss-reader/README.md ================================================ # RSS Reader **This sample requires redis**. Make sure to run FLUSHALL in redis-cli between samples. This is a simple RSS reader that uses two storage, one for storing a feed source and another for storing feed results. You can keep refreshing your browser and the RSS Reader will only pick items that have not been previously inserted. - Make sure you have redis installed and running. - Run the app using `dotnet run`. - Open `localhost:5000` - You can keep refreshing the browser page as much as you want and it will only pick up and store unique feed items. ================================================ FILE: projects/orleans/rss-reader/rss-reader.csproj ================================================ net10.0 enable true all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/orleans/rss-reader-2/Program.cs ================================================ using System.Net; using Orleans; using Orleans.Runtime; using Orleans.Configuration; using Orleans.Hosting; using System.Xml; using Microsoft.SyndicationFeed.Atom; using Microsoft.SyndicationFeed; using Microsoft.SyndicationFeed.Rss; var builder = WebApplication.CreateBuilder(); builder.Services.AddHttpClient(); builder.Logging.SetMinimumLevel(LogLevel.Information).AddConsole(); builder.Host.UseOrleans(builder => { builder .UseLocalhostClustering() .UseInMemoryReminderService() .Configure(options => { options.ClusterId = "dev"; options.ServiceId = "http-client"; }) .Configure(options => options.AdvertisedIPAddress = IPAddress.Loopback) .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(FeedSourceGrain).Assembly).WithReferences()) .AddRedisGrainStorage("redis-rss-reader-2", optionsBuilder => optionsBuilder.Configure(options => { options.ConnectionString = "localhost:6379"; options.UseJson = true; options.DatabaseNumber = 1; })); }); var app = builder.Build(); app.MapGet("/", async context => { var client = context.RequestServices.GetService()!; var feedSourceGrain = client.GetGrain(0)!; await feedSourceGrain.AddAsync(new FeedSource { Type = FeedType.Rss, Url = "http://www.scripting.com/rss.xml", Website = "http://www.scripting.com", Title = "Scripting News", UpdateFrequencyInMinutes = 15 }); await feedSourceGrain.AddAsync(new FeedSource { Type = FeedType.Atom, Url = "https://www.reddit.com/r/dotnet.rss", Website = "https://www.reddit.com/r/dotnet", Title = "Reddit/r/dotnet", UpdateFrequencyInMinutes = 1 }); var sources = await feedSourceGrain.GetAllAsync(); foreach (var s in sources) { var feedFetcherReminderGrain = client.GetGrain(0); // AddReminder is indempotent await feedFetcherReminderGrain.AddReminder(s.Url, s.UpdateFrequencyInMinutes); } var feedResultsGrain = client.GetGrain(0); var feedItems = await feedResultsGrain.GetAllAsync(); await context.Response.WriteAsync(@" Orleans RSS Reader "); await context.Response.WriteAsync("
                    "); if (feedItems.Count == 0) await context.Response.WriteAsync("

                    Please refresh your browser again if you see no feeds displayed.

                    "); await context.Response.WriteAsync("
                      "); foreach (var i in feedItems) { await context.Response.WriteAsync("
                    • "); if (!string.IsNullOrWhiteSpace(i.Title)) await context.Response.WriteAsync($"{ i.Title }
                      "); await context.Response.WriteAsync(i.Description ?? ""); if (i.Url is object) await context.Response.WriteAsync($"
                      link"); await context.Response.WriteAsync($"
                      published on: {i.PublishedOn}
                      "); await context.Response.WriteAsync($""); await context.Response.WriteAsync("
                    • "); } await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync("
                    "); }); app.Run(); class FeedFetcherReminder : Grain, IRemindable, IFeedFetcherReminder { readonly IGrainFactory _grainFactory; readonly ILogger _logger; public FeedFetcherReminder(IGrainFactory grainFactory, ILogger logger) { _grainFactory = grainFactory; _logger = logger; } public async Task AddReminder(string reminder, short repeatEveryMinute) { if (string.IsNullOrWhiteSpace(reminder)) throw new ArgumentNullException(nameof(reminder)); var r = await GetReminder(reminder); if (r is not object) await RegisterOrUpdateReminder(reminder, dueTime: TimeSpan.FromSeconds(1), period: TimeSpan.FromMinutes(repeatEveryMinute)); } public async Task ReceiveReminder(string reminderName, TickStatus status) { _logger.Info($"Receive {reminderName} reminder"); var feedSourceGrain = _grainFactory.GetGrain(0)!; var feedSource = await feedSourceGrain.FindFeedSourceByUrlAsync(reminderName); if (feedSource is object) { _logger.Info($"Fetching {feedSource.Url}"); var feedFetcherGrain = _grainFactory.GetGrain(feedSource.Url); await feedFetcherGrain.FetchAsync(feedSource); } } } interface IFeedFetcherReminder : Orleans.IGrainWithIntegerKey { Task AddReminder(string reminder, short repeatEveryMinute); } class FeedItemResultGrain : Grain, IFeedItemResults { private readonly IPersistentState _storage; public FeedItemResultGrain([PersistentState("feed-item-results-2", "redis-rss-reader-2")] IPersistentState storage) => _storage = storage; public async Task AddAsync(List items) { //make sure there is no duplication foreach (var i in items.Where(x => !string.IsNullOrWhiteSpace(x.Id))) { if (!_storage.State.Results.Exists(x => x.Id?.Equals(i.Id, StringComparison.OrdinalIgnoreCase) ?? false)) _storage.State.Results.Add(i); } await _storage.WriteStateAsync(); } public Task> GetAllAsync() => Task.FromResult(_storage.State.Results.OrderByDescending(x => x.PublishedOn).ToList()); public async Task ClearAsync() { _storage.State.Results.Clear(); await _storage.WriteStateAsync(); } } record FeedItemStore { public List Results { get; set; } = new List(); } interface IFeedItemResults : Orleans.IGrainWithIntegerKey { Task AddAsync(List items); Task> GetAllAsync(); Task ClearAsync(); } class FeedSourceGrain : Grain, IFeedSource { private readonly IPersistentState _storage; public FeedSourceGrain([PersistentState("feed-source-2", "redis-rss-reader-2")] IPersistentState storage) => _storage = storage; public async Task AddAsync(FeedSource source) { if (_storage.State.Sources.Find(x => x.Url == source.Url) is null) { _storage.State.Sources.Add(source); await _storage.WriteStateAsync(); } } public Task> GetAllAsync() => Task.FromResult(_storage.State.Sources); public Task FindFeedSourceByUrlAsync(string url) => Task.FromResult(_storage.State.Sources.Find(x => x.Url.Equals(url, StringComparison.Ordinal))); } record FeedSourceStore { public List Sources { get; set; } = new List(); } interface IFeedSource : Orleans.IGrainWithIntegerKey { Task AddAsync(FeedSource source); Task> GetAllAsync(); Task FindFeedSourceByUrlAsync(string url); } interface IFeedFetcher : Orleans.IGrainWithStringKey { Task FetchAsync(FeedSource source); } class FeedFetchGrain : Grain, IFeedFetcher { readonly IGrainFactory _grainFactory; public FeedFetchGrain(IGrainFactory grainFactory) => _grainFactory = grainFactory; public async Task FetchAsync(FeedSource source) { var storage = _grainFactory.GetGrain(0); var results = await ReadFeedAsync(source); await storage.AddAsync(results); } public async Task> ReadFeedAsync(FeedSource source) { var feed = new List(); try { using var xmlReader = XmlReader.Create(source.Url.ToString(), new XmlReaderSettings() { Async = true }); if (source.Type == FeedType.Rss) { var feedReader = new RssFeedReader(xmlReader); // Read the feed while (await feedReader.Read()) { switch (feedReader.ElementType) { // Read Item case SyndicationElementType.Item: var item = await feedReader.ReadItem(); feed.Add(new FeedItem(source.ToChannel(), new SyndicationItem(item))); break; default: var content = await feedReader.ReadContent(); break; } } } else { var feedReader = new AtomFeedReader(xmlReader); while (await feedReader.Read()) { switch (feedReader.ElementType) { // Read Item case SyndicationElementType.Item: var entry = await feedReader.ReadEntry(); feed.Add(new FeedItem(source.ToChannel(), new SyndicationItem(entry))); break; default: var content = await feedReader.ReadContent(); break; } } } return feed; } catch { return new List(); } } } record FeedChannel { public string? Title { get; set; } public string? Website { get; set; } public Uri? Url { get; set; } public bool HideTitle { get; set; } public bool HideDescription { get; set; } } class FeedSource { public string Url { get; set; } = string.Empty; public string Title { get; set; } = string.Empty; public string? Website { get; set; } public FeedType Type { get; set; } public bool HideTitle { get; set; } public bool HideDescription { get; set; } public short UpdateFrequencyInMinutes { get; set; } = 1; public FeedChannel ToChannel() { return new FeedChannel { Title = Title, Website = Website, HideTitle = HideTitle, HideDescription = HideDescription }; } } record FeedItem { public FeedChannel? Channel { get; set; } public string? Id { get; set; } public string? Title { get; set; } public string? Description { get; set; } public Uri? Url { get; set; } public DateTimeOffset PublishedOn { get; set; } public FeedItem() { } public FeedItem(FeedChannel channel, SyndicationItem item) { Channel = channel; Id = item.Id; Title = item.Title; Description = item.Description; var link = item.Links.FirstOrDefault(); if (link is object) Url = link.Uri; if (item.LastUpdated == default(DateTimeOffset)) PublishedOn = item.Published; else PublishedOn = item.LastUpdated; } } enum FeedType { Atom, Rss } ================================================ FILE: projects/orleans/rss-reader-2/README.md ================================================ # RSS Reader with Reminder **This sample requires redis**. Make sure to run FLUSHALL in redis-cli between samples. This is a simple RSS reader that uses two storage, one for storing a feed source and another for storing feed results. You can keep refreshing your browser and the RSS Reader will display the latest results whenever they are available. - Make sure you have redis installed and running. - Run the app using `dotnet run`. - Open `localhost:5000` - You can keep refreshing the browser page as much as you want and it will only pick up and store unique feed items. - Orleans will keep keep refreshing each feed every x minutes (configurable). ================================================ FILE: projects/orleans/rss-reader-2/rss-reader-2.csproj ================================================ net10.0 enable true all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/orleans/rss-reader-3/Feed.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using Microsoft.SyndicationFeed; record FeedChannel { public string? Title { get; set; } public string? Website { get; set; } public Uri? Url { get; set; } public bool HideTitle { get; set; } public bool HideDescription { get; set; } } class FeedSource { public string Url { get; set; } = string.Empty; public string Title { get; set; } = string.Empty; public string? Website { get; set; } public bool HideTitle { get; set; } public bool HideDescription { get; set; } public short UpdateFrequencyInMinutes { get; set; } = 1; public bool CanFetch ()=> History.Take(10).Count(x => !x.IsValid) <= 3; public bool IsLatestValid { get { if (History.Count == 0) return true; return History.First().IsValid; } } public List History { get; set; } = new List(); public void LogFetchAttempt(bool isValid, string? message = null) => History.Insert(0, new FeedHistory { Timestamp = DateTimeOffset.UtcNow, IsValid = isValid, Message = message }); public FeedChannel ToChannel() { return new FeedChannel { Title = Title, Website = Website, HideTitle = HideTitle, HideDescription = HideDescription }; } } record FeedHistory { public DateTimeOffset Timestamp { get; set; } public bool IsValid { get; set; } public string? Message { get; set; } } record FeedItem { public FeedChannel? Channel { get; set; } public string? Id { get; set; } public string? Title { get; set; } public string? Description { get; set; } public Uri? Url { get; set;} public DateTimeOffset PublishedOn { get; set; } public FeedItem() { } public FeedItem(FeedChannel channel, SyndicationItem item) { Channel = channel; Id = item.Id; Title = item.Title; Description = item.Description; var link = item.Links.FirstOrDefault(); if (link is object) Url = link.Uri; if (item.LastUpdated == default(DateTimeOffset)) PublishedOn = item.Published; else PublishedOn = item.LastUpdated; } } enum FeedType { Atom, Rss } ================================================ FILE: projects/orleans/rss-reader-3/Opml.cs ================================================ using System.Xml.Linq; public class Opml { public string? Title { get; set; } public DateTime? DateCreated { get; set; } public DateTime? DateModified { get; set; } public string? OwnerName { get; set; } public string? OwnerEmail { get; set; } public Uri? OwnerId { get; set; } public Uri? Docs { get; set; } public string? ExpansionState { get; set; } public int? VertScrollState { get; set; } public int? WindowTop { get; set; } public int? WindowLeft { get; set; } public int? WindowBottom { get; set; } public int? WindowRight { get; set; } public List Outlines { get; private set; } public Opml() { Outlines = new List(); } public Opml(string xml):this() { LoadFromXML(xml); } public void LoadFromXML(string xml) { var elements = XElement.Parse(xml); var heads = elements.Element("head").Descendants(); Func selectString = (filter) => heads!.Where(x => x.Name == filter).Select(x => x.Value).FirstOrDefault(); Func selectInt = (filter) => heads!.Where(x => x.Name == filter).Select(x => Convert.ToInt32(x.Value)).FirstOrDefault(); Func selectDate = (filter) => heads!.Where(x => x.Name == filter).Select(x => Convert.ToDateTime(x.Value)).FirstOrDefault(); Func selectUri = (filter) => heads!.Where(x => x.Name == filter).Select(x => new Uri(x.Value)).FirstOrDefault(); Title = selectString("title"); DateCreated = selectDate("dateCreated"); DateModified = selectDate("dateModified"); OwnerName = selectString("ownerName"); OwnerEmail = selectString("ownerEmail"); OwnerId = selectUri("ownerId"); Docs = selectUri("docs"); ExpansionState = selectString("expansionState"); VertScrollState = selectInt("vertScrollState"); WindowTop = selectInt("windowTop"); WindowLeft = selectInt("windowLeft"); WindowBottom = selectInt("windowBottom"); WindowRight = selectInt("windowRight"); var bodies = elements.Element("body").Elements(); //todo: make it recursive foreach (var b in bodies) { var o = new Outline(); Outlines.Add(o); TraverseBody(b, o); } } private void TraverseBody(XElement outline, Outline ot) { if (outline != null) { foreach (var att in outline.Attributes()) { ot.Attributes[att.Name.ToString()] = att.Value; } foreach (var x in outline.Elements()) { var o = new Outline(); ot.Outlines.Add(o); TraverseBody(x, o); } } } public XElement ToXML() { var root = new XElement("opml", new XAttribute("version", "2.0"), new XElement("head", new XElement("title", this.Title), (this.DateCreated.HasValue) ? new XElement("dateCreated", this.DateCreated.Value.ToString("R")) : null, (this.DateModified.HasValue) ? new XElement("dateModified", this.DateModified.Value.ToString("R")) : null, (!string.IsNullOrWhiteSpace(this.OwnerName))? new XElement("ownerName", this.OwnerName) : null, (!string.IsNullOrWhiteSpace(this.OwnerEmail)) ? new XElement("ownerEmail", this.OwnerEmail) : null )); var body = new XElement("body"); foreach(var x in this.Outlines) { XElement newOutline = new XElement("outline"); AddRecursiveChild(newOutline, x); body.Add(newOutline); } root.Add(body); return root; } private void AddRecursiveChild(XElement element, Outline o){ element.Add(from y in o.Attributes select new XAttribute(y.Key, y.Value)); foreach(var oo in o.Outlines) { XElement newOutline = new XElement("outline"); element.Add(newOutline); AddRecursiveChild(newOutline, oo); } } } public record Outline { public Dictionary Attributes { get; private set; } = new Dictionary(); public List Outlines { get; private set; } = new List(); } public record RssSubscription { public string? Title { get; set; } public string? OwnerName { get; set; } public string? OwnerEmail { get; set; } public DateTime? DateCreated { get; set; } public DateTime? DateModified { get; set; } public List Items { get; set; } = new List(); /// /// List errors in parsing opml attributes /// public List ParsingErrors { get; set; } = new List(); public RssSubscription(Opml opml) { Title = opml.Title; DateCreated = opml.DateCreated; DateModified = opml.DateModified; var line = 0; foreach (var x in opml.Outlines) { line++; var item = new RssSubscriptionItem(); foreach (var y in x.Attributes) { try { if (y.Key == "text") item.Text = y.Value; else if (y.Key == "description") item.Description = y.Value; else if (y.Key == "title") item.Title = y.Value; else if (y.Key == "name") item.Name = y.Value; else if (y.Key == "htmlUrl" && !string.IsNullOrWhiteSpace(y.Value)) item.HtmlUri = new Uri(y.Value); else if (y.Key == "xmlUrl" && !string.IsNullOrWhiteSpace(y.Value)) item.XmlUri = new Uri(y.Value); } catch (Exception ex) { ParsingErrors.Add("Error at line " + line + " in processing attribute " + y.Key + " with value " + y.Value + " " + ex.Message); } } Items.Add(item); } } } public record RssSubscriptionItem { public string? Text { get; set; } public string? Name { get; set; } public string? Title { get; set; } public string? Description { get; set; } public Uri? HtmlUri { get; set; } public Uri? XmlUri { get; set; } } ================================================ FILE: projects/orleans/rss-reader-3/Program.cs ================================================ using System.Net; using Orleans; using Orleans.Runtime; using Orleans.Configuration; using Orleans.Hosting; using System.Xml; using Microsoft.SyndicationFeed.Atom; using Microsoft.SyndicationFeed; using Microsoft.SyndicationFeed.Rss; using System.Diagnostics; var builder = WebApplication.CreateBuilder(); builder.Services.AddHttpClient(); builder.Logging.SetMinimumLevel(LogLevel.Information).AddConsole(); builder.Host.UseOrleans(builder => { builder .UseLocalhostClustering() .UseInMemoryReminderService() .Configure(options => { options.ClusterId = "dev"; options.ServiceId = "http-client"; }) .Configure(options => options.AdvertisedIPAddress = IPAddress.Loopback) .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(FeedSourceGrain).Assembly).WithReferences()) .AddRedisGrainStorage(Config.RedisStorage, optionsBuilder => optionsBuilder.Configure(options => { options.ConnectionString = "localhost:6379"; options.UseJson = true; options.DatabaseNumber = 1; })); }); var app = builder.Build(); app.MapGet("/", async context => { var logger = context.RequestServices.GetService()!.CreateLogger("rss-reader"); var httpClientFactory = context.RequestServices.GetService(); var httpClient = httpClientFactory.CreateClient(); var opmlSubscriptionList = await httpClient.GetStringAsync("http://scripting.com/misc/mlb.opml"); var opml = new Opml(opmlSubscriptionList); var subscriptionList = new RssSubscription(opml); var client = context.RequestServices.GetService()!; var feedSourceGrain = client.GetGrain(0)!; foreach (var source in subscriptionList.Items) { logger.LogInformation("Adding " + source.XmlUri?.ToString() ?? String.Empty); await feedSourceGrain.AddAsync(new FeedSource { Url = source.XmlUri?.ToString() ?? string.Empty, Website = source.HtmlUri?.ToString() ?? string.Empty, Title = source.Title ?? string.Empty, UpdateFrequencyInMinutes = 3 }); } var sources = await feedSourceGrain.GetAllAsync(); var feedFetcherReminderGrain = client.GetGrain(0); foreach (var s in sources) { // AddReminder is indempotent await feedFetcherReminderGrain.AddReminder(s.Url, s.UpdateFrequencyInMinutes); } var feedResultsGrain = client.GetGrain(0); var feedItems = await feedResultsGrain.GetAllAsync(); await context.Response.WriteAsync(@" Orleans RSS Reader "); await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync("Feed Sources
                    "); if (feedItems.Count == 0) await context.Response.WriteAsync("

                    Please refresh your browser again if you see no feeds displayed.

                    "); await context.Response.WriteAsync("
                      "); foreach (var i in feedItems) { await context.Response.WriteAsync("
                    • "); if (!string.IsNullOrWhiteSpace(i.Title)) await context.Response.WriteAsync($"{ i.Title }
                      "); await context.Response.WriteAsync(i.Description ?? ""); if (i.Url is object) await context.Response.WriteAsync($"
                      link"); await context.Response.WriteAsync($"
                      published on: {i.PublishedOn}
                      "); await context.Response.WriteAsync($""); await context.Response.WriteAsync("
                    • "); } await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync("
                    "); }); app.MapGet("/feed-sources", async context => { var client = context.RequestServices.GetService()!; var feedSourceGrain = client.GetGrain(0)!; var sources = await feedSourceGrain.GetAllAsync(); await context.Response.WriteAsync(@" Orleans RSS Reader "); await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync("Home
                    "); await context.Response.WriteAsync("Valid"); await context.Response.WriteAsync("
                      "); foreach (var s in sources.Where(x => x.IsLatestValid)) { await context.Response.WriteAsync($"
                    • {s.Url}"); await context.Response.WriteAsync("
                        "); foreach (var h in s.History) { await context.Response.WriteAsync($"
                      • {h.Timestamp} - {h.IsValid}

                        {h.Message}

                      • "); } await context.Response.WriteAsync("
                      "); await context.Response.WriteAsync("
                    • "); } await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync("Invalid"); await context.Response.WriteAsync("
                      "); foreach (var s in sources.Where(x => !x.IsLatestValid)) { await context.Response.WriteAsync($"
                    • {s.Url}"); await context.Response.WriteAsync("
                        "); foreach (var h in s.History) { await context.Response.WriteAsync($"
                      • {h.Timestamp} - {h.IsValid}

                        {h.Message}

                      • "); } await context.Response.WriteAsync("
                      "); await context.Response.WriteAsync("
                    • "); } await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync("
                    "); }); app.Run(); static class Config { public const string RedisStorage = "redis-rss-reader-3"; } class FeedFetcherReminder : Grain, IRemindable, IFeedFetcherReminder { readonly IGrainFactory _grainFactory; readonly ILogger _logger; readonly Dictionary _runningReminders = new Dictionary(); public FeedFetcherReminder(IGrainFactory grainFactory, ILogger logger) { _grainFactory = grainFactory; _logger = logger; } public async Task AddReminder(string reminder, short repeatEveryMinute) { if (string.IsNullOrWhiteSpace(reminder)) throw new ArgumentNullException(nameof(reminder)); var r = await GetReminder(reminder); if (r is not object) await RegisterOrUpdateReminder(reminder, dueTime: TimeSpan.FromSeconds(1), period: TimeSpan.FromMinutes(repeatEveryMinute)); } public async Task ReceiveReminder(string reminderName, TickStatus status) { _logger.Info($"Receive {reminderName} reminder"); if (_runningReminders.TryGetValue(reminderName, out var reminder)) { if (!reminder.FetchTask.IsCompleted) { _logger.LogInformation( "Received reminder {ReminderName}, but previous refresh task is still running and has been running for {TaskRunTime}", reminderName, reminder.FetchDuration.Elapsed); return; } } var feedSourceGrain = _grainFactory.GetGrain(0)!; var feedSource = await feedSourceGrain.FindFeedSourceByUrlAsync(reminderName); if (feedSource is object) { _logger.Info($"Fetching {feedSource.Url}"); var feedFetcherGrain = _grainFactory.GetGrain(feedSource.Url); var task = feedFetcherGrain.FetchAsync(feedSource); task.Ignore(); var stopwatch = reminder.FetchDuration ?? new Stopwatch(); stopwatch.Restart(); _runningReminders[reminderName] = (task, stopwatch); } } } interface IFeedFetcherReminder : Orleans.IGrainWithIntegerKey { Task AddReminder(string reminder, short repeatEveryMinute); } class FeedItemResultGrain : Grain, IFeedItemResults { private readonly IPersistentState _storage; public FeedItemResultGrain([PersistentState("feed-item-results-3", Config.RedisStorage)] IPersistentState storage) => _storage = storage; public async Task AddAsync(List items) { //make sure there is no duplication foreach (var i in items.Where(x => !string.IsNullOrWhiteSpace(x.Id))) { if (!_storage.State.Results.Exists(x => x.Id?.Equals(i.Id, StringComparison.OrdinalIgnoreCase) ?? false)) _storage.State.Results.Add(i); } await _storage.WriteStateAsync(); } public Task> GetAllAsync() => Task.FromResult(_storage.State.Results.OrderByDescending(x => x.PublishedOn).ToList()); public async Task ClearAsync() { _storage.State.Results.Clear(); await _storage.WriteStateAsync(); } } record FeedItemStore { public List Results { get; set; } = new List(); } interface IFeedItemResults : Orleans.IGrainWithIntegerKey { Task AddAsync(List items); Task> GetAllAsync(); Task ClearAsync(); } class FeedSourceGrain : Grain, IFeedSource { private readonly IPersistentState _storage; public FeedSourceGrain([PersistentState("feed-source-3", Config.RedisStorage)] IPersistentState storage) => _storage = storage; public async Task AddAsync(FeedSource source) { if (string.IsNullOrWhiteSpace(source.Url)) return; if (_storage.State.Sources.Find(x => x.Url == source.Url) is null) { _storage.State.Sources.Add(source); await _storage.WriteStateAsync(); } } public Task> GetAllAsync() => Task.FromResult(_storage.State.Sources); public Task FindFeedSourceByUrlAsync(string url) => Task.FromResult(_storage.State.Sources.Find(x => x.Url.Equals(url, StringComparison.Ordinal))); public async Task UpdateFeedSourceStatus(string url, bool activeStatus, string? message) { var feed = await FindFeedSourceByUrlAsync(url); if (feed is object) { feed.LogFetchAttempt(activeStatus, message); await _storage.WriteStateAsync(); } return feed; } } record FeedSourceStore { public List Sources { get; set; } = new List(); } interface IFeedSource : Orleans.IGrainWithIntegerKey { Task AddAsync(FeedSource source); Task> GetAllAsync(); Task FindFeedSourceByUrlAsync(string url); Task UpdateFeedSourceStatus(string url, bool activeStatus, string? message); } interface IFeedFetcher : Orleans.IGrainWithStringKey { Task FetchAsync(FeedSource source); } class FeedFetchGrain : Grain, IFeedFetcher { readonly IGrainFactory _grainFactory; readonly ILogger _logger; readonly IHttpClientFactory _httpClientFactory; public FeedFetchGrain(IGrainFactory grainFactory, ILogger logger, IHttpClientFactory httpClientFactory) { _grainFactory = grainFactory; _logger = logger; _httpClientFactory = httpClientFactory; } public async Task FetchAsync(FeedSource source) { var storage = _grainFactory.GetGrain(0); var results = await ReadFeedAsync(source); await storage.AddAsync(results); } public async Task> ReadFeedAsync(FeedSource source) { if (string.IsNullOrWhiteSpace(source.Url)) return new List(); if (!source.CanFetch()) return new List(); var feed = new List(); FeedType feedType = FeedType.Rss; try { _logger.LogInformation($"Fetching {source.Url}"); var client = _httpClientFactory.CreateClient(); client.Timeout = TimeSpan.FromSeconds(10); var response = await client.GetAsync(source.Url.ToString()); var memory = new MemoryStream(); await response.Content.CopyToAsync(memory); memory.Seek(0, SeekOrigin.Begin); char[] buf = new char[400]; // We need large buffer because to skip xml metadata and comments before the root of the xml document starts var sr = new StreamReader(memory); var charRead = sr.ReadBlock(buf, 0, buf.Length); if (!new string(buf).Contains("rss", StringComparison.OrdinalIgnoreCase)) feedType = FeedType.Atom; memory.Seek(0, SeekOrigin.Begin); using var xmlReader = XmlReader.Create(memory, new XmlReaderSettings { DtdProcessing = DtdProcessing.Ignore }); if (feedType == FeedType.Rss) { var feedReader = new RssFeedReader(xmlReader); // Read the feed while (await feedReader.Read()) { switch (feedReader.ElementType) { // Read Item case SyndicationElementType.Item: var item = await feedReader.ReadItem(); feed.Add(new FeedItem(source.ToChannel(), new SyndicationItem(item))); break; default: var content = await feedReader.ReadContent(); break; } } } else { var feedReader = new AtomFeedReader(xmlReader); while (await feedReader.Read()) { switch (feedReader.ElementType) { // Read Item case SyndicationElementType.Item: var entry = await feedReader.ReadEntry(); feed.Add(new FeedItem(source.ToChannel(), new SyndicationItem(entry))); break; default: var content = await feedReader.ReadContent(); break; } } } var feedSource = _grainFactory.GetGrain(0)!; await feedSource.UpdateFeedSourceStatus(source.Url, true, $"{feed.Count} items fetched"); return feed; } catch (Exception ex) { _logger.LogError($"({feedType}) {source.Url} Exception: {ex.Message}"); // Mark feed as invalid var feedSource = _grainFactory.GetGrain(0)!; await feedSource.UpdateFeedSourceStatus(source.Url, false, ex.Message); return new List(); } } } ================================================ FILE: projects/orleans/rss-reader-3/README.md ================================================ # RSS Reader with Reminder + Subscription list **This sample requires redis**. Make sure to run FLUSHALL in redis-cli between samples. This is a simple RSS reader that uses two storage, one for storing a feed source and another for storing feed results. You can keep refreshing your browser and the RSS Reader will display the latest results whenever they are available. It also logs the result of every RSS feed that got fetch regularly using Orleans reminder. - Make sure you have redis installed and running. - Run the app using `dotnet run`. - Open `localhost:5000` - You can keep refreshing the browser page as much as you want and it will only pick up and store unique feed items. - Orleans will keep keep refreshing each feed every x minutes (configurable). - This Rss Reader will read a list of RSS sources from an OPML subscription feed http://scripting.com/misc/mlb.opml In this RSS feed we use a single Reminder grain to handle all the reminders created for each feed. An alternative approach would be to use one Reminder grain per Reminder (this is demonstrated in another sample [RSS Reader with Reminder + Subscription list 2](../rss-reader-4)). ================================================ FILE: projects/orleans/rss-reader-3/rss-reader-3.csproj ================================================ net10.0 enable true all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/orleans/rss-reader-4/Feed.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using Microsoft.SyndicationFeed; record FeedChannel { public string? Title { get; set; } public string? Website { get; set; } public Uri? Url { get; set; } public bool HideTitle { get; set; } public bool HideDescription { get; set; } } class FeedSource { public string Url { get; set; } = string.Empty; public string Title { get; set; } = string.Empty; public string? Website { get; set; } public bool HideTitle { get; set; } public bool HideDescription { get; set; } public short UpdateFrequencyInMinutes { get; set; } = 1; public bool CanFetch ()=> History.Take(10).Count(x => !x.IsValid) <= 3; public bool IsLatestValid { get { if (History.Count == 0) return true; return History.First().IsValid; } } public List History { get; set; } = new List(); public void LogFetchAttempt(bool isValid, string? message = null) => History.Insert(0, new FeedHistory { Timestamp = DateTimeOffset.UtcNow, IsValid = isValid, Message = message }); public FeedChannel ToChannel() { return new FeedChannel { Title = Title, Website = Website, HideTitle = HideTitle, HideDescription = HideDescription }; } } record FeedHistory { public DateTimeOffset Timestamp { get; set; } public bool IsValid { get; set; } public string? Message { get; set; } } record FeedItem { public FeedChannel? Channel { get; set; } public string? Id { get; set; } public string? Title { get; set; } public string? Description { get; set; } public Uri? Url { get; set;} public DateTimeOffset PublishedOn { get; set; } public FeedItem() { } public FeedItem(FeedChannel channel, SyndicationItem item) { Channel = channel; Id = item.Id; Title = item.Title; Description = item.Description; var link = item.Links.FirstOrDefault(); if (link is object) Url = link.Uri; if (item.LastUpdated == default(DateTimeOffset)) PublishedOn = item.Published; else PublishedOn = item.LastUpdated; } } enum FeedType { Atom, Rss } ================================================ FILE: projects/orleans/rss-reader-4/Opml.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; public class Opml { public string? Title { get; set; } public DateTime? DateCreated { get; set; } public DateTime? DateModified { get; set; } public string? OwnerName { get; set; } public string? OwnerEmail { get; set; } public Uri? OwnerId { get; set; } public Uri? Docs { get; set; } public string? ExpansionState { get; set; } public int? VertScrollState { get; set; } public int? WindowTop { get; set; } public int? WindowLeft { get; set; } public int? WindowBottom { get; set; } public int? WindowRight { get; set; } public List Outlines { get; private set; } public Opml() { Outlines = new List(); } public Opml(string xml):this() { LoadFromXML(xml); } public void LoadFromXML(string xml) { var elements = XElement.Parse(xml); var heads = elements.Element("head").Descendants(); Func selectString = (filter) => heads!.Where(x => x.Name == filter).Select(x => x.Value).FirstOrDefault(); Func selectInt = (filter) => heads!.Where(x => x.Name == filter).Select(x => Convert.ToInt32(x.Value)).FirstOrDefault(); Func selectDate = (filter) => heads!.Where(x => x.Name == filter).Select(x => Convert.ToDateTime(x.Value)).FirstOrDefault(); Func selectUri = (filter) => heads!.Where(x => x.Name == filter).Select(x => new Uri(x.Value)).FirstOrDefault(); Title = selectString("title"); DateCreated = selectDate("dateCreated"); DateModified = selectDate("dateModified"); OwnerName = selectString("ownerName"); OwnerEmail = selectString("ownerEmail"); OwnerId = selectUri("ownerId"); Docs = selectUri("docs"); ExpansionState = selectString("expansionState"); VertScrollState = selectInt("vertScrollState"); WindowTop = selectInt("windowTop"); WindowLeft = selectInt("windowLeft"); WindowBottom = selectInt("windowBottom"); WindowRight = selectInt("windowRight"); var bodies = elements.Element("body").Elements(); //todo: make it recursive foreach (var b in bodies) { var o = new Outline(); Outlines.Add(o); TraverseBody(b, o); } } private void TraverseBody(XElement outline, Outline ot) { if (outline != null) { foreach (var att in outline.Attributes()) { ot.Attributes[att.Name.ToString()] = att.Value; } foreach (var x in outline.Elements()) { var o = new Outline(); ot.Outlines.Add(o); TraverseBody(x, o); } } } public XElement ToXML() { var root = new XElement("opml", new XAttribute("version", "2.0"), new XElement("head", new XElement("title", this.Title), (this.DateCreated.HasValue) ? new XElement("dateCreated", this.DateCreated.Value.ToString("R")) : null, (this.DateModified.HasValue) ? new XElement("dateModified", this.DateModified.Value.ToString("R")) : null, (!string.IsNullOrWhiteSpace(this.OwnerName))? new XElement("ownerName", this.OwnerName) : null, (!string.IsNullOrWhiteSpace(this.OwnerEmail)) ? new XElement("ownerEmail", this.OwnerEmail) : null )); var body = new XElement("body"); foreach(var x in this.Outlines) { XElement newOutline = new XElement("outline"); AddRecursiveChild(newOutline, x); body.Add(newOutline); } root.Add(body); return root; } private void AddRecursiveChild(XElement element, Outline o){ element.Add(from y in o.Attributes select new XAttribute(y.Key, y.Value)); foreach(var oo in o.Outlines) { XElement newOutline = new XElement("outline"); element.Add(newOutline); AddRecursiveChild(newOutline, oo); } } } public record Outline { public Dictionary Attributes { get; private set; } = new Dictionary(); public List Outlines { get; private set; } = new List(); } public record RssSubscription { public string? Title { get; set; } public string? OwnerName { get; set; } public string? OwnerEmail { get; set; } public DateTime? DateCreated { get; set; } public DateTime? DateModified { get; set; } public List Items { get; set; } = new List(); /// /// List errors in parsing opml attributes /// public List ParsingErrors { get; set; } = new List(); public RssSubscription(Opml opml) { Title = opml.Title; DateCreated = opml.DateCreated; DateModified = opml.DateModified; var line = 0; foreach (var x in opml.Outlines) { line++; var item = new RssSubscriptionItem(); foreach (var y in x.Attributes) { try { if (y.Key == "text") item.Text = y.Value; else if (y.Key == "description") item.Description = y.Value; else if (y.Key == "title") item.Title = y.Value; else if (y.Key == "name") item.Name = y.Value; else if (y.Key == "htmlUrl" && !string.IsNullOrWhiteSpace(y.Value)) item.HtmlUri = new Uri(y.Value); else if (y.Key == "xmlUrl" && !string.IsNullOrWhiteSpace(y.Value)) item.XmlUri = new Uri(y.Value); } catch (Exception ex) { ParsingErrors.Add("Error at line " + line + " in processing attribute " + y.Key + " with value " + y.Value + " " + ex.Message); } } Items.Add(item); } } } public record RssSubscriptionItem { public string? Text { get; set; } public string? Name { get; set; } public string? Title { get; set; } public string? Description { get; set; } public Uri? HtmlUri { get; set; } public Uri? XmlUri { get; set; } } ================================================ FILE: projects/orleans/rss-reader-4/Program.cs ================================================ using System.Net; using Orleans; using Orleans.Runtime; using Orleans.Configuration; using Orleans.Hosting; using System.Xml; using Microsoft.SyndicationFeed.Atom; using Microsoft.SyndicationFeed; using Microsoft.SyndicationFeed.Rss; var builder = WebApplication.CreateBuilder(); builder.Services.AddHttpClient(); builder.Logging.SetMinimumLevel(LogLevel.Information).AddConsole(); builder.Host.UseOrleans(builder => { builder .UseLocalhostClustering() .UseInMemoryReminderService() .Configure(options => { options.ClusterId = "dev"; options.ServiceId = "http-client"; }) .Configure(options => options.AdvertisedIPAddress = IPAddress.Loopback) .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(FeedSourceGrain).Assembly).WithReferences()) .AddRedisGrainStorage(Config.RedisStorage, optionsBuilder => optionsBuilder.Configure(options => { options.ConnectionString = "localhost:6379"; options.UseJson = true; options.DatabaseNumber = 1; })); }); var app = builder.Build(); app.MapGet("/", async context => { var httpClientFactory = context.RequestServices.GetService(); var httpClient = httpClientFactory.CreateClient(); var opmlSubscriptionList = await httpClient.GetStringAsync("http://scripting.com/misc/mlb.opml"); var opml = new Opml(opmlSubscriptionList); var subscriptionList = new RssSubscription(opml); var client = context.RequestServices.GetService()!; var feedSourceGrain = client.GetGrain(0)!; var logger = context.RequestServices.GetService()!.CreateLogger("rss-reader"); foreach (var source in subscriptionList.Items) { logger.LogInformation("Adding " + source.XmlUri?.ToString() ?? String.Empty); await feedSourceGrain.AddAsync(new FeedSource { Url = source.XmlUri?.ToString() ?? string.Empty, Website = source.HtmlUri?.ToString() ?? string.Empty, Title = source.Title ?? string.Empty, UpdateFrequencyInMinutes = 3 }); } var sources = await feedSourceGrain.GetAllAsync(); foreach (var s in sources) { var feedFetcherReminderGrain = client.GetGrain(s.Url); // AddReminder is indempotent await feedFetcherReminderGrain.AddReminder(s.Url, s.UpdateFrequencyInMinutes); } var feedResultsGrain = client.GetGrain(0); var feedItems = await feedResultsGrain.GetAllAsync(); await context.Response.WriteAsync(@" Orleans RSS Reader "); await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync("Feed Sources
                    "); if (feedItems.Count == 0) await context.Response.WriteAsync("

                    Please refresh your browser again if you see no feeds displayed.

                    "); await context.Response.WriteAsync("
                      "); foreach (var i in feedItems) { await context.Response.WriteAsync("
                    • "); if (!string.IsNullOrWhiteSpace(i.Title)) await context.Response.WriteAsync($"{ i.Title }
                      "); await context.Response.WriteAsync(i.Description ?? ""); if (i.Url is object) await context.Response.WriteAsync($"
                      link"); await context.Response.WriteAsync($"
                      published on: {i.PublishedOn}
                      "); await context.Response.WriteAsync($""); await context.Response.WriteAsync("
                    • "); } await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync("
                    "); }); app.MapGet("/feed-sources", async context => { var client = context.RequestServices.GetService()!; var feedSourceGrain = client.GetGrain(0)!; var sources = await feedSourceGrain.GetAllAsync(); await context.Response.WriteAsync(@" Orleans RSS Reader "); await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync("Home
                    "); await context.Response.WriteAsync("Valid"); await context.Response.WriteAsync("
                      "); foreach (var s in sources.Where(x => x.IsLatestValid)) { await context.Response.WriteAsync($"
                    • {s.Url}"); await context.Response.WriteAsync("
                        "); foreach (var h in s.History) { await context.Response.WriteAsync($"
                      • {h.Timestamp} - {h.IsValid}

                        {h.Message}

                      • "); } await context.Response.WriteAsync("
                      "); await context.Response.WriteAsync("
                    • "); } await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync("Invalid"); await context.Response.WriteAsync("
                      "); foreach (var s in sources.Where(x => !x.IsLatestValid)) { await context.Response.WriteAsync($"
                    • {s.Url}"); await context.Response.WriteAsync("
                        "); foreach (var h in s.History) { await context.Response.WriteAsync($"
                      • {h.Timestamp} - {h.IsValid}

                        {h.Message}

                      • "); } await context.Response.WriteAsync("
                      "); await context.Response.WriteAsync("
                    • "); } await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync("
                    "); }); app.Run(); static class Config { public const string RedisStorage = "redis-rss-reader-4"; } class FeedFetcherReminder : Grain, IRemindable, IFeedFetcherReminder { readonly IGrainFactory _grainFactory; readonly ILogger _logger; public FeedFetcherReminder(IGrainFactory grainFactory, ILogger logger) { _grainFactory = grainFactory; _logger = logger; } public async Task AddReminder(string reminder, short repeatEveryMinute) { if (string.IsNullOrWhiteSpace(reminder)) throw new ArgumentNullException(nameof(reminder)); var r = await GetReminder(reminder); if (r is not object) await RegisterOrUpdateReminder(reminder, dueTime: TimeSpan.FromSeconds(1), period: TimeSpan.FromMinutes(repeatEveryMinute)); } public async Task ReceiveReminder(string reminderName, TickStatus status) { _logger.Info($"Receive {reminderName} reminder"); var feedSourceGrain = _grainFactory.GetGrain(0)!; var feedSource = await feedSourceGrain.FindFeedSourceByUrlAsync(reminderName); if (feedSource is object) { _logger.Info($"Fetching {feedSource.Url}"); var feedFetcherGrain = _grainFactory.GetGrain(feedSource.Url); await feedFetcherGrain.FetchAsync(feedSource); } } } interface IFeedFetcherReminder : Orleans.IGrainWithStringKey { Task AddReminder(string reminder, short repeatEveryMinute); } class FeedItemResultGrain : Grain, IFeedItemResults { private readonly IPersistentState _storage; public FeedItemResultGrain([PersistentState("feed-item-results-4", Config.RedisStorage)] IPersistentState storage) => _storage = storage; public async Task AddAsync(List items) { //make sure there is no duplication foreach (var i in items.Where(x => !string.IsNullOrWhiteSpace(x.Id))) { if (!_storage.State.Results.Exists(x => x.Id?.Equals(i.Id, StringComparison.OrdinalIgnoreCase) ?? false)) _storage.State.Results.Add(i); } await _storage.WriteStateAsync(); } public Task> GetAllAsync() => Task.FromResult(_storage.State.Results.OrderByDescending(x => x.PublishedOn).ToList()); public async Task ClearAsync() { _storage.State.Results.Clear(); await _storage.WriteStateAsync(); } } record FeedItemStore { public List Results { get; set; } = new List(); } interface IFeedItemResults : Orleans.IGrainWithIntegerKey { Task AddAsync(List items); Task> GetAllAsync(); Task ClearAsync(); } class FeedSourceGrain : Grain, IFeedSource { private readonly IPersistentState _storage; public FeedSourceGrain([PersistentState("feed-source-4", Config.RedisStorage)] IPersistentState storage) => _storage = storage; public async Task AddAsync(FeedSource source) { if (string.IsNullOrWhiteSpace(source.Url)) return; if (_storage.State.Sources.Find(x => x.Url == source.Url) is null) { _storage.State.Sources.Add(source); await _storage.WriteStateAsync(); } } public Task> GetAllAsync() => Task.FromResult(_storage.State.Sources); public Task FindFeedSourceByUrlAsync(string url) => Task.FromResult(_storage.State.Sources.Find(x => x.Url.Equals(url, StringComparison.Ordinal))); public async Task UpdateFeedSourceStatus(string url, bool activeStatus, string? message) { var feed = await FindFeedSourceByUrlAsync(url); if (feed is object) { feed.LogFetchAttempt(activeStatus, message); await _storage.WriteStateAsync(); } return feed; } } record FeedSourceStore { public List Sources { get; set; } = new List(); } interface IFeedSource : Orleans.IGrainWithIntegerKey { Task AddAsync(FeedSource source); Task> GetAllAsync(); Task FindFeedSourceByUrlAsync(string url); Task UpdateFeedSourceStatus(string url, bool activeStatus, string? message); } interface IFeedFetcher : Orleans.IGrainWithStringKey { Task FetchAsync(FeedSource source); } class FeedFetchGrain : Grain, IFeedFetcher { readonly IGrainFactory _grainFactory; readonly ILogger _logger; readonly IHttpClientFactory _httpClientFactory; public FeedFetchGrain(IGrainFactory grainFactory, ILogger logger, IHttpClientFactory httpClientFactory) { _grainFactory = grainFactory; _logger = logger; _httpClientFactory = httpClientFactory; } public async Task FetchAsync(FeedSource source) { var storage = _grainFactory.GetGrain(0); var results = await ReadFeedAsync(source); await storage.AddAsync(results); } public async Task> ReadFeedAsync(FeedSource source) { if (string.IsNullOrWhiteSpace(source.Url)) return new List(); if (!source.CanFetch()) return new List(); var feed = new List(); FeedType feedType = FeedType.Rss; try { _logger.LogInformation($"Fetching {source.Url}"); var client = _httpClientFactory.CreateClient(); client.Timeout = TimeSpan.FromSeconds(10); var response = await client.GetAsync(source.Url.ToString()); var memory = new MemoryStream(); await response.Content.CopyToAsync(memory); memory.Seek(0, SeekOrigin.Begin); char[] buf = new char[400]; // We need large buffer because to skip xml metadata and comments before the root of the xml document starts var sr = new StreamReader(memory); var charRead = sr.ReadBlock(buf, 0, buf.Length); if (!new string(buf).Contains("rss", StringComparison.OrdinalIgnoreCase)) feedType = FeedType.Atom; memory.Seek(0, SeekOrigin.Begin); using var xmlReader = XmlReader.Create(memory, new XmlReaderSettings { DtdProcessing = DtdProcessing.Ignore }); if (feedType == FeedType.Rss) { var feedReader = new RssFeedReader(xmlReader); // Read the feed while (await feedReader.Read()) { switch (feedReader.ElementType) { // Read Item case SyndicationElementType.Item: var item = await feedReader.ReadItem(); feed.Add(new FeedItem(source.ToChannel(), new SyndicationItem(item))); break; default: var content = await feedReader.ReadContent(); break; } } } else { var feedReader = new AtomFeedReader(xmlReader); while (await feedReader.Read()) { switch (feedReader.ElementType) { // Read Item case SyndicationElementType.Item: var entry = await feedReader.ReadEntry(); feed.Add(new FeedItem(source.ToChannel(), new SyndicationItem(entry))); break; default: var content = await feedReader.ReadContent(); break; } } } var feedSource = _grainFactory.GetGrain(0)!; await feedSource.UpdateFeedSourceStatus(source.Url, true, $"{feed.Count} items fetched"); return feed; } catch (Exception ex) { _logger.LogError($"({feedType}) {source.Url} Exception: {ex.Message}"); // Mark feed as invalid var feedSource = _grainFactory.GetGrain(0)!; await feedSource.UpdateFeedSourceStatus(source.Url, false, ex.Message); return new List(); } } } ================================================ FILE: projects/orleans/rss-reader-4/README.md ================================================ # RSS Reader with Reminder + Subscription list 2 **This sample requires redis**. Make sure to run FLUSHALL in redis-cli between samples. This is a simple RSS reader that uses two storage, one for storing a feed source and another for storing feed results. You can keep refreshing your browser and the RSS Reader will display the latest results whenever they are available. It also logs the result of every RSS feed that got fetch regularly using Orleans Reminder. - Make sure you have redis installed and running. - Run the app using `dotnet run`. - Open `localhost:5000` - You can keep refreshing the browser page as much as you want and it will only pick up and store unique feed items. - Orleans will keep keep refreshing each feed every x minutes (configurable). - This Rss Reader will read a list of RSS sources from an OPML subscription feed http://scripting.com/misc/mlb.opml In this version of the RSS Reader, we use one Reminder grain per feed source. You can contrast this approach to the previous sample ([RSS Reader with Reminder + Subscription list](../rss-reader-3)) ================================================ FILE: projects/orleans/rss-reader-4/rss-reader-4.csproj ================================================ net10.0 enable true all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/orleans/rss-reader-5/Feed.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using Microsoft.SyndicationFeed; record FeedChannel { public string? Title { get; set; } public string? Website { get; set; } public Uri? Url { get; set; } public bool HideTitle { get; set; } public bool HideDescription { get; set; } } class FeedSource { public string Url { get; set; } = string.Empty; public string Title { get; set; } = string.Empty; public string? Website { get; set; } public bool HideTitle { get; set; } public bool HideDescription { get; set; } public short UpdateFrequencyInMinutes { get; set; } = 1; public bool CanFetch ()=> History.Take(10).Count(x => !x.IsValid) <= 3; public bool IsLatestValid { get { if (History.Count == 0) return true; return History.First().IsValid; } } public List History { get; set; } = new List(); public void LogFetchAttempt(bool isValid, string? message = null) => History.Insert(0, new FeedHistory { Timestamp = DateTimeOffset.UtcNow, IsValid = isValid, Message = message }); public FeedChannel ToChannel() { return new FeedChannel { Title = Title, Website = Website, HideTitle = HideTitle, HideDescription = HideDescription }; } } record FeedHistory { public DateTimeOffset Timestamp { get; set; } public bool IsValid { get; set; } public string? Message { get; set; } } record FeedItem { public FeedChannel? Channel { get; set; } public string? Id { get; set; } public string? Title { get; set; } public string? Description { get; set; } public Uri? Url { get; set;} public DateTimeOffset PublishedOn { get; set; } public FeedItem() { } public FeedItem(FeedChannel channel, SyndicationItem item) { Channel = channel; Id = item.Id; Title = item.Title; Description = item.Description; var link = item.Links.FirstOrDefault(); if (link is object) Url = link.Uri; if (item.LastUpdated == default(DateTimeOffset)) PublishedOn = item.Published; else PublishedOn = item.LastUpdated; } } enum FeedType { Atom, Rss } ================================================ FILE: projects/orleans/rss-reader-5/Interfaces.cs ================================================ using System.Collections.Generic; using System.Threading.Tasks; interface IFeedSource : Orleans.IGrainWithIntegerKey { Task AddAsync(FeedSource source); Task> GetAllAsync(); Task FindFeedSourceByUrlAsync(string url); Task UpdateFeedSourceStatus(string url, bool activeStatus, string? message); } interface IFeedFetcher : Orleans.IGrainWithStringKey { Task FetchAsync(FeedSource source); } interface IFeedItemResults : Orleans.IGrainWithIntegerKey { Task AddAsync(List items); Task> GetAllAsync(); Task ClearAsync(); } interface IFeedFetcherReminder : Orleans.IGrainWithStringKey { Task AddReminder(string reminder, short repeatEveryMinute); } interface IFeedStreamReader : Orleans.IGrain { } ================================================ FILE: projects/orleans/rss-reader-5/Opml.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; public class Opml { public string? Title { get; set; } public DateTime? DateCreated { get; set; } public DateTime? DateModified { get; set; } public string? OwnerName { get; set; } public string? OwnerEmail { get; set; } public Uri? OwnerId { get; set; } public Uri? Docs { get; set; } public string? ExpansionState { get; set; } public int? VertScrollState { get; set; } public int? WindowTop { get; set; } public int? WindowLeft { get; set; } public int? WindowBottom { get; set; } public int? WindowRight { get; set; } public List Outlines { get; private set; } public Opml() { Outlines = new List(); } public Opml(string xml):this() { LoadFromXML(xml); } public void LoadFromXML(string xml) { var elements = XElement.Parse(xml); var heads = elements.Element("head").Descendants(); Func selectString = (filter) => heads!.Where(x => x.Name == filter).Select(x => x.Value).FirstOrDefault(); Func selectInt = (filter) => heads!.Where(x => x.Name == filter).Select(x => Convert.ToInt32(x.Value)).FirstOrDefault(); Func selectDate = (filter) => heads!.Where(x => x.Name == filter).Select(x => Convert.ToDateTime(x.Value)).FirstOrDefault(); Func selectUri = (filter) => heads!.Where(x => x.Name == filter).Select(x => new Uri(x.Value)).FirstOrDefault(); Title = selectString("title"); DateCreated = selectDate("dateCreated"); DateModified = selectDate("dateModified"); OwnerName = selectString("ownerName"); OwnerEmail = selectString("ownerEmail"); OwnerId = selectUri("ownerId"); Docs = selectUri("docs"); ExpansionState = selectString("expansionState"); VertScrollState = selectInt("vertScrollState"); WindowTop = selectInt("windowTop"); WindowLeft = selectInt("windowLeft"); WindowBottom = selectInt("windowBottom"); WindowRight = selectInt("windowRight"); var bodies = elements.Element("body").Elements(); //todo: make it recursive foreach (var b in bodies) { var o = new Outline(); Outlines.Add(o); TraverseBody(b, o); } } private void TraverseBody(XElement outline, Outline ot) { if (outline != null) { foreach (var att in outline.Attributes()) { ot.Attributes[att.Name.ToString()] = att.Value; } foreach (var x in outline.Elements()) { var o = new Outline(); ot.Outlines.Add(o); TraverseBody(x, o); } } } public XElement ToXML() { var root = new XElement("opml", new XAttribute("version", "2.0"), new XElement("head", new XElement("title", this.Title), (this.DateCreated.HasValue) ? new XElement("dateCreated", this.DateCreated.Value.ToString("R")) : null, (this.DateModified.HasValue) ? new XElement("dateModified", this.DateModified.Value.ToString("R")) : null, (!string.IsNullOrWhiteSpace(this.OwnerName))? new XElement("ownerName", this.OwnerName) : null, (!string.IsNullOrWhiteSpace(this.OwnerEmail)) ? new XElement("ownerEmail", this.OwnerEmail) : null )); var body = new XElement("body"); foreach(var x in this.Outlines) { XElement newOutline = new XElement("outline"); AddRecursiveChild(newOutline, x); body.Add(newOutline); } root.Add(body); return root; } private void AddRecursiveChild(XElement element, Outline o){ element.Add(from y in o.Attributes select new XAttribute(y.Key, y.Value)); foreach(var oo in o.Outlines) { XElement newOutline = new XElement("outline"); element.Add(newOutline); AddRecursiveChild(newOutline, oo); } } } public record Outline { public Dictionary Attributes { get; private set; } = new Dictionary(); public List Outlines { get; private set; } = new List(); } public record RssSubscription { public string? Title { get; set; } public string? OwnerName { get; set; } public string? OwnerEmail { get; set; } public DateTime? DateCreated { get; set; } public DateTime? DateModified { get; set; } public List Items { get; set; } = new List(); /// /// List errors in parsing opml attributes /// public List ParsingErrors { get; set; } = new List(); public RssSubscription(Opml opml) { Title = opml.Title; DateCreated = opml.DateCreated; DateModified = opml.DateModified; var line = 0; foreach (var x in opml.Outlines) { line++; var item = new RssSubscriptionItem(); foreach (var y in x.Attributes) { try { if (y.Key == "text") item.Text = y.Value; else if (y.Key == "description") item.Description = y.Value; else if (y.Key == "title") item.Title = y.Value; else if (y.Key == "name") item.Name = y.Value; else if (y.Key == "htmlUrl" && !string.IsNullOrWhiteSpace(y.Value)) item.HtmlUri = new Uri(y.Value); else if (y.Key == "xmlUrl" && !string.IsNullOrWhiteSpace(y.Value)) item.XmlUri = new Uri(y.Value); } catch (Exception ex) { ParsingErrors.Add("Error at line " + line + " in processing attribute " + y.Key + " with value " + y.Value + " " + ex.Message); } } Items.Add(item); } } } public record RssSubscriptionItem { public string? Text { get; set; } public string? Name { get; set; } public string? Title { get; set; } public string? Description { get; set; } public Uri? HtmlUri { get; set; } public Uri? XmlUri { get; set; } } ================================================ FILE: projects/orleans/rss-reader-5/Program.cs ================================================ using System.Net; using Orleans; using Orleans.Runtime; using Orleans.Configuration; using Orleans.Hosting; using System.Xml; using Microsoft.SyndicationFeed.Atom; using Microsoft.SyndicationFeed; using Microsoft.SyndicationFeed.Rss; using Orleans.Streams; var builder = WebApplication.CreateBuilder(); builder.Services.AddHttpClient(); builder.Logging.SetMinimumLevel(LogLevel.Information).AddConsole(); builder.Host.UseOrleans(builder => { builder .UseLocalhostClustering() .UseInMemoryReminderService() .Configure(options => { options.ClusterId = "dev"; options.ServiceId = "http-client"; }) .Configure(options => options.AdvertisedIPAddress = IPAddress.Loopback) .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(FeedSourceGrain).Assembly).WithReferences()) .AddRedisGrainStorage(Config.RedisStorage, optionsBuilder => optionsBuilder.Configure(options => { options.ConnectionString = "localhost:6379"; options.UseJson = true; options.DatabaseNumber = 1; })) .AddMemoryGrainStorage("PubSubStore") .AddSimpleMessageStreamProvider(Config.StreamProvider); }); var app = builder.Build(); app.MapGet("/", async context => { var httpClientFactory = context.RequestServices.GetService(); var httpClient = httpClientFactory.CreateClient(); var opmlSubscriptionList = await httpClient.GetStringAsync("http://scripting.com/misc/mlb.opml"); var opml = new Opml(opmlSubscriptionList); var subscriptionList = new RssSubscription(opml); var client = context.RequestServices.GetService()!; var feedSourceGrain = client.GetGrain(0)!; var logger = context.RequestServices.GetService()!.CreateLogger("rss-reader"); foreach (var source in subscriptionList.Items) { logger.LogInformation("Adding " + source.XmlUri?.ToString() ?? String.Empty); await feedSourceGrain.AddAsync(new FeedSource { Url = source.XmlUri?.ToString() ?? string.Empty, Website = source.HtmlUri?.ToString() ?? string.Empty, Title = source.Title ?? string.Empty, UpdateFrequencyInMinutes = 3 }); } var sources = await feedSourceGrain.GetAllAsync(); foreach (var s in sources) { var feedFetcherReminderGrain = client.GetGrain(s.Url); // AddReminder is indempotent await feedFetcherReminderGrain.AddReminder(s.Url, s.UpdateFrequencyInMinutes); } var feedResultsGrain = client.GetGrain(0); var feedItems = await feedResultsGrain.GetAllAsync(); await context.Response.WriteAsync(@" Orleans RSS Reader "); await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync("Feed Sources
                    "); if (feedItems.Count == 0) await context.Response.WriteAsync("

                    Please refresh your browser again if you see no feeds displayed.

                    "); await context.Response.WriteAsync("
                      "); foreach (var i in feedItems) { await context.Response.WriteAsync("
                    • "); if (!string.IsNullOrWhiteSpace(i.Title)) await context.Response.WriteAsync($"{ i.Title }
                      "); await context.Response.WriteAsync(i.Description ?? ""); if (i.Url is object) await context.Response.WriteAsync($"
                      link"); await context.Response.WriteAsync($"
                      published on: {i.PublishedOn}
                      "); await context.Response.WriteAsync($""); await context.Response.WriteAsync("
                    • "); } await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync("
                    "); }); app.MapGet("/feed-sources", async context => { var client = context.RequestServices.GetService()!; var feedSourceGrain = client.GetGrain(0)!; var sources = await feedSourceGrain.GetAllAsync(); await context.Response.WriteAsync(@" Orleans RSS Reader "); await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync("Home
                    "); await context.Response.WriteAsync("Valid"); await context.Response.WriteAsync("
                      "); foreach (var s in sources.Where(x => x.IsLatestValid)) { await context.Response.WriteAsync($"
                    • {s.Url}"); await context.Response.WriteAsync("
                        "); foreach (var h in s.History) { await context.Response.WriteAsync($"
                      • {h.Timestamp} - {h.IsValid}

                        {h.Message}

                      • "); } await context.Response.WriteAsync("
                      "); await context.Response.WriteAsync("
                    • "); } await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync("Invalid"); await context.Response.WriteAsync("
                      "); foreach (var s in sources.Where(x => !x.IsLatestValid)) { await context.Response.WriteAsync($"
                    • {s.Url}"); await context.Response.WriteAsync("
                        "); foreach (var h in s.History) { await context.Response.WriteAsync($"
                      • {h.Timestamp} - {h.IsValid}

                        {h.Message}

                      • "); } await context.Response.WriteAsync("
                      "); await context.Response.WriteAsync("
                    • "); } await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync("
                    "); }); app.Run(); static class Config { public const string RedisStorage = "redis-rss-reader-5"; public const string StreamProvider = "SMSProvider"; public static readonly Guid StreamId = Guid.NewGuid(); public const string StreamChannel = "RSS"; } class FeedFetcherReminder : Grain, IRemindable, IFeedFetcherReminder { readonly IGrainFactory _grainFactory; readonly ILogger _logger; public FeedFetcherReminder(IGrainFactory grainFactory, ILogger logger) { _grainFactory = grainFactory; _logger = logger; } public async Task AddReminder(string reminder, short repeatEveryMinute) { if (string.IsNullOrWhiteSpace(reminder)) throw new ArgumentNullException(nameof(reminder)); var r = await GetReminder(reminder); if (r is not object) await RegisterOrUpdateReminder(reminder, dueTime: TimeSpan.FromSeconds(1), period: TimeSpan.FromMinutes(repeatEveryMinute)); } public async Task ReceiveReminder(string reminderName, TickStatus status) { _logger.Info($"Receive {reminderName} reminder"); var feedSourceGrain = _grainFactory.GetGrain(0)!; var feedSource = await feedSourceGrain.FindFeedSourceByUrlAsync(reminderName); if (feedSource is object) { _logger.Info($"Fetching {feedSource.Url}"); var feedFetcherGrain = _grainFactory.GetGrain(feedSource.Url); await feedFetcherGrain.FetchAsync(feedSource); } } } [ImplicitStreamSubscription(Config.StreamChannel)] class FeedStreamReaderGrain : Grain, IFeedStreamReader { readonly ILogger _logger; readonly IGrainFactory _grainFactory; public FeedStreamReaderGrain(ILogger logger, IGrainFactory grainFactory) { _logger = logger; _grainFactory = grainFactory; } public override async Task OnActivateAsync() { var streamProvider = GetStreamProvider(Config.StreamProvider); var stream = streamProvider.GetStream>(Config.StreamId, Config.StreamChannel); var feedItemResultGrain = _grainFactory.GetGrain(0); await stream.SubscribeAsync>(async (data, token) => { _logger.Info($"Feed Items {data.Count}"); await feedItemResultGrain.AddAsync(data); }); } } class FeedItemResultGrain : Grain, IFeedItemResults { private readonly IPersistentState _storage; public FeedItemResultGrain([PersistentState("feed-item-results-5", Config.RedisStorage)] IPersistentState storage) => _storage = storage; public async Task AddAsync(List items) { //make sure there is no duplication foreach (var i in items.Where(x => !string.IsNullOrWhiteSpace(x.Id))) { if (!_storage.State.Results.Exists(x => x.Id?.Equals(i.Id, StringComparison.OrdinalIgnoreCase) ?? false)) _storage.State.Results.Add(i); } await _storage.WriteStateAsync(); } public Task> GetAllAsync() => Task.FromResult(_storage.State.Results.OrderByDescending(x => x.PublishedOn).ToList()); public async Task ClearAsync() { _storage.State.Results.Clear(); await _storage.WriteStateAsync(); } } record FeedItemStore { public List Results { get; set; } = new List(); } class FeedSourceGrain : Grain, IFeedSource { private readonly IPersistentState _storage; public FeedSourceGrain([PersistentState("feed-source-5", Config.RedisStorage)] IPersistentState storage) => _storage = storage; public async Task AddAsync(FeedSource source) { if (string.IsNullOrWhiteSpace(source.Url)) return; if (_storage.State.Sources.Find(x => x.Url == source.Url) is null) { _storage.State.Sources.Add(source); await _storage.WriteStateAsync(); } } public Task> GetAllAsync() => Task.FromResult(_storage.State.Sources); public Task FindFeedSourceByUrlAsync(string url) => Task.FromResult(_storage.State.Sources.Find(x => x.Url.Equals(url, StringComparison.Ordinal))); public async Task UpdateFeedSourceStatus(string url, bool activeStatus, string? message) { var feed = await FindFeedSourceByUrlAsync(url); if (feed is object) { feed.LogFetchAttempt(activeStatus, message); await _storage.WriteStateAsync(); } return feed; } } record FeedSourceStore { public List Sources { get; set; } = new List(); } class FeedFetchGrain : Grain, IFeedFetcher { readonly IGrainFactory _grainFactory; readonly ILogger _logger; readonly IHttpClientFactory _httpClientFactory; public FeedFetchGrain(IGrainFactory grainFactory, ILogger logger, IHttpClientFactory httpClientFactory) { _grainFactory = grainFactory; _logger = logger; _httpClientFactory = httpClientFactory; } public async Task FetchAsync(FeedSource source) { var results = await ReadFeedAsync(source); var streamProvider = GetStreamProvider(Config.StreamProvider); var stream = streamProvider.GetStream>(Config.StreamId, Config.StreamChannel); await stream.OnNextAsync(results); } public async Task> ReadFeedAsync(FeedSource source) { if (string.IsNullOrWhiteSpace(source.Url)) return new List(); if (!source.CanFetch()) return new List(); var feed = new List(); FeedType feedType = FeedType.Rss; try { _logger.LogInformation($"Fetching {source.Url}"); var client = _httpClientFactory.CreateClient(); client.Timeout = TimeSpan.FromSeconds(10); var response = await client.GetAsync(source.Url.ToString()); var memory = new MemoryStream(); await response.Content.CopyToAsync(memory); memory.Seek(0, SeekOrigin.Begin); char[] buf = new char[400]; // We need large buffer because to skip xml metadata and comments before the root of the xml document starts var sr = new StreamReader(memory); var charRead = sr.ReadBlock(buf, 0, buf.Length); if (!new string(buf).Contains("rss", StringComparison.OrdinalIgnoreCase)) feedType = FeedType.Atom; memory.Seek(0, SeekOrigin.Begin); using var xmlReader = XmlReader.Create(memory, new XmlReaderSettings { DtdProcessing = DtdProcessing.Ignore }); if (feedType == FeedType.Rss) { var feedReader = new RssFeedReader(xmlReader); // Read the feed while (await feedReader.Read()) { switch (feedReader.ElementType) { // Read Item case SyndicationElementType.Item: var item = await feedReader.ReadItem(); feed.Add(new FeedItem(source.ToChannel(), new SyndicationItem(item))); break; default: var content = await feedReader.ReadContent(); break; } } } else { var feedReader = new AtomFeedReader(xmlReader); while (await feedReader.Read()) { switch (feedReader.ElementType) { // Read Item case SyndicationElementType.Item: var entry = await feedReader.ReadEntry(); feed.Add(new FeedItem(source.ToChannel(), new SyndicationItem(entry))); break; default: var content = await feedReader.ReadContent(); break; } } } var feedSource = _grainFactory.GetGrain(0)!; await feedSource.UpdateFeedSourceStatus(source.Url, true, $"{feed.Count} items fetched"); return feed; } catch (Exception ex) { _logger.LogError($"({feedType}) {source.Url} Exception: {ex.Message}"); // Mark feed as invalid var feedSource = _grainFactory.GetGrain(0)!; await feedSource.UpdateFeedSourceStatus(source.Url, false, ex.Message); return new List(); } } } ================================================ FILE: projects/orleans/rss-reader-5/README.md ================================================ # RSS Reader with Reminder + Subscription list + Orleans Streams **This sample requires redis**. Make sure to run FLUSHALL in redis-cli between samples. This is a simple RSS reader that uses two storage, one for storing a feed source and another for storing feed results. You can keep refreshing your browser and the RSS Reader will display the latest results whenever they are available. It also logs the result of every RSS feed that got fetch regularly using Orleans Reminder. - Make sure you have redis installed and running. - Run the app using `dotnet run`. - Open `localhost:5000` - You can keep refreshing the browser page as much as you want and it will only pick up and store unique feed items. - Orleans will keep keep refreshing each feed every x minutes (configurable). - This Rss Reader will read a list of RSS sources from an OPML subscription feed http://scripting.com/misc/mlb.opml In this RSS Reader, there is a single stream with a single channel. Each Reminder will fetch a RSS news feed on a regular basis and publish the results into the stream. Then we will have one (grain) implicit subscriber to the stream that will process the feed and store it. The rule is one grain is created per stream id for implicit subscriber. ================================================ FILE: projects/orleans/rss-reader-5/rss-reader-5.csproj ================================================ net10.0 enable true all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/orleans/rss-reader-6/Feed.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using Microsoft.SyndicationFeed; record FeedChannel { public string? Title { get; set; } public string? Website { get; set; } public Uri? Url { get; set; } public bool HideTitle { get; set; } public bool HideDescription { get; set; } } class FeedSource { public string Url { get; set; } = string.Empty; public string Title { get; set; } = string.Empty; public string? Website { get; set; } public bool HideTitle { get; set; } public bool HideDescription { get; set; } public short UpdateFrequencyInMinutes { get; set; } = 1; public bool CanFetch ()=> History.Take(10).Count(x => !x.IsValid) <= 3; public bool IsLatestValid { get { if (History.Count == 0) return true; return History.First().IsValid; } } public List History { get; set; } = new List(); public void LogFetchAttempt(bool isValid, string? message = null) => History.Insert(0, new FeedHistory { Timestamp = DateTimeOffset.UtcNow, IsValid = isValid, Message = message }); public FeedChannel ToChannel() { return new FeedChannel { Title = Title, Website = Website, HideTitle = HideTitle, HideDescription = HideDescription }; } } record FeedHistory { public DateTimeOffset Timestamp { get; set; } public bool IsValid { get; set; } public string? Message { get; set; } } record FeedItem { public FeedChannel? Channel { get; set; } public string? Id { get; set; } public string? Title { get; set; } public string? Description { get; set; } public Uri? Url { get; set;} public DateTimeOffset PublishedOn { get; set; } public FeedItem() { } public FeedItem(FeedChannel channel, SyndicationItem item) { Channel = channel; Id = item.Id; Title = item.Title; Description = item.Description; var link = item.Links.FirstOrDefault(); if (link is object) Url = link.Uri; if (item.LastUpdated == default(DateTimeOffset)) PublishedOn = item.Published; else PublishedOn = item.LastUpdated; } } enum FeedType { Atom, Rss } ================================================ FILE: projects/orleans/rss-reader-6/Interfaces.cs ================================================ using System.Collections.Generic; using System.Threading.Tasks; interface IFeedSource : Orleans.IGrainWithIntegerKey { Task AddAsync(FeedSource source); Task> GetAllAsync(); Task FindFeedSourceByUrlAsync(string url); Task UpdateFeedSourceStatus(string url, bool activeStatus, string? message); } interface IFeedFetcher : Orleans.IGrainWithStringKey { Task FetchAsync(FeedSource source); } interface IFeedItemResults : Orleans.IGrainWithIntegerKey { Task AddAsync(List items); Task> GetAllAsync(); Task ClearAsync(); } interface IFeedFetcherReminder : Orleans.IGrainWithStringKey { Task AddReminder(string reminder, short repeatEveryMinute); } interface IFeedStreamReader : Orleans.IGrain { } ================================================ FILE: projects/orleans/rss-reader-6/Opml.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; public class Opml { public string? Title { get; set; } public DateTime? DateCreated { get; set; } public DateTime? DateModified { get; set; } public string? OwnerName { get; set; } public string? OwnerEmail { get; set; } public Uri? OwnerId { get; set; } public Uri? Docs { get; set; } public string? ExpansionState { get; set; } public int? VertScrollState { get; set; } public int? WindowTop { get; set; } public int? WindowLeft { get; set; } public int? WindowBottom { get; set; } public int? WindowRight { get; set; } public List Outlines { get; private set; } public Opml() { Outlines = new List(); } public Opml(string xml):this() { LoadFromXML(xml); } public void LoadFromXML(string xml) { var elements = XElement.Parse(xml); var heads = elements.Element("head").Descendants(); Func selectString = (filter) => heads!.Where(x => x.Name == filter).Select(x => x.Value).FirstOrDefault(); Func selectInt = (filter) => heads!.Where(x => x.Name == filter).Select(x => Convert.ToInt32(x.Value)).FirstOrDefault(); Func selectDate = (filter) => heads!.Where(x => x.Name == filter).Select(x => Convert.ToDateTime(x.Value)).FirstOrDefault(); Func selectUri = (filter) => heads!.Where(x => x.Name == filter).Select(x => new Uri(x.Value)).FirstOrDefault(); Title = selectString("title"); DateCreated = selectDate("dateCreated"); DateModified = selectDate("dateModified"); OwnerName = selectString("ownerName"); OwnerEmail = selectString("ownerEmail"); OwnerId = selectUri("ownerId"); Docs = selectUri("docs"); ExpansionState = selectString("expansionState"); VertScrollState = selectInt("vertScrollState"); WindowTop = selectInt("windowTop"); WindowLeft = selectInt("windowLeft"); WindowBottom = selectInt("windowBottom"); WindowRight = selectInt("windowRight"); var bodies = elements.Element("body").Elements(); //todo: make it recursive foreach (var b in bodies) { var o = new Outline(); Outlines.Add(o); TraverseBody(b, o); } } private void TraverseBody(XElement outline, Outline ot) { if (outline != null) { foreach (var att in outline.Attributes()) { ot.Attributes[att.Name.ToString()] = att.Value; } foreach (var x in outline.Elements()) { var o = new Outline(); ot.Outlines.Add(o); TraverseBody(x, o); } } } public XElement ToXML() { var root = new XElement("opml", new XAttribute("version", "2.0"), new XElement("head", new XElement("title", this.Title), (this.DateCreated.HasValue) ? new XElement("dateCreated", this.DateCreated.Value.ToString("R")) : null, (this.DateModified.HasValue) ? new XElement("dateModified", this.DateModified.Value.ToString("R")) : null, (!string.IsNullOrWhiteSpace(this.OwnerName))? new XElement("ownerName", this.OwnerName) : null, (!string.IsNullOrWhiteSpace(this.OwnerEmail)) ? new XElement("ownerEmail", this.OwnerEmail) : null )); var body = new XElement("body"); foreach(var x in this.Outlines) { XElement newOutline = new XElement("outline"); AddRecursiveChild(newOutline, x); body.Add(newOutline); } root.Add(body); return root; } private void AddRecursiveChild(XElement element, Outline o){ element.Add(from y in o.Attributes select new XAttribute(y.Key, y.Value)); foreach(var oo in o.Outlines) { XElement newOutline = new XElement("outline"); element.Add(newOutline); AddRecursiveChild(newOutline, oo); } } } public record Outline { public Dictionary Attributes { get; private set; } = new Dictionary(); public List Outlines { get; private set; } = new List(); } public record RssSubscription { public string? Title { get; set; } public string? OwnerName { get; set; } public string? OwnerEmail { get; set; } public DateTime? DateCreated { get; set; } public DateTime? DateModified { get; set; } public List Items { get; set; } = new List(); /// /// List errors in parsing opml attributes /// public List ParsingErrors { get; set; } = new List(); public RssSubscription(Opml opml) { Title = opml.Title; DateCreated = opml.DateCreated; DateModified = opml.DateModified; var line = 0; foreach (var x in opml.Outlines) { line++; var item = new RssSubscriptionItem(); foreach (var y in x.Attributes) { try { if (y.Key == "text") item.Text = y.Value; else if (y.Key == "description") item.Description = y.Value; else if (y.Key == "title") item.Title = y.Value; else if (y.Key == "name") item.Name = y.Value; else if (y.Key == "htmlUrl" && !string.IsNullOrWhiteSpace(y.Value)) item.HtmlUri = new Uri(y.Value); else if (y.Key == "xmlUrl" && !string.IsNullOrWhiteSpace(y.Value)) item.XmlUri = new Uri(y.Value); } catch (Exception ex) { ParsingErrors.Add("Error at line " + line + " in processing attribute " + y.Key + " with value " + y.Value + " " + ex.Message); } } Items.Add(item); } } } public record RssSubscriptionItem { public string? Text { get; set; } public string? Name { get; set; } public string? Title { get; set; } public string? Description { get; set; } public Uri? HtmlUri { get; set; } public Uri? XmlUri { get; set; } } ================================================ FILE: projects/orleans/rss-reader-6/Program.cs ================================================ using System.Net; using Orleans; using Orleans.Runtime; using Orleans.Configuration; using Orleans.Hosting; using System.Xml; using Microsoft.SyndicationFeed.Atom; using Microsoft.SyndicationFeed; using Microsoft.SyndicationFeed.Rss; using Orleans.Streams; var builder = WebApplication.CreateBuilder(); builder.Services.AddHttpClient(); builder.Logging.SetMinimumLevel(LogLevel.Information).AddConsole(); builder.Host.UseOrleans(builder => { builder .UseLocalhostClustering() .UseInMemoryReminderService() .Configure(options => { options.ClusterId = "dev"; options.ServiceId = "http-client"; }) .Configure(options => options.AdvertisedIPAddress = IPAddress.Loopback) .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(FeedSourceGrain).Assembly).WithReferences()) .AddRedisGrainStorage(Config.RedisStorage, optionsBuilder => optionsBuilder.Configure(options => { options.ConnectionString = "localhost:6379"; options.UseJson = true; options.DatabaseNumber = 1; })) .AddMemoryGrainStorage("PubSubStore") .AddSimpleMessageStreamProvider(Config.StreamProvider); }); var app = builder.Build(); app.MapGet("/", async context => { var httpClientFactory = context.RequestServices.GetService(); var httpClient = httpClientFactory.CreateClient(); var opmlSubscriptionList = await httpClient.GetStringAsync("http://scripting.com/misc/mlb.opml"); var opml = new Opml(opmlSubscriptionList); var subscriptionList = new RssSubscription(opml); var client = context.RequestServices.GetService()!; var feedSourceGrain = client.GetGrain(0)!; var logger = context.RequestServices.GetService()!.CreateLogger("rss-reader"); foreach (var source in subscriptionList.Items) { logger.LogInformation("Adding " + source.XmlUri?.ToString() ?? String.Empty); await feedSourceGrain.AddAsync(new FeedSource { Url = source.XmlUri?.ToString() ?? string.Empty, Website = source.HtmlUri?.ToString() ?? string.Empty, Title = source.Title ?? string.Empty, UpdateFrequencyInMinutes = 3 }); } var sources = await feedSourceGrain.GetAllAsync(); foreach (var s in sources) { var feedFetcherReminderGrain = client.GetGrain(s.Url); // AddReminder is indempotent await feedFetcherReminderGrain.AddReminder(s.Url, s.UpdateFrequencyInMinutes); } var feedResultsGrain = client.GetGrain(0); var feedItems = await feedResultsGrain.GetAllAsync(); await context.Response.WriteAsync(@" Orleans RSS Reader "); await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync("Feed Sources
                    "); if (feedItems.Count == 0) await context.Response.WriteAsync("

                    Please refresh your browser again if you see no feeds displayed.

                    "); await context.Response.WriteAsync("
                      "); foreach (var i in feedItems) { await context.Response.WriteAsync("
                    • "); if (!string.IsNullOrWhiteSpace(i.Title)) await context.Response.WriteAsync($"{ i.Title }
                      "); await context.Response.WriteAsync(i.Description ?? ""); if (i.Url is object) await context.Response.WriteAsync($"
                      link"); await context.Response.WriteAsync($"
                      published on: {i.PublishedOn}
                      "); await context.Response.WriteAsync($""); await context.Response.WriteAsync("
                    • "); } await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync("
                    "); }); app.MapGet("/feed-sources", async context => { var client = context.RequestServices.GetService()!; var feedSourceGrain = client.GetGrain(0)!; var sources = await feedSourceGrain.GetAllAsync(); await context.Response.WriteAsync(@" Orleans RSS Reader "); await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync("Home
                    "); await context.Response.WriteAsync("Valid"); await context.Response.WriteAsync("
                      "); foreach (var s in sources.Where(x => x.IsLatestValid)) { await context.Response.WriteAsync($"
                    • {s.Url}"); await context.Response.WriteAsync("
                        "); foreach (var h in s.History) { await context.Response.WriteAsync($"
                      • {h.Timestamp} - {h.IsValid}

                        {h.Message}

                      • "); } await context.Response.WriteAsync("
                      "); await context.Response.WriteAsync("
                    • "); } await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync("Invalid"); await context.Response.WriteAsync("
                      "); foreach (var s in sources.Where(x => !x.IsLatestValid)) { await context.Response.WriteAsync($"
                    • {s.Url}"); await context.Response.WriteAsync("
                        "); foreach (var h in s.History) { await context.Response.WriteAsync($"
                      • {h.Timestamp} - {h.IsValid}

                        {h.Message}

                      • "); } await context.Response.WriteAsync("
                      "); await context.Response.WriteAsync("
                    • "); } await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync("
                    "); }); app.Run(); static class Config { public const string RedisStorage = "redis-rss-reader-6"; public const string StreamProvider = "SMSProvider"; public static readonly Guid StreamId = Guid.NewGuid(); public const string StreamChannel = "RSS"; } class FeedFetcherReminder : Grain, IRemindable, IFeedFetcherReminder { readonly IGrainFactory _grainFactory; readonly ILogger _logger; public FeedFetcherReminder(IGrainFactory grainFactory, ILogger logger) { _grainFactory = grainFactory; _logger = logger; } public async Task AddReminder(string reminder, short repeatEveryMinute) { if (string.IsNullOrWhiteSpace(reminder)) throw new ArgumentNullException(nameof(reminder)); var r = await GetReminder(reminder); if (r is not object) await RegisterOrUpdateReminder(reminder, dueTime: TimeSpan.FromSeconds(1), period: TimeSpan.FromMinutes(repeatEveryMinute)); } public async Task ReceiveReminder(string reminderName, TickStatus status) { _logger.Info($"Receive {reminderName} reminder"); var feedSourceGrain = _grainFactory.GetGrain(0)!; var feedSource = await feedSourceGrain.FindFeedSourceByUrlAsync(reminderName); if (feedSource is object) { _logger.Info($"Fetching {feedSource.Url}"); var feedFetcherGrain = _grainFactory.GetGrain(feedSource.Url); await feedFetcherGrain.FetchAsync(feedSource); } } } [ImplicitStreamSubscription(Config.StreamChannel)] class FeedStreamReaderGrain : Grain, IFeedStreamReader { readonly ILogger _logger; readonly IGrainFactory _grainFactory; public FeedStreamReaderGrain(ILogger logger, IGrainFactory grainFactory) { _logger = logger; _grainFactory = grainFactory; } public override async Task OnActivateAsync() { var streamProvider = GetStreamProvider(Config.StreamProvider); var stream = streamProvider.GetStream>(Config.StreamId, Config.StreamChannel); var feedItemResultGrain = _grainFactory.GetGrain(0); await stream.SubscribeAsync>(async (data, token) => { _logger.Info($"Feed Items {data.Count}"); await feedItemResultGrain.AddAsync(data); }); } } class FeedItemResultGrain : Grain, IFeedItemResults { private readonly IPersistentState _storage; public FeedItemResultGrain([PersistentState("feed-item-results-5", Config.RedisStorage)] IPersistentState storage) => _storage = storage; public async Task AddAsync(List items) { //make sure there is no duplication foreach (var i in items.Where(x => !string.IsNullOrWhiteSpace(x.Id))) { if (!_storage.State.Results.Exists(x => x.Id?.Equals(i.Id, StringComparison.OrdinalIgnoreCase) ?? false)) _storage.State.Results.Add(i); } await _storage.WriteStateAsync(); } public Task> GetAllAsync() => Task.FromResult(_storage.State.Results.OrderByDescending(x => x.PublishedOn).ToList()); public async Task ClearAsync() { _storage.State.Results.Clear(); await _storage.WriteStateAsync(); } } record FeedItemStore { public List Results { get; set; } = new List(); } class FeedSourceGrain : Grain, IFeedSource { private readonly IPersistentState _storage; public FeedSourceGrain([PersistentState("feed-source-5", Config.RedisStorage)] IPersistentState storage) => _storage = storage; public async Task AddAsync(FeedSource source) { if (string.IsNullOrWhiteSpace(source.Url)) return; if (_storage.State.Sources.Find(x => x.Url == source.Url) is null) { _storage.State.Sources.Add(source); await _storage.WriteStateAsync(); } } public Task> GetAllAsync() => Task.FromResult(_storage.State.Sources); public Task FindFeedSourceByUrlAsync(string url) => Task.FromResult(_storage.State.Sources.Find(x => x.Url.Equals(url, StringComparison.Ordinal))); public async Task UpdateFeedSourceStatus(string url, bool activeStatus, string? message) { var feed = await FindFeedSourceByUrlAsync(url); if (feed is object) { feed.LogFetchAttempt(activeStatus, message); await _storage.WriteStateAsync(); } return feed; } } record FeedSourceStore { public List Sources { get; set; } = new List(); } class FeedFetchGrain : Grain, IFeedFetcher { readonly IGrainFactory _grainFactory; readonly ILogger _logger; readonly IHttpClientFactory _httpClientFactory; public FeedFetchGrain(IGrainFactory grainFactory, ILogger logger, IHttpClientFactory httpClientFactory) { _grainFactory = grainFactory; _logger = logger; _httpClientFactory = httpClientFactory; } public async Task FetchAsync(FeedSource source) { var results = await ReadFeedAsync(source); var streamProvider = GetStreamProvider(Config.StreamProvider); var stream = streamProvider.GetStream>(Config.StreamId, Config.StreamChannel); await stream.OnNextAsync(results); } public async Task> ReadFeedAsync(FeedSource source) { if (string.IsNullOrWhiteSpace(source.Url)) return new List(); if (!source.CanFetch()) return new List(); var feed = new List(); FeedType feedType = FeedType.Rss; try { _logger.LogInformation($"Fetching {source.Url}"); var client = _httpClientFactory.CreateClient(); client.Timeout = TimeSpan.FromSeconds(10); var response = await client.GetAsync(source.Url.ToString()); var memory = new MemoryStream(); await response.Content.CopyToAsync(memory); memory.Seek(0, SeekOrigin.Begin); char[] buf = new char[400]; // We need large buffer because to skip xml metadata and comments before the root of the xml document starts var sr = new StreamReader(memory); var charRead = sr.ReadBlock(buf, 0, buf.Length); if (!new string(buf).Contains("rss", StringComparison.OrdinalIgnoreCase)) feedType = FeedType.Atom; memory.Seek(0, SeekOrigin.Begin); using var xmlReader = XmlReader.Create(memory, new XmlReaderSettings { DtdProcessing = DtdProcessing.Ignore }); if (feedType == FeedType.Rss) { var feedReader = new RssFeedReader(xmlReader); // Read the feed while (await feedReader.Read()) { switch (feedReader.ElementType) { // Read Item case SyndicationElementType.Item: var item = await feedReader.ReadItem(); feed.Add(new FeedItem(source.ToChannel(), new SyndicationItem(item))); break; default: var content = await feedReader.ReadContent(); break; } } } else { var feedReader = new AtomFeedReader(xmlReader); while (await feedReader.Read()) { switch (feedReader.ElementType) { // Read Item case SyndicationElementType.Item: var entry = await feedReader.ReadEntry(); feed.Add(new FeedItem(source.ToChannel(), new SyndicationItem(entry))); break; default: var content = await feedReader.ReadContent(); break; } } } var feedSource = _grainFactory.GetGrain(0)!; await feedSource.UpdateFeedSourceStatus(source.Url, true, $"{feed.Count} items fetched"); return feed; } catch (Exception ex) { _logger.LogError($"({feedType}) {source.Url} Exception: {ex.Message}"); // Mark feed as invalid var feedSource = _grainFactory.GetGrain(0)!; await feedSource.UpdateFeedSourceStatus(source.Url, false, ex.Message); return new List(); } } } ================================================ FILE: projects/orleans/rss-reader-6/README.md ================================================ # RSS Reader with Reminder + Subscription list + Orleans Streams **This sample requires redis**. Make sure to run FLUSHALL in redis-cli between samples. This is a simple RSS reader that uses two storage, one for storing a feed source and another for storing feed results. You can keep refreshing your browser and the RSS Reader will display the latest results whenever they are available. It also logs the result of every RSS feed that got fetch regularly using Orleans Reminder. - Make sure you have redis installed and running. - Run the app using `dotnet run`. - Open `localhost:5000` - You can keep refreshing the browser page as much as you want and it will only pick up and store unique feed items. - Orleans will keep keep refreshing each feed every x minutes (configurable). - This Rss Reader will read a list of RSS sources from an OPML subscription feed http://scripting.com/misc/mlb.opml In this RSS Reader, there is a single stream with a single channel. Each Reminder will fetch a RSS news feed on a regular basis and publish the results into the stream. Then we will have one (grain) implicit subscriber to the stream that will process the feed and store it. The rule is one grain is created per stream id for implicit subscriber. ================================================ FILE: projects/orleans/rss-reader-6/rss-reader-6.csproj ================================================ net10.0 enable true all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/orleans/timer/Program.cs ================================================ using System.Net; using Orleans; using Orleans.Runtime; using Orleans.Configuration; using Orleans.Hosting; var builder = WebApplication.CreateBuilder(); builder.Logging.SetMinimumLevel(LogLevel.Information).AddConsole(); builder.Host.UseOrleans(builder => { builder .UseLocalhostClustering() .Configure(options => { options.ClusterId = "dev"; options.ServiceId = "HelloWorldApp"; }) .Configure(options => options.AdvertisedIPAddress = IPAddress.Loopback) .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(HelloTimerGrain).Assembly).WithReferences()) .AddRedisGrainStorage("redis-timer", optionsBuilder => optionsBuilder.Configure(options => { options.ConnectionString = "localhost:6379"; options.UseJson = true; options.DatabaseNumber = 1; })); }); var app = builder.Build(); app.MapGet("/", async context => { IGrainFactory client = context.RequestServices.GetService()!; IHelloArchive grain = client.GetGrain(0)!; await grain.SayHello("Hello world " + new Random().Next()); var res2 = await grain.GetGreetings(); await context.Response.WriteAsync(@""); await context.Response.WriteAsync(""); await context.Response.WriteAsync("Refresh your browser. There's a timer that keeps adding messages every 5 seconds.
                    "); await context.Response.WriteAsync("
                      "); foreach (var g in res2) { await context.Response.WriteAsync($"
                    • {g.Message} at {g.TimestampUtc}
                    • "); } await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync(""); }); app.Run(); public class HelloTimerGrain : Grain, IHelloArchive { private readonly IPersistentState _archive; private readonly ILogger _log; private string _greeting = "hello world"; private IDisposable? _timerDisposable; public HelloTimerGrain([PersistentState("archive", "redis-timer")] IPersistentState archive, ILogger log) { _archive = archive; _log = log; } public override Task OnActivateAsync() { _timerDisposable = this.RegisterTimer(async (object data) => { var archive = data as IPersistentState; var g = new Greeting(_greeting, DateTime.UtcNow); archive!.State.Greetings.Insert(0, g); await archive!.WriteStateAsync(); _log.Info($"`{g.Message}` added at {g.TimestampUtc}"); }, _archive, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(5)); return Task.CompletedTask; } public override Task OnDeactivateAsync() { _timerDisposable?.Dispose(); return Task.CompletedTask; } public Task SayHello(string greeting) { _greeting = greeting; return Task.CompletedTask; } public Task> GetGreetings() => Task.FromResult>(_archive.State.Greetings); } public record GreetingArchive { public List Greetings { get; } = new List(); } public record Greeting(string Message, DateTime TimestampUtc); public interface IHelloArchive : Orleans.IGrainWithIntegerKey { Task SayHello(string greeting); Task> GetGreetings(); } ================================================ FILE: projects/orleans/timer/README.md ================================================ # Timer **This sample requires redis**. Make sure to run FLUSHALL in redis-cli between samples. This is a sample for `Grain.RegisterTimer` method. You can find out more about this functionality [here](https://dotnet.github.io/orleans/1.5/Documentation/Core-Features/Timers-and-Reminders.html). - Make sure you have redis installed and running. - Run the app using `dotnet run`. - Open `localhost:5000` - When you open the page the first time, there's a timer that will add a new message every 5 seconds. We are using C# records in this sample. It works fine. ================================================ FILE: projects/orleans/timer/timer.csproj ================================================ net10.0 enable true all runtime; build; native; contentfiles; analyzers ================================================ FILE: projects/output-cache-middleware/build.bat ================================================ dotnet build output-cache-1 dotnet build output-cache-2 dotnet build output-cache-3 dotnet build output-cache-4 dotnet build output-cache-5 dotnet build output-cache-6 dotnet build output-cache-7 dotnet build output-cache-8 ================================================ FILE: projects/output-cache-middleware/build.sh ================================================ #!/bin/bash dotnet build output-cache-1 dotnet build output-cache-2 dotnet build output-cache-3 dotnet build output-cache-4 dotnet build output-cache-5 dotnet build output-cache-6 dotnet build output-cache-7 dotnet build output-cache-8 ================================================ FILE: projects/output-cache-middleware/output-cache-1/Program.cs ================================================ var builder = WebApplication.CreateBuilder(args); builder.Services.AddOutputCache(); var app = builder.Build(); app.MapGet("/", () => { return Results.Content(""" """, "text/html"); }); app.UseOutputCache(); app.MapGet("/now", () => DateTime.UtcNow.ToString()); app.MapGet("/cached-now", () => DateTime.UtcNow.ToString()).CacheOutput(); app.Run(); ================================================ FILE: projects/output-cache-middleware/output-cache-1/Readme.md ================================================ # Output Cache This example a very basic example of using output cache. The default expiration time is 1 minute. The default cacheable size for the response body is 64 MB. You can find more of the default [here](https://github.com/dotnet/aspnetcore/blob/47f5d8f990dc64d9177f8e552f069098c6bcbfa3/src/Middleware/OutputCaching/src/OutputCacheOptions.cs). ================================================ FILE: projects/output-cache-middleware/output-cache-1/output-cache-1.csproj ================================================ net10.0 true 9adce06a-fec2-402b-acba-28a6852ca7c1 ================================================ FILE: projects/output-cache-middleware/output-cache-2/Program.cs ================================================ var builder = WebApplication.CreateBuilder(args); builder.Services.AddOutputCache(); var app = builder.Build(); app.MapGet("/", () => { return Results.Content(""" """, "text/html"); }); app.UseOutputCache(); app.MapGet("/now", () => DateTime.UtcNow.ToString()); app.MapGet("/cached-now", () => DateTime.UtcNow.ToString()).CacheOutput(p => p.SetVaryByQuery("version", "culture")); app.Run(); ================================================ FILE: projects/output-cache-middleware/output-cache-2/Readme.md ================================================ # Output Cache vary by query string This example a very basic example of using output cache that vary by query string e.g. `?page=1` or `?version=1`. You can add more than one query string. ================================================ FILE: projects/output-cache-middleware/output-cache-2/output-cache-2.csproj ================================================ net10.0 true 9adce06a-fec2-402b-acba-28a6852ca7c1 ================================================ FILE: projects/output-cache-middleware/output-cache-3/Program.cs ================================================ using Microsoft.AspNetCore.OutputCaching; var builder = WebApplication.CreateBuilder(args); builder.Services.AddOutputCache(); var app = builder.Build(); app.MapGet("/", () => { return Results.Content(""" """, "text/html"); }); app.UseOutputCache(); app.MapGet("/now", () => DateTime.UtcNow.ToString()); app.MapGet("/cached-now", () => DateTime.UtcNow.ToString()).CacheOutput(); app.MapGet("/cached-now-tagged", () => DateTime.UtcNow.ToString()).CacheOutput(p => p.Tag("datetime")); app.MapGet("/clear", async (IOutputCacheStore cache) => { await cache.EvictByTagAsync("datetime", CancellationToken.None); return Results.Ok(new { message = "Go back and click on Cached DateTime.UtcNow() tagged to see that the previous cached date has been purged." }); }); app.Run(); ================================================ FILE: projects/output-cache-middleware/output-cache-3/Readme.md ================================================ # Evict cache by tag This sample shows how to tagged cache items and evict them by tag using `IOutputCacheStore.EvictByTagAsync`. ================================================ FILE: projects/output-cache-middleware/output-cache-3/output-cache-3.csproj ================================================ net10.0 true 9adce06a-fec2-402b-acba-28a6852ca7c1 ================================================ FILE: projects/output-cache-middleware/output-cache-4/Program.cs ================================================ using System.Security.Cryptography; var builder = WebApplication.CreateBuilder(args); builder.Services.AddOutputCache(options => { options.AddBasePolicy(builder => builder.With(c => true)); }); var app = builder.Build(); app.MapGet("/", () => { return Results.Content(""" """, "text/html"); }); app.UseOutputCache(); app.MapGet("/now", () => DateTime.UtcNow.ToString()); app.MapGet("/random", () => RandomNumberGenerator.GetInt32(int.MaxValue)); app.Run(); ================================================ FILE: projects/output-cache-middleware/output-cache-4/Readme.md ================================================ # Output Cache base policy This sample shows how to enable output cache for every single endpoint. It will cache using the [default values of OutputCacheOptions](https://github.com/dotnet/aspnetcore/blob/main/src/Middleware/OutputCaching/src/OutputCacheOptions.cs) which cache for 60 seconds. ================================================ FILE: projects/output-cache-middleware/output-cache-4/output-cache-4.csproj ================================================ net10.0 true 9adce06a-fec2-402b-acba-28a6852ca7c1 ================================================ FILE: projects/output-cache-middleware/output-cache-5/Program.cs ================================================ using System.Security.Cryptography; var builder = WebApplication.CreateBuilder(args); builder.Services.AddOutputCache(options => { options.AddBasePolicy(builder => builder.With(c => c.HttpContext.Request.QueryString.Value?.Contains("cache") ?? false)); }); var app = builder.Build(); app.MapGet("/", () => { return Results.Content(""" """, "text/html"); }); app.UseOutputCache(); app.MapGet("/now", () => DateTime.UtcNow.ToString()); app.Run(); ================================================ FILE: projects/output-cache-middleware/output-cache-5/Readme.md ================================================ # Output Cache base policy using HttpContext by checking existence of a query string parameter This sample demonstrates on how to setup a global Output Cache policy to cache any request with "cache" query string parameter. ================================================ FILE: projects/output-cache-middleware/output-cache-5/output-cache-5.csproj ================================================ net10.0 true 9adce06a-fec2-402b-acba-28a6852ca7c1 ================================================ FILE: projects/output-cache-middleware/output-cache-6/Program.cs ================================================ var builder = WebApplication.CreateBuilder(args); builder.Services.AddOutputCache(options => { options.AddBasePolicy(builder => builder.With(c => c.HttpContext.Request.Path.StartsWithSegments("/cached"))); }); var app = builder.Build(); app.MapGet("/", () => { return Results.Content(""" """, "text/html"); }); app.UseOutputCache(); app.MapGet("/now", () => DateTime.UtcNow.ToString()); app.MapGet("/cached/now", () => DateTime.UtcNow.ToString()); app.MapGet("/time/cached/now", () => DateTime.UtcNow.ToString()); app.Run(); ================================================ FILE: projects/output-cache-middleware/output-cache-6/Readme.md ================================================ # Output Cache base policy using HttpContext to cache endpoints with a certain url segment This sample demonstrates on how to setup a global Output Cache policy to cache any request with "/cache" at the start of url segments. ================================================ FILE: projects/output-cache-middleware/output-cache-6/output-cache-6.csproj ================================================ net10.0 true 9adce06a-fec2-402b-acba-28a6852ca7c1 ================================================ FILE: projects/output-cache-middleware/output-cache-7/Program.cs ================================================ var builder = WebApplication.CreateBuilder(args); builder.Services.AddOutputCache(options => { options.AddBasePolicy(builder => builder.With(c => c.HttpContext.Request.Path.StartsWithSegments("/cached"))); options.AddPolicy("NoCache", o => o.NoCache()); }); var app = builder.Build(); app.MapGet("/", () => { return Results.Content(""" """, "text/html"); }); app.UseOutputCache(); app.MapGet("/now", () => DateTime.UtcNow.ToString()); app.MapGet("/cached/now", () => DateTime.UtcNow.ToString()); app.MapGet("/cached/now-nope", () => DateTime.UtcNow.ToString()).CacheOutput("NoCache"); app.Run(); ================================================ FILE: projects/output-cache-middleware/output-cache-7/Readme.md ================================================ # Output Cache policy This sample demonstrates on how to setup a cache policy and use it. Specific policy override the global base policy. ================================================ FILE: projects/output-cache-middleware/output-cache-7/output-cache-7.csproj ================================================ net10.0 true ================================================ FILE: projects/output-cache-middleware/output-cache-8/Program.cs ================================================ var builder = WebApplication.CreateBuilder(args); builder.Services.AddOutputCache(options => { options.AddBasePolicy(builder => builder.With(c => c.HttpContext.Request.Path.StartsWithSegments("/cached"))); options.AddPolicy("10Minutes", o => o.Expire(TimeSpan.FromMinutes(10))); }); var app = builder.Build(); app.MapGet("/", () => { return Results.Content(""" """, "text/html"); }); app.UseOutputCache(); app.MapGet("/now", () => DateTime.UtcNow.ToString()); app.MapGet("/cached/now", () => DateTime.UtcNow.ToString()); app.MapGet("/cached/now-nope", () => DateTime.UtcNow.ToString()).CacheOutput("10Minutes"); app.Run(); ================================================ FILE: projects/output-cache-middleware/output-cache-8/Readme.md ================================================ # Output Cache policy set expiration to 10 minutes This sample demonstrates on how to setup a cache policy that set an expiration time of 10 minutes. ================================================ FILE: projects/output-cache-middleware/output-cache-8/output-cache-8.csproj ================================================ net10.0 true ================================================ FILE: projects/output-cache-middleware/readme.md ================================================ ## Output cache * [Output Cache - 1](output-cache-1) This sample shows how to use the `OutputCache` middleware using basic options. * [Output Cache - 2](output-cache-2) This sample shows how to use the `OutputCache` middleware and vary them by one or more query string. * [Output Cache - 3](output-cache-3) This sample shows how to tagged cache items and evict them by tag using `IOutputCacheStore.EvictByTagAsync`. * [Output Cache - 4](output-cache-4) This sample shows how to enable output cache for every single endpoint. * [Output Cache - 5](output-cache-5) This sample shows how to setup a global Output Cache policy to cache any request with "cache" query string parameter. * [Output Cache - 6](output-cache-6) This sample demonstrates on how to setup a global Output Cache policy to cache any request that start with "/cache" in the url segments. * [Output Cache - 7](output-cache-7) This sample demonstrates on how to setup a cache policy and use it. Specific policy override the global base policy. * [Output Cache - 8](output-cache-8) This sample demonstrates on how to setup a cache policy that set an expiration time of 10 minutes. dotnet8 ================================================ FILE: projects/password-hasher/Program.cs ================================================ using Microsoft.AspNetCore.Identity; var app = WebApplication.Create(); app.Run(context => { var password = context.Request.Query["password"]; if (string.IsNullOrWhiteSpace(password)) password = "123456789"; var usr = new User(); var hasher = new PasswordHasher(); var hashedPassword = hasher.HashPassword(usr, password); var isPasswordMatch = hasher.VerifyHashedPassword(usr, hashedPassword, password); return context.Response.WriteAsync($"Append ?password at url to test your own password hashing.\nPassword : {password} => Hashed : {hashedPassword} \nPassword Matched : {isPasswordMatch}"); }); app.Run(); public record User(); ================================================ FILE: projects/password-hasher/password-hasher.csproj ================================================ net10.0 true ================================================ FILE: projects/path-string/README.md ================================================ # HttpContext.Request.Path (PathString)(1) * [PathString 1](/projects/path-string/path-string-1) This shows different results that `HttpContext.Request.Path` returns when handling different url requests. dotnet8 ================================================ FILE: projects/path-string/build.bat ================================================ dotnet build path-string-1 ================================================ FILE: projects/path-string/build.sh ================================================ #!/bin/bash dotnet build path-string-1 ================================================ FILE: projects/path-string/path-string-1/.vscode/launch.json ================================================ { "version": "0.2.0", "configurations": [ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/net5.0/path-string-1.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, // Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser "serverReadyAction": { "action": "openExternally", "pattern": "\\\\bNow listening on:\\\\s+(https?://\\\\S+)" }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] } ================================================ FILE: projects/path-string/path-string-1/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/path-string-1.csproj", "/property:GenerateFullPaths=true", "/consoleloggerparameters:NoSummary" ], "problemMatcher": "$msCompile" }, { "label": "publish", "command": "dotnet", "type": "process", "args": [ "publish", "${workspaceFolder}/path-string-1.csproj", "/property:GenerateFullPaths=true", "/consoleloggerparameters:NoSummary" ], "problemMatcher": "$msCompile" }, { "label": "watch", "command": "dotnet", "type": "process", "args": [ "watch", "run", "${workspaceFolder}/path-string-1.csproj", "/property:GenerateFullPaths=true", "/consoleloggerparameters:NoSummary" ], "problemMatcher": "$msCompile" } ] } ================================================ FILE: projects/path-string/path-string-1/Program.cs ================================================ var app = WebApplication.Create(); app.Run(async context => { var protocol = context.Request.IsHttps ? "https://": "http://"; var host = protocol + context.Request.Host; context.Response.Headers["Content-Type"] = "text/html"; await context.Response.WriteAsync($@"

                    HttpContext.Request.Path

                    {host}/hello
                    {host}//double-slash
                    {host}/double-slash//version-2
                    {host}/about-us/
                    {host}/catalog/?id=10
                    {host}/admin/index?secure=true

                    Value of HttpContext.Request.Path : { context.Request.Path }

                    "); }); app.Run(); ================================================ FILE: projects/path-string/path-string-1/README.md ================================================ # HttpContext.Request.Path This sample shows results that `HttpContext.Request.Path` returns when handling different type of url requests. ================================================ FILE: projects/path-string/path-string-1/path-string-1.csproj ================================================ net10.0 true ================================================ FILE: projects/polly/README.md ================================================ # Polly This is a collection of example on how to use [Polly](https://www.pollydocs.org/) to improve the resiliency of your applications. * [Rate Limiter using HttpClient](rate-limiter-http-client) ================================================ FILE: projects/polly/build.bat ================================================ dotnet build rate-limiter-http-client ================================================ FILE: projects/polly/build.sh ================================================ #!/bin/bash dotnet build rate-limiter-http-client ================================================ FILE: projects/polly/rate-limiter-http-client/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#7c8463", "activityBar.background": "#7c8463", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#87c4d7", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#7c8463", "statusBar.background": "#61674d", "statusBar.debuggingBackground": "#534d67", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#7c8463", "statusBarItem.remoteBackground": "#61674d", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#61674d", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#61674d99", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#61674d" } ================================================ FILE: projects/polly/rate-limiter-http-client/Pages/Index.cshtml ================================================ @page "/" @model IndexModel Index

                    Welcome to the Index Page

                      @foreach (var item in Model.Track) {
                    • @item.Key : @item.Value
                    • }
                    ================================================ FILE: projects/polly/rate-limiter-http-client/Pages/Index.cshtml.cs ================================================ using System.Collections.Concurrent; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Polly.RateLimiting; public class IndexModel(IHttpClientFactory clientFactory, ILogger logger) : PageModel { public ConcurrentDictionary Track { get; set; } = new(); public async Task OnGet() { var client = clientFactory.CreateClient("concurrency-http"); var url = "https://dummyjson.com/products"; var totalRequests = 1000; const int batchSize = 20; //Batch size determine how many calls do you want to call at the same time for (int i = 0; i < totalRequests; i += batchSize) { var batchTasks = new List(); foreach (var x in Enumerable.Range(i, Math.Min(batchSize, totalRequests - i))) { var batchNo = i == 0 ? 0 : i / batchSize; batchTasks.Add(LoadProductsJsonAsync(client, logger, batchNo, x, url, Track)); } await Task.WhenAll(batchTasks); } return Page(); } static async Task LoadProductsJsonAsync(HttpClient client, ILogger log, int batch, int idx, string url, ConcurrentDictionary track) { try { var result = await client.GetAsync(url); log.LogInformation($"Batch {batch} Request {idx} completed with status code {result.StatusCode}"); track[idx] = $"In Batch {batch} completed with status code {result.StatusCode}"; } catch(RateLimiterRejectedException ex) { log.LogError(ex, $"Batch {batch} Request {idx} failed with exception {ex.Message}"); }; } } ================================================ FILE: projects/polly/rate-limiter-http-client/Program.cs ================================================ using System.Net; using Polly; using Polly.RateLimiting; using Polly.Retry; var builder = WebApplication.CreateBuilder(); builder.Logging.SetMinimumLevel(LogLevel.Warning); builder.Logging.AddConsole(); var services = builder.Services; services.AddRazorPages(); services.AddHttpClient("concurrency-http") .ConfigureHttpClient((sp, client) => { client.Timeout = TimeSpan.FromSeconds(10); }).AddResilienceHandler("concurrency-http-policy", (builder, c) => { builder .AddConcurrencyLimiter(permitLimit: 5, queueLimit: 5)// only allow 20 concurrent requests, queue up to 50 .AddRetry(new RetryStrategyOptions { ShouldHandle = response => { if (response.Outcome.Exception is RateLimiterRejectedException) return ValueTask.FromResult(true); // retry when the status is not OK var result = response.Outcome.Result.StatusCode != HttpStatusCode.OK; return ValueTask.FromResult(result); }, MaxRetryAttempts = 3, DelayGenerator = static args => { // Make the delay increase with each retry var delay = args.AttemptNumber switch { 0 => TimeSpan.Zero, 1 => TimeSpan.FromSeconds(1), _ => TimeSpan.FromSeconds(5) }; // This example uses a synchronous delay generator, // but the API also supports asynchronous implementations. return new ValueTask(delay); }, OnRetry = args => { var logger = c.ServiceProvider.GetService>(); logger.LogError("OnRetry, Attempt: {0}", args.AttemptNumber); // Event handlers can be asynchronous; here, we return an empty ValueTask. return default; }, BackoffType = DelayBackoffType.Constant }) .Build(); }); var app = builder.Build(); app.MapRazorPages(); app.Run(); ================================================ FILE: projects/polly/rate-limiter-http-client/README.md ================================================ # Polly Rate Limiting with Retry You can find the policy for rate limiting and retry at `Program.cs`. - In this case, we only allow max 20 concurrent requests - anything beyond that will be queue maximum to 50. If it exceed this queue, `RateLimiterRejectedException` will be thrown. - We will retry maximum 3 times if the http request status is not `200`. - We will retry also if `RateLimiterRejectedException` is thrown. ================================================ FILE: projects/polly/rate-limiter-http-client/rate-limiter-http-client.csproj ================================================ net10.0 true ================================================ FILE: projects/polly/rate-limiter-http-client/rate-limiter-http-client.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "rate-limiter-http-client", "rate-limiter-http-client.csproj", "{4587B931-62FB-4A35-9792-ADCEBD7542B5}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {4587B931-62FB-4A35-9792-ADCEBD7542B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4587B931-62FB-4A35-9792-ADCEBD7542B5}.Debug|Any CPU.Build.0 = Debug|Any CPU {4587B931-62FB-4A35-9792-ADCEBD7542B5}.Release|Any CPU.ActiveCfg = Release|Any CPU {4587B931-62FB-4A35-9792-ADCEBD7542B5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {803BD79B-088B-49FC-AE85-09AB017287A2} EndGlobalSection EndGlobal ================================================ FILE: projects/problem-details-middleware/README.md ================================================ # Problem Details * [Problem Details - 1](problem-details) This sample shows how to enable returning [Problem Details](https://www.rfc-editor.org/rfc/rfc7807) in unhandled exception responses. * [Problem Details - 2](problem-details-2) This example shows how customize returned [Problem Details](https://www.rfc-editor.org/rfc/rfc7807) in unhandled exception responses. * [Problem Details - 3](problem-details-3) This example shows how customize [Problem Details](https://www.rfc-editor.org/rfc/rfc7807) by manipulating `IProblemDetailsService`. dotnet8 ================================================ FILE: projects/problem-details-middleware/build.bat ================================================ dotnet build problem-details dotnet build problem-details-2 dotnet build problem-details-3 ================================================ FILE: projects/problem-details-middleware/build.sh ================================================ #!/bin/bash dotnet build problem-details dotnet build problem-details-2 dotnet build problem-details-3 ================================================ FILE: projects/problem-details-middleware/problem-details/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddProblemDetails(); var app = builder.Build(); app.UseExceptionHandler(); app.MapGet("/", (HttpContext context) => Results.Content($$""" """, "text/html")); app.MapGet("/problems", async (HttpContext context) => { throw new ApplicationException("We got problems"); }); app.Run(); ================================================ FILE: projects/problem-details-middleware/problem-details/README.md ================================================ # Enable returning Problem Details on unhandled exceptions This example shows how enable returning [Problem Details](https://www.rfc-editor.org/rfc/rfc7807) in unhandled exception responses. ================================================ FILE: projects/problem-details-middleware/problem-details/problem-details.csproj ================================================ net10.0 true ================================================ FILE: projects/problem-details-middleware/problem-details-2/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddProblemDetails(options => options.CustomizeProblemDetails = ctx => { ctx.ProblemDetails.Extensions.Add("custom-property", Guid.NewGuid().ToString()); }); var app = builder.Build(); app.UseExceptionHandler(); app.MapGet("/", (HttpContext context) => Results.Content($$""" """, "text/html")); app.MapGet("/problems", (HttpContext context) => { throw new ApplicationException("We got problems"); }); app.Run(); ================================================ FILE: projects/problem-details-middleware/problem-details-2/README.md ================================================ # Customize Problem Details in unhandled exception responses This example shows how customize returned [Problem Details](https://www.rfc-editor.org/rfc/rfc7807) in unhandled exception responses. ================================================ FILE: projects/problem-details-middleware/problem-details-2/problem-details-2.csproj ================================================ net10.0 true ================================================ FILE: projects/problem-details-middleware/problem-details-3/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddProblemDetails(); var app = builder.Build(); app.UseExceptionHandler(); app.Use(async (context, next) => { if (context.Request.Path == "/problems" && context.RequestServices.GetService() is { } problemDetailsService) { context.Response.StatusCode = StatusCodes.Status405MethodNotAllowed; var problemDetails = new ProblemDetailsContext { HttpContext = context }; problemDetails.ProblemDetails.Extensions.Add("custom-property-2", Guid.NewGuid().ToString()); await problemDetailsService.WriteAsync(problemDetails); return; } await next(context); }); app.MapGet("/", (HttpContext context) => Results.Content($$""" """, "text/html")); app.Run(); ================================================ FILE: projects/problem-details-middleware/problem-details-3/README.md ================================================ # Get and use IProblemDetailsService This example shows how customize [Problem Details](https://www.rfc-editor.org/rfc/rfc7807) by manipulating `IProblemDetailsService`. ================================================ FILE: projects/problem-details-middleware/problem-details-3/problem-details-3.csproj ================================================ net10.0 true ================================================ FILE: projects/razor-pages/README.md ================================================ # Razor Pages (10) | Sections | | --------------------------------------------------------------- | | [Razor View](/projects/razor-pages/razor) (2) | * [Hello World](/projects/razor-pages/hello-world) This is the simplest example for Razor Page. Razor Page by default routes `.cshtml` files with `@page` attribute under `/Pages`. So `/Pages/Index.cshtml` becomes `/` and `/Pages/AboutUs.cshtml` becomes `/AboutUs`. * [Razor Pages Basic](/projects/razor-pages/razor-pages-basic) This sample shows the two approaches to `Razor Pages`, one with inline code behind and another with separate code behind. * [Razor Pages and MVC Basic](/projects/razor-pages/razor-pages-mvc) Compare and contrast on how the same task can be performed by using `Razor Pages` and `MVC`. This sample also shows you how to us `Entity Framework Core` In-Memory Database. * [Routing](/projects/razor-pages/routing) Use `@page` directive on your Razor Page file to customize the url of your Razor Page. Each Razor Page can only contain 1 `@page` definition. * [Routing-2](/projects/razor-pages/routing-2) Capture routing data from `@page` url template using `RouteData.Values[]`. * [Customize HTML Id generated by Tag Helper](/projects/razor-pages/custom-html-generator) If you do not like the HTML Ids generated by Tag Helper, this sample shows you how to customize them. * [TempData backed by cookies](/projects/razor-pages/temp-data) Shows how to use `TempData` backed by coookies. ## Handler Methods (1) * [Get and Post](/projects/razor-pages/handler) This demonstrates the simplest usage for `Get` and `Post` handlers. dotnet6 ================================================ FILE: projects/razor-pages/build.bat ================================================ dotnet build custom-html-generator dotnet build handler dotnet build hello-world dotnet build razor dotnet build razor-pages-basic dotnet build razor-pages-mvc dotnet build routing dotnet build routing-2 dotnet build temp-data ================================================ FILE: projects/razor-pages/build.sh ================================================ #!/bin/bash dotnet build custom-html-generator dotnet build handler dotnet build hello-world dotnet build razor dotnet build razor-pages-basic dotnet build razor-pages-mvc dotnet build routing dotnet build routing-2 dotnet build temp-data ================================================ FILE: projects/razor-pages/custom-html-generator/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-hello-world.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart", "launchBrowser": { "enabled": true, "args": "${auto-detect-url}", "windows": { "command": "cmd.exe", "args": "/C start ${auto-detect-url}" }, "osx": { "command": "open" }, "linux": { "command": "xdg-open" } }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ,] } ================================================ FILE: projects/razor-pages/custom-html-generator/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/hello-world.csproj" ], "problemMatcher": "$msCompile" } ] } ================================================ FILE: projects/razor-pages/custom-html-generator/LowerCaseIdHtmlGenerator.cs ================================================ using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.Routing; using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.Extensions.Options; using System.Text.Encodings.Web; using System.Text.RegularExpressions; public class LowerCaseIdHtmlGenerator : DefaultHtmlGenerator { public LowerCaseIdHtmlGenerator( IAntiforgery antiforgery, IOptions optionsAccessor, IModelMetadataProvider metadataProvider, IUrlHelperFactory urlHelper, HtmlEncoder htmlEncoder, ValidationHtmlAttributeProvider validationProvider) : base(antiforgery, optionsAccessor, metadataProvider, urlHelper, htmlEncoder, validationProvider) { } public override TagBuilder GenerateCheckBox(ViewContext viewContext, ModelExplorer modelExplorer, string expression, bool? isChecked, object htmlAttributes) { var builder = base.GenerateCheckBox(viewContext, modelExplorer, expression, isChecked, htmlAttributes); if (!builder.Attributes.TryGetValue("id", out string id)) return builder; builder.Attributes["id"] = ConverToLowerCase(id); return builder; } public override TagBuilder GenerateForm(ViewContext viewContext, string actionName, string controllerName, object routeValues, string method, object htmlAttributes) { var builder = base.GenerateForm(viewContext, actionName, controllerName, routeValues, method, htmlAttributes); if (!builder.Attributes.TryGetValue("id", out string id)) return builder; builder.Attributes["id"] = ConverToLowerCase(id); return builder; } public override TagBuilder GenerateHidden(ViewContext viewContext, ModelExplorer modelExplorer, string expression, object value, bool useViewData, object htmlAttributes) { var builder = base.GenerateHidden(viewContext, modelExplorer, expression, value, useViewData, htmlAttributes); if (!builder.Attributes.TryGetValue("id", out string id)) return builder; builder.Attributes["id"] = ConverToLowerCase(id); return builder; } public override TagBuilder GenerateHiddenForCheckbox(ViewContext viewContext, ModelExplorer modelExplorer, string expression) { var builder = base.GenerateHiddenForCheckbox(viewContext, modelExplorer, expression); if (!builder.Attributes.TryGetValue("id", out string id)) return builder; builder.Attributes["id"] = ConverToLowerCase(id); return builder; } public override TagBuilder GenerateLabel(ViewContext viewContext, ModelExplorer modelExplorer, string expression, string labelText, object htmlAttributes) { var builder = base.GenerateLabel(viewContext, modelExplorer, expression, labelText, htmlAttributes); if (!builder.Attributes.TryGetValue("id", out string id)) return builder; builder.Attributes["id"] = ConverToLowerCase(id); return builder; } public override TagBuilder GeneratePassword(ViewContext viewContext, ModelExplorer modelExplorer, string expression, object value, object htmlAttributes) { var builder = base.GeneratePassword(viewContext, modelExplorer, expression, value, htmlAttributes); if (!builder.Attributes.TryGetValue("id", out string id)) return builder; builder.Attributes["id"] = ConverToLowerCase(id); return builder; } public override TagBuilder GenerateRadioButton(ViewContext viewContext, ModelExplorer modelExplorer, string expression, object value, bool? isChecked, object htmlAttributes) { var builder = base.GenerateRadioButton(viewContext, modelExplorer, expression, value, isChecked, htmlAttributes); if (!builder.Attributes.TryGetValue("id", out string id)) return builder; builder.Attributes["id"] = ConverToLowerCase(id); return builder; } public override TagBuilder GenerateSelect(ViewContext viewContext, ModelExplorer modelExplorer, string optionLabel, string expression, IEnumerable selectList, ICollection currentValues, bool allowMultiple, object htmlAttributes) { var builder = base.GenerateSelect(viewContext, modelExplorer, optionLabel, expression, selectList, currentValues, allowMultiple, htmlAttributes); if (!builder.Attributes.TryGetValue("id", out string id)) return builder; builder.Attributes["id"] = ConverToLowerCase(id); return builder; } public override TagBuilder GenerateTextArea(ViewContext viewContext, ModelExplorer modelExplorer, string expression, int rows, int columns, object htmlAttributes) { var builder = base.GenerateTextArea(viewContext, modelExplorer, expression, rows, columns, htmlAttributes); if (!builder.Attributes.TryGetValue("id", out string id)) return builder; builder.Attributes["id"] = ConverToLowerCase(id); return builder; } public override TagBuilder GenerateTextBox(ViewContext viewContext, ModelExplorer modelExplorer, string expression, object value, string format, object htmlAttributes) { var builder = base.GenerateTextBox(viewContext, modelExplorer, expression, value, format, htmlAttributes); if (!builder.Attributes.TryGetValue("id", out string id)) return builder; builder.Attributes["id"] = ConverToLowerCase(id); return builder; } private static string ConverToLowerCase(in string id) { var split = id.Split('_'); string newId = PascalToSnakeCase(split[0]) + '_'; foreach (var x in split.Skip(1)) newId += PascalToSnakeCase(x); return newId; } public static string PascalToSnakeCase(in string value) { if (string.IsNullOrEmpty(value)) return value; return Regex.Replace( value, "(? Custom HTML Generator

                    Customize the automatically generated id by Tag Helper to snake_case

                    By default, the Tag Helper will generate something akin to "Input_FirstName" for the first text field. This is off course quite annoying if you have to refer the element in JavaScript because it's an uncommon id naming convention.

                    The good thing is that you can customize the HTML that these Tag Helpers generate. Do a view source on this page and you will see that the ids are generated using snake_case.





                    ================================================ FILE: projects/razor-pages/custom-html-generator/Pages/Index.cshtml.cs ================================================ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; namespace PracticalAspNetCore.Pages { public class IndexModel : PageModel { [BindProperty] public PersonInput Input { get; set; } public void OnGet() { } } } ================================================ FILE: projects/razor-pages/custom-html-generator/Pages/_ViewImports.cshtml ================================================ @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers @addTagHelper *, AuthoringTagHelpers @addTagHelper *, RazorPages ================================================ FILE: projects/razor-pages/custom-html-generator/PersonInput.cs ================================================ public class PersonInput { public string FirstName { get; set; } public string LastName { get; set; } public string LastKnownAddress { get; set; } public string Email { get; set; } } ================================================ FILE: projects/razor-pages/custom-html-generator/Program.cs ================================================ using Microsoft.AspNetCore.Mvc.ViewFeatures; var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); builder.Services.Remove(); builder.Services.AddTransient(); var app = builder.Build(); app.MapRazorPages(); app.Run(); public static class IServiceCollectionExtensions { public static void Remove(this IServiceCollection services) { var serviceDescriptor = services.First(s => s.ServiceType == typeof(TServiceType) && s.ImplementationType == typeof(TImplementationType)); services.Remove(serviceDescriptor); } } ================================================ FILE: projects/razor-pages/custom-html-generator/README.md ================================================ # Customize the HTML Id attribute generated by Tag Helper to snake_case instead of the current default one By default, the Tag Helper will generate something akin to "Input_FirstName" for the first text field. This is off course quite annoying if you have to refer the element in JavaScript because it's an uncommon id naming convention. The good thing is that you can customize the HTML that these Tag Helpers generate. Do a view source on this page and you will see that the ids are generated using snake_case. The code here is originated from a mash up between: * https://gist.github.com/CMircea/67da04f7f3fe1a556d2d * https://stackoverflow.com/questions/43357057/how-to-make-the-asp-for-input-tag-helper-generate-camelcase-names ================================================ FILE: projects/razor-pages/custom-html-generator/custom-html-generator.csproj ================================================ net10.0 true ================================================ FILE: projects/razor-pages/handler/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-hello-world.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart", "launchBrowser": { "enabled": true, "args": "${auto-detect-url}", "windows": { "command": "cmd.exe", "args": "/C start ${auto-detect-url}" }, "osx": { "command": "open" }, "linux": { "command": "xdg-open" } }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ,] } ================================================ FILE: projects/razor-pages/handler/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/hello-world.csproj" ], "problemMatcher": "$msCompile" } ] } ================================================ FILE: projects/razor-pages/handler/Pages/Index.cshtml ================================================ @page @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers @model IndexModel Hello World

                    @Model.Message

                    Method: @Model.Method

                    @functions { public class IndexModel : Microsoft.AspNetCore.Mvc.RazorPages.PageModel { public string Message { get; set; } = "Hello World"; public string Method { get; set; } public void OnGet() { Method = this.HttpContext.Request.Method; } public IActionResult OnPost() { Method = this.HttpContext.Request.Method; return Page(); } } } ================================================ FILE: projects/razor-pages/handler/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); var app = builder.Build(); app.MapRazorPages(); app.Run(); ================================================ FILE: projects/razor-pages/handler/handler.csproj ================================================ net10.0 true ================================================ FILE: projects/razor-pages/hello-world/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-hello-world.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart", "launchBrowser": { "enabled": true, "args": "${auto-detect-url}", "windows": { "command": "cmd.exe", "args": "/C start ${auto-detect-url}" }, "osx": { "command": "open" }, "linux": { "command": "xdg-open" } }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ,] } ================================================ FILE: projects/razor-pages/hello-world/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/hello-world.csproj" ], "problemMatcher": "$msCompile" } ] } ================================================ FILE: projects/razor-pages/hello-world/Pages/Index.cshtml ================================================ @page Hello World

                    Hello World Razor Page

                    ================================================ FILE: projects/razor-pages/hello-world/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); var app = builder.Build(); app.MapRazorPages(); app.Run(); ================================================ FILE: projects/razor-pages/hello-world/hello-world.csproj ================================================ net10.0 true ================================================ FILE: projects/razor-pages/razor/README.md ================================================ # Razor View (2) * [Markup at @functions](/projects/razor-pages/razor/razor-1) Now you can use markup inside methods at `@functions` block. * [Markup at code block](/projects/razor-pages/razor/razor-2) Now you can use markup inside functions at code block. dotnet6 ================================================ FILE: projects/razor-pages/razor/razor-1/Pages/Index.cshtml ================================================ @page

                    Markup in @@functions

                    @{ Say("Hello World"); }
                    @{ Calculate(Enumerable.Range(1, 10));} @functions { void Say(string message) {
                    @message
                    } void Calculate(IEnumerable numbers) { foreach(var b in numbers) { Say(b + ""); } } } ================================================ FILE: projects/razor-pages/razor/razor-1/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); var app = builder.Build(); app.MapRazorPages(); app.Run(); ================================================ FILE: projects/razor-pages/razor/razor-1/README.md ================================================ # Markup in methods inside @functions block Now you can use markup code inside methods located at @functions block. ================================================ FILE: projects/razor-pages/razor/razor-1/razor-1.csproj ================================================ net10.0 true ================================================ FILE: projects/razor-pages/razor/razor-2/Pages/Index.cshtml ================================================ @page @{ void Say(string message) {
                    @message
                    } void Calculate(IEnumerable numbers) { foreach(var b in numbers) { Say(b + ""); } } }

                    Markup in code block

                    @{ Say("Hello World"); }
                    @{ Calculate(Enumerable.Range(1, 10));} ================================================ FILE: projects/razor-pages/razor/razor-2/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); var app = builder.Build(); app.MapRazorPages(); app.Run(); ================================================ FILE: projects/razor-pages/razor/razor-2/README.md ================================================ # Markup in local functions inside code block Now you can use markup code inside local functions located at code block. ================================================ FILE: projects/razor-pages/razor/razor-2/razor.csproj ================================================ net10.0 true ================================================ FILE: projects/razor-pages/razor-pages-basic/Pages/Index.cshtml ================================================ @page Hello, world!

                    Welcome to Razor Pages Basic

                    See Page with inline code behind model

                    See Page with separate code behind model

                    ================================================ FILE: projects/razor-pages/razor-pages-basic/Pages/InlineCodebehindFile.cshtml ================================================ @page @model InlineCodebehindFileModel Hello, world!

                    @Model.Title

                    @Model.Message

                    Go back

                    @functions{ public class InlineCodebehindFileModel : Microsoft.AspNetCore.Mvc.RazorPages.PageModel { public string Title => "Page with inline codebehind file model"; public string Message { get; private set; } public void OnGet() { Message = $"Generated at { DateTime.Now.ToLongTimeString() }."; } } } ================================================ FILE: projects/razor-pages/razor-pages-basic/Pages/SeparateCodebehindFile.cshtml ================================================ @page @using RazorPagesBasic.Pages @model SeparateCodebehindFileModel Hello, world!

                    @Model.Title

                    @Model.Message

                    Go back

                    ================================================ FILE: projects/razor-pages/razor-pages-basic/Pages/SeparateCodebehindFile.cshtml.cs ================================================ using Microsoft.AspNetCore.Mvc.RazorPages; namespace RazorPagesBasic.Pages; public class SeparateCodebehindFileModel : PageModel { public string Title => "Page with separate codebehind file model"; public string Message { get; private set; } public void OnGet() { Message = $"Generated at { DateTime.Now.ToLongTimeString() }."; } } ================================================ FILE: projects/razor-pages/razor-pages-basic/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); var app = builder.Build(); app.MapRazorPages(); app.Run(); ================================================ FILE: projects/razor-pages/razor-pages-basic/razor-pages-basic.csproj ================================================ net10.0 true ================================================ FILE: projects/razor-pages/razor-pages-mvc/Controllers/EntryController.cs ================================================ using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using PracticalAspNetCore.Data; namespace PracticalAspNetCore.Controllers { [Route("Mvc")] public class EntryController : Controller { private GuestbookContext _db; public EntryController(GuestbookContext db) => _db = db; [Route("Index")] public async Task Index() { var entries = await _db.Entries.AsNoTracking().ToListAsync(); return View(entries); } [HttpPost] [Route("Edit")] public async Task Edit(Entry entry) { if (!ModelState.IsValid) return View("Edit", entry); _db.Attach(entry).State = EntityState.Modified; await _db.SaveChangesAsync(); return RedirectToAction("Index"); } [Route("Edit")] public async Task Edit(int id) { var entry = await _db.Entries.SingleOrDefaultAsync(e => e.Id == id); return View(entry); } [HttpPost] [Route("Create")] public async Task Create(Entry entry) { if (!ModelState.IsValid) return View(entry); await _db.Entries.AddAsync(entry); await _db.SaveChangesAsync(); return RedirectToAction("Index"); } [Route("Create")] public IActionResult Create() => View(); [HttpPost] [Route("Like")] public async Task Like(int id) { var entry = await _db.Entries.SingleOrDefaultAsync(e => e.Id == id); entry.Likes += 1; await _db.SaveChangesAsync(); return RedirectToAction("Index"); } } } ================================================ FILE: projects/razor-pages/razor-pages-mvc/Data/Entry.cs ================================================ using System.ComponentModel.DataAnnotations; namespace PracticalAspNetCore.Data { public class Entry { public int Id { get; set; } [Required, StringLength(300)] public string Content { get; set; } [Required, EmailAddress] public string Email { get; set; } public int Likes { get; set; } } } ================================================ FILE: projects/razor-pages/razor-pages-mvc/Data/GuestbookContext.cs ================================================ using Microsoft.EntityFrameworkCore; namespace PracticalAspNetCore.Data { public class GuestbookContext : DbContext { public GuestbookContext(DbContextOptions options) : base(options) { } public DbSet Entries { get; set; } } } ================================================ FILE: projects/razor-pages/razor-pages-mvc/Pages/Index.cshtml ================================================ @page

                    Welcome to Razor Pages and MVC example

                    Go to Razor Pages Implementation

                    Go to Mvc Implementation

                    ================================================ FILE: projects/razor-pages/razor-pages-mvc/Pages/RazorPages/Create.cshtml ================================================ @page @model PracticalAspNetCore.Pages.CreateModel @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

                    Add new guestbook entry.

                    Name:
                    Email:
                    ================================================ FILE: projects/razor-pages/razor-pages-mvc/Pages/RazorPages/Create.cshtml.cs ================================================ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using PracticalAspNetCore.Data; namespace PracticalAspNetCore.Pages { public class CreateModel : PageModel { private readonly GuestbookContext _db; public CreateModel(GuestbookContext db) => _db = db; [BindProperty] public Entry Entry { get; set; } public async Task OnPostAsync() { if (!ModelState.IsValid) return Page(); _db.Entries.Add(Entry); await _db.SaveChangesAsync(); return RedirectToPage("Index"); } } } ================================================ FILE: projects/razor-pages/razor-pages-mvc/Pages/RazorPages/Edit.cshtml ================================================ @page "{id:int}" @model PracticalAspNetCore.Pages.EditModel @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

                    Edit Guestbook Entry @Model.Entry.Id

                    ================================================ FILE: projects/razor-pages/razor-pages-mvc/Pages/RazorPages/Edit.cshtml.cs ================================================ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using PracticalAspNetCore.Data; using Microsoft.EntityFrameworkCore; namespace PracticalAspNetCore.Pages { public class EditModel : PageModel { private readonly GuestbookContext _db; public EditModel(GuestbookContext db) => _db = db; [BindProperty] public Entry Entry { get; set; } public async Task OnGetAsync(int id) { Entry = await _db.Entries.FindAsync(id); if (Entry == null) return RedirectToPage("/Index"); return Page(); } public async Task OnPostAsync() { if (!ModelState.IsValid) return Page(); _db.Attach(Entry).State = EntityState.Modified; await _db.SaveChangesAsync(); return RedirectToPage("Index"); } } } ================================================ FILE: projects/razor-pages/razor-pages-mvc/Pages/RazorPages/Index.cshtml ================================================ @page @model PracticalAspNetCore.Pages.IndexRazorPagesModel @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

                    Razor Pages Implementation

                    Add your entry to guestbook.

                    @foreach (var entry in Model.Entries) { }
                    Id Email Content Likes
                    @entry.Id @entry.Email @entry.Content @entry.Likes edit
                    Create

                    Go back to Index

                    ================================================ FILE: projects/razor-pages/razor-pages-mvc/Pages/RazorPages/Index.cshtml.cs ================================================ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using PracticalAspNetCore.Data; using Microsoft.EntityFrameworkCore; namespace PracticalAspNetCore.Pages { public class IndexRazorPagesModel : PageModel { private readonly GuestbookContext _db; public IndexRazorPagesModel(GuestbookContext db) => _db = db; public IList Entries { get; private set; } public async Task OnGetAsync() { Entries = await _db.Entries.AsNoTracking().ToListAsync(); } public async Task OnPostLikeAsync(int id) { var entry = await _db.Entries.FindAsync(id); entry.Likes += 1; await _db.SaveChangesAsync(); return RedirectToPage(); } public async Task OnPostDeleteAsync(int id) { var entry = await _db.Entries.FindAsync(id); _db.Entries.Remove(entry); await _db.SaveChangesAsync(); return RedirectToPage(); } } } ================================================ FILE: projects/razor-pages/razor-pages-mvc/Program.cs ================================================ using Microsoft.EntityFrameworkCore; using PracticalAspNetCore.Data; var builder = WebApplication.CreateBuilder(); builder.Services.AddDbContext(o => o.UseInMemoryDatabase("GuestbookDatabase")); builder.Services.AddControllersWithViews(); builder.Services.AddRazorPages(); var app = builder.Build(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run(); ================================================ FILE: projects/razor-pages/razor-pages-mvc/Views/Entry/Create.cshtml ================================================ @model PracticalAspNetCore.Data.Entry @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

                    Add new guestbook entry.

                    Name:
                    Email:
                    ================================================ FILE: projects/razor-pages/razor-pages-mvc/Views/Entry/Edit.cshtml ================================================ @model PracticalAspNetCore.Data.Entry @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers @{ ViewData["Title"] = "Edit Guestbook entry"; }

                    Edit Entry @Model.Id

                    ================================================ FILE: projects/razor-pages/razor-pages-mvc/Views/Entry/Index.cshtml ================================================ @model List @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

                    MVC Implementation

                    Add your entry to guestbook.

                    @foreach (var entry in Model) { }
                    Id Email Content Likes
                    @entry.Id @entry.Email @entry.Content @entry.Likes edit
                    Create

                    Go back to Index

                    ================================================ FILE: projects/razor-pages/razor-pages-mvc/razor-pages-mvc.csproj ================================================ net10.0 true ================================================ FILE: projects/razor-pages/routing/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-hello-world.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart", "launchBrowser": { "enabled": true, "args": "${auto-detect-url}", "windows": { "command": "cmd.exe", "args": "/C start ${auto-detect-url}" }, "osx": { "command": "open" }, "linux": { "command": "xdg-open" } }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ,] } ================================================ FILE: projects/razor-pages/routing/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/hello-world.csproj" ], "problemMatcher": "$msCompile" } ] } ================================================ FILE: projects/razor-pages/routing/Pages/About.cshtml ================================================ @page "/AboutOurSchool" Remaining

                    About

                    ================================================ FILE: projects/razor-pages/routing/Pages/Blog.cshtml ================================================ @page "/Blog/2018/4/20/itsmybirthday" Path

                    Birthday page

                    ================================================ FILE: projects/razor-pages/routing/Pages/Contact.cshtml ================================================ @page "/Contact-Us" Contact Us

                    Contact Us

                    ================================================ FILE: projects/razor-pages/routing/Pages/Index.cshtml ================================================ @page Page Title

                    Using @@page to configure routing for your Razor page

                    ================================================ FILE: projects/razor-pages/routing/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); var app = builder.Build(); app.MapRazorPages(); app.Run(); ================================================ FILE: projects/razor-pages/routing/routing.csproj ================================================ net10.0 routing hello-world true ================================================ FILE: projects/razor-pages/routing-2/.vscode/launch.json ================================================ { // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-hello-world.dll", "args": [], "cwd": "${workspaceFolder}", "stopAtEntry": false, "internalConsoleOptions": "openOnSessionStart", "launchBrowser": { "enabled": true, "args": "${auto-detect-url}", "windows": { "command": "cmd.exe", "args": "/C start ${auto-detect-url}" }, "osx": { "command": "open" }, "linux": { "command": "xdg-open" } }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, "sourceFileMap": { "/Views": "${workspaceFolder}/Views" } }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ,] } ================================================ FILE: projects/razor-pages/routing-2/.vscode/tasks.json ================================================ { "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/hello-world.csproj" ], "problemMatcher": "$msCompile" } ] } ================================================ FILE: projects/razor-pages/routing-2/Pages/About.cshtml ================================================ @page "/About/{section}/{year:int}" About

                    About @RouteData.Values["section"] | @RouteData.Values["year"]

                    ================================================ FILE: projects/razor-pages/routing-2/Pages/Blog.cshtml ================================================ @page "/Blog/{*path}" Blog

                    @RouteData.Values["path"]

                    ================================================ FILE: projects/razor-pages/routing-2/Pages/Catalog.cshtml ================================================ @page "/Product/{ean:int?}" Product

                    Product @RouteData.Values["ean"]

                    ================================================ FILE: projects/razor-pages/routing-2/Pages/Contact.cshtml ================================================ @page "/contact-us/{id}" Contact

                    Contact Us @RouteData.Values["id"]

                    ================================================ FILE: projects/razor-pages/routing-2/Pages/Index.cshtml ================================================ @page Page Title

                    Capturing routing data from @@page

                    1. /contact-us/{id} with page Contact.cshtml
                    2. /About/{section}/{int:year} with page About.cshtml
                    3. /About/{section}/{int:year} with page About.cshtml
                    4. /Blog/{*path} with page Blog.cshtml
                    5. /Blog/{*path} with page Blog.cshtml
                    6. /Product/{id:int?} with page Catalog.cshtml
                    7. /Product/{id:int?} with page Catalog.cshtml
                    ================================================ FILE: projects/razor-pages/routing-2/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); var app = builder.Build(); app.MapRazorPages(); app.Run(); ================================================ FILE: projects/razor-pages/routing-2/routing-2.csproj ================================================ net10.0 true ================================================ FILE: projects/razor-pages/temp-data/Pages/Index.cshtml ================================================ @page @model IndexModel Hello, world!

                    Hello, world!

                    Click here to set TempData. @if (TempData.Peek("Message") != null) {

                    Message: @TempData["Message"]

                    }
                    ================================================ FILE: projects/razor-pages/temp-data/Pages/Index.cshtml.cs ================================================ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; public class IndexModel : PageModel { public IActionResult OnGet() { return Page(); } } ================================================ FILE: projects/razor-pages/temp-data/Pages/SetTempData.cshtml ================================================ @page @model SetTempDataModel Hello, world!

                    You have set the TempData

                    Click here to return to home page.
                    ================================================ FILE: projects/razor-pages/temp-data/Pages/SetTempData.cshtml.cs ================================================ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; public class SetTempDataModel : PageModel { [TempData] public string Message { get; set; } = string.Empty; public IActionResult OnGet() { Message = "Greeting from SetTempData page"; return Page(); } } ================================================ FILE: projects/razor-pages/temp-data/Program.cs ================================================ var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); var app = builder.Build(); app.MapRazorPages(); app.Run(); ================================================ FILE: projects/razor-pages/temp-data/README.md ================================================ # Use TempData backed by cookies By default `TempData` in Razor Pages is backed by cookies. This sample shows how to use `TempData` in a Razor Pages app using `[TempData]` attribute. Remember that when you access `TempData` value, it will disappear. To retain the value in `TempData`, use, `TempData.Peek`. ================================================ FILE: projects/razor-pages/temp-data/temp-data.csproj ================================================ net10.0 true ================================================ FILE: projects/razor-slices/README.MD ================================================ # RazorSlices * [Hello World](hello-world) This is the simplest sample on how to start using RazorSlices, a Razor-based template engine that does not require MVC, Razor Pages, nor Blazor. ================================================ FILE: projects/razor-slices/hello-world/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#0c5dc8", "activityBar.background": "#0c5dc8", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#f669a6", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#0c5dc8", "statusBar.background": "#094798", "statusBar.debuggingBackground": "#985a09", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#0c5dc8", "statusBarItem.remoteBackground": "#094798", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#094798", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#09479899", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#094798" } ================================================ FILE: projects/razor-slices/hello-world/Program.cs ================================================ var app = WebApplication.Create(); app.MapGet("/", () => Results.Extensions.RazorSlice("Hello world")); app.Run(); ================================================ FILE: projects/razor-slices/hello-world/README.md ================================================ # Hello world This is a hello world sample based on [RazorSlices](https://github.com/DamianEdwards/RazorSlices), a Razor-based template engine. The Nuget Package is available [here](https://www.nuget.org/packages/RazorSlices). ================================================ FILE: projects/razor-slices/hello-world/Slices/Index.cshtml ================================================ @inherits RazorSliceHttpResult

                    Greetings @Model at @DateTime.UtcNow

                    ================================================ FILE: projects/razor-slices/hello-world/Slices/_ViewImports.cshtml ================================================ @inherits RazorSliceHttpResult @using System.Globalization; @using Microsoft.AspNetCore.Razor; @using Microsoft.AspNetCore.Http.HttpResults; @tagHelperPrefix __disable_tagHelpers__: @removeTagHelper *, Microsoft.AspNetCore.Mvc.Razor ================================================ FILE: projects/razor-slices/hello-world/hello-world.csproj ================================================ net10.0 true HelloWorld ================================================ FILE: projects/request/README.md ================================================ # Request (15) This section shows all the different ways you capture input and examine request to your web application. * [Anti Forgery on Form](/projects/request/anti-forgery) This exists on since .NET Core 1.0 however the configuration for the cookie has changed slightly. We are using ```IAntiForgery``` interface to store and generate anti forgery token to prevent XSRF/CSRF attacks. * **HTTP Verb (1)** * [Get request verb](/projects/request/request-verb) Detect the verb/method of the current request. * **Headers (3)** * [Access Request Headers](/projects/request/request-headers) Enumerate all the available headers in a request. * [Access Request Headers using common HTTP header names contained in HeaderNames](/projects/request/request-headers-names) This sample shows all the common HTTP header names contained in `HeaderNames` class. So instead of using string to obtain a HTTP Header, you can just use a convenient constant such as `HeaderNames.ContentType`. * [Type Safe Access to Request Headers](/projects/request/request-headers-typed) Instead of using string to access HTTP headers, use type safe object properties to access common HTTP headers. * **Query String (5)** * [Single value query string](/projects/request/query-string-1) Access single value query string. * [Multiple values query string](/projects/request/query-string-2) Access multiples values query string. * [List all query string values](/projects/request/query-string-3) List all query string values. Also shows the implicat conversion from ```StringValues``` to ```string```. There are multiple ways to generate query strings. * [Generate query string](/projects/request/form-url-encoded-content) Use `System.Net.Http.FormUrlEncodedContent` to generate URL encoded query string. * [Generate query string 2](/projects/request/query-string-create) Use `Microsoft.AspNetCore.Http.QueryString.Create` to generate URL encoded query string. * More functionalities to generate and parse query string is available at [Web Utilities](/projects/web-utilities) section. * **Form (2)** * [Form Values](/projects/request/form-values) Handles the values submitted via a form. * [Form Upload File](/projects/request/form-upload-file) Upload a single file and save it to the current directory (check out the usage of ```.UseContentRoot(Directory.GetCurrentDirectory())```) * **Cookies (3)** * [Cookies](/projects/request/cookies-1) Read and write cookies. * [Removing cookies](/projects/request/cookies-2) Simply demonstrates on how to remove cookies. * [Accessing cookie issues by remote API via AJAX call](/projects/request/cookies-3) Demonstrates on how to access cookie values issued by remote API via AJAX call. dotnet8 ================================================ FILE: projects/request/anti-forgery/Program.cs ================================================ using Microsoft.AspNetCore.Antiforgery; var builder = WebApplication.CreateBuilder(); builder.Services.AddAntiforgery(options => { options.Cookie.Name = "AntiForgery"; options.Cookie.Domain = "localhost"; options.Cookie.Path = "/"; options.FormFieldName = "Antiforgery"; options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest; }); var app = builder.Build(); //These are the four default services available at Configure app.Run(async context => { var antiForgery = context.RequestServices.GetService(); if (HttpMethods.IsPost(context.Request.Method)) { await antiForgery.ValidateRequestAsync(context); await context.Response.WriteAsync("Response validated with anti forgery"); return; } var token = antiForgery.GetAndStoreTokens(context); context.Response.Headers.Append("Content-Type", "text/html"); await context.Response.WriteAsync($@" View source to see the generated anti forgery token
                    "); }); app.Run(); ================================================ FILE: projects/request/anti-forgery/anti-forgery.csproj ================================================ net10.0 true ================================================ FILE: projects/request/build.bat ================================================ dotnet build anti-forgery dotnet build cookies-1 dotnet build cookies-2 dotnet build cookies-3 dotnet build form-upload-file dotnet build form-url-encoded-content dotnet build form-values dotnet build query-string-1 dotnet build query-string-2 dotnet build query-string-3 dotnet build query-string-create dotnet build request-headers dotnet build request-headers-names dotnet build request-headers-typed dotnet build request-verb ================================================ FILE: projects/request/build.sh ================================================ #!/bin/bash dotnet build anti-forgery dotnet build cookies-1 dotnet build cookies-2 dotnet build cookies-3 dotnet build form-upload-file dotnet build form-url-encoded-content dotnet build form-values dotnet build query-string-1 dotnet build query-string-2 dotnet build query-string-3 dotnet build query-string-create dotnet build request-headers dotnet build request-headers-names dotnet build request-headers-typed dotnet build request-verb ================================================ FILE: projects/request/cookies-1/Program.cs ================================================ var app = WebApplication.Create(); app.Run(context => { var cookie = context.Request.Cookies["MyCookie"]; if (string.IsNullOrWhiteSpace(cookie)) { context.Response.Cookies.Append ( "MyCookie", "Hello World", new CookieOptions { Path = "/", HttpOnly = false, Secure = false } ); } return context.Response.WriteAsync($"Hello World Cookie: {cookie}. Refresh page to see cookie value."); }); app.Run(); ================================================ FILE: projects/request/cookies-1/cookies-1.csproj ================================================ net10.0 true ================================================ FILE: projects/request/cookies-2/Program.cs ================================================ var app = WebApplication.Create(); app.Run(async context => { context.Response.Headers.Append("content-type","text/html"); var deleteCookie = context.Request.Query["delete"]; if(!string.IsNullOrWhiteSpace(deleteCookie)) { context.Response.Cookies.Delete("MyCookie"); await context.Response.WriteAsync($@"Delete cookie. Click here to go back to home page."); return; } var cookie = context.Request.Cookies["MyCookie"]; await context.Response.WriteAsync(""); if (string.IsNullOrWhiteSpace(cookie) && context.Request.Path == "/") //read https://github.com/aspnet/HttpAbstractions/issues/743 { context.Response.Cookies.Append ( "MyCookie", "Hello World", new CookieOptions{ Path = "/", Expires = DateTimeOffset.Now.AddDays(1) } ); await context.Response.WriteAsync($"Writing a new cookie
                    Refresh page to see cookie value.
                    "); } else { await context.Response.WriteAsync($@"Click here to delete cookie.
                    "); } await context.Response.WriteAsync($"Content of Cookie: {cookie}."); await context.Response.WriteAsync(""); }); app.Run(); ================================================ FILE: projects/request/cookies-2/cookies-2.csproj ================================================ net10.0 true ================================================ FILE: projects/request/cookies-3/README.md ================================================ # Implementing cross site antiforgery This example shows how to implement antiforgery for APIs located in different domain. ================================================ FILE: projects/request/cookies-3/api/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddCors(options => { options.AddPolicy(name: "localhostOnly", policy => { policy.WithOrigins(builder.Configuration["origin"]) .AllowAnyHeader() .AllowAnyMethod() .AllowCredentials(); }); }); WebApplication app = builder.Build(); app.Urls.Add("https://localhost:5001"); app.UseCors("localhostOnly"); app.MapGet("/", (HttpContext context) => { var html = $@" System is UP Get a message cookie "; return Results.Content(html, "text/html"); }); app.MapGet("/test-cors", () => Results.Ok(new { Message = "cors works" })); app.MapGet("/message-cookie", (HttpContext context) => { context.Response.Cookies.Append("message", "hello world", new CookieOptions { HttpOnly = false }); }); app.Run(); ================================================ FILE: projects/request/cookies-3/api/api.csproj ================================================ net10.0 true ================================================ FILE: projects/request/cookies-3/api/appsettings.json ================================================ { "origin" : "https://localhost:5002" } ================================================ FILE: projects/request/cookies-3/frontend/Pages/Index.cshtml ================================================ @page @inject IConfiguration Config;

                    Access cookie using AJAX call to API from different domain



                    ================================================ FILE: projects/request/cookies-3/frontend/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRazorPages(); WebApplication app = builder.Build(); app.Urls.Add("https://localhost:5002"); app.MapRazorPages(); app.Run(); ================================================ FILE: projects/request/cookies-3/frontend/appsettings.json ================================================ { "endpoint" : "https://localhost:5001" } ================================================ FILE: projects/request/cookies-3/frontend/frontend.csproj ================================================ net10.0 true ================================================ FILE: projects/request/form-upload-file/Program.cs ================================================ var app = WebApplication.Create(); app.MapGet("", async context => { context.Response.Headers.Append("content-type", "text/html"); var body = $@"

                    Upload File

                    "; await context.Response.WriteAsync(body); }); app.MapPost("Upload", async context => { if (context.Request.HasFormContentType) { var form = await context.Request.ReadFormAsync(); foreach (var f in form.Files) { using (var body = f.OpenReadStream()) { var fileName = Path.Combine(app.Environment.ContentRootPath, f.FileName); File.WriteAllBytes(fileName, ReadFully(body)); await context.Response.WriteAsync($"Uploaded file written to {fileName}"); } } } await context.Response.WriteAsync(""); }); app.Run(); static byte[] ReadFully(Stream input) { byte[] buffer = new byte[16 * 1024]; using var ms = new MemoryStream(); int read; while ((read = input.Read(buffer, 0, buffer.Length)) > 0) { ms.Write(buffer, 0, read); } return ms.ToArray(); } ================================================ FILE: projects/request/form-upload-file/form-upload-file.csproj ================================================ net10.0 true ================================================ FILE: projects/request/form-url-encoded-content/Program.cs ================================================ var app = WebApplication.Create(); app.Run(async context => { var dicts = new Dictionary() { ["id"] = "10", ["name"] = "dody gunawinata", ["date"] = "2020/05/30", ["date2"] = "2020-05-30", ["guid"] = System.Guid.NewGuid().ToString(), ["artist"] = "Simon & Garfunkel", ["formula"] = "10 = 10 * 1" }; using var queryString = new FormUrlEncodedContent(dicts); context.Response.Headers.Append("Content-Type", "text/html"); await context.Response.WriteAsync($@"

                    Using FormUrlEncodedContent to get URL encoded string

                    Input "); await context.Response.WriteAsync("
                      "); foreach(var k in dicts) { await context.Response.WriteAsync($"
                    • {k.Key} = {k.Value}
                    • "); } await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync("Output
                    "); await context.Response.WriteAsync(await queryString.ReadAsStringAsync()); await context.Response.WriteAsync("
                  "); await context.Response.WriteAsync(@"
              "); }); app.Run(); ================================================ FILE: projects/request/form-url-encoded-content/README.MD ================================================ # Using FormUrlEncodedContent to generate query string This sample demonstrates the usage of `System.Net.Http.FormUrlEncodedContent` class, a container for name/value tuples encoded using application/x-www-form-urlencoded MIME type, to generate query string. ================================================ FILE: projects/request/form-url-encoded-content/form-url-encoded-content.csproj ================================================ net10.0 true ================================================ FILE: projects/request/form-values/Program.cs ================================================ var app = WebApplication.Create(); app.MapGet("", async context => { context.Response.Headers.Append("content-type", "text/html"); var body = $@"

              Upload File











              Married?

              Adventurous?

              "; await context.Response.WriteAsync(body); }); app.MapPost("Upload", async context => { context.Response.Headers.Append("content-type", "text/html"); if (context.Request.HasFormContentType) { var form = await context.Request.ReadFormAsync(); foreach (var v in form.Keys) { await context.Response.WriteAsync($"{v} = {form[v]}
              "); } } await context.Response.WriteAsync(""); }); app.Run(); ================================================ FILE: projects/request/form-values/form-values.csproj ================================================ net10.0 true ================================================ FILE: projects/request/query-string-1/Program.cs ================================================ using Microsoft.Extensions.Primitives; var app = WebApplication.Create(); //These are the three default services available at Configure app.Run(async context => { context.Response.Headers.Append("content-type", "text/html"); StringValues queryString = context.Request.Query["message"]; await context.Response.WriteAsync(""); await context.Response.WriteAsync("

              Query String with a single value

              "); await context.Response.WriteAsync(@"click this link to add query string

              "); await context.Response.WriteAsync($"'Message' query string: {queryString}"); await context.Response.WriteAsync(""); }); app.Run(); ================================================ FILE: projects/request/query-string-1/query-string-1.csproj ================================================ net10.0 true ================================================ FILE: projects/request/query-string-2/Program.cs ================================================ using Microsoft.Extensions.Primitives; var app = WebApplication.Create(); //These are the three default services available at Configure app.Run(async context => { context.Response.Headers.Append("Content-Type", "text/html"); StringValues queryString = context.Request.Query["message"]; await context.Response.WriteAsync(""); await context.Response.WriteAsync("

              Query String with multiple values

              "); await context.Response.WriteAsync(@"click this link to add query string

              "); await context.Response.WriteAsync("
                "); foreach (string v in queryString) { await context.Response.WriteAsync($"
              • {v}
              • "); } await context.Response.WriteAsync("
              "); await context.Response.WriteAsync(""); }); app.Run(); ================================================ FILE: projects/request/query-string-2/query-string-2.csproj ================================================ net10.0 true ================================================ FILE: projects/request/query-string-3/Program.cs ================================================ var app = WebApplication.Create(); app.Run(async context => { context.Response.Headers.Append("content-type", "text/html"); await context.Response.WriteAsync(""); await context.Response.WriteAsync("

              All query string

              "); await context.Response.WriteAsync(@"click this link to add query string

              "); await context.Response.WriteAsync("
                "); foreach (var v in context.Request.Query) { string str = v.Value; //implicit conversion from StringValues to String await context.Response.WriteAsync($"
              • {v.Key} - {str}
              • "); } await context.Response.WriteAsync("
              "); await context.Response.WriteAsync(""); }); app.Run(); ================================================ FILE: projects/request/query-string-3/query-string-3.csproj ================================================ net10.0 true ================================================ FILE: projects/request/query-string-create/Program.cs ================================================ var app = WebApplication.Create(); app.Run(async context => { var dicts = new Dictionary() { ["id"] = "10", ["name"] = "dody gunawinata", ["date"] = "2020/05/30", ["date2"] = "2020-05-30", ["guid"] = System.Guid.NewGuid().ToString(), ["artist"] = "Simon & Garfunkel", ["formula"] = "10 = 10 * 1" }; var queryString = QueryString.Create(dicts); context.Response.Headers.Append("Content-Type", "text/html"); await context.Response.WriteAsync($@"

              Using QueryString.Create to get URL encoded query string

              Input "); await context.Response.WriteAsync("
                "); foreach(var k in dicts) { await context.Response.WriteAsync($"
              • {k.Key} = {k.Value}
              • "); } await context.Response.WriteAsync("
              "); await context.Response.WriteAsync("Output
              "); await context.Response.WriteAsync(queryString.Value); await context.Response.WriteAsync(""); await context.Response.WriteAsync(@"
              "); }); app.Run(); ================================================ FILE: projects/request/query-string-create/README.MD ================================================ # Using QueryString.Create to generate query string This sample demonstrates the usage of `Microsoft.AspNetCore.Http.QueryString.Create` method to generate URL encoded query string ================================================ FILE: projects/request/query-string-create/query-string-create.csproj ================================================ net10.0 true ================================================ FILE: projects/request/request-headers/Program.cs ================================================ var app = WebApplication.Create(); app.Run(async context => { context.Response.Headers.Append("content-type", "text/html"); await context.Response.WriteAsync("

              Request Headers

              "); await context.Response.WriteAsync("
                "); foreach (var h in context.Request.Headers) { await context.Response.WriteAsync($"
              • {h.Key} : {h.Value}
              • "); } await context.Response.WriteAsync("
              "); }); app.Run(); ================================================ FILE: projects/request/request-headers/request-headers.csproj ================================================ net10.0 true ================================================ FILE: projects/request/request-headers-names/Program.cs ================================================ using Microsoft.Net.Http.Headers; using System.Reflection; List GetConstants(Type type) { FieldInfo[] fieldInfos = type.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy); return fieldInfos.ToList(); } var app = WebApplication.Create(); app.Run(async context => { context.Response.Headers.Append(HeaderNames.ContentType, "text/html"); await context.Response.WriteAsync(""); await context.Response.WriteAsync("

              Request Headers from Microsoft.Net.Http.Headers.HeaderNames

              "); await context.Response.WriteAsync("
                "); foreach (var h in GetConstants(typeof(HeaderNames))) { await context.Response.WriteAsync($"
              • {h.Name} = {h.GetValue(h)}
              • "); } await context.Response.WriteAsync("
              "); await context.Response.WriteAsync(""); }); app.Run(); ================================================ FILE: projects/request/request-headers-names/README.MD ================================================ # Microsoft.Net.Http.Headers.HeaderNames This sample shows all the common HTTP header names contained in `HeaderNames` class. It is super convenient to use `HeaderNames.ContentType` instead of typing `Content-Type`. ================================================ FILE: projects/request/request-headers-names/request-headers-names.csproj ================================================ net10.0 true ================================================ FILE: projects/request/request-headers-typed/Program.cs ================================================ var app = WebApplication.Create(); app.Run(context => { var typedHeaders = context.Request.GetTypedHeaders(); return context.Response.WriteAsync($@" There are more common HTTP headers properties available in HttpContext.Request.GetTypedHeaders() Accept: {typedHeaders.Accept[0]} Accept Language : {typedHeaders.AcceptLanguage.FirstOrDefault()?.Value} "); }); app.Run(); ================================================ FILE: projects/request/request-headers-typed/request-headers-typed.csproj ================================================ net10.0 true ================================================ FILE: projects/request/request-verb/Program.cs ================================================ var app = WebApplication.Create(); app.Run(context => context.Response.WriteAsync($"Request {context.Request.Method}")); app.Run(); ================================================ FILE: projects/request/request-verb/request-verb.csproj ================================================ net10.0 true ================================================ FILE: projects/request-timeouts-middleware/build.bat ================================================ dotnet build request-timeout dotnet build request-timeout-2 dotnet build request-timeout-3 dotnet build request-timeout-4 dotnet build request-timeout-5 dotnet build request-timeout-6 ================================================ FILE: projects/request-timeouts-middleware/build.sh ================================================ #!/bin/bash dotnet build request-timeout dotnet build request-timeout-2 dotnet build request-timeout-3 dotnet build request-timeout-4 dotnet build request-timeout-5 dotnet build request-timeout-6 ================================================ FILE: projects/request-timeouts-middleware/readme.md ================================================ # Request Timeout * [Request Timeout](request-timeout) This sample demonstrates how to configure a request timeout in Minimal API. * [Request Timeout Policy](request-timeout-2) Trigger exception on a timeout using `HttpContext.RequestAborted.ThrowIfCancellationRequested()` on a timeout that was specified using a named policy in Minimal API. * [Request Timeout Policy](request-timeout-3) Trigger exception on a timeout using `HttpContext.RequestAborted.ThrowIfCancellationRequested()` on a default timeout policy in Minimal API. * [Request Timeout](request-timeout-4) Use `RequestTimeout` attribute in an MVC controller to specify when timeout is trigerred. * [Request Timeout](request-timeout-5) Use `RequestTimeout` attribute in an MVC controller to use a named policy. * [Request Timeout](request-timeout-6) Use default timeout policy in an MVC controller. dotnet8 ================================================ FILE: projects/request-timeouts-middleware/request-timeout/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRequestTimeouts(); var app = builder.Build(); app.UseRequestTimeouts(); app.MapGet("/", async (HttpContext context) => { await Task.Delay(TimeSpan.FromSeconds(2)); if (context.RequestAborted.IsCancellationRequested) return Results.Content("timeout", "text/plain"); return Results.Content(""" hello world """, "text/html"); }).WithRequestTimeout(TimeSpan.FromSeconds(1)); app.Run(); ================================================ FILE: projects/request-timeouts-middleware/request-timeout/README.md ================================================ # Enable timeout Use `AddRequestTimeouts` to enable timeout functionality in your endpoints. Check `HttpContext.RequestAborted.IsCancellationRequested` to see if the request has timed out. ================================================ FILE: projects/request-timeouts-middleware/request-timeout/request-timeout.csproj ================================================ net10.0 true ================================================ FILE: projects/request-timeouts-middleware/request-timeout-2/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRequestTimeouts(options => { options.AddPolicy("quick", new Microsoft.AspNetCore.Http.Timeouts.RequestTimeoutPolicy { Timeout = TimeSpan.FromSeconds(1), TimeoutStatusCode = 200, WriteTimeoutResponse = async (HttpContext context) => { context.Response.ContentType = "text/plain"; await context.Response.WriteAsync("timeout is triggered"); } }); }); var app = builder.Build(); app.UseRequestTimeouts(); app.MapGet("/", async (HttpContext context) => { await Task.Delay(TimeSpan.FromSeconds(2)); context.RequestAborted.ThrowIfCancellationRequested(); return Results.Content(""" hello world """, "text/html"); }).WithRequestTimeout("quick"); app.Run(); ================================================ FILE: projects/request-timeouts-middleware/request-timeout-2/README.md ================================================ # Named timeout policy Trigger exception on a timeout using `HttpContext.RequestAborted.ThrowIfCancellationRequested()` on a timeout that was specified using a named policy. ================================================ FILE: projects/request-timeouts-middleware/request-timeout-2/request-timeout-2.csproj ================================================ net10.0 true ================================================ FILE: projects/request-timeouts-middleware/request-timeout-3/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddRequestTimeouts(options => { options.DefaultPolicy = new Microsoft.AspNetCore.Http.Timeouts.RequestTimeoutPolicy { Timeout = TimeSpan.FromSeconds(1), TimeoutStatusCode = 200, WriteTimeoutResponse = async (HttpContext context) => { context.Response.ContentType = "text/plain"; await context.Response.WriteAsync("timeout is triggered"); } }; }); var app = builder.Build(); app.UseRequestTimeouts(); app.MapGet("/", async (HttpContext context) => { await Task.Delay(TimeSpan.FromSeconds(2)); context.RequestAborted.ThrowIfCancellationRequested(); return Results.Content(""" hello world """, "text/html"); }); app.Run(); ================================================ FILE: projects/request-timeouts-middleware/request-timeout-3/README.md ================================================ # Default timeout policy Trigger exception on a timeout using `HttpContext.RequestAborted.ThrowIfCancellationRequested()` on a default timeout policy. ================================================ FILE: projects/request-timeouts-middleware/request-timeout-3/request-timeout-3.csproj ================================================ net10.0 true ================================================ FILE: projects/request-timeouts-middleware/request-timeout-3/request-timeout-3.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "request-timeout-3", "request-timeout-3.csproj", "{3A11F546-ED08-406A-937F-7F936C3576C4}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {3A11F546-ED08-406A-937F-7F936C3576C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3A11F546-ED08-406A-937F-7F936C3576C4}.Debug|Any CPU.Build.0 = Debug|Any CPU {3A11F546-ED08-406A-937F-7F936C3576C4}.Release|Any CPU.ActiveCfg = Release|Any CPU {3A11F546-ED08-406A-937F-7F936C3576C4}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {B450A42C-0D5C-470F-9C2D-63D98D0102CD} EndGlobalSection EndGlobal ================================================ FILE: projects/request-timeouts-middleware/request-timeout-4/Program.cs ================================================ using Microsoft.AspNetCore.Http.Timeouts; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllers(); builder.Services.AddRequestTimeouts(); var app = builder.Build(); app.UseRequestTimeouts(); app.MapControllers(); app.Run(); public class HomeController : ControllerBase { [HttpGet("/")] [RequestTimeout(milliseconds: 1)] public async Task Index() { await Task.Delay(100); HttpContext.RequestAborted.ThrowIfCancellationRequested(); return Ok("Hello World!"); } } ================================================ FILE: projects/request-timeouts-middleware/request-timeout-4/README.md ================================================ # Use RequestTimeout attribute in MVC Use `RequestTimeout` attribute to specify how many milliseconds a time out will be trigerred. ================================================ FILE: projects/request-timeouts-middleware/request-timeout-4/request-timeout-4.csproj ================================================ net10.0 true ================================================ FILE: projects/request-timeouts-middleware/request-timeout-4/request-timeout-4.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "request-timeout-4", "request-timeout-4.csproj", "{82B2E0B5-E009-4F7C-AEDA-AB3DD2A50101}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {82B2E0B5-E009-4F7C-AEDA-AB3DD2A50101}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {82B2E0B5-E009-4F7C-AEDA-AB3DD2A50101}.Debug|Any CPU.Build.0 = Debug|Any CPU {82B2E0B5-E009-4F7C-AEDA-AB3DD2A50101}.Release|Any CPU.ActiveCfg = Release|Any CPU {82B2E0B5-E009-4F7C-AEDA-AB3DD2A50101}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {7FD5CF14-91DD-4569-AD32-DE58589AC66C} EndGlobalSection EndGlobal ================================================ FILE: projects/request-timeouts-middleware/request-timeout-5/Program.cs ================================================ using Microsoft.AspNetCore.Http.Timeouts; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllers(); builder.Services.AddRequestTimeouts(options => { options.AddPolicy("quick",new Microsoft.AspNetCore.Http.Timeouts.RequestTimeoutPolicy { Timeout = TimeSpan.FromMilliseconds(1), TimeoutStatusCode = 200, WriteTimeoutResponse = async (HttpContext context) => { context.Response.ContentType = "text/plain"; await context.Response.WriteAsync("timeout is triggered"); } }); }); var app = builder.Build(); app.UseRequestTimeouts(); app.MapControllers(); app.Run(); public class HomeController : ControllerBase { [HttpGet("/")] [RequestTimeout("quick")] public async Task Index() { await Task.Delay(100); HttpContext.RequestAborted.ThrowIfCancellationRequested(); return Ok("Hello World!"); } } ================================================ FILE: projects/request-timeouts-middleware/request-timeout-5/README.md ================================================ # Use RequestTimeout attribute in MVC Use `RequestTimeout` attribute to specify which timeout policy to use. ================================================ FILE: projects/request-timeouts-middleware/request-timeout-5/request-timeout-5.csproj ================================================ net10.0 true ================================================ FILE: projects/request-timeouts-middleware/request-timeout-5/request-timeout-5.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "request-timeout-5", "request-timeout-5.csproj", "{79DB68DC-DFD0-4377-8092-51CB6132F18C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {79DB68DC-DFD0-4377-8092-51CB6132F18C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {79DB68DC-DFD0-4377-8092-51CB6132F18C}.Debug|Any CPU.Build.0 = Debug|Any CPU {79DB68DC-DFD0-4377-8092-51CB6132F18C}.Release|Any CPU.ActiveCfg = Release|Any CPU {79DB68DC-DFD0-4377-8092-51CB6132F18C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {6A9E03E9-E1BE-4884-A2D2-AFDF8A2F4AA5} EndGlobalSection EndGlobal ================================================ FILE: projects/request-timeouts-middleware/request-timeout-6/Program.cs ================================================ using Microsoft.AspNetCore.Http.Timeouts; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllers(); builder.Services.AddRequestTimeouts(options => { options.DefaultPolicy = new Microsoft.AspNetCore.Http.Timeouts.RequestTimeoutPolicy { Timeout = TimeSpan.FromMilliseconds(1), TimeoutStatusCode = 200, WriteTimeoutResponse = async (HttpContext context) => { context.Response.ContentType = "text/plain"; await context.Response.WriteAsync("timeout is triggered"); } }; }); var app = builder.Build(); app.UseRequestTimeouts(); app.MapControllers(); app.Run(); public class HomeController : ControllerBase { [HttpGet("/")] public async Task Index() { await Task.Delay(100); HttpContext.RequestAborted.ThrowIfCancellationRequested(); return Ok("Hello World!"); } } ================================================ FILE: projects/request-timeouts-middleware/request-timeout-6/README.md ================================================ # Rely on default timeout policy on MVC This sample shows on how to use default timeout policy on MVC. There is no need to specify `RequestTimeout` attribute. ================================================ FILE: projects/request-timeouts-middleware/request-timeout-6/request-timeout-6.csproj ================================================ net10.0 true ================================================ FILE: projects/request-timeouts-middleware/request-timeout-6/request-timeout-6.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "request-timeout-6", "request-timeout-6.csproj", "{9197264F-FB0C-4498-BB16-8EAC6B5D82BA}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {9197264F-FB0C-4498-BB16-8EAC6B5D82BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9197264F-FB0C-4498-BB16-8EAC6B5D82BA}.Debug|Any CPU.Build.0 = Debug|Any CPU {9197264F-FB0C-4498-BB16-8EAC6B5D82BA}.Release|Any CPU.ActiveCfg = Release|Any CPU {9197264F-FB0C-4498-BB16-8EAC6B5D82BA}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {C27BA2BF-56AA-42AF-B03E-59ECFB01A627} EndGlobalSection EndGlobal ================================================ FILE: projects/response/README.md ================================================ # Response (3) * [Adding HTTP Response Header](/projects/response/response-header) Demonstrate on how to add a response header and where is allowed place to do it. * [Default Gzip Output Compression](/projects/response/compression-response) Compress everything using the default Gzip compression. _Everything_ means the following MIME output * text/plain * text/css * application/javascript * text/html * application/xml * text/xml * application/json * text/json * [Trailing headers](/projects/response/trailing-headers) This example shows how to issue trailing HTTP headers. Normal HTTP headers must be issued before body of the HTTP Response starts being written. Trailing headers allows you to issue headers after the HTTP body has been written. dotnet8 ================================================ FILE: projects/response/build.bat ================================================ dotnet build compression-response dotnet build response-header dotnet build trailing-headers ================================================ FILE: projects/response/build.sh ================================================ #!/bin/bash dotnet build compression-response dotnet build response-header dotnet build trailing-headers ================================================ FILE: projects/response/compression-response/Program.cs ================================================ using Microsoft.Net.Http.Headers; using Microsoft.Extensions.Primitives; var builder = WebApplication.CreateBuilder(); builder.Services.AddResponseCompression(); var app = builder.Build(); app.UseResponseCompression(); app.Run(async context => { var accept = context.Request.Headers[HeaderNames.AcceptEncoding]; if (!StringValues.IsNullOrEmpty(accept)) { context.Response.Headers.Append(HeaderNames.Vary, HeaderNames.AcceptEncoding); } context.Response.ContentType = "text/plain"; await context.Response.WriteAsync(@"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?"); }); app.Run(); ================================================ FILE: projects/response/compression-response/compression-response.csproj ================================================ net10.0 true ================================================ FILE: projects/response/response-header/Program.cs ================================================ var app = WebApplication.Create(); app.Run(async context => { context.Response.Headers.Append("content-type", "text/html"); await context.Response.WriteAsync("Hello world"); try { context.Response.Headers.Append("my-header", "awesome"); } catch (Exception ex) { await context.Response.WriteAsync($"

              You cannot modify header collections after the body is sent already. Exception: {ex.Message}"); } }); app.Run(); ================================================ FILE: projects/response/response-header/response-header.csproj ================================================ net10.0 true ================================================ FILE: projects/response/trailing-headers/Program.cs ================================================ using System.Diagnostics; using Microsoft.AspNetCore.Server.Kestrel.Core; using System.Net; var builder = WebApplication.CreateBuilder(); builder.Services.AddHttpClient(); builder.WebHost.ConfigureKestrel(k => k.Listen(IPAddress.Any, 5000, listenOptions => { listenOptions.Protocols = HttpProtocols.Http1AndHttp2; listenOptions.UseHttps(); }) ); var app = builder.Build(); //We need this switch because we are connecting to an unsecure server. If the server runs on SSL, there's no need for this switch. app.Run(async context => { bool supportTrailers = context.Response.SupportsTrailers(); Stopwatch watch = null; if (supportTrailers) { context.Response.DeclareTrailer("Server-Timing"); watch = new Stopwatch(); } watch?.Start(); var httpFactory = context.RequestServices.GetService(); var httpClient = httpFactory.CreateClient(); using var response = await httpClient.GetStreamAsync("http://histo.io/"); context.Response.Headers.Append("Content-Type", "text/html"); await response.CopyToAsync(context.Response.Body); watch?.Stop(); if (supportTrailers) { Console.WriteLine("Server-Timing " + watch.ElapsedMilliseconds + " ms."); //You won't be able to see this in any browser dev tools context.Response.AppendTrailer("Server-Timing", $"practical-aspnet-core;dur={watch.ElapsedMilliseconds}.0"); } }); app.Run(); ================================================ FILE: projects/response/trailing-headers/README.MD ================================================ # Trailing Headers This example shows how to issue trailing HTTP headers. Normal HTTP headers must be issued before body of the HTTP Response starts being written. Trailing headers allows you to issue headers after the HTTP body has been written. Open the sample at https://localhost:5000 and open your browser dev tools. You will be able to see the trailer header being issued but not its content. ================================================ FILE: projects/response/trailing-headers/trailing-headers.csproj ================================================ net10.0 true ================================================ FILE: projects/restore.bat ================================================ @REM dotnet restore 5-0\hello-world dotnet restore anonymous-id dotnet restore application-environment dotnet restore basic\hello-world dotnet restore basic\hello-world-2 dotnet restore basic\i-host-environment dotnet restore basic\i-webhost-environment dotnet restore basic\iconfiguration dotnet restore bedrock\echo\client dotnet restore bedrock\echo\server dotnet restore blazor\Component dotnet restore blazor\ComponentEight dotnet restore blazor\ComponentEleven dotnet restore blazor\ComponentFifteen dotnet restore blazor\ComponentFive dotnet restore blazor\ComponentFour dotnet restore blazor\ComponentFourteen dotnet restore blazor\ComponentNine dotnet restore blazor\ComponentSeven dotnet restore blazor\ComponentSix dotnet restore blazor\ComponentTen dotnet restore blazor\ComponentThirteen dotnet restore blazor\ComponentThree dotnet restore blazor\ComponentTwelve dotnet restore blazor\ComponentTwo dotnet restore blazor\DataBinding dotnet restore blazor\DataBindingTwo dotnet restore blazor\HelloWorld dotnet restore blazor-ss\ChatR dotnet restore blazor-ss\Chatter dotnet restore blazor-ss\DependencyInjection dotnet restore blazor-ss\HelloWorld dotnet restore blazor-ss\JsIntegration dotnet restore blazor-ss\Layout dotnet restore blazor-ss\MultiApps\App1 dotnet restore blazor-ss\MultiApps\App2 dotnet restore blazor-ss\MultiApps\AppHost dotnet restore blazor-ss\RssReader dotnet restore blazor-ss\RssReader-2 dotnet restore blazor-ss\StartingVariation dotnet restore caching\caching-1 dotnet restore caching\caching-2 dotnet restore caching\caching-3 dotnet restore caching\caching-4 dotnet restore caching\redis-cache dotnet restore configurations\configuration-1 dotnet restore configurations\configuration-environment-variables dotnet restore configurations\configuration-ini dotnet restore configurations\configuration-ini-options dotnet restore configurations\configuration-options dotnet restore configurations\configuration-xml dotnet restore configurations\configuration-xml-options dotnet restore connection-info dotnet restore dependency-injection\dependency-injection-1 dotnet restore dependency-injection\dependency-injection-3 dotnet restore device-detection dotnet restore diagnostics\diagnostics-1 dotnet restore diagnostics\diagnostics-2 dotnet restore diagnostics\diagnostics-3 dotnet restore diagnostics\diagnostics-4 dotnet restore diagnostics\diagnostics-5 dotnet restore diagnostics\diagnostics-6 dotnet restore endpoint-routing\endpoint-routing dotnet restore endpoint-routing\endpoint-routing-2 dotnet restore endpoint-routing\endpoint-routing-3 dotnet restore endpoint-routing\endpoint-routing-4 dotnet restore endpoint-routing\endpoint-routing-5 dotnet restore endpoint-routing\endpoint-routing-6 dotnet restore endpoint-routing\new-routing dotnet restore endpoint-routing\new-routing-10 dotnet restore endpoint-routing\new-routing-11 dotnet restore endpoint-routing\new-routing-12 dotnet restore endpoint-routing\new-routing-13 dotnet restore endpoint-routing\new-routing-14 dotnet restore endpoint-routing\new-routing-15 dotnet restore endpoint-routing\new-routing-16 dotnet restore endpoint-routing\new-routing-17 dotnet restore endpoint-routing\new-routing-18 dotnet restore endpoint-routing\new-routing-19 dotnet restore endpoint-routing\new-routing-2 dotnet restore endpoint-routing\new-routing-20 dotnet restore endpoint-routing\new-routing-21 dotnet restore endpoint-routing\new-routing-22 dotnet restore endpoint-routing\new-routing-23 dotnet restore endpoint-routing\new-routing-24 dotnet restore endpoint-routing\new-routing-25 dotnet restore endpoint-routing\new-routing-26 dotnet restore endpoint-routing\new-routing-27 dotnet restore endpoint-routing\new-routing-28 dotnet restore endpoint-routing\new-routing-29 dotnet restore endpoint-routing\new-routing-3 dotnet restore endpoint-routing\new-routing-30 dotnet restore endpoint-routing\new-routing-4 dotnet restore endpoint-routing\new-routing-5 dotnet restore endpoint-routing\new-routing-6 dotnet restore endpoint-routing\new-routing-7 dotnet restore endpoint-routing\new-routing-8 dotnet restore endpoint-routing\new-routing-9 dotnet restore endpoint-routing\parameter-transformer dotnet restore features\features-connection dotnet restore features\features-http-body-response dotnet restore features\features-max-request-body-size dotnet restore features\features-request-culture dotnet restore features\features-server-addresses dotnet restore features\features-server-addresses-2 dotnet restore features\features-server-custom dotnet restore features\features-server-custom-override dotnet restore features\features-server-request dotnet restore features\features-session dotnet restore features\features-session-redis-2 dotnet restore file-provider\file-provider-custom dotnet restore file-provider\file-provider-physical dotnet restore file-provider\serve-static-files-1 dotnet restore file-provider\serve-static-files-2 dotnet restore file-provider\serve-static-files-3 dotnet restore file-provider\serve-static-files-4 dotnet restore file-provider\serve-static-files-5 dotnet restore file-provider\serve-static-files-6 dotnet restore generic-host\generic-host-1 dotnet restore generic-host\generic-host-2 dotnet restore generic-host\generic-host-3 dotnet restore generic-host\generic-host-4 dotnet restore generic-host\generic-host-5 dotnet restore generic-host\generic-host-configure-app dotnet restore generic-host\generic-host-configure-host dotnet restore generic-host\generic-host-configure-logging dotnet restore generic-host\generic-host-environment dotnet restore generic-host\generic-host-ihostapplicationlifetime dotnet restore grpc\grpc\client dotnet restore grpc\grpc\server dotnet restore grpc\grpc-10\client dotnet restore grpc\grpc-10\server dotnet restore grpc\grpc-11\client dotnet restore grpc\grpc-11\server dotnet restore grpc\grpc-2\client dotnet restore grpc\grpc-2\server dotnet restore grpc\grpc-3\client dotnet restore grpc\grpc-3\server dotnet restore grpc\grpc-4\client dotnet restore grpc\grpc-4\server dotnet restore grpc\grpc-5\client dotnet restore grpc\grpc-5\server dotnet restore grpc\grpc-6\client dotnet restore grpc\grpc-6\server dotnet restore grpc\grpc-7\client dotnet restore grpc\grpc-7\server dotnet restore grpc\grpc-8\client dotnet restore grpc\grpc-8\server dotnet restore grpc\grpc-9\client dotnet restore grpc\grpc-9\server dotnet restore health-check\health-check-1 dotnet restore health-check\health-check-2 dotnet restore health-check\health-check-3 dotnet restore health-check\health-check-4 dotnet restore health-check\health-check-5 dotnet restore health-check\health-check-6 dotnet restore http-status-codes dotnet restore httpclientfactory\httpclientfactory-1 dotnet restore httpclientfactory\httpclientfactory-2 dotnet restore httpclientfactory\httpclientfactory-3 dotnet restore httpclientfactory\httpclientfactory-4 dotnet restore i-application-lifetime dotnet restore ihosted-service\ihosted-service-1 dotnet restore image-sharp dotnet restore json\json dotnet restore json\json-2 dotnet restore json\json-3 dotnet restore json\json-4 dotnet restore json\json-5 dotnet restore json\json-6 dotnet restore json\json-7 dotnet restore json\json-8 dotnet restore json\json-9 dotnet restore localization\localization-1 dotnet restore localization\localization-2 dotnet restore localization\localization-3 dotnet restore localization\localization-4 dotnet restore localization\localization-5 dotnet restore localization\localization-6 dotnet restore logging\logging-1 dotnet restore logging\logging-2 dotnet restore mailkit\mailkit-1 dotnet restore mailkit\mailkit-2 dotnet restore markdown-server dotnet restore markdown-server-middleware dotnet restore media-type-names dotnet restore media-type-names-2 dotnet restore middleware\middleware-0 dotnet restore middleware\middleware-1 dotnet restore middleware\middleware-10 dotnet restore middleware\middleware-11 dotnet restore middleware\middleware-12 dotnet restore middleware\middleware-2 dotnet restore middleware\middleware-3 dotnet restore middleware\middleware-4 dotnet restore middleware\middleware-5 dotnet restore middleware\middleware-6 dotnet restore middleware\middleware-7 dotnet restore middleware\middleware-8 dotnet restore middleware\middleware-9 dotnet restore mvc\api-problem-details dotnet restore mvc\api-problem-details-2 dotnet restore mvc\api-versioning dotnet restore mvc\hello-world dotnet restore mvc\jwt dotnet restore mvc\localization\mvc-localization-1 dotnet restore mvc\localization\mvc-localization-2 dotnet restore mvc\localization\mvc-localization-3 dotnet restore mvc\localization\mvc-localization-4 dotnet restore mvc\localization\mvc-localization-5 dotnet restore mvc\localization\mvc-localization-6 dotnet restore mvc\localization\mvc-localization-7\src\ProjectWithResources dotnet restore mvc\localization\mvc-localization-7\src\Web dotnet restore mvc\localization\mvc-localization-8 dotnet restore mvc\localization\mvc-localization-9 dotnet restore mvc\model-binding-from-query dotnet restore mvc\model-binding-from-route dotnet restore mvc\mvc-output-xml dotnet restore mvc\nswag dotnet restore mvc\nswag-2 dotnet restore mvc\output-formatter-syndication dotnet restore mvc\razor-class-library\razor-class-library-1\src\RazorClassLibrary1 dotnet restore mvc\razor-class-library\razor-class-library-1\src\RazorClassLibrary2 dotnet restore mvc\razor-class-library\razor-class-library-1\src\WebApplication dotnet restore mvc\razor-class-library\razor-class-library-with-controllers\src\RazorClassLibrary1 dotnet restore mvc\razor-class-library\razor-class-library-with-controllers\src\WebApplication dotnet restore mvc\razor-class-library\razor-class-library-with-static-files\src\RazorClassLibraries.Mvc.Core dotnet restore mvc\razor-class-library\razor-class-library-with-static-files\src\RazorClassLibrary1 dotnet restore mvc\razor-class-library\razor-class-library-with-static-files\src\RazorClassLibrary2 dotnet restore mvc\razor-class-library\razor-class-library-with-static-files\src\WebApplication dotnet restore mvc\result-filestream dotnet restore mvc\result-physicalfile dotnet restore mvc\routing\routing-1 dotnet restore mvc\routing\routing-2 dotnet restore mvc\routing\routing-3 dotnet restore mvc\routing\routing-4 dotnet restore mvc\routing\routing-5 dotnet restore mvc\routing\routing-6 dotnet restore mvc\routing\routing-7 dotnet restore mvc\routing\routing-8 dotnet restore mvc\routing\routing-9 dotnet restore mvc\tag-helper\tag-helper-1 dotnet restore mvc\tag-helper\tag-helper-2 dotnet restore mvc\tag-helper\tag-helper-3 dotnet restore mvc\tag-helper\tag-helper-4 dotnet restore mvc\tag-helper\tag-helper-5 dotnet restore mvc\tag-helper\tag-helper-img dotnet restore mvc\tag-helper\tag-helper-link dotnet restore mvc\utf8json-formatter dotnet restore mvc\view-component\view-component-1 dotnet restore mvc\view-component\view-component-2 dotnet restore mvc\view-component\view-component-3 dotnet restore mvc\view-component\view-component-4 dotnet restore newtonsoft-json dotnet restore orchard-core\multi-tenant\Host dotnet restore orchard-core\routing\ForumModule dotnet restore orchard-core\routing\Host dotnet restore orchard-core\routing\TicketModule dotnet restore orchard-core\routing-2\ForumModule dotnet restore orchard-core\routing-2\Host dotnet restore orchard-core\routing-2\TicketModule dotnet restore orchard-core\static-files\ForumModule dotnet restore orchard-core\static-files\Host dotnet restore password-hasher dotnet restore razor-pages\custom-html-generator dotnet restore razor-pages\hello-world dotnet restore razor-pages\razor\razor-1 dotnet restore razor-pages\razor\razor-2 dotnet restore razor-pages\razor-pages-basic dotnet restore razor-pages\razor-pages-mvc dotnet restore razor-pages\routing dotnet restore razor-pages\routing-2 dotnet restore request\anti-forgery dotnet restore request\cookies-1 dotnet restore request\cookies-2 dotnet restore request\form-upload-file dotnet restore request\form-values dotnet restore request\query-string-1 dotnet restore request\query-string-2 dotnet restore request\query-string-3 dotnet restore request\request-headers dotnet restore request\request-headers-names dotnet restore request\request-headers-typed dotnet restore request\request-verb dotnet restore response\compression-response dotnet restore response\response-buffering dotnet restore response\response-header dotnet restore response\trailing-headers dotnet restore rewrite\rewrite-1 dotnet restore rewrite\rewrite-2 dotnet restore rewrite\rewrite-3 dotnet restore rewrite\rewrite-4 dotnet restore rewrite\rewrite-5 dotnet restore rewrite\rewrite-6 dotnet restore security\authentication-with-identity\src dotnet restore signalr\signalr-1\Client dotnet restore signalr\signalr-1\Server dotnet restore sse dotnet restore startup\env-development dotnet restore startup\no-startup dotnet restore startup\startup-basic dotnet restore startup\startup-basic-multiple dotnet restore startup\startup-basic-multiple-environment dotnet restore startup\startup-basic-multiple-urls dotnet restore startup\startup-capture-errors dotnet restore startup\startup-custom-name dotnet restore startup\startup-istartupfilter dotnet restore startup\startup-multiple-configure-environment dotnet restore startup\startup-multiple-configure-environment-services dotnet restore startup\suppress-status-messages dotnet restore syndications\syndication-1 dotnet restore syndications\syndication-2 dotnet restore syndications\syndication-3 dotnet restore uri-helper\uri-helper-build-absolute dotnet restore uri-helper\uri-helper-from-absolute dotnet restore uri-helper\uri-helper-get-display-url dotnet restore uri-helper\uri-helper-get-encoded-path-and-query dotnet restore uri-helper\uri-helper-get-encoded-url dotnet restore version dotnet restore web-sockets\web-sockets-1 dotnet restore web-sockets\web-sockets-2 dotnet restore web-sockets\web-sockets-3 dotnet restore web-sockets\web-sockets-4 dotnet restore web-sockets\web-sockets-5 dotnet restore web-utilities\web-utilities-query-helpers dotnet restore web-utilities\web-utilities-query-helpers-2 dotnet restore web-utilities\web-utilities-reason-phrases ================================================ FILE: projects/restore.sh ================================================ #!/bin/bash # dotnet restore 5-0/hello-world dotnet restore anonymous-id dotnet restore application-environment dotnet restore basic/hello-world dotnet restore basic/hello-world-2 dotnet restore basic/i-host-environment dotnet restore basic/i-webhost-environment dotnet restore basic/iconfiguration dotnet restore bedrock/echo/client dotnet restore bedrock/echo/server dotnet restore blazor/Component dotnet restore blazor/ComponentEight dotnet restore blazor/ComponentEleven dotnet restore blazor/ComponentFifteen dotnet restore blazor/ComponentFive dotnet restore blazor/ComponentFour dotnet restore blazor/ComponentFourteen dotnet restore blazor/ComponentNine dotnet restore blazor/ComponentSeven dotnet restore blazor/ComponentSix dotnet restore blazor/ComponentTen dotnet restore blazor/ComponentThirteen dotnet restore blazor/ComponentThree dotnet restore blazor/ComponentTwelve dotnet restore blazor/ComponentTwo dotnet restore blazor/DataBinding dotnet restore blazor/DataBindingTwo dotnet restore blazor/HelloWorld dotnet restore blazor-ss/ChatR dotnet restore blazor-ss/Chatter dotnet restore blazor-ss/DependencyInjection dotnet restore blazor-ss/HelloWorld dotnet restore blazor-ss/JsIntegration dotnet restore blazor-ss/Layout dotnet restore blazor-ss/MultiApps/App1 dotnet restore blazor-ss/MultiApps/App2 dotnet restore blazor-ss/MultiApps/AppHost dotnet restore blazor-ss/RssReader dotnet restore blazor-ss/RssReader-2 dotnet restore blazor-ss/StartingVariation dotnet restore caching/caching-1 dotnet restore caching/caching-2 dotnet restore caching/caching-3 dotnet restore caching/caching-4 dotnet restore caching/redis-cache dotnet restore configurations/configuration-1 dotnet restore configurations/configuration-environment-variables dotnet restore configurations/configuration-ini dotnet restore configurations/configuration-ini-options dotnet restore configurations/configuration-options dotnet restore configurations/configuration-xml dotnet restore configurations/configuration-xml-options dotnet restore connection-info dotnet restore dependency-injection/dependency-injection-1 dotnet restore dependency-injection/dependency-injection-3 dotnet restore device-detection dotnet restore diagnostics/diagnostics-1 dotnet restore diagnostics/diagnostics-2 dotnet restore diagnostics/diagnostics-3 dotnet restore diagnostics/diagnostics-4 dotnet restore diagnostics/diagnostics-5 dotnet restore diagnostics/diagnostics-6 dotnet restore endpoint-routing/endpoint-routing dotnet restore endpoint-routing/endpoint-routing-2 dotnet restore endpoint-routing/endpoint-routing-3 dotnet restore endpoint-routing/endpoint-routing-4 dotnet restore endpoint-routing/endpoint-routing-5 dotnet restore endpoint-routing/endpoint-routing-6 dotnet restore endpoint-routing/new-routing dotnet restore endpoint-routing/new-routing-10 dotnet restore endpoint-routing/new-routing-11 dotnet restore endpoint-routing/new-routing-12 dotnet restore endpoint-routing/new-routing-13 dotnet restore endpoint-routing/new-routing-14 dotnet restore endpoint-routing/new-routing-15 dotnet restore endpoint-routing/new-routing-16 dotnet restore endpoint-routing/new-routing-17 dotnet restore endpoint-routing/new-routing-18 dotnet restore endpoint-routing/new-routing-19 dotnet restore endpoint-routing/new-routing-2 dotnet restore endpoint-routing/new-routing-20 dotnet restore endpoint-routing/new-routing-21 dotnet restore endpoint-routing/new-routing-22 dotnet restore endpoint-routing/new-routing-23 dotnet restore endpoint-routing/new-routing-24 dotnet restore endpoint-routing/new-routing-25 dotnet restore endpoint-routing/new-routing-26 dotnet restore endpoint-routing/new-routing-27 dotnet restore endpoint-routing/new-routing-28 dotnet restore endpoint-routing/new-routing-29 dotnet restore endpoint-routing/new-routing-3 dotnet restore endpoint-routing/new-routing-30 dotnet restore endpoint-routing/new-routing-4 dotnet restore endpoint-routing/new-routing-5 dotnet restore endpoint-routing/new-routing-6 dotnet restore endpoint-routing/new-routing-7 dotnet restore endpoint-routing/new-routing-8 dotnet restore endpoint-routing/new-routing-9 dotnet restore endpoint-routing/parameter-transformer dotnet restore features/features-connection dotnet restore features/features-http-body-response dotnet restore features/features-max-request-body-size dotnet restore features/features-request-culture dotnet restore features/features-server-addresses dotnet restore features/features-server-addresses-2 dotnet restore features/features-server-custom dotnet restore features/features-server-custom-override dotnet restore features/features-server-request dotnet restore features/features-session dotnet restore features/features-session-redis-2 dotnet restore file-provider/file-provider-custom dotnet restore file-provider/file-provider-physical dotnet restore file-provider/serve-static-files-1 dotnet restore file-provider/serve-static-files-2 dotnet restore file-provider/serve-static-files-3 dotnet restore file-provider/serve-static-files-4 dotnet restore file-provider/serve-static-files-5 dotnet restore file-provider/serve-static-files-6 dotnet restore generic-host/generic-host-1 dotnet restore generic-host/generic-host-2 dotnet restore generic-host/generic-host-3 dotnet restore generic-host/generic-host-4 dotnet restore generic-host/generic-host-5 dotnet restore generic-host/generic-host-configure-app dotnet restore generic-host/generic-host-configure-host dotnet restore generic-host/generic-host-configure-logging dotnet restore generic-host/generic-host-environment dotnet restore generic-host/generic-host-ihostapplicationlifetime dotnet restore grpc/grpc/client dotnet restore grpc/grpc/server dotnet restore grpc/grpc-10/client dotnet restore grpc/grpc-10/server dotnet restore grpc/grpc-11/client dotnet restore grpc/grpc-11/server dotnet restore grpc/grpc-2/client dotnet restore grpc/grpc-2/server dotnet restore grpc/grpc-3/client dotnet restore grpc/grpc-3/server dotnet restore grpc/grpc-4/client dotnet restore grpc/grpc-4/server dotnet restore grpc/grpc-5/client dotnet restore grpc/grpc-5/server dotnet restore grpc/grpc-6/client dotnet restore grpc/grpc-6/server dotnet restore grpc/grpc-7/client dotnet restore grpc/grpc-7/server dotnet restore grpc/grpc-8/client dotnet restore grpc/grpc-8/server dotnet restore grpc/grpc-9/client dotnet restore grpc/grpc-9/server dotnet restore health-check/health-check-1 dotnet restore health-check/health-check-2 dotnet restore health-check/health-check-3 dotnet restore health-check/health-check-4 dotnet restore health-check/health-check-5 dotnet restore health-check/health-check-6 dotnet restore http-status-codes dotnet restore httpclientfactory/httpclientfactory-1 dotnet restore httpclientfactory/httpclientfactory-2 dotnet restore httpclientfactory/httpclientfactory-3 dotnet restore httpclientfactory/httpclientfactory-4 dotnet restore i-application-lifetime dotnet restore ihosted-service/ihosted-service-1 dotnet restore image-sharp dotnet restore json/json dotnet restore json/json-2 dotnet restore json/json-3 dotnet restore json/json-4 dotnet restore json/json-5 dotnet restore json/json-6 dotnet restore json/json-7 dotnet restore json/json-8 dotnet restore json/json-9 dotnet restore localization/localization-1 dotnet restore localization/localization-2 dotnet restore localization/localization-3 dotnet restore localization/localization-4 dotnet restore localization/localization-5 dotnet restore localization/localization-6 dotnet restore logging/logging-1 dotnet restore logging/logging-2 dotnet restore mailkit/mailkit-1 dotnet restore mailkit/mailkit-2 dotnet restore markdown-server dotnet restore markdown-server-middleware dotnet restore media-type-names dotnet restore media-type-names-2 dotnet restore middleware/middleware-0 dotnet restore middleware/middleware-1 dotnet restore middleware/middleware-10 dotnet restore middleware/middleware-11 dotnet restore middleware/middleware-12 dotnet restore middleware/middleware-2 dotnet restore middleware/middleware-3 dotnet restore middleware/middleware-4 dotnet restore middleware/middleware-5 dotnet restore middleware/middleware-6 dotnet restore middleware/middleware-7 dotnet restore middleware/middleware-8 dotnet restore middleware/middleware-9 dotnet restore mvc/api-problem-details dotnet restore mvc/api-problem-details-2 dotnet restore mvc/api-versioning dotnet restore mvc/hello-world dotnet restore mvc/jwt dotnet restore mvc/localization/mvc-localization-1 dotnet restore mvc/localization/mvc-localization-2 dotnet restore mvc/localization/mvc-localization-3 dotnet restore mvc/localization/mvc-localization-4 dotnet restore mvc/localization/mvc-localization-5 dotnet restore mvc/localization/mvc-localization-6 dotnet restore mvc/localization/mvc-localization-7/src/ProjectWithResources dotnet restore mvc/localization/mvc-localization-7/src/Web dotnet restore mvc/localization/mvc-localization-8 dotnet restore mvc/localization/mvc-localization-9 dotnet restore mvc/model-binding-from-query dotnet restore mvc/model-binding-from-route dotnet restore mvc/mvc-output-xml dotnet restore mvc/nswag dotnet restore mvc/nswag-2 dotnet restore mvc/output-formatter-syndication dotnet restore mvc/razor-class-library/razor-class-library-1/src/RazorClassLibrary1 dotnet restore mvc/razor-class-library/razor-class-library-1/src/RazorClassLibrary2 dotnet restore mvc/razor-class-library/razor-class-library-1/src/WebApplication dotnet restore mvc/razor-class-library/razor-class-library-with-controllers/src/RazorClassLibrary1 dotnet restore mvc/razor-class-library/razor-class-library-with-controllers/src/WebApplication dotnet restore mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibraries.Mvc.Core dotnet restore mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary1 dotnet restore mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary2 dotnet restore mvc/razor-class-library/razor-class-library-with-static-files/src/WebApplication dotnet restore mvc/result-filestream dotnet restore mvc/result-physicalfile dotnet restore mvc/routing/routing-1 dotnet restore mvc/routing/routing-2 dotnet restore mvc/routing/routing-3 dotnet restore mvc/routing/routing-4 dotnet restore mvc/routing/routing-5 dotnet restore mvc/routing/routing-6 dotnet restore mvc/routing/routing-7 dotnet restore mvc/routing/routing-8 dotnet restore mvc/routing/routing-9 dotnet restore mvc/tag-helper/tag-helper-1 dotnet restore mvc/tag-helper/tag-helper-2 dotnet restore mvc/tag-helper/tag-helper-3 dotnet restore mvc/tag-helper/tag-helper-4 dotnet restore mvc/tag-helper/tag-helper-5 dotnet restore mvc/tag-helper/tag-helper-img dotnet restore mvc/tag-helper/tag-helper-link dotnet restore mvc/utf8json-formatter dotnet restore mvc/view-component/view-component-1 dotnet restore mvc/view-component/view-component-2 dotnet restore mvc/view-component/view-component-3 dotnet restore mvc/view-component/view-component-4 dotnet restore newtonsoft-json dotnet restore orchard-core/multi-tenant/Host dotnet restore orchard-core/routing/ForumModule dotnet restore orchard-core/routing/Host dotnet restore orchard-core/routing/TicketModule dotnet restore orchard-core/routing-2/ForumModule dotnet restore orchard-core/routing-2/Host dotnet restore orchard-core/routing-2/TicketModule dotnet restore orchard-core/static-files/ForumModule dotnet restore orchard-core/static-files/Host dotnet restore password-hasher dotnet restore razor-pages/custom-html-generator dotnet restore razor-pages/hello-world dotnet restore razor-pages/razor/razor-1 dotnet restore razor-pages/razor/razor-2 dotnet restore razor-pages/razor-pages-basic dotnet restore razor-pages/razor-pages-mvc dotnet restore razor-pages/routing dotnet restore razor-pages/routing-2 dotnet restore request/anti-forgery dotnet restore request/cookies-1 dotnet restore request/cookies-2 dotnet restore request/form-upload-file dotnet restore request/form-values dotnet restore request/query-string-1 dotnet restore request/query-string-2 dotnet restore request/query-string-3 dotnet restore request/request-headers dotnet restore request/request-headers-names dotnet restore request/request-headers-typed dotnet restore request/request-verb dotnet restore response/compression-response dotnet restore response/response-buffering dotnet restore response/response-header dotnet restore response/trailing-headers dotnet restore rewrite/rewrite-1 dotnet restore rewrite/rewrite-2 dotnet restore rewrite/rewrite-3 dotnet restore rewrite/rewrite-4 dotnet restore rewrite/rewrite-5 dotnet restore rewrite/rewrite-6 dotnet restore security/authentication-with-identity/src dotnet restore signalr/signalr-1/Client dotnet restore signalr/signalr-1/Server dotnet restore sse dotnet restore startup/env-development dotnet restore startup/no-startup dotnet restore startup/startup-basic dotnet restore startup/startup-basic-multiple dotnet restore startup/startup-basic-multiple-environment dotnet restore startup/startup-basic-multiple-urls dotnet restore startup/startup-capture-errors dotnet restore startup/startup-custom-name dotnet restore startup/startup-istartupfilter dotnet restore startup/startup-multiple-configure-environment dotnet restore startup/startup-multiple-configure-environment-services dotnet restore startup/suppress-status-messages dotnet restore syndications/syndication-1 dotnet restore syndications/syndication-2 dotnet restore syndications/syndication-3 dotnet restore uri-helper/uri-helper-build-absolute dotnet restore uri-helper/uri-helper-from-absolute dotnet restore uri-helper/uri-helper-get-display-url dotnet restore uri-helper/uri-helper-get-encoded-path-and-query dotnet restore uri-helper/uri-helper-get-encoded-url dotnet restore version dotnet restore web-sockets/web-sockets-1 dotnet restore web-sockets/web-sockets-2 dotnet restore web-sockets/web-sockets-3 dotnet restore web-sockets/web-sockets-4 dotnet restore web-sockets/web-sockets-5 dotnet restore web-utilities/web-utilities-query-helpers dotnet restore web-utilities/web-utilities-query-helpers-2 dotnet restore web-utilities/web-utilities-reason-phrases ================================================ FILE: projects/rewrite/README.md ================================================ # URL Redirect/Rewriting (6) This section explore the dark arts of URL Rewriting * [Rewrite](/projects/rewrite/rewrite-1) Shows the most basic of URL rewriting which will **redirect** (returns [HTTP 302](https://en.wikipedia.org/wiki/HTTP_302)) anything to the home page "/". If you have used routing yet, I recommend of checking out the routing examples. * [Rewrite - 2](/projects/rewrite/rewrite-2) **Redirect** (returns [HTTP 302](https://en.wikipedia.org/wiki/HTTP_302)) anything with an extension e.g. about-us.html or welcome.aspx to home page (/). It also shows how to capture the matched regex values. * [Rewrite - 3](/projects/rewrite/rewrite-3) **Rewrite** anything with an extension e.g. about-us.html or welcome.aspx to home page (/). It also shows how to capture the matched regex values. * [Rewrite - 4](/projects/rewrite/rewrite-4) **Permanent Redirect** (returns [HTTP 301](https://en.wikipedia.org/wiki/HTTP_301)) anything with an extension e.g. about-us.html or welcome.aspx to home page (/). It also shows how to capture the matched regex values. * [Rewrite - 5](/projects/rewrite/rewrite-5) Implement a custom redirect logic based on `IRule` implementation. This custom redirection logic allows us to simply specify the image file names without worrying about their exact path e.g.'xx.jpg' and 'yy.png'. * [Rewrite - 6](/projects/rewrite/rewrite-6) Implement a custom redirect logic using lambda (similar functionality to Rewrite - 5). This custom redirection logic allows us to simply specify the image file names without worrying about their exact path e.g.'xx.jpg' and 'yy.png'. dotnet8 ================================================ FILE: projects/rewrite/build.bat ================================================ dotnet build rewrite-1 dotnet build rewrite-2 dotnet build rewrite-3 dotnet build rewrite-4 dotnet build rewrite-5 dotnet build rewrite-6 ================================================ FILE: projects/rewrite/build.sh ================================================ #!/bin/bash dotnet build rewrite-1 dotnet build rewrite-2 dotnet build rewrite-3 dotnet build rewrite-4 dotnet build rewrite-5 dotnet build rewrite-6 ================================================ FILE: projects/rewrite/rewrite-1/Program.cs ================================================ using Microsoft.AspNetCore.Rewrite; var app = WebApplication.Create(); var options = new RewriteOptions() .AddRedirect("/$", "/"); //redirect when path ends with / app.UseRewriter(options); app.MapGet("/", (context) => { context.Response.Headers.Append("content-type", "text/html"); return context.Response.WriteAsync($@" Always display this page when path ends with / e.g. /hello-world/ or /welcome/everybody/inthis/train/."); }); app.Run(); ================================================ FILE: projects/rewrite/rewrite-1/rewrite.csproj ================================================ net10.0 true ================================================ FILE: projects/rewrite/rewrite-2/Program.cs ================================================ using Microsoft.AspNetCore.Rewrite; var app = WebApplication.Create(); var options = new RewriteOptions().AddRedirect("([/_0-9a-zA-Z-]+)\\.([^/]+)$", "/?path=$1&ext=$2"); //redirect any path that ends with .html app.UseRewriter(options); app.MapGet("", (context) => { context.Response.Headers.Append("content-type", "text/html"); var path = context.Request.Query["Path"]; var ext = context.Request.Query["Ext"]; return context.Response.WriteAsync($@"Always display this page when path ends with an extension (e.g. .html or .aspx) and capture the their values. For example /hello-world.html or /welcome/everybody/inthis/train.aspx.

              Query String ""path"" = {path}
              Query String ""ext"" = {ext}
              "); }); app.Run(); ================================================ FILE: projects/rewrite/rewrite-2/rewrite-2.csproj ================================================ net10.0 true ================================================ FILE: projects/rewrite/rewrite-3/Program.cs ================================================ using Microsoft.AspNetCore.Rewrite; var app = WebApplication.Create(); var options = new RewriteOptions() .AddRewrite("([/_0-9a-z-]+)+(.*)$", "/?path=$1&ext=$2", skipRemainingRules: false); app.UseRewriter(options); app.MapGet("/", (context) => { context.Response.Headers.Append("content-type", "text/html"); var path = context.Request.Query["Path"]; var ext = context.Request.Query["Ext"]; return context.Response.WriteAsync($@"

              REWRITE

              Always display this page when path ends with an extension (e.g. .html or .aspx) and capture the their values. For example /hello-world.html or /welcome/everybody/inthis/train.aspx.

              Query String ""path"" = {path}
              Query String ""ext"" = {ext}
              "); }); app.Run(); ================================================ FILE: projects/rewrite/rewrite-3/rewrite-3.csproj ================================================ net10.0 true ================================================ FILE: projects/rewrite/rewrite-4/Program.cs ================================================ using Microsoft.AspNetCore.Rewrite; using System.Net; var app = WebApplication.Create(); var options = new RewriteOptions() .AddRedirect("([/_0-9a-z-]+)+(.*)$", "/?path=$1&ext=$2", (int)HttpStatusCode.MovedPermanently); //redirect any path that ends with .html app.UseRewriter(options); app.MapGet("", (context) => { context.Response.Headers.Append("content-type", "text/html"); var path = context.Request.Query["Path"]; var ext = context.Request.Query["Ext"]; return context.Response.WriteAsync($@"

              Permanent Redirect

              Always display this page when path ends with an extension (e.g. .html or .aspx) and capture the their values. For example /hello-world.html or /welcome/everybody/inthis/train.aspx.

              Query String ""path"" = {path}
              Query String ""ext"" = {ext}
              "); }); app.Run(); ================================================ FILE: projects/rewrite/rewrite-4/rewrite-4.csproj ================================================ net10.0 true ================================================ FILE: projects/rewrite/rewrite-5/Program.cs ================================================ using Microsoft.AspNetCore.Rewrite; using Microsoft.Net.Http.Headers; var app = WebApplication.Create(); app.UseRouting(); var options = new RewriteOptions() .Add(new ExtensionRedirection(".png", "/images/png")) .Add(new ExtensionRedirection(".jpg", "/images/jpeg")); app.UseRewriter(options); app.UseStaticFiles(); app.MapGet("", async context => { context.Response.Headers.Append("content-type", "text/html"); await context.Response.WriteAsync($"

              Extension Based Redirection


              "); }); app.Run(); public class ExtensionRedirection : IRule { readonly string _extension; readonly PathString _newPath; public ExtensionRedirection(string extension, string newPath) { _extension = extension; _newPath = new PathString(newPath); } public void ApplyRule(RewriteContext context) { var request = context.HttpContext.Request; // Because we're redirecting back to the same app, stop processing if the request has already been redirected // This is to prevent crazy loop. Try it, comment below code and you are going to crash. if (request.Path.StartsWithSegments(new PathString(_newPath))) { return; } if (request.Path.Value.EndsWith(_extension, StringComparison.OrdinalIgnoreCase)) { var response = context.HttpContext.Response; response.StatusCode = StatusCodes.Status301MovedPermanently; context.Result = RuleResult.EndResponse; response.Headers[HeaderNames.Location] = _newPath + request.Path + request.QueryString; } } } ================================================ FILE: projects/rewrite/rewrite-5/rewrite-5.csproj ================================================ net10.0 rewrite-5 rewrite-5 true ================================================ FILE: projects/rewrite/rewrite-6/Program.cs ================================================ using Microsoft.AspNetCore.Rewrite; using Microsoft.Net.Http.Headers; var app = WebApplication.Create(); var options = new RewriteOptions() .Add(context => { var request = context.HttpContext.Request; // Because we're redirecting back to the same app, stop processing if the request has already been redirected // This is to prevent crazy loop. Try it, comment below code and you are going to crash. if (request.Path.StartsWithSegments(new PathString("/images/jpeg"))) { return; } if (request.Path.Value.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase)) { var response = context.HttpContext.Response; response.StatusCode = StatusCodes.Status301MovedPermanently; context.Result = RuleResult.EndResponse; response.Headers[HeaderNames.Location] = "/images/jpeg" + request.Path + request.QueryString; } }); app.UseRewriter(options); app.UseStaticFiles(); app.MapGet("", async context => { context.Response.Headers.Append("content-type", "text/html"); await context.Response.WriteAsync($"

              Extension Based Redirection

              "); }); app.Run(); public class ExtensionRedirection : IRule { readonly string _extension; readonly PathString _newPath; public ExtensionRedirection(string extension, string newPath) { _extension = extension; _newPath = new PathString(newPath); } public void ApplyRule(RewriteContext context) { var request = context.HttpContext.Request; // Because we're redirecting back to the same app, stop processing if the request has already been redirected // This is to prevent crazy loop. Try it, comment below code and you are going to crash. if (request.Path.StartsWithSegments(new PathString(_newPath))) { return; } if (request.Path.Value.EndsWith(_extension, StringComparison.OrdinalIgnoreCase)) { var response = context.HttpContext.Response; response.StatusCode = StatusCodes.Status301MovedPermanently; context.Result = RuleResult.EndResponse; response.Headers[HeaderNames.Location] = _newPath + request.Path + request.QueryString; } } } ================================================ FILE: projects/rewrite/rewrite-6/rewrite-6.csproj ================================================ net10.0 true ================================================ FILE: projects/route-debugger-web/RouteDebugger/RouteDebugger.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.ActionConstraints; using Microsoft.AspNetCore.Mvc.Infrastructure; using Microsoft.AspNetCore.Routing; namespace RouteSpy; public static class RouteDebugger { public static IApplicationBuilder UseRouteDebugger(this WebApplication app) { app.UseMiddleware(); return app; } public class RouteDebuggerMiddleware { private RequestDelegate Next { get; } public RouteDebuggerMiddleware(RequestDelegate next) { Next = next; } public async Task Invoke(HttpContext context, IActionDescriptorCollectionProvider ) { // set header info context.Response.OnStarting(static state => { if (state is HttpContext httpContext && httpContext.GetEndpoint() is { } endpoint) { var info = GetEndpointInformation(endpoint, httpContext.GetRouteData()); var response = httpContext.Response; var results = info.Select(kv => $"{kv.Key}:{kv.Value}; "); response.Headers.Add("X-ASPNETCORE-ROUTE", string.Join("", results)); } return Task.CompletedTask; }, context); await Next(context); } private static Dictionary GetEndpointInformation(Endpoint endpoint, RouteData? routeData) { var elements = new Dictionary { { "Name", endpoint?.DisplayName } }; if (endpoint is RouteEndpoint route) { elements.Add("Pattern", route.RoutePattern.RawText); foreach (var metadata in route.Metadata) { if (metadata is RouteNameMetadata name) { elements["Name"] = name.RouteName; } if (metadata is HttpMethodActionConstraint methods) { elements["Methods"] = string.Join(",", methods.HttpMethods); } } } if (routeData is { } && routeData.Values.Any()) { elements["RouteData"] = string.Join(",", routeData.Values.Select(x => $"{x.Key}={x.Value}")); } return elements; } } } ================================================ FILE: projects/route-debugger-web/RouteDebugger/RouteDebugger.csproj ================================================ net10.0 enable enable ================================================ FILE: projects/route-debugger-web/route-debugger-web/Program.cs ================================================ using Microsoft.AspNetCore.Mvc.ActionConstraints; using RouteSpy; using static RouteSpy.RouteDebugger; var builder = WebApplication.CreateBuilder(args); builder.Services.AddSingleton(); builder.Services.AddMvc(); var app = builder.Build(); app.UseRouteDebugger(); app.MapGet("/", () => "Hello World!"); app.Run(); public static class RouteDebugger { public static IApplicationBuilder UseRouteDebugger(this WebApplication app) { app.UseMiddleware(); return app; } public class RouteDebuggerMiddleware { private RequestDelegate Next { get; } public RouteDebuggerMiddleware(RequestDelegate next) { Next = next; } public async Task Invoke(HttpContext context, IActionDescriptorCollectionProvider ) { // set header info context.Response.OnStarting(static state => { if (state is HttpContext httpContext && httpContext.GetEndpoint() is { } endpoint) { var info = GetEndpointInformation(endpoint, httpContext.GetRouteData()); var response = httpContext.Response; var results = info.Select(kv => $"{kv.Key}:{kv.Value}; "); response.Headers.Add("X-ASPNETCORE-ROUTE", string.Join("", results)); } return Task.CompletedTask; }, context); await Next(context); } private static Dictionary GetEndpointInformation(Endpoint endpoint, RouteData? routeData) { var elements = new Dictionary { { "Name", endpoint?.DisplayName } }; if (endpoint is RouteEndpoint route) { elements.Add("Pattern", route.RoutePattern.RawText); foreach (var metadata in route.Metadata) { if (metadata is RouteNameMetadata name) { elements["Name"] = name.RouteName; } if (metadata is HttpMethodActionConstraint methods) { elements["Methods"] = string.Join(",", methods.HttpMethods); } } } if (routeData is { } && routeData.Values.Any()) { elements["RouteData"] = string.Join(",", routeData.Values.Select(x => $"{x.Key}={x.Value}")); } return elements; } } } ================================================ FILE: projects/route-debugger-web/route-debugger-web/RouteDebuggerWeb.csproj ================================================ net10.0 enable enable route_debugger_web ================================================ FILE: projects/route-debugger-web/route-debugger-web/appsettings.Development.json ================================================ { "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } } } ================================================ FILE: projects/route-debugger-web/route-debugger-web/appsettings.json ================================================ { "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*" } ================================================ FILE: projects/route-debugger-web/route-debugger-web.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.2.32616.157 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RouteDebuggerWeb", "route-debugger-web\RouteDebuggerWeb.csproj", "{303D8353-89B8-461D-8088-04038C3C9A3D}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RouteDebugger", "RouteDebugger\RouteDebugger.csproj", "{A45BDD95-7810-45D5-B00B-CCB7E1A27F3C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {303D8353-89B8-461D-8088-04038C3C9A3D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {303D8353-89B8-461D-8088-04038C3C9A3D}.Debug|Any CPU.Build.0 = Debug|Any CPU {303D8353-89B8-461D-8088-04038C3C9A3D}.Release|Any CPU.ActiveCfg = Release|Any CPU {303D8353-89B8-461D-8088-04038C3C9A3D}.Release|Any CPU.Build.0 = Release|Any CPU {A45BDD95-7810-45D5-B00B-CCB7E1A27F3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A45BDD95-7810-45D5-B00B-CCB7E1A27F3C}.Debug|Any CPU.Build.0 = Debug|Any CPU {A45BDD95-7810-45D5-B00B-CCB7E1A27F3C}.Release|Any CPU.ActiveCfg = Release|Any CPU {A45BDD95-7810-45D5-B00B-CCB7E1A27F3C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {E12AB8E5-71EE-41BF-B3E7-DC64A6D024EB} EndGlobalSection EndGlobal ================================================ FILE: projects/security/README.md ================================================ # Security (7) Section about authentication, authorization and other things related to the security with .NET Core. ---------------------------------------------------------------------------------------------------- | Sections | | |----------------------------------------------------------------|-----| | [Data Protection](/projects/security/dataprotection) | (6) | * [Basic authentication sample with Identity Core and SQLite](/projects/security/authentication-with-identity) Basic sample to show how authentication works with Identity Core and Entity Framework Core with SQLite). This sample provides some basic functionalities like register a new user, sign in or sign out. Thanks to [@AdrienTorris](https://twitter.com/AdrienTorris). ================================================ FILE: projects/security/authentication-with-identity/README.md ================================================ Identity Core basic sample ========================== This is a sample to show how the basic authentication functionalities works with Identity Core and Entity Framework with SQLite. The functionalities provided here are: * Register a user * Sign in * Sign out * Access to a page restricted to the authenticated users Note: SQLite was chosen to have a standalone working sample application because SQLite is contained as a DLL in the solution but there are a lots of other database providers allowed. ================================================ FILE: projects/security/authentication-with-identity/src/Controllers/AccountController.cs ================================================ using Microsoft.AspNetCore.Mvc; using System.Threading.Tasks; using WebApplication.ViewModels.AccountViewModels; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using WebApplication.Services; using System.Text.Encodings.Web; using System; namespace WebApplication.Controllers { [Authorize] public class AccountController : Controller { private readonly UserManager userManager; private readonly SignInManager signInManager; private readonly IEmailSender emailSender; public AccountController( UserManager userManager, SignInManager signInManager, IEmailSender emailSender) { this.userManager = userManager; this.signInManager = signInManager; this.emailSender = emailSender; } [HttpGet] [AllowAnonymous] public IActionResult Register() => View(new RegisterViewModel()); [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task Register([FromForm]RegisterViewModel model) { if (ModelState.IsValid) { IdentityUser user = new IdentityUser { UserName = model.Email, Email = model.Email }; IdentityResult result = await this.userManager.CreateAsync(user, model.Password); if (result.Succeeded) { string code = await this.userManager.GenerateEmailConfirmationTokenAsync(user); string callbackUrl = Url.Action(action: nameof(AccountController.ConfirmEmail),controller: "Account", values: new { user.Id, code },protocol: Request.Scheme); await this.emailSender.SendEmailAsync(model.Email, "Confirm your email", $"Please confirm your account by clicking this link: link"); await this.signInManager.SignInAsync(user, isPersistent: false); return RedirectToAction(nameof(HomeController.Index), "Home"); } } return View(model); } [HttpGet] [AllowAnonymous] public IActionResult Login() => View(); [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task Login(LoginViewModel model) { if (ModelState.IsValid) { var result = await this.signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false); if (result.Succeeded) { return RedirectToAction(nameof(HomeController.Index), "Home"); } else { ModelState.AddModelError(string.Empty, "Invalid login attempt."); return View(model); } } return View(model); } [HttpPost] [ValidateAntiForgeryToken] public async Task Logout() { await this.signInManager.SignOutAsync(); return RedirectToAction(nameof(HomeController.Index), "Home"); } [HttpGet] [AllowAnonymous] public async Task ConfirmEmail(string userId, string code) { if (userId == null || code == null) { return RedirectToAction(nameof(HomeController.Index), "Home"); } IdentityUser user = await this.userManager.FindByIdAsync(userId); if (user == null) { throw new ApplicationException($"Unable to load user with ID '{userId}'."); } IdentityResult result = await this.userManager.ConfirmEmailAsync(user, code); return View(result.Succeeded ? "ConfirmEmail" : "Error"); } } } ================================================ FILE: projects/security/authentication-with-identity/src/Controllers/HomeController.cs ================================================ using Microsoft.AspNetCore.Mvc; using System.Threading.Tasks; namespace WebApplication.Controllers { public class HomeController : Controller { public IActionResult Index() => View(); } } ================================================ FILE: projects/security/authentication-with-identity/src/Controllers/RestrictedAreaController.cs ================================================ using Microsoft.AspNetCore.Mvc; using System.Threading.Tasks; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using System; using WebApplication.ViewModels.RestrictedAreaViewModels; namespace WebApplication.Controllers { [Authorize] public class RestrictedAreaController : Controller { private readonly UserManager userManager; public RestrictedAreaController(UserManager userManager) { this.userManager = userManager; } public async Task Index() { IdentityUser user = await this.userManager.GetUserAsync(User); if (user == null) { throw new ApplicationException($"Unable to load user with ID '{this.userManager.GetUserId(User)}'."); } IndexViewModel model = new IndexViewModel { Username = user.UserName, Email = user.Email, PhoneNumber = user.PhoneNumber, IsEmailConfirmed = user.EmailConfirmed }; return View(model); } } } ================================================ FILE: projects/security/authentication-with-identity/src/Data/ApplicationDbContext.cs ================================================ using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; namespace WebApplication.Data { public class ApplicationDbContext : IdentityDbContext { public ApplicationDbContext(DbContextOptions options) : base(options) { } } } ================================================ FILE: projects/security/authentication-with-identity/src/Program.cs ================================================ using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using WebApplication.Data; using Microsoft.EntityFrameworkCore; using Microsoft.AspNetCore.Identity; using WebApplication.Services; using Microsoft.Extensions.Hosting; using System; using Microsoft.Extensions.Logging; namespace WebApplication { public class Program { public static void Main(string[] args) { var host = CreateHostBuilder(args).Build(); EnsureDatabase(host); host.Run(); } private static void EnsureDatabase(IHost host) { using (var scope = host.Services.CreateScope()) { var services = scope.ServiceProvider; var options = services.GetRequiredService>(); try { using (var dbContext = new ApplicationDbContext(options)) { dbContext.Database.EnsureCreated(); } } catch (Exception ex) { var logger = services.GetRequiredService>(); logger.LogError(ex, "An error occurred while ensuringt database is created."); } } } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); }); } public class Startup { public void ConfigureServices(IServiceCollection services) { //Add Database Services AddDatabaseServices(services); //Add Identity Services AddIdentity(services); // Add the application services. AddApplicationServices(services); // Add MVC. services.AddControllersWithViews(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapDefaultControllerRoute(); }); } private static void AddApplicationServices(IServiceCollection services) { services.AddTransient(); // Service uses to send emails. } private static void AddIdentity(IServiceCollection services) { // Add Identity and configure it to use the default user and role models and the database context we just added. services.AddIdentity() .AddEntityFrameworkStores() .AddDefaultTokenProviders(); // Configure Identity. services.Configure(options => { // We set the minimal password policy. options.Password.RequireDigit = false; options.Password.RequiredLength = 3; options.Password.RequireNonAlphanumeric = false; options.Password.RequireUppercase = false; options.Password.RequireLowercase = false; // SignIn settings. options.SignIn.RequireConfirmedEmail = false; }); } private static void AddDatabaseServices(IServiceCollection services) { // Add the database context we will use. services.AddDbContext(options => options.UseSqlite("Data Source=identity_db.db")); } } } ================================================ FILE: projects/security/authentication-with-identity/src/Services/EmailSender.cs ================================================ using System.Threading.Tasks; namespace WebApplication.Services { public sealed class EmailSender : IEmailSender { public Task SendEmailAsync(string email, string subject, string message) { // You need to implement the code to send emails here. return Task.CompletedTask; } } } ================================================ FILE: projects/security/authentication-with-identity/src/Services/IEmailSender.cs ================================================ using System.Threading.Tasks; namespace WebApplication.Services { public interface IEmailSender { Task SendEmailAsync(string email, string subject, string message); } } ================================================ FILE: projects/security/authentication-with-identity/src/ViewModels/AccountViewModels/LoginViewModel.cs ================================================ using System.ComponentModel.DataAnnotations; namespace WebApplication.ViewModels.AccountViewModels { public class LoginViewModel { [Required] [EmailAddress] public string Email { get; set; } [Required] [DataType(DataType.Password)] public string Password { get; set; } [Display(Name = "Remember me?")] public bool RememberMe { get; set; } } } ================================================ FILE: projects/security/authentication-with-identity/src/ViewModels/AccountViewModels/RegisterViewModel.cs ================================================ using System.ComponentModel.DataAnnotations; namespace WebApplication.ViewModels.AccountViewModels { public class RegisterViewModel { [Required] [EmailAddress] public string Email {get;set;} [Required] [DataType(DataType.Password)] public string Password {get;set;} } } ================================================ FILE: projects/security/authentication-with-identity/src/ViewModels/RestrictedAreaViewModels/IndexViewModel.cs ================================================ using System.ComponentModel.DataAnnotations; namespace WebApplication.ViewModels.RestrictedAreaViewModels { public sealed class IndexViewModel { public string Username { get; set; } public bool IsEmailConfirmed { get; set; } [Display(Name = "Email address")] [EmailAddress] public string Email { get; set; } [Display(Name = "Phone number")] public string PhoneNumber { get; set; } } } ================================================ FILE: projects/security/authentication-with-identity/src/Views/Account/ConfirmEmail.cshtml ================================================ @{ ViewData["Title"] = "Confirm email"; }

              @ViewData["Title"]

              Thank you for confirming your email.

              ================================================ FILE: projects/security/authentication-with-identity/src/Views/Account/Login.cshtml ================================================ @model WebApplication.ViewModels.AccountViewModels.LoginViewModel; @{ ViewData["Title"] = "Log in"; }

              @ViewData["Title"]







              Create an account

              ================================================ FILE: projects/security/authentication-with-identity/src/Views/Account/Register.cshtml ================================================ @model WebApplication.ViewModels.AccountViewModels.RegisterViewModel; @{ ViewData["Title"] = "Register new user"; }

              @ViewData["Title"]





              Log in

              ================================================ FILE: projects/security/authentication-with-identity/src/Views/Home/Index.cshtml ================================================ @{ ViewData["Title"] = "Basic Identity sample"; }

              Hello world!

              ================================================ FILE: projects/security/authentication-with-identity/src/Views/RestrictedArea/Index.cshtml ================================================ @model WebApplication.ViewModels.RestrictedAreaViewModels.IndexViewModel @{ ViewData["Title"] = "Restricted area"; }

              @ViewData["Title"]

              You have to be signed in to access there.
              Profile:
              • @if (Model.IsEmailConfirmed) { confirmed } else { not confirmed }
              ================================================ FILE: projects/security/authentication-with-identity/src/Views/Shared/_Layout.cshtml ================================================ @ViewData["Title"] - ASP.NET Core Identity sample
              @RenderBody()
              ================================================ FILE: projects/security/authentication-with-identity/src/Views/Shared/_LoginPartial.cshtml ================================================ @using Microsoft.AspNetCore.Identity @inject SignInManager SignInManager @inject UserManager UserManager ================================================ FILE: projects/security/authentication-with-identity/src/Views/_ViewImports.cshtml ================================================ @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: projects/security/authentication-with-identity/src/Views/_ViewStart.cshtml ================================================ @{ Layout = "_Layout"; } ================================================ FILE: projects/security/authentication-with-identity/src/authentication-with-identity.csproj ================================================ net10.0 true ================================================ FILE: projects/security/build.bat ================================================ dotnet build authentication-with-identity\src ================================================ FILE: projects/security/build.sh ================================================ #!/bin/bash dotnet build authentication-with-identity/src ================================================ FILE: projects/security/dataprotection/README.md ================================================ Data Protection ======== Section about data protection stack for ASP.NET Core ---------------------------------------------------------------------------------------------------- * [Data Protection with Default settings](/projects/security/dataprotection/default-settings) Basic sample to show data protection with default settings. * [Data Protection with Azure Storage Blob](/projects/security/dataprotection/azure-storage-blob-key-store) Sample to show data protection with keys stored in Azure Blob storage. * [Data Protection with Azure Key Vault & Azure Storage Blob](/projects/security/dataprotection/azure-keyvault-storage-blob-key-store) Sample to show data protection with keys encrypted using Azure Key Vault and stored in Azure Blob storage. * [Data Protection with EF Core Key Store](/projects/security/dataprotection/ef-core-key-store) Sample to show data protection with keys stored in relational database using Entity Framework Core. * [Data Protection with Redis Key Store](/projects/security/dataprotection/redis-key-store) Sample to show data protection with keys stored in Redis. * [Data Protection with Custom XML Encryptor](/projects/security/dataprotection/custom-encryptor) Sample to show data protection with keys encrypted by custom XML encryptor. ================================================ FILE: projects/security/dataprotection/azure-keyvault-storage-blob-key-store/AzKeyVaultStorageBlobKeyStore.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.31320.298 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AzKeyVaultStorageBlobKeyStore", "src\AzKeyVaultStorageBlobKeyStore.csproj", "{7706629F-F388-4822-8ABD-FBC5D55F3705}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {7706629F-F388-4822-8ABD-FBC5D55F3705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7706629F-F388-4822-8ABD-FBC5D55F3705}.Debug|Any CPU.Build.0 = Debug|Any CPU {7706629F-F388-4822-8ABD-FBC5D55F3705}.Release|Any CPU.ActiveCfg = Release|Any CPU {7706629F-F388-4822-8ABD-FBC5D55F3705}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {3B33F1DD-AE22-4B21-A61C-D2C6EB4292DA} EndGlobalSection EndGlobal ================================================ FILE: projects/security/dataprotection/azure-keyvault-storage-blob-key-store/README.md ================================================ Azure Key Vault Encryption & Azure Storage Blob - Key Store ======== This sample showcases data protection with keys encrypted using Azure Key Vault and stored in Azure Blob Storage. * Azure Storage connection string is set up in appsettings. ``` "DataProtection": { ... "StorageConnectionString": "", "ContainerName": "", "BlobName": "" ... } ``` * Azure Key Vault URI is set up in appsettings. ``` "DataProtection": { ... "KeyId": "https://.vault.azure.net/keys//" ... } ``` * Key encryption & persistence is set up in StartUp ConfigureServices(). ``` public void ConfigureServices(IServiceCollection services) { ... var storageConnectionString = Configuration["DataProtection:StorageConnectionString"]; var containerName = Configuration["DataProtection:ContainerName"]; var blobName = Configuration["DataProtection:BlobName"]; var keyId = Configuration["DataProtection:KeyId"]; services.AddDataProtection() //Key Encryption .ProtectKeysWithAzureKeyVault(new Uri(keyId),new ChainedTokenCredential(new ManagedIdentityCredential(), new AzureCliCredential())) //Key Persistence .PersistKeysToAzureBlobStorage(storageConnectionString,containerName,blobName); ... } ``` ## Reference [Data Protection Key Encryption using Azure Key Vault](https://github.com/Azure/azure-sdk-for-net/blob/Azure.Extensions.AspNetCore.DataProtection.Keys_1.0.3/sdk/extensions/Azure.Extensions.AspNetCore.DataProtection.Keys/README.md) [Data Protection Key Persistence using Azure Storage Blob](https://github.com/Azure/azure-sdk-for-net/blob/Azure.Extensions.AspNetCore.DataProtection.Blobs_1.2.1/sdk/extensions/Azure.Extensions.AspNetCore.DataProtection.Blobs/README.md) ## Screenshot ## Credits [Lohith GN](https://github.com/lohithgn) ================================================ FILE: projects/security/dataprotection/azure-keyvault-storage-blob-key-store/src/AzKeyVaultStorageBlobKeyStore.csproj ================================================ net10.0 true ================================================ FILE: projects/security/dataprotection/azure-keyvault-storage-blob-key-store/src/Pages/Error.cshtml ================================================ @page @model ErrorModel @{ ViewData["Title"] = "Error"; }

              Error.

              An error occurred while processing your request.

              @if (Model.ShowRequestId) {

              Request ID: @Model.RequestId

              }

              Development Mode

              Swapping to the Development environment displays detailed information about the error that occurred.

              The Development environment shouldn't be enabled for deployed applications. It can result in displaying sensitive information from exceptions to end users. For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development and restarting the app.

              ================================================ FILE: projects/security/dataprotection/azure-keyvault-storage-blob-key-store/src/Pages/Error.cshtml.cs ================================================ using System.Diagnostics; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Logging; namespace PANC.DataProtection.AzKeyVaultStorageBlobKeyStore.Pages { [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] [IgnoreAntiforgeryToken] public class ErrorModel : PageModel { public string RequestId { get; set; } public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); private readonly ILogger _logger; public ErrorModel(ILogger logger) { _logger = logger; } public void OnGet() { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier; } } } ================================================ FILE: projects/security/dataprotection/azure-keyvault-storage-blob-key-store/src/Pages/Index.cshtml ================================================ @page @model IndexModel @{ ViewData["Title"] = "Home page"; }

              Azure Key Vault - Storgae Blob - Key Store Example

              Learn about Azure Storage Blob Key Store for Data Protection.

              Learn about Encrypting Data Protection Keys using Azure Key Vault.

              @if(!string.IsNullOrEmpty(Model.EncryptedString)) {
              Encrypted String:
              @Model.EncryptedString
              DeCrypted String:
              @Model.DeCryptedString
              }
              ================================================ FILE: projects/security/dataprotection/azure-keyvault-storage-blob-key-store/src/Pages/Index.cshtml.cs ================================================ using System.ComponentModel.DataAnnotations; using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Logging; namespace PANC.DataProtection.AzKeyVaultStorageBlobKeyStore.Pages { public class IndexModel : PageModel { private readonly IDataProtector _protector; private readonly ILogger _logger; public string EncryptedString { get; private set; } public string DeCryptedString { get; private set; } public IndexModel(ILogger logger, IDataProtectionProvider dataProtectionProvider) { _protector = dataProtectionProvider.CreateProtector("DP.DefaultSettings.V1"); _logger = logger; } public void OnGet() { } [Required(ErrorMessage = "Enter string to encrypt.")] [BindProperty] public string StringToEncrypt { get; set; } public void OnPost() { EncryptedString = _protector.Protect(StringToEncrypt); DeCryptedString = _protector.Unprotect(EncryptedString); } } } ================================================ FILE: projects/security/dataprotection/azure-keyvault-storage-blob-key-store/src/Pages/Shared/_Layout.cshtml ================================================  @ViewData["Title"] - src
              @RenderBody()
              ================================================ FILE: projects/security/dataprotection/azure-keyvault-storage-blob-key-store/src/Pages/_ViewImports.cshtml ================================================ @using PANC.DataProtection.AzKeyVaultStorageBlobKeyStore @namespace PANC.DataProtection.AzKeyVaultStorageBlobKeyStore.Pages @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: projects/security/dataprotection/azure-keyvault-storage-blob-key-store/src/Pages/_ViewStart.cshtml ================================================ @{ Layout = "_Layout"; } ================================================ FILE: projects/security/dataprotection/azure-keyvault-storage-blob-key-store/src/Program.cs ================================================ using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; namespace PANC.DataProtection.AzKeyVaultStorageBlobKeyStore { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); }); } } ================================================ FILE: projects/security/dataprotection/azure-keyvault-storage-blob-key-store/src/Startup.cs ================================================ using System; using Azure.Identity; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; namespace PANC.DataProtection.AzKeyVaultStorageBlobKeyStore { public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { var storageConnectionString = Configuration["DataProtection:StorageConnectionString"]; var containerName = Configuration["DataProtection:ContainerName"]; var blobName = Configuration["DataProtection:BlobName"]; var keyId = Configuration["DataProtection:KeyId"]; services.AddDataProtection() .ProtectKeysWithAzureKeyVault(new Uri(keyId),new ChainedTokenCredential(new ManagedIdentityCredential(), new AzureCliCredential())) .PersistKeysToAzureBlobStorage(storageConnectionString,containerName,blobName); services.AddRazorPages(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); }); } } } ================================================ FILE: projects/security/dataprotection/azure-keyvault-storage-blob-key-store/src/appsettings.Development.json ================================================ { "DetailedErrors": true, "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } } } ================================================ FILE: projects/security/dataprotection/azure-keyvault-storage-blob-key-store/src/appsettings.json ================================================ { "DataProtection": { "StorageConnectionString": "UseDevelopmentStorage=true", "ContainerName": "container-dp-keys", "BlobName": "dpkeys.xml", "KeyId": "https://.vault.azure.net/keys//" }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*" } ================================================ FILE: projects/security/dataprotection/azure-storage-blob-key-store/AzStorageBlobKeyStore.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.31320.298 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AzStorageBlobKeyStore", "src\AzStorageBlobKeyStore.csproj", "{7706629F-F388-4822-8ABD-FBC5D55F3705}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {7706629F-F388-4822-8ABD-FBC5D55F3705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7706629F-F388-4822-8ABD-FBC5D55F3705}.Debug|Any CPU.Build.0 = Debug|Any CPU {7706629F-F388-4822-8ABD-FBC5D55F3705}.Release|Any CPU.ActiveCfg = Release|Any CPU {7706629F-F388-4822-8ABD-FBC5D55F3705}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {3B33F1DD-AE22-4B21-A61C-D2C6EB4292DA} EndGlobalSection EndGlobal ================================================ FILE: projects/security/dataprotection/azure-storage-blob-key-store/README.md ================================================ Azure Storage Blob Key Store ======== This sample showcases data protection with keys stored in Azure Blob Storage. * Azure Storage connection string is set up in appsettings. ``` "DataProtection": { "StorageConnectionString": "", "ContainerName": "", "BlobName": "" } ``` * Key persistence is set up in StartUp ConfigureServices(). ``` public void ConfigureServices(IServiceCollection services) { var storageConnectionString = Configuration["DataProtection:StorageConnectionString"]; var containerName = Configuration["DataProtection:ContainerName"]; var blobName = Configuration["DataProtection:BlobName"]; services.AddDataProtection() .PersistKeysToAzureBlobStorage(storageConnectionString,containerName,blobName); ... } ``` ## Reference [Data Protection Key Persistenc using Azure Storage Blob](https://github.com/Azure/azure-sdk-for-net/blob/Azure.Extensions.AspNetCore.DataProtection.Blobs_1.2.1/sdk/extensions/Azure.Extensions.AspNetCore.DataProtection.Blobs/README.md) ## Screenshot ## Credits [Lohith GN](https://github.com/lohithgn) ================================================ FILE: projects/security/dataprotection/azure-storage-blob-key-store/src/AzStorageBlobKeyStore.csproj ================================================ net10.0 true ================================================ FILE: projects/security/dataprotection/azure-storage-blob-key-store/src/Pages/Error.cshtml ================================================ @page @model ErrorModel @{ ViewData["Title"] = "Error"; }

              Error.

              An error occurred while processing your request.

              @if (Model.ShowRequestId) {

              Request ID: @Model.RequestId

              }

              Development Mode

              Swapping to the Development environment displays detailed information about the error that occurred.

              The Development environment shouldn't be enabled for deployed applications. It can result in displaying sensitive information from exceptions to end users. For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development and restarting the app.

              ================================================ FILE: projects/security/dataprotection/azure-storage-blob-key-store/src/Pages/Error.cshtml.cs ================================================ using System.Diagnostics; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Logging; namespace PANC.DataProtection.AzStorageBlobKeyStore.Pages { [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] [IgnoreAntiforgeryToken] public class ErrorModel : PageModel { public string RequestId { get; set; } public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); private readonly ILogger _logger; public ErrorModel(ILogger logger) { _logger = logger; } public void OnGet() { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier; } } } ================================================ FILE: projects/security/dataprotection/azure-storage-blob-key-store/src/Pages/Index.cshtml ================================================ @page @model IndexModel @{ ViewData["Title"] = "Home page"; }

              Azure Storgae Blob Key Store Example

              Learn about Azure Storage Blob Key Store for Data Protection.

              @if(!string.IsNullOrEmpty(Model.EncryptedString)) {
              Encrypted String:
              @Model.EncryptedString
              DeCrypted String:
              @Model.DeCryptedString
              }
              ================================================ FILE: projects/security/dataprotection/azure-storage-blob-key-store/src/Pages/Index.cshtml.cs ================================================ using System.ComponentModel.DataAnnotations; using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Logging; namespace PANC.DataProtection.AzStorageBlobKeyStore.Pages { public class IndexModel : PageModel { private readonly IDataProtector _protector; private readonly ILogger _logger; public string EncryptedString { get; private set; } public string DeCryptedString { get; private set; } public IndexModel(ILogger logger, IDataProtectionProvider dataProtectionProvider) { _protector = dataProtectionProvider.CreateProtector("DP.DefaultSettings.V1"); _logger = logger; } public void OnGet() { } [Required(ErrorMessage = "Enter string to encrypt.")] [BindProperty] public string StringToEncrypt { get; set; } public void OnPost() { EncryptedString = _protector.Protect(StringToEncrypt); DeCryptedString = _protector.Unprotect(EncryptedString); } } } ================================================ FILE: projects/security/dataprotection/azure-storage-blob-key-store/src/Pages/Shared/_Layout.cshtml ================================================  @ViewData["Title"] - src
              @RenderBody()
              ================================================ FILE: projects/security/dataprotection/azure-storage-blob-key-store/src/Pages/_ViewImports.cshtml ================================================ @using PANC.DataProtection.AzStorageBlobKeyStore @namespace PANC.DataProtection.AzStorageBlobKeyStore.Pages @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: projects/security/dataprotection/azure-storage-blob-key-store/src/Pages/_ViewStart.cshtml ================================================ @{ Layout = "_Layout"; } ================================================ FILE: projects/security/dataprotection/azure-storage-blob-key-store/src/Program.cs ================================================ using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; namespace PANC.DataProtection.AzStorageBlobKeyStore { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); }); } } ================================================ FILE: projects/security/dataprotection/azure-storage-blob-key-store/src/Startup.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; namespace PANC.DataProtection.AzStorageBlobKeyStore { public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { var storageConnectionString = Configuration["DataProtection:StorageConnectionString"]; var containerName = Configuration["DataProtection:ContainerName"]; var blobName = Configuration["DataProtection:BlobName"]; services.AddDataProtection() .PersistKeysToAzureBlobStorage(storageConnectionString,containerName,blobName); services.AddRazorPages(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); }); } } } ================================================ FILE: projects/security/dataprotection/azure-storage-blob-key-store/src/appsettings.Development.json ================================================ { "DetailedErrors": true, "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } } } ================================================ FILE: projects/security/dataprotection/azure-storage-blob-key-store/src/appsettings.json ================================================ { "DataProtection": { "StorageConnectionString": "UseDevelopmentStorage=true", "ContainerName": "container-dp-keys", "BlobName": "dpkeys.xml" }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*" } ================================================ FILE: projects/security/dataprotection/custom-encryptor/CustomEncryptor.csproj ================================================ net10.0 true ================================================ FILE: projects/security/dataprotection/custom-encryptor/Extensions/DependencyInjection.cs ================================================ using System; using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.DataProtection.KeyManagement; using Microsoft.AspNetCore.DataProtection.XmlEncryption; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; namespace CustomEncryptor.Extensions { public static class DependencyInjection { public static IDataProtectionBuilder UseXmlEncryptor( this IDataProtectionBuilder builder, Func factory) { builder.Services.AddSingleton>(serviceProvider => { var instance = factory(serviceProvider); return new ConfigureOptions(options => { options.XmlEncryptor = instance; }); }); return builder; } } } ================================================ FILE: projects/security/dataprotection/custom-encryptor/Pages/Error.cshtml ================================================ @page @model ErrorModel @{ ViewData["Title"] = "Error"; }

              Error.

              An error occurred while processing your request.

              @if (Model.ShowRequestId) {

              Request ID: @Model.RequestId

              }

              Development Mode

              Swapping to the Development environment displays detailed information about the error that occurred.

              The Development environment shouldn't be enabled for deployed applications. It can result in displaying sensitive information from exceptions to end users. For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development and restarting the app.

              ================================================ FILE: projects/security/dataprotection/custom-encryptor/Pages/Error.cshtml.cs ================================================ using System.Diagnostics; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Logging; namespace PANC.DataProtection.CustomEncryptor.Pages { [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] [IgnoreAntiforgeryToken] public class ErrorModel : PageModel { public string RequestId { get; set; } public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); private readonly ILogger _logger; public ErrorModel(ILogger logger) { _logger = logger; } public void OnGet() { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier; } } } ================================================ FILE: projects/security/dataprotection/custom-encryptor/Pages/Index.cshtml ================================================ @page @model IndexModel @{ ViewData["Title"] = "Home page"; }

              Custom Encryptor Example

              Learn about Custom XML Encryptor.

              @if(!string.IsNullOrEmpty(Model.EncryptedString)) {
              Encrypted String:
              @Model.EncryptedString
              DeCrypted String:
              @Model.DeCryptedString
              }
              ================================================ FILE: projects/security/dataprotection/custom-encryptor/Pages/Index.cshtml.cs ================================================ using System.ComponentModel.DataAnnotations; using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Logging; namespace PANC.DataProtection.CustomEncryptor.Pages { public class IndexModel : PageModel { private readonly IDataProtector _protector; private readonly ILogger _logger; public string EncryptedString { get; private set; } public string DeCryptedString { get; private set; } public IndexModel(ILogger logger, IDataProtectionProvider dataProtectionProvider) { _protector = dataProtectionProvider.CreateProtector("DP.DefaultSettings.V1"); _logger = logger; } public void OnGet() { } [Required(ErrorMessage = "Enter string to encrypt.")] [BindProperty] public string StringToEncrypt { get; set; } public void OnPost() { EncryptedString = _protector.Protect(StringToEncrypt); DeCryptedString = _protector.Unprotect(EncryptedString); } } } ================================================ FILE: projects/security/dataprotection/custom-encryptor/Pages/Shared/_Layout.cshtml ================================================  @ViewData["Title"] - src
              @RenderBody()
              ================================================ FILE: projects/security/dataprotection/custom-encryptor/Pages/_ViewImports.cshtml ================================================ @using PANC.DataProtection.CustomEncryptor @namespace PANC.DataProtection.CustomEncryptor.Pages @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: projects/security/dataprotection/custom-encryptor/Pages/_ViewStart.cshtml ================================================ @{ Layout = "_Layout"; } ================================================ FILE: projects/security/dataprotection/custom-encryptor/Program.cs ================================================ using System.IO; using CustomEncryptor.Extensions; using CustomEncryptor.Services; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; var builder = WebApplication.CreateBuilder(); var keysFolder = Path.Combine(Directory.GetCurrentDirectory(), "temp-keys"); builder.Services.AddDataProtection() .PersistKeysToFileSystem(new DirectoryInfo(keysFolder)) .UseXmlEncryptor(s => new CustomXmlEncryptor(s)); builder.Services.AddRazorPages(); var app = builder.Build(); app.UseStaticFiles(); app.MapRazorPages(); app.Run(); ================================================ FILE: projects/security/dataprotection/custom-encryptor/README.md ================================================ Custom XML Encryptor ======== This sample showcases data protection with keys encrypted using custom XML encryptor. * Package `Microsoft.AspNetCore.DataProtection` is added to the project. * Custom XML Encryptor class is created ``` public class CustomXmlEncryptor : IXmlEncryptor { private readonly ILogger _logger; public CustomXmlEncryptor(IServiceProvider services) { _logger = services.GetRequiredService().CreateLogger(); } public EncryptedXmlInfo Encrypt(XElement plaintextElement) { if (plaintextElement == null) { throw new ArgumentNullException(nameof(plaintextElement)); } _logger.LogInformation("Not encrypting key"); var newElement = new XElement("unencryptedKey", new XComment(" This key is not encrypted. "), new XElement(plaintextElement)); var encryptedTextElement = new EncryptedXmlInfo(newElement, typeof(CustomXmlDecryptor)); return encryptedTextElement; } } ``` * Custom XML decryptor class is created ``` public class CustomXmlDecryptor : IXmlDecryptor { private readonly ILogger _logger; public CustomXmlDecryptor(IServiceProvider services) { _logger = services.GetRequiredService().CreateLogger(); } public XElement Decrypt(XElement encryptedElement) { if (encryptedElement == null) { throw new ArgumentNullException(nameof(encryptedElement)); } return new XElement(encryptedElement.Elements().Single()); } } ``` * Helper extension method is created to add custom XML encryptor to data protection builder. ``` public static IDataProtectionBuilder UseXmlEncryptor( this IDataProtectionBuilder builder, Func factory) { builder.Services.AddSingleton>(serviceProvider => { var instance = factory(serviceProvider); return new ConfigureOptions(options => { options.XmlEncryptor = instance; }); }); return builder; } ``` * Key persistence & protection is set up in StartUp ConfigureServices(). ``` public void ConfigureServices(IServiceCollection services) { ... var keysFolder = Path.Combine(Directory.GetCurrentDirectory(), "temp-keys"); services.AddDataProtection() .PersistKeysToFileSystem(new DirectoryInfo(keysFolder)) .UseXmlEncryptor(s => new CustomXmlEncryptor(s)); ... } ``` Note: In this demo, Keys are stored on disk in a temp folder. Not advisable for production scenario. ## Reference [Data Protection using custom XML encryptor](https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/extensibility/key-management?view=aspnetcore-5.0#ixmlencryptor) ## Screenshot ## Credits [Lohith GN](https://github.com/lohithgn) ================================================ FILE: projects/security/dataprotection/custom-encryptor/Services/CustomXmlDecryptor.cs ================================================ using Microsoft.AspNetCore.DataProtection.XmlEncryption; using Microsoft.Extensions.Logging; using System.Xml.Linq; using System; using Microsoft.Extensions.DependencyInjection; using System.Linq; namespace CustomEncryptor.Services { public class CustomXmlDecryptor : IXmlDecryptor { private readonly ILogger _logger; public CustomXmlDecryptor(IServiceProvider services) { _logger = services.GetRequiredService().CreateLogger(); } public XElement Decrypt(XElement encryptedElement) { if (encryptedElement == null) { throw new ArgumentNullException(nameof(encryptedElement)); } return new XElement(encryptedElement.Elements().Single()); } } } ================================================ FILE: projects/security/dataprotection/custom-encryptor/Services/CustomXmlEncryptor.cs ================================================ using System; using System.Xml.Linq; using Microsoft.AspNetCore.DataProtection.XmlEncryption; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; namespace CustomEncryptor.Services { public class CustomXmlEncryptor : IXmlEncryptor { private readonly ILogger _logger; public CustomXmlEncryptor(IServiceProvider services) { _logger = services.GetRequiredService().CreateLogger(); } public EncryptedXmlInfo Encrypt(XElement plaintextElement) { if (plaintextElement == null) { throw new ArgumentNullException(nameof(plaintextElement)); } _logger.LogInformation("Not encrypting key"); var newElement = new XElement("unencryptedKey", new XComment(" This key is not encrypted. "), new XElement(plaintextElement)); var encryptedTextElement = new EncryptedXmlInfo(newElement, typeof(CustomXmlDecryptor)); return encryptedTextElement; } } } ================================================ FILE: projects/security/dataprotection/custom-encryptor/Startup.cs ================================================ using System.IO; using CustomEncryptor.Extensions; using CustomEncryptor.Services; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; namespace PANC.DataProtection.CustomEncryptor { public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { var keysFolder = Path.Combine(Directory.GetCurrentDirectory(), "temp-keys"); services.AddDataProtection() .PersistKeysToFileSystem(new DirectoryInfo(keysFolder)) .UseXmlEncryptor(s => new CustomXmlEncryptor(s)); services.AddRazorPages(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); }); } } } ================================================ FILE: projects/security/dataprotection/custom-encryptor/appsettings.Development.json ================================================ { "DetailedErrors": true, "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } } } ================================================ FILE: projects/security/dataprotection/custom-encryptor/appsettings.json ================================================ { "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*" } ================================================ FILE: projects/security/dataprotection/custom-encryptor/temp-keys/key-7c2fc905-2a4b-4da4-b168-c0764b406eff.xml ================================================  2022-04-27T08:47:08.0903902Z 2022-04-27T08:47:08.0125044Z 2022-07-26T08:47:08.0125044Z iAomnWjv9giI0XmBnaJ+1FBOin8j3x/X+At8wMix/GOsQrCbEO5Olo2an7LkqzTucdbpl3SIuQjW2RLQhEEJmA== ================================================ FILE: projects/security/dataprotection/default-settings/DataProtectionDefaultSettings.csproj ================================================ net10.0 true ================================================ FILE: projects/security/dataprotection/default-settings/Pages/Error.cshtml ================================================ @page @model ErrorModel @{ ViewData["Title"] = "Error"; }

              Error.

              An error occurred while processing your request.

              @if (Model.ShowRequestId) {

              Request ID: @Model.RequestId

              }

              Development Mode

              Swapping to the Development environment displays detailed information about the error that occurred.

              The Development environment shouldn't be enabled for deployed applications. It can result in displaying sensitive information from exceptions to end users. For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development and restarting the app.

              ================================================ FILE: projects/security/dataprotection/default-settings/Pages/Error.cshtml.cs ================================================ using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Logging; namespace PANC.DataProtection.DefaultSettings.Pages { [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] [IgnoreAntiforgeryToken] public class ErrorModel : PageModel { public string RequestId { get; set; } public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); private readonly ILogger _logger; public ErrorModel(ILogger logger) { _logger = logger; } public void OnGet() { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier; } } } ================================================ FILE: projects/security/dataprotection/default-settings/Pages/Index.cshtml ================================================ @page @model IndexModel @{ ViewData["Title"] = "Home page"; }

              Default Settings Example

              Learn about Data Protection Default Settings.

              @if(!string.IsNullOrEmpty(Model.EncryptedString)) {
              Encrypted String:
              @Model.EncryptedString
              DeCrypted String:
              @Model.DeCryptedString
              }
              ================================================ FILE: projects/security/dataprotection/default-settings/Pages/Index.cshtml.cs ================================================ using System.ComponentModel.DataAnnotations; using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Logging; namespace PANC.DataProtection.DefaultSettings.Pages { public class IndexModel : PageModel { private readonly IDataProtector _protector; private readonly ILogger _logger; public string EncryptedString { get; private set; } public string DeCryptedString { get; private set; } public IndexModel(ILogger logger, IDataProtectionProvider dataProtectionProvider) { _protector = dataProtectionProvider.CreateProtector("DP.DefaultSettings.V1"); _logger = logger; } public void OnGet() { } [Required(ErrorMessage = "Enter string to encrypt.")] [BindProperty] public string StringToEncrypt { get; set; } public void OnPost() { EncryptedString = _protector.Protect(StringToEncrypt); DeCryptedString = _protector.Unprotect(EncryptedString); } } } ================================================ FILE: projects/security/dataprotection/default-settings/Pages/Shared/_Layout.cshtml ================================================  @ViewData["Title"] - src
              @RenderBody()
              ================================================ FILE: projects/security/dataprotection/default-settings/Pages/_ViewImports.cshtml ================================================ @using PANC.DataProtection.DefaultSettings @namespace PANC.DataProtection.DefaultSettings.Pages @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: projects/security/dataprotection/default-settings/Pages/_ViewStart.cshtml ================================================ @{ Layout = "_Layout"; } ================================================ FILE: projects/security/dataprotection/default-settings/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; var builder = WebApplication.CreateBuilder(); builder.Services.AddDataProtection(); builder.Services.AddRazorPages(); var app = builder.Build(); app.UseStaticFiles(); app.MapRazorPages(); app.Run(); ================================================ FILE: projects/security/dataprotection/default-settings/README.md ================================================ Data Protection with Default Settings ======== This sample showcases data protection with default settings. * Data Protection default settings are set in Startup ConfigureServices() method. ``` public void ConfigureServices(IServiceCollection services) { services.AddDataProtection(); ... } ``` ## Reference [Data Protection with Default Settings](https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/default-settings?view=aspnetcore-5.0) ## Screenshot ## Credits [Lohith GN](https://github.com/lohithgn) ================================================ FILE: projects/security/dataprotection/default-settings/appsettings.Development.json ================================================ { "DetailedErrors": true, "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } } } ================================================ FILE: projects/security/dataprotection/default-settings/appsettings.json ================================================ { "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*" } ================================================ FILE: projects/security/dataprotection/ef-key-store/EFCoreKeyStore.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.31320.298 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EFCoreKeyStore", "src\EFCoreKeyStore.csproj", "{7706629F-F388-4822-8ABD-FBC5D55F3705}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {7706629F-F388-4822-8ABD-FBC5D55F3705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7706629F-F388-4822-8ABD-FBC5D55F3705}.Debug|Any CPU.Build.0 = Debug|Any CPU {7706629F-F388-4822-8ABD-FBC5D55F3705}.Release|Any CPU.ActiveCfg = Release|Any CPU {7706629F-F388-4822-8ABD-FBC5D55F3705}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {3B33F1DD-AE22-4B21-A61C-D2C6EB4292DA} EndGlobalSection EndGlobal ================================================ FILE: projects/security/dataprotection/ef-key-store/README.md ================================================ Entity Framework Core Key Store ======== This sample showcases data protection with keys stored in relational database using Entity Framework Core. * Package `Microsoft.AspNetCore.DataProtection.EntityFrameworkCore` is added to the project. * Database connection string is set up in appsettings. ``` "DataProtection": { ... "DefaultConnection": "", ... } ``` * Data protection EF core database context is set up as below: ``` class DataProtectionKeyContext : DbContext, IDataProtectionKeyContext { public DataProtectionKeyContext(DbContextOptions options) : base(options){ } public DbSet DataProtectionKeys { get; set; } } ``` * EF Core data migration is setup using below commands: ``` dotnet ef migrations add AddDataProtectionKeys --context DataProtectionKeyContext dotnet ef database update --context DataProtectionKeyContext ``` * Key persistence is set up in StartUp ConfigureServices(). ``` public void ConfigureServices(IServiceCollection services) { ... var storageConnectionString = Configuration["DataProtection:DefaultConnection"]; // Add a DbContext to store your data protection Keys services.AddDbContext(options => options.UseSqlServer(storageConnectionString)); // Key persistence services.AddDataProtection() .PersistKeysToDbContext(); ... } ``` ## Reference [Data Protection Key Persistence using EF Core](https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/implementation/key-storage-providers?view=aspnetcore-5.0&tabs=netcore-cli#entity-framework-core) ## Screenshot ## Credits [Lohith GN](https://github.com/lohithgn) ================================================ FILE: projects/security/dataprotection/ef-key-store/src/Data/DataProtectionKeyContext.cs ================================================ using Microsoft.AspNetCore.DataProtection.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; namespace PANC.DataProtection.EFCoreKeyStore.Data { class DataProtectionKeyContext : DbContext, IDataProtectionKeyContext { public DataProtectionKeyContext(DbContextOptions options) : base(options){ } public DbSet DataProtectionKeys { get; set; } } } ================================================ FILE: projects/security/dataprotection/ef-key-store/src/Data/Migrations/20210610013150_AddDataProtectionKeys.Designer.cs ================================================ // using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using PANC.DataProtection.EFCoreKeyStore.Data; namespace EFCoreKeyStore.Data.Migrations { [DbContext(typeof(DataProtectionKeyContext))] [Migration("20210610013150_AddDataProtectionKeys")] partial class AddDataProtectionKeys { protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder .HasAnnotation("Relational:MaxIdentifierLength", 128) .HasAnnotation("ProductVersion", "5.0.7") .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); modelBuilder.Entity("Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.DataProtectionKey", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int") .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); b.Property("FriendlyName") .HasColumnType("nvarchar(max)"); b.Property("Xml") .HasColumnType("nvarchar(max)"); b.HasKey("Id"); b.ToTable("DataProtectionKeys"); }); #pragma warning restore 612, 618 } } } ================================================ FILE: projects/security/dataprotection/ef-key-store/src/Data/Migrations/20210610013150_AddDataProtectionKeys.cs ================================================ using Microsoft.EntityFrameworkCore.Migrations; namespace EFCoreKeyStore.Data.Migrations { public partial class AddDataProtectionKeys : Migration { protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.CreateTable( name: "DataProtectionKeys", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), FriendlyName = table.Column(type: "nvarchar(max)", nullable: true), Xml = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_DataProtectionKeys", x => x.Id); }); } protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( name: "DataProtectionKeys"); } } } ================================================ FILE: projects/security/dataprotection/ef-key-store/src/Data/Migrations/DataProtectionKeyContextModelSnapshot.cs ================================================ // using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using PANC.DataProtection.EFCoreKeyStore.Data; namespace EFCoreKeyStore.Data.Migrations { [DbContext(typeof(DataProtectionKeyContext))] partial class DataProtectionKeyContextModelSnapshot : ModelSnapshot { protected override void BuildModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder .HasAnnotation("Relational:MaxIdentifierLength", 128) .HasAnnotation("ProductVersion", "5.0.7") .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); modelBuilder.Entity("Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.DataProtectionKey", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("int") .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); b.Property("FriendlyName") .HasColumnType("nvarchar(max)"); b.Property("Xml") .HasColumnType("nvarchar(max)"); b.HasKey("Id"); b.ToTable("DataProtectionKeys"); }); #pragma warning restore 612, 618 } } } ================================================ FILE: projects/security/dataprotection/ef-key-store/src/EFCoreKeyStore.csproj ================================================ net10.0 true all runtime; build; native; contentfiles; analyzers; buildtransitive ================================================ FILE: projects/security/dataprotection/ef-key-store/src/Pages/Error.cshtml ================================================ @page @model ErrorModel @{ ViewData["Title"] = "Error"; }

              Error.

              An error occurred while processing your request.

              @if (Model.ShowRequestId) {

              Request ID: @Model.RequestId

              }

              Development Mode

              Swapping to the Development environment displays detailed information about the error that occurred.

              The Development environment shouldn't be enabled for deployed applications. It can result in displaying sensitive information from exceptions to end users. For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development and restarting the app.

              ================================================ FILE: projects/security/dataprotection/ef-key-store/src/Pages/Error.cshtml.cs ================================================ using System.Diagnostics; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Logging; namespace PANC.DataProtection.EFCoreKeyStore.Pages { [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] [IgnoreAntiforgeryToken] public class ErrorModel : PageModel { public string RequestId { get; set; } public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); private readonly ILogger _logger; public ErrorModel(ILogger logger) { _logger = logger; } public void OnGet() { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier; } } } ================================================ FILE: projects/security/dataprotection/ef-key-store/src/Pages/Index.cshtml ================================================ @page @model IndexModel @{ ViewData["Title"] = "Home page"; }

              Entity Framework Core Key Store Example

              Learn about Entity Frameowrk Core Key Store Provider.

              @if(!string.IsNullOrEmpty(Model.EncryptedString)) {
              Encrypted String:
              @Model.EncryptedString
              DeCrypted String:
              @Model.DeCryptedString
              }
              ================================================ FILE: projects/security/dataprotection/ef-key-store/src/Pages/Index.cshtml.cs ================================================ using System.ComponentModel.DataAnnotations; using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Logging; namespace PANC.DataProtection.EFCoreKeyStore.Pages { public class IndexModel : PageModel { private readonly IDataProtector _protector; private readonly ILogger _logger; public string EncryptedString { get; private set; } public string DeCryptedString { get; private set; } public IndexModel(ILogger logger, IDataProtectionProvider dataProtectionProvider) { _protector = dataProtectionProvider.CreateProtector("DP.DefaultSettings.V1"); _logger = logger; } public void OnGet() { } [Required(ErrorMessage = "Enter string to encrypt.")] [BindProperty] public string StringToEncrypt { get; set; } public void OnPost() { EncryptedString = _protector.Protect(StringToEncrypt); DeCryptedString = _protector.Unprotect(EncryptedString); } } } ================================================ FILE: projects/security/dataprotection/ef-key-store/src/Pages/Shared/_Layout.cshtml ================================================  @ViewData["Title"] - src
              @RenderBody()
              ================================================ FILE: projects/security/dataprotection/ef-key-store/src/Pages/_ViewImports.cshtml ================================================ @using PANC.DataProtection.EFCoreKeyStore @namespace PANC.DataProtection.EFCoreKeyStore.Pages @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: projects/security/dataprotection/ef-key-store/src/Pages/_ViewStart.cshtml ================================================ @{ Layout = "_Layout"; } ================================================ FILE: projects/security/dataprotection/ef-key-store/src/Program.cs ================================================ using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; namespace PANC.DataProtection.EFCoreKeyStore { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); }); } } ================================================ FILE: projects/security/dataprotection/ef-key-store/src/Startup.cs ================================================ using PANC.DataProtection.EFCoreKeyStore.Data; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.Hosting; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; namespace PANC.DataProtection.EFCoreKeyStore { public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { var storageConnectionString = Configuration["DataProtection:DefaultConnection"]; // Add a DbContext to store your Database Keys services.AddDbContext(options => options.UseSqlServer(storageConnectionString)); // using Microsoft.AspNetCore.DataProtection; services.AddDataProtection() .PersistKeysToDbContext(); services.AddRazorPages(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); }); } } } ================================================ FILE: projects/security/dataprotection/ef-key-store/src/appsettings.Development.json ================================================ { "DetailedErrors": true, "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } } } ================================================ FILE: projects/security/dataprotection/ef-key-store/src/appsettings.json ================================================ { "DataProtection": { "DefaultConnection": "Data Source=(localdb)\\ProjectsV13;Initial Catalog=DPEFCoreKeyStore;Integrated Security=True;" }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*" } ================================================ FILE: projects/security/dataprotection/redis-key-store/Pages/Error.cshtml ================================================ @page @model ErrorModel @{ ViewData["Title"] = "Error"; }

              Error.

              An error occurred while processing your request.

              @if (Model.ShowRequestId) {

              Request ID: @Model.RequestId

              }

              Development Mode

              Swapping to the Development environment displays detailed information about the error that occurred.

              The Development environment shouldn't be enabled for deployed applications. It can result in displaying sensitive information from exceptions to end users. For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development and restarting the app.

              ================================================ FILE: projects/security/dataprotection/redis-key-store/Pages/Error.cshtml.cs ================================================ using System.Diagnostics; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Logging; namespace PANC.DataProtection.RedisKeyStore.Pages { [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] [IgnoreAntiforgeryToken] public class ErrorModel : PageModel { public string RequestId { get; set; } public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); private readonly ILogger _logger; public ErrorModel(ILogger logger) { _logger = logger; } public void OnGet() { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier; } } } ================================================ FILE: projects/security/dataprotection/redis-key-store/Pages/Index.cshtml ================================================ @page @model IndexModel @{ ViewData["Title"] = "Home page"; }

              Redis Key Store Example

              Learn about Redis Key Store Provider.

              @if(!string.IsNullOrEmpty(Model.EncryptedString)) {
              Encrypted String:
              @Model.EncryptedString
              DeCrypted String:
              @Model.DeCryptedString
              }
              ================================================ FILE: projects/security/dataprotection/redis-key-store/Pages/Index.cshtml.cs ================================================ using System.ComponentModel.DataAnnotations; using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Logging; namespace PANC.DataProtection.RedisKeyStore.Pages { public class IndexModel : PageModel { private readonly IDataProtector _protector; private readonly ILogger _logger; public string EncryptedString { get; private set; } public string DeCryptedString { get; private set; } public IndexModel(ILogger logger, IDataProtectionProvider dataProtectionProvider) { _protector = dataProtectionProvider.CreateProtector("DP.DefaultSettings.V1"); _logger = logger; } public void OnGet() { } [Required(ErrorMessage = "Enter string to encrypt.")] [BindProperty] public string StringToEncrypt { get; set; } public void OnPost() { EncryptedString = _protector.Protect(StringToEncrypt); DeCryptedString = _protector.Unprotect(EncryptedString); } } } ================================================ FILE: projects/security/dataprotection/redis-key-store/Pages/Shared/_Layout.cshtml ================================================  @ViewData["Title"] - src
              @RenderBody()
              ================================================ FILE: projects/security/dataprotection/redis-key-store/Pages/_ViewImports.cshtml ================================================ @using PANC.DataProtection.RedisKeyStore @namespace PANC.DataProtection.RedisKeyStore.Pages @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: projects/security/dataprotection/redis-key-store/Pages/_ViewStart.cshtml ================================================ @{ Layout = "_Layout"; } ================================================ FILE: projects/security/dataprotection/redis-key-store/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using StackExchange.Redis; var builder = WebApplication.CreateBuilder(); var configuration = builder.Configuration; var redisServer = configuration["DataProtection:RedisServer"]; var redisPassword = configuration["DataProtection:RedisPassword"]; var redisKey = configuration["DataProtection:RedisKey"]; var redis = ConnectionMultiplexer.Connect($"{redisServer},password={redisPassword}"); builder.Services.AddDataProtection().PersistKeysToStackExchangeRedis(redis, redisKey); builder.Services.AddRazorPages(); var app = builder.Build(); app.UseStaticFiles(); app.UseAuthorization(); app.MapRazorPages(); app.Run(); ================================================ FILE: projects/security/dataprotection/redis-key-store/README.md ================================================ Redis Key Store ======== This sample showcases data protection with keys stored in Redis. * Package `Microsoft.AspNetCore.DataProtection.StackExchangeRedis` is added to the project. * Redis configuration is set up in appsettings. ``` "DataProtection": { ... "RedisServer": "", "RedisPassword": "", "RedisKey": "dp-keys" ... } ``` * Key persistence is set up in StartUp ConfigureServices(). ``` public void ConfigureServices(IServiceCollection services) { ... var redisServer = Configuration["DataProtection:RedisServer"]; var redisPassword = Configuration["DataProtection:RedisPassword"]; var redisKey = Configuration["DataProtection:RedisKey"]; var redis = ConnectionMultiplexer.Connect($"{redisServer},password={redisPassword}"); services.AddDataProtection() .PersistKeysToStackExchangeRedis(redis,redisKey); ... } ``` ## Reference [Data Protection Key Persistence using Redis](https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/implementation/key-storage-providers?view=aspnetcore-5.0&tabs=visual-studio#redis) ## Screenshot ## Credits [Lohith GN](https://github.com/lohithgn) dotnet6 ================================================ FILE: projects/security/dataprotection/redis-key-store/RedisKeyStore.csproj ================================================ net10.0 true ================================================ FILE: projects/security/dataprotection/redis-key-store/appsettings.Development.json ================================================ { "DetailedErrors": true, "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } } } ================================================ FILE: projects/security/dataprotection/redis-key-store/appsettings.json ================================================ { "DataProtection": { "RedisServer": "localhost:6379", "RedisPassword": "", "RedisKey": "dp-keys" }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*" } ================================================ FILE: projects/sfa/README.md ================================================ # Single File Application (2) Single File Application (SFA) is software written in just a single file `Program.cs` and the project file. We will be using the latest version of .NET 6, ASP.NET Core 6 and C# 10. We will be using C# 9 top level statements extensively. This style of development is not necessarily the best way to organize your code in production but it is **fun** to write small web apps this way. * [Wiki](wiki) This is a wiki system with markdown support in less than 500 lines of code. Everything is written in a single `Program.cs`. * [Time Remaining](remaining-time) This is a tiny system to generate chart of a project remaining time in weeks. Everything is written in a single `Program.cs`. dotnet6 ================================================ FILE: projects/sfa/remaining-time/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; var app = WebApplication.Create(); app.MapGet("/", () => { var header = @" "; var footer = @""; var script = @" "; var page = header + @"

              Remaining Time

              " + script + footer; return Results.Text(page, "text/html"); }); app.Run(); ================================================ FILE: projects/sfa/remaining-time/README.md ================================================ # Remaining Time This is a simple program to visual the remaining weeks in a project. Everything is written in a single `program.cs` file. It uses the following JavaScript components: * [chart.js](https://www.chartjs.org/) * [chartjs-plugin-datalables](https://chartjs-plugin-datalabels.netlify.app/guide/labels.html#multiple-labels) **Screenshot** ![screenshot of the running program](remaining-time.png) ================================================ FILE: projects/sfa/remaining-time/remaining-time.csproj ================================================ net10.0 enable true ================================================ FILE: projects/sfa/wiki/Program.cs ================================================ using FluentValidation; using FluentValidation.AspNetCore; using Ganss.Xss; using HtmlBuilders; using LiteDB; using Markdig; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Html; using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Primitives; using Scriban; using System.Globalization; using System.Text.RegularExpressions; using static HtmlBuilders.HtmlTags; const string DisplayDateFormat = "MMMM dd, yyyy"; const string HomePageName = "home-page"; const string HtmlMime = "text/html"; var builder = WebApplication.CreateBuilder(); builder.Services .AddSingleton() .AddSingleton() .AddAntiforgery() .AddMemoryCache(); builder.Logging.AddConsole().SetMinimumLevel(LogLevel.Warning); var app = builder.Build(); // Load home page app.MapGet("/", (Wiki wiki, Render render) => { Page? page = wiki.GetPage(HomePageName); if (page is not object) return Results.Redirect($"/{HomePageName}"); return Results.Text(render.BuildPage(HomePageName, atBody: () => new[] { RenderPageContent(page), RenderPageAttachments(page), A.Href($"/edit?pageName={HomePageName}").Class("uk-button uk-button-default uk-button-small").Append("Edit").ToHtmlString() }, atSidePanel: () => AllPages(wiki) ).ToString(), HtmlMime); }); app.MapGet("/new-page", (string? pageName) => { if (string.IsNullOrEmpty(pageName)) Results.Redirect("/"); // Copied from https://www.30secondsofcode.org/c-sharp/s/to-kebab-case string ToKebabCase(string str) { Regex pattern = new Regex(@"[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+"); return string.Join("-", pattern.Matches(str)).ToLower(); } var page = ToKebabCase(pageName!); return Results.Redirect($"/{page}"); }); // Edit a wiki page app.MapGet("/edit", (string pageName, HttpContext context, Wiki wiki, Render render, IAntiforgery antiForgery) => { Page? page = wiki.GetPage(pageName); if (page is not object) return Results.NotFound(); return Results.Text(render.BuildEditorPage(pageName, atBody: () => new[] { BuildForm(new PageInput(page!.Id, pageName, page.Content, null), path: $"{pageName}", antiForgery: antiForgery.GetAndStoreTokens(context)), RenderPageAttachmentsForEdit(page!, antiForgery.GetAndStoreTokens(context)) }, atSidePanel: () => { var list = new List(); // Do not show delete button on home page if (!pageName!.ToString().Equals(HomePageName, StringComparison.Ordinal)) list.Add(RenderDeletePageButton(page!, antiForgery: antiForgery.GetAndStoreTokens(context))); list.Add(Br.ToHtmlString()); list.AddRange(AllPagesForEditing(wiki)); return list; }).ToString(), HtmlMime); }); // Deal with attachment download app.MapGet("/attachment", (string fileId, Wiki wiki) => { var file = wiki.GetFile(fileId); if (file is not object) return Results.NotFound(); app!.Logger.LogInformation("Attachment " + file.Value.meta.Id + " - " + file.Value.meta.Filename); return Results.File(file.Value.file, file.Value.meta.MimeType); }); // Load a wiki page app.MapGet("/{pageName}", (string pageName, HttpContext context, Wiki wiki, Render render, IAntiforgery antiForgery) => { pageName = pageName ?? ""; Page? page = wiki.GetPage(pageName); if (page is object) { return Results.Text(render.BuildPage(pageName, atBody: () => new[] { RenderPageContent(page), RenderPageAttachments(page), Div.Class("last-modified").Append("Last modified: " + page!.LastModifiedUtc.ToString(DisplayDateFormat)).ToHtmlString(), A.Href($"/edit?pageName={pageName}").Append("Edit").ToHtmlString() }, atSidePanel: () => AllPages(wiki) ).ToString(), HtmlMime); } else { return Results.Text(render.BuildEditorPage(pageName, atBody: () => new[] { BuildForm(new PageInput(null, pageName, string.Empty, null), path: pageName, antiForgery: antiForgery.GetAndStoreTokens(context)) }, atSidePanel: () => AllPagesForEditing(wiki)).ToString(), HtmlMime); } }); // Delete a page app.MapPost("/delete-page", async (HttpContext context, IAntiforgery antiForgery, Wiki wiki) => { await antiForgery.ValidateRequestAsync(context); var id = context.Request.Form["Id"]; if (StringValues.IsNullOrEmpty(id)) { app.Logger.LogWarning($"Unable to delete page because form Id is missing"); return Results.Redirect("/"); } var (isOk, exception) = wiki.DeletePage(Convert.ToInt32(id), HomePageName); if (!isOk && exception is object) app.Logger.LogError(exception, $"Error in deleting page id {id}"); else if (!isOk) app.Logger.LogError($"Unable to delete page id {id}"); return Results.Redirect("/"); }); app.MapPost("/delete-attachment", async (HttpContext context, IAntiforgery antiForgery, Wiki wiki)=> { await antiForgery.ValidateRequestAsync(context); var id = context.Request.Form["Id"]; if (StringValues.IsNullOrEmpty(id)) { app.Logger.LogWarning($"Unable to delete attachment because form Id is missing"); return Results.Redirect("/"); } var pageId = context.Request.Form["PageId"]; if (StringValues.IsNullOrEmpty(pageId)) { app.Logger.LogWarning($"Unable to delete attachment because form PageId is missing"); return Results.Redirect("/"); } var (isOk, page, exception) = wiki.DeleteAttachment(Convert.ToInt32(pageId), id.ToString()); if (!isOk) { if (exception is object) app.Logger.LogError(exception, $"Error in deleting page attachment id {id}"); else app.Logger.LogError($"Unable to delete page attachment id {id}"); if (page is object) return Results.Redirect($"/{page.Name}"); else return Results.Redirect("/"); } return Results.Redirect($"/{page!.Name}"); }); // Add or update a wiki page app.MapPost("/{pageName}", async (HttpContext context, Wiki wiki, Render render, IAntiforgery antiForgery) => { var pageName = context.Request.RouteValues["pageName"] as string ?? ""; await antiForgery.ValidateRequestAsync(context); PageInput input = PageInput.From(context.Request.Form); var modelState = new ModelStateDictionary(); var validator = new PageInputValidator(pageName, HomePageName); validator.Validate(input).AddToModelState(modelState, null); if (!modelState.IsValid) { return Results.Text(render.BuildEditorPage(pageName, atBody: () => new[] { BuildForm(input, path: $"{pageName}", antiForgery: antiForgery.GetAndStoreTokens(context), modelState) }, atSidePanel: () => AllPages(wiki)).ToString(), HtmlMime); } var (isOk, p, ex) = wiki.SavePage(input); if (!isOk) { app.Logger.LogError(ex, "Problem in saving page"); return Results.Problem("Progblem in saving page"); } return Results.Redirect($"/{p!.Name}"); }); await app.RunAsync(); // End of the web part static string[] AllPages(Wiki wiki) => new[] { @"Pages", @"
                ", string.Join("", wiki.ListAllPages().OrderBy(x => x.Name) .Select(x => Li.Append(A.Href(x.Name).Append(x.Name)).ToHtmlString() ) ), "
              " }; static string[] AllPagesForEditing(Wiki wiki) { static string KebabToNormalCase(string txt) => CultureInfo.CurrentCulture.TextInfo.ToTitleCase(txt.Replace('-', ' ')); return new[] { @"Pages", @"
                ", string.Join("", wiki.ListAllPages().OrderBy(x => x.Name) .Select(x => Li.Append(Div.Class("uk-inline") .Append(Span.Class("uk-form-icon").Attribute("uk-icon", "icon: copy")) .Append(Input.Text.Value($"[{KebabToNormalCase(x.Name)}](/{x.Name})").Class("uk-input uk-form-small").Style("cursor", "pointer").Attribute("onclick", "copyMarkdownLink(this);")) ).ToHtmlString() ) ), "
              " }; } static string RenderMarkdown(string str) { var sanitizer = new HtmlSanitizer(); return sanitizer.Sanitize(Markdown.ToHtml(str, new MarkdownPipelineBuilder().UseSoftlineBreakAsHardlineBreak().UseAdvancedExtensions().Build())); } static string RenderPageContent(Page page) => RenderMarkdown(page.Content); static string RenderDeletePageButton(Page page, AntiforgeryTokenSet antiForgery) { var antiForgeryField = Input.Hidden.Name(antiForgery.FormFieldName).Value(antiForgery.RequestToken!); HtmlTag id = Input.Hidden.Name("Id").Value(page.Id.ToString()); var submit = Div.Style("margin-top", "20px").Append(Button.Class("uk-button uk-button-danger").Append("Delete Page")); var form = Form .Attribute("method", "post") .Attribute("action", $"/delete-page") .Attribute("onsubmit", $"return confirm('Please confirm to delete this page');") .Append(antiForgeryField) .Append(id) .Append(submit); return form.ToHtmlString(); } static string RenderPageAttachmentsForEdit(Page page, AntiforgeryTokenSet antiForgery) { if (page.Attachments.Count == 0) return string.Empty; var label = Span.Class("uk-label").Append("Attachments"); var list = Ul.Class("uk-list"); HtmlTag CreateEditorHelper(Attachment attachment) => Span.Class("uk-inline") .Append(Span.Class("uk-form-icon").Attribute("uk-icon", "icon: copy")) .Append(Input.Text.Value($"[{attachment.FileName}](/attachment?fileId={attachment.FileId})") .Class("uk-input uk-form-small uk-form-width-large") .Style("cursor", "pointer") .Attribute("onclick", "copyMarkdownLink(this);") ); static HtmlTag CreateDelete(int pageId, string attachmentId, AntiforgeryTokenSet antiForgery) { var antiForgeryField = Input.Hidden.Name(antiForgery.FormFieldName).Value(antiForgery.RequestToken!); var id = Input.Hidden.Name("Id").Value(attachmentId.ToString()); var name = Input.Hidden.Name("PageId").Value(pageId.ToString()); var submit = Button.Class("uk-button uk-button-danger uk-button-small").Append(Span.Attribute("uk-icon", "icon: close; ratio: .75;")); var form = Form .Style("display", "inline") .Attribute("method", "post") .Attribute("action", $"/delete-attachment") .Attribute("onsubmit", $"return confirm('Please confirm to delete this attachment');") .Append(antiForgeryField) .Append(id) .Append(name) .Append(submit); return form; } foreach (var attachment in page.Attachments) { list = list.Append(Li .Append(CreateEditorHelper(attachment)) .Append(CreateDelete(page.Id, attachment.FileId, antiForgery)) ); } return label.ToHtmlString() + list.ToHtmlString(); } static string RenderPageAttachments(Page page) { if (page.Attachments.Count == 0) return string.Empty; var label = Span.Class("uk-label").Append("Attachments"); var list = Ul.Class("uk-list uk-list-disc"); foreach (var attachment in page.Attachments) { list = list.Append(Li.Append(A.Href($"/attachment?fileId={attachment.FileId}").Append(attachment.FileName))); } return label.ToHtmlString() + list.ToHtmlString(); } // Build the wiki input form static string BuildForm(PageInput input, string path, AntiforgeryTokenSet antiForgery, ModelStateDictionary? modelState = null) { bool IsFieldOK(string key) => modelState!.ContainsKey(key) && modelState[key]!.ValidationState == ModelValidationState.Invalid; var antiForgeryField = Input.Hidden.Name(antiForgery.FormFieldName).Value(antiForgery.RequestToken!); var nameField = Div .Append(Label.Class("uk-form-label").Append(nameof(input.Name))) .Append(Div.Class("uk-form-controls") .Append(Input.Text.Class("uk-input").Name("Name").Value(input.Name)) ); var contentField = Div .Append(Label.Class("uk-form-label").Append(nameof(input.Content))) .Append(Div.Class("uk-form-controls") .Append(Textarea.Name("Content").Class("uk-textarea").Append(input.Content)) ); var attachmentField = Div .Append(Label.Class("uk-form-label").Append(nameof(input.Attachment))) .Append(Div.Attribute("uk-form-custom", "target: true") .Append(Input.File.Name("Attachment")) .Append(Input.Text.Class("uk-input uk-form-width-large").Attribute("placeholder", "Click to select file").ToggleAttribute("disabled", true)) ); if (modelState is object && !modelState.IsValid) { if (IsFieldOK("Name")) { foreach (var er in modelState["Name"]!.Errors) { nameField = nameField.Append(Div.Class("uk-form-danger uk-text-small").Append(er.ErrorMessage)); } } if (IsFieldOK("Content")) { foreach (var er in modelState["Content"]!.Errors) { contentField = contentField.Append(Div.Class("uk-form-danger uk-text-small").Append(er.ErrorMessage)); } } } var submit = Div.Style("margin-top", "20px").Append(Button.Class("uk-button uk-button-primary").Append("Submit")); var form = Form .Class("uk-form-stacked") .Attribute("method", "post") .Attribute("enctype", "multipart/form-data") .Attribute("action", $"/{path}") .Append(antiForgeryField) .Append(nameField) .Append(contentField) .Append(attachmentField); if (input.Id is object) { HtmlTag id = Input.Hidden.Name("Id").Value(input.Id.ToString()!); form = form.Append(id); } form = form.Append(submit); return form.ToHtmlString(); } class Render { static string KebabToNormalCase(string txt) => CultureInfo.CurrentCulture.TextInfo.ToTitleCase(txt.Replace('-', ' ')); static string[] MarkdownEditorHead() => new[] { @"", @"" }; static string[] MarkdownEditorFoot() => new[] { @"" }; (Template head, Template body, Template layout) _templates = ( head: Scriban.Template.Parse( """ {{ title }} {{ header }} """), body: Scriban.Template.Parse(""" {{ if at_side_panel != "" }}

              {{ page_name }}

              {{ content }}
              {{ at_side_panel }}
              {{ else }}

              {{ page_name }}

              {{ content }}
              {{ end }} {{ at_foot }} """), layout: Scriban.Template.Parse(""" {{ head }} {{ body }} """) ); // Use only when the page requires editor public HtmlString BuildEditorPage(string title, Func> atBody, Func>? atSidePanel = null) => BuildPage( title, atHead: () => MarkdownEditorHead(), atBody: atBody, atSidePanel: atSidePanel, atFoot: () => MarkdownEditorFoot() ); // General page layout building function public HtmlString BuildPage(string title, Func>? atHead = null, Func>? atBody = null, Func>? atSidePanel = null, Func>? atFoot = null) { var head = _templates.head.Render(new { title, header = string.Join("\r", atHead?.Invoke() ?? new[] { "" }) }); var body = _templates.body.Render(new { PageName = KebabToNormalCase(title), Content = string.Join("\r", atBody?.Invoke() ?? new[] { "" }), AtSidePanel = string.Join("\r", atSidePanel?.Invoke() ?? new[] { "" }), AtFoot = string.Join("\r", atFoot?.Invoke() ?? new[] { "" }) }); return new HtmlString(_templates.layout.Render(new { head, body })); } } class Wiki { DateTime Timestamp() => DateTime.UtcNow; const string PageCollectionName = "Pages"; const string AllPagesKey = "AllPages"; const double CacheAllPagesForMinutes = 30; readonly IWebHostEnvironment _env; readonly IMemoryCache _cache; readonly ILogger _logger; public Wiki(IWebHostEnvironment env, IMemoryCache cache, ILogger logger) { _env = env; _cache = cache; _logger = logger; } // Get the location of the LiteDB file. string GetDbPath() => Path.Combine(_env.ContentRootPath, "wiki.db"); // List all the available wiki pages. It is cached for 30 minutes. public List ListAllPages() { var pages = _cache.Get(AllPagesKey) as List; if (pages is object) return pages; using var db = new LiteDatabase(GetDbPath()); var coll = db.GetCollection(PageCollectionName); var items = coll.Query().ToList(); _cache.Set(AllPagesKey, items, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(CacheAllPagesForMinutes))); return items; } // Get a wiki page based on its path public Page? GetPage(string path) { using var db = new LiteDatabase(GetDbPath()); var coll = db.GetCollection(PageCollectionName); coll.EnsureIndex(x => x.Name); return coll.Query() .Where(x => x.Name.Equals(path, StringComparison.OrdinalIgnoreCase)) .FirstOrDefault(); } // Save or update a wiki page. Cache(AllPagesKey) will be destroyed. public (bool isOk, Page? page, Exception? ex) SavePage(PageInput input) { try { using var db = new LiteDatabase(GetDbPath()); var coll = db.GetCollection(PageCollectionName); coll.EnsureIndex(x => x.Name); Page? existingPage = input.Id.HasValue ? coll.FindOne(x => x.Id == input.Id) : null; var sanitizer = new HtmlSanitizer(); var properName = input.Name.ToString().Trim().Replace(' ', '-').ToLower(); Attachment? attachment = null; if (!string.IsNullOrWhiteSpace(input.Attachment?.FileName)) { attachment = new Attachment ( FileId: Guid.NewGuid().ToString(), FileName: input.Attachment.FileName, MimeType: input.Attachment.ContentType, LastModifiedUtc: Timestamp() ); using var stream = input.Attachment.OpenReadStream(); var res = db.FileStorage.Upload(attachment.FileId, input.Attachment.FileName, stream); } if (existingPage is not object) { var newPage = new Page { Name = sanitizer.Sanitize(properName), Content = input.Content, //Do not sanitize on input because it will impact some markdown tag such as >. We do it on the output instead. LastModifiedUtc = Timestamp() }; if (attachment is object) newPage.Attachments.Add(attachment); coll.Insert(newPage); _cache.Remove(AllPagesKey); return (true, newPage, null); } else { var updatedPage = existingPage with { Name = sanitizer.Sanitize(properName), Content = input.Content, //Do not sanitize on input because it will impact some markdown tag such as >. We do it on the output instead. LastModifiedUtc = Timestamp() }; if (attachment is object) updatedPage.Attachments.Add(attachment); coll.Update(updatedPage); _cache.Remove(AllPagesKey); return (true, updatedPage, null); } } catch (Exception ex) { _logger.LogError(ex, $"There is an exception in trying to save page name '{input.Name}'"); return (false, null, ex); } } public (bool isOk, Page? p, Exception? ex) DeleteAttachment(int pageId, string id) { try { using var db = new LiteDatabase(GetDbPath()); var coll = db.GetCollection(PageCollectionName); var page = coll.FindById(pageId); if (page is not object) { _logger.LogWarning($"Delete attachment operation fails because page id {id} cannot be found in the database"); return (false, null, null); } if (!db.FileStorage.Delete(id)) { _logger.LogWarning($"We cannot delete this file attachment id {id} and it's a mystery why"); return (false, page, null); } page.Attachments.RemoveAll(x => x.FileId.Equals(id, StringComparison.OrdinalIgnoreCase)); var updateResult = coll.Update(page); if (!updateResult) { _logger.LogWarning($"Delete attachment works but updating the page (id {pageId}) attachment list fails"); return (false, page, null); } return (true, page, null); } catch (Exception ex) { return (false, null, ex); } } public (bool isOk, Exception? ex) DeletePage(int id, string homePageName) { try { using var db = new LiteDatabase(GetDbPath()); var coll = db.GetCollection(PageCollectionName); var page = coll.FindById(id); if (page is not object) { _logger.LogWarning($"Delete operation fails because page id {id} cannot be found in the database"); return (false, null); } if (page.Name.Equals(homePageName, StringComparison.OrdinalIgnoreCase)) { _logger.LogWarning($"Page id {id} is a home page and elete operation on home page is not allowed"); return (false, null); } //Delete all the attachments foreach (var a in page.Attachments) { db.FileStorage.Delete(a.FileId); } if (coll.Delete(id)) { _cache.Remove(AllPagesKey); return (true, null); } _logger.LogWarning($"Somehow we cannot delete page id {id} and it's a mistery why."); return (false, null); } catch (Exception ex) { return (false, ex); } } // Return null if file cannot be found. public (LiteFileInfo meta, byte[] file)? GetFile(string fileId) { using var db = new LiteDatabase(GetDbPath()); var meta = db.FileStorage.FindById(fileId); if (meta is not object) return null; using var stream = new MemoryStream(); db.FileStorage.Download(fileId, stream); return (meta, stream.ToArray()); } } record Page { public int Id { get; set; } public string Name { get; set; } = string.Empty; public string Content { get; set; } = string.Empty; public DateTime LastModifiedUtc { get; set; } public List Attachments { get; set; } = new(); } record Attachment ( string FileId, string FileName, string MimeType, DateTime LastModifiedUtc ); record PageInput(int? Id, string Name, string Content, IFormFile? Attachment) { public static PageInput From(IFormCollection form) { var (id, name, content) = (form["Id"], form["Name"], form["Content"]); int? pageId = null; if (!StringValues.IsNullOrEmpty(id)) pageId = Convert.ToInt32(id); IFormFile? file = form.Files["Attachment"]; return new PageInput(pageId, name!, content!, file); } } class PageInputValidator : AbstractValidator { public PageInputValidator(string pageName, string homePageName) { RuleFor(x => x.Name).NotEmpty().WithMessage("Name is required"); if (pageName.Equals(homePageName, StringComparison.OrdinalIgnoreCase)) RuleFor(x => x.Name).Must(name => name.Equals(homePageName)).WithMessage($"You cannot modify home page name. Please keep it {homePageName}"); RuleFor(x => x.Content).NotEmpty().WithMessage("Content is required"); } } ================================================ FILE: projects/sfa/wiki/README.md ================================================ # Wiki This is a Single File Application (SFA) that provide wiki functionality. - It supports markdown - You can rename pages - It is stored using LiteDB - It has a nice markdown editor - You can upload attachments in every page - You can delete attachments - You can delete pages - It has pages and attachment markdown linking helpers All the code (810 lines) is contained within `Program.cs`. Used libraries: * Storage - [LiteDB](https://github.com/mbdavid/LiteDB). * Text Template - [Scriban](https://github.com/lunet-io/scriban). * Markdown Support - [Markdig](https://github.com/lunet-io/markdig). * Validation - [FluentValidation](https://github.com/FluentValidation/FluentValidation). * Html Generation - [HtmlBuilders](https://github.com/amoerie/HtmlBuilders). * Markdown Editor - [EasyMDE](https://github.com/Ionaru/easy-markdown-editor). * Sanitizing Input - [HtmlSanitizer](https://github.com/mganss/HtmlSanitizer). **Screenshot** ![screenshot of the running wiki](fanon.png) dotnet6 ================================================ FILE: projects/sfa/wiki/wiki.csproj ================================================ net10.0 enable true ================================================ FILE: projects/sfa/wiki/wiki.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "wiki", "wiki.csproj", "{BD4F3D16-D4B7-4663-B4AB-72BDBEA7391B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {BD4F3D16-D4B7-4663-B4AB-72BDBEA7391B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BD4F3D16-D4B7-4663-B4AB-72BDBEA7391B}.Debug|Any CPU.Build.0 = Debug|Any CPU {BD4F3D16-D4B7-4663-B4AB-72BDBEA7391B}.Release|Any CPU.ActiveCfg = Release|Any CPU {BD4F3D16-D4B7-4663-B4AB-72BDBEA7391B}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {66E15924-BA6C-475F-979B-999AE50E98EE} EndGlobalSection EndGlobal ================================================ FILE: projects/signalr/README.md ================================================ # SignalR (1) * [Public Chat](/projects/signalr/signalr-1) This is the 'hello world' of SignalR. It demonstrates accessing SignalR from a JavaScript client. ================================================ FILE: projects/signalr/signalr-1/.gitignore ================================================ node_modules/ bin/ obj/ ================================================ FILE: projects/signalr/signalr-1/Client/Client.csproj ================================================ net10.0 true ================================================ FILE: projects/signalr/signalr-1/Client/Controllers/HomeController.cs ================================================ using Microsoft.AspNetCore.Mvc; namespace PracticalAspNetCore { public class HomeController : Controller { [Route("/")] public IActionResult Index() => View(); } } ================================================ FILE: projects/signalr/signalr-1/Client/Program.cs ================================================ using Microsoft.Extensions.FileProviders; var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); builder.WebHost.UseUrls("http://localhost:5002/"); var app = builder.Build(); app.UseStaticFiles(); app.UseStaticFiles(new StaticFileOptions() { FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @"node_modules")), RequestPath = new PathString("/node_modules") }); app.UseRouting(); app.MapDefaultControllerRoute(); app.Run(); ================================================ FILE: projects/signalr/signalr-1/Client/Views/Home/Index.cshtml ================================================ Note: don't forget to run npm install to install the javascript client
              Also open two tabs at least

              All Messages


                @section scripts { } ================================================ FILE: projects/signalr/signalr-1/Client/Views/Shared/_Layout.cshtml ================================================ ASP.NET Core SignalR
                @RenderBody() @RenderSection("scripts", required: false)
                ================================================ FILE: projects/signalr/signalr-1/Client/Views/_ViewStart.cshtml ================================================ @{ Layout = "_Layout"; } ================================================ FILE: projects/signalr/signalr-1/Client/package.json ================================================ { "dependencies": { "@microsoft/signalr": "^6.0.4" } } ================================================ FILE: projects/signalr/signalr-1/Readme.md ================================================ ## Simple example of ASP.NET Core 6.0 and SignalR Core 1. Run `npm install` at `Client` directory. 2. To run just execute `dotnet run` inside both `Client` and `Server` directory in separate clis. 3. Go to `http://localhost:5001` in two tabs 4. Start chatting away (kinda) ================================================ FILE: projects/signalr/signalr-1/Server/Program.cs ================================================ using Microsoft.AspNetCore.SignalR; var builder = WebApplication.CreateBuilder(); builder.Services.AddCors(options => { options.AddPolicy("all", policy => policy.WithOrigins("http://localhost:5002") .AllowAnyHeader() .AllowAnyMethod() .AllowCredentials()); }); builder.Services.AddSignalR().AddJsonProtocol(); var app = builder.Build(); app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseCors("all"); app.MapHub("/chatHub"); app.Run(async context => { await context.Response.WriteAsync("This site host signalR server that allows remote clients to access thanks to CORS all policy."); }); app.Run(); public class ChatHub : Hub { public async Task Send(string message) { await this.Clients.All.SendAsync("Send", message); } } ================================================ FILE: projects/signalr/signalr-1/Server/signalr.csproj ================================================ net10.0 true ================================================ FILE: projects/sse/Program.cs ================================================ using System.Runtime.CompilerServices; using System.Runtime.CompilerServices; var builder = WebApplication.CreateBuilder(); var app = builder.Build(); async IAsyncEnumerable CounterAsync([EnumeratorCancellation] CancellationToken cancellationToken) { int count = 0; while (true && !cancellationToken.IsCancellationRequested) { yield return $"hello world {++count}"; await Task.Delay(3000, cancellationToken); } } if (context.Request.Headers.Accept == "text/event-stream") { return Results.ServerSentEvents(CounterAsync(cancellationToken), eventType: "greeting"); } else { return Results.BadRequest("Unsupported Accept header. Use 'text/event-stream'."); } }); app.MapGet("/", async context => { await context.Response.WriteAsync(@"

                SSE with Built-in Support

                  "); }); app.Run(); IEnumerable Counter() { int count = 0; while (true) { yield return ++count; } } ================================================ FILE: projects/sse/README.md ================================================ # Built-in Server-Sent Events This sample demonstrates ASP.NET Core 10's built-in Server-Sent Events (SSE) support using `Results.ServerSentEvents()`. ## Running the Sample ```bash dotnet watch run ``` Navigate to `http://localhost:5000/` to see the SSE client in action. ## Key Features - Built-in SSE support via `Results.ServerSentEvents()` - Type-safe with `IAsyncEnumerable` - Automatic flush management - Proper cancellation token handling - No manual protocol implementation needed ## How It Works The endpoint returns `Results.ServerSentEvents()` with an `IAsyncEnumerable`: ```csharp app.MapGet("/sse", (HttpContext context, CancellationToken cancellationToken) => { async IAsyncEnumerable CounterAsync([EnumeratorCancellation] CancellationToken cancellationToken) { int count = 0; while (true && !cancellationToken.IsCancellationRequested) { yield return $"hello world {++count}"; await Task.Delay(3000, cancellationToken); } } if (context.Request.Headers["Accept"] == "text/event-stream") { return Results.ServerSentEvents(CounterAsync(cancellationToken), eventType: "greeting"); } else { return Results.BadRequest("Unsupported Accept header. Use 'text/event-stream'."); } }); app.MapGet("/", async context => { await context.Response.WriteAsync(@"

                  SSE with Built-in Support

                    "); }); app.Run(); ================================================ FILE: projects/sse/sse.csproj ================================================ net10.0 true ================================================ FILE: projects/sse/sse.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "sse", "sse.csproj", "{F688D32A-78A1-4F19-AC33-6F9181074B14}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {F688D32A-78A1-4F19-AC33-6F9181074B14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F688D32A-78A1-4F19-AC33-6F9181074B14}.Debug|Any CPU.Build.0 = Debug|Any CPU {F688D32A-78A1-4F19-AC33-6F9181074B14}.Release|Any CPU.ActiveCfg = Release|Any CPU {F688D32A-78A1-4F19-AC33-6F9181074B14}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {5453C324-BECC-4693-8651-FC5A83EB6B99} EndGlobalSection EndGlobal ================================================ FILE: projects/starting-developer/README.md ================================================ # Starting Developer Guide (Work in Progress) This is a guide designed for people who are starting web development. I would assume a basic skill in C# programming language. ## The Plan Write "Getting Started" tutorial: - Where to download vscode. - Where to download the .NET Core 3.1 SDK. - How to run the samples. Ask the reader to run the hello world sample to make sure that they can get the environment working. Then introduce them to the basics: - Hello World - How to read and write cookies - How to get values from query string - How to obtain value from HTML form - How to handle upload files - How to read from and write to HTTP headers. - How to allow static files files - How to return JSON output - How to handle routes - How to log your app - How to change the port of the webserver - How to use TLS - How to show exceptions during development - etc Data: - How to use it with a database (EF, Dapper, RepoDB) - How to use it with Redis - Etc How to pair it with JavaScript frameworks - AngularJs - VueJs - SvelteJs - ReactJs Application Framework: - Razor Pages - MVC - Blazor Server Side - Blazor - SignalR - etc ================================================ FILE: projects/syndications/README.md ================================================ # Syndications (3) We are using ```Microsoft.SyndicationFeed.ReaderWriter``` package to read RSS and ATOM feeds. * [Syndication - Read RSS](/projects/syndications/syndication-1) This is the shortest amount of code to read an RSS feed. This example read the feed from the inventor of RSS, Dave Winer at http://scripting.com/rss.xml. * [Syndication - Read RSS with extensions](/projects/syndications/syndication-2) This sample process RSS Outline Extension. * [Syndication - NewsServer](/projects/syndications/newsserver-mvc) RSS reader demo using ```Microsoft.ServiceModel.Syndication```. dotnet8 ================================================ FILE: projects/syndications/build.bat ================================================ dotnet build newsserver-mvc dotnet build syndication-1 dotnet build syndication-2 ================================================ FILE: projects/syndications/build.sh ================================================ #!/bin/bash dotnet build newsserver-mvc dotnet build syndication-1 dotnet build syndication-2 ================================================ FILE: projects/syndications/newsserver-mvc/Controllers/HomeController.cs ================================================ using System.Linq; using System.ServiceModel.Syndication; using System.Xml; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using NewsServer.Models; namespace NewsServer.Controllers { public class HomeController : Controller { private readonly NewsServerOptions _newsServerOptions; public HomeController(NewsServerOptions newsServerOptions) { _newsServerOptions = newsServerOptions; } public IActionResult Index(string slug) { var feedList = _newsServerOptions.Feeds; var selectedFeedOption = GetCurrentFeed(slug, feedList); var currentFeed = GetFeedItems(selectedFeedOption); var model = new IndexViewModel { Feeds = _newsServerOptions.Feeds, SelectedFeedOption = selectedFeedOption, CurrentFeed = currentFeed }; return View(model); } private SyndicationFeed GetFeedItems(FeedOption currentFeed) { using var reader = XmlReader.Create(currentFeed.Url, new XmlReaderSettings { Async = true }); return SyndicationFeed.Load(reader); } private FeedOption GetCurrentFeed(string slug, FeedOption[] feedList) { FeedOption currentFeed; if (string.IsNullOrEmpty(slug)) { currentFeed = feedList[0]; } else { currentFeed = feedList.Where(item => item.Name == slug).FirstOrDefault(); } return currentFeed; } } } ================================================ FILE: projects/syndications/newsserver-mvc/Models/ErrorViewModel.cs ================================================ using System; namespace NewsServer.Models { public class ErrorViewModel { public string RequestId { get; set; } public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); } } ================================================ FILE: projects/syndications/newsserver-mvc/Models/IndexViewModel.cs ================================================ using System.ServiceModel.Syndication; namespace NewsServer.Models { public class IndexViewModel { public FeedOption[] Feeds { get; set; } public FeedOption SelectedFeedOption { get; set; } public SyndicationFeed CurrentFeed { get; set; } } } ================================================ FILE: projects/syndications/newsserver-mvc/Models/NewsServerOptions.cs ================================================ namespace NewsServer.Models { public class NewsServerOptions { public const string NewsServer = "NewsServer"; public FeedOption[] Feeds { get; set; } } public class FeedOption { public string Name { get; set; } public string Url { get; set; } } } ================================================ FILE: projects/syndications/newsserver-mvc/NewsServer.csproj ================================================ net10.0 true ================================================ FILE: projects/syndications/newsserver-mvc/Program.cs ================================================ using NewsServer.Models; var builder = WebApplication.CreateBuilder(); builder.Services.AddSingleton(sp => { return builder.Configuration.GetSection(NewsServerOptions.NewsServer).Get(); }); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseAuthorization(); app.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}/{**slug}"); app.Run(); ================================================ FILE: projects/syndications/newsserver-mvc/README.md ================================================ # NewsServer Demo **About:** This sample showcases creating a RSS reader using ASP.NET Core MVC. - Feeds to be read are configured in appsettings.json as below: ``` "NewsServer": { "Feeds": [ { "Name": "MS DevBlogs", "Url": "https://devblogs.microsoft.com/landingpage/" }, ... ] } ``` - Feed is read using ```Microsoft.ServiceModel.Syndication``` library ``` using var reader = XmlReader.Create(feedUrl, new XmlReaderSettings { Async = true }); var feed = SyndicationFeed.Load(reader); ``` **Screenshot:** **Credits**: [Lohith GN](https://github.com/lohithgn) ================================================ FILE: projects/syndications/newsserver-mvc/Views/Home/Index.cshtml ================================================ @model IndexViewModel @{ ViewData["Title"] = @Model.SelectedFeedOption.Name; }

                    @Model.CurrentFeed.Title.Text

                    @Model.CurrentFeed.Description?.Text
                    @foreach (var item in Model.CurrentFeed.Items) {
                    @item.Title.Text
                    @if(item.Authors.Count > 0) { @item.Authors[0].Name | } @item.PublishDate.DateTime.ToString("MMM dd, yyyy")

                    @Html.Raw(item.Summary?.Text)

                    }
                    ================================================ FILE: projects/syndications/newsserver-mvc/Views/Shared/Error.cshtml ================================================ @model ErrorViewModel @{ ViewData["Title"] = "Error"; }

                    Error.

                    An error occurred while processing your request.

                    @if (Model.ShowRequestId) {

                    Request ID: @Model.RequestId

                    }

                    Development Mode

                    Swapping to Development environment will display more detailed information about the error that occurred.

                    The Development environment shouldn't be enabled for deployed applications. It can result in displaying sensitive information from exceptions to end users. For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development and restarting the app.

                    ================================================ FILE: projects/syndications/newsserver-mvc/Views/Shared/_Layout.cshtml ================================================  @ViewData["Title"] - NewsServer
                    @RenderBody()
                    © 2021 - NewsServer
                    ================================================ FILE: projects/syndications/newsserver-mvc/Views/_ViewImports.cshtml ================================================ @using NewsServer @using NewsServer.Models @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers ================================================ FILE: projects/syndications/newsserver-mvc/Views/_ViewStart.cshtml ================================================ @{ Layout = "_Layout"; } ================================================ FILE: projects/syndications/newsserver-mvc/appsettings.Development.json ================================================ { "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } } } ================================================ FILE: projects/syndications/newsserver-mvc/appsettings.json ================================================ { "AllowedHosts": "*", "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "NewsServer": { "Feeds": [ { "Name": "MS DevBlogs", "Url": "https://devblogs.microsoft.com/landingpage/" }, { "Name": "Visual Studio", "Url": "https://devblogs.microsoft.com/visualstudio/feed/" }, { "Name": "Visual Studio Code", "Url": "https://code.visualstudio.com/feed.xml" }, { "Name": "Visual Studio for Mac", "Url": "https://devblogs.microsoft.com/visualstudio/feed/" }, { "Name": "DevOps", "Url": "https://devblogs.microsoft.com/devops/feed/" }, { "Name": "Developer Support", "Url": "https://devblogs.microsoft.com/premier-developer/feed/" }, { "Name": "Azure SDK", "Url": "https://devblogs.microsoft.com/azure-sdk/feed/" }, { "Name": "IoT", "Url": "https://devblogs.microsoft.com/iotdev/feed/" }, { "Name": "Visual C#", "Url": "https://devblogs.microsoft.com/dotnet/tag/c/feed/" }, { "Name": "JavaScript", "Url": "https://devblogs.microsoft.com/visualstudio/tag/javascript/feed/" }, { "Name": ".NET", "Url": "https://devblogs.microsoft.com/dotnet/feed/" }, { "Name": "ASP.NET", "Url": "https://devblogs.microsoft.com/aspnet/feed/" }, { "Name": "Xamarin", "Url": "https://devblogs.microsoft.com/xamarin/feed/" }, { "Name": "Microsoft Azure", "Url": "https://azurecomcdn.azureedge.net/en-us/blog/feed/" }, { "Name": "Azure Cosmos DB", "Url": "https://devblogs.microsoft.com/cosmosdb/feed/" } ] } } ================================================ FILE: projects/syndications/syndication-1/Program.cs ================================================ using Microsoft.SyndicationFeed; using Microsoft.SyndicationFeed.Rss; using System.Xml; using System.Text; var app = WebApplication.Create(); //These are the four default services available at Configure app.Run(async context => { var items = new List(); using (var xmlReader = XmlReader.Create("http://scripting.com/rss.xml", new XmlReaderSettings { Async = true })) { var feedReader = new RssFeedReader(xmlReader); while (await feedReader.Read()) { switch (feedReader.ElementType) { case SyndicationElementType.Item: ISyndicationItem item = await feedReader.ReadItem(); items.Add(new SyndicationItem(item)); break; default: break; } } } var str = new StringBuilder(); str.Append("
                      "); foreach (var i in items) { str.Append($"
                    • {i.Description}
                    • "); } str.Append("
                    "); context.Response.Headers.Append("Content-Type", "text/html"); await context.Response.WriteAsync($@" {str.ToString()} "); }); app.Run(); ================================================ FILE: projects/syndications/syndication-1/syndication.csproj ================================================ net10.0 true ================================================ FILE: projects/syndications/syndication-2/Program.cs ================================================ using Microsoft.SyndicationFeed; using Microsoft.SyndicationFeed.Rss; using System.Xml; using System.Text; var app = WebApplication.Create(); app.Run(async context => { var parser = new RssParser(); var items = new List(); using (var xmlReader = XmlReader.Create("http://scripting.com/rss.xml", new XmlReaderSettings { Async = true })) { var feedReader = new RssFeedReader(xmlReader); while (await feedReader.Read()) { switch (feedReader.ElementType) { case SyndicationElementType.Item: //ISyndicationContent is a raw representation of the feed ISyndicationContent content = await feedReader.ReadContent(); ISyndicationItem item = parser.CreateItem(content); ISyndicationContent outline = content.Fields.FirstOrDefault(f => f.Name == "source:outline"); items.Add(new OutlineSyndicationItem(item, outline)); break; default: break; } } } var str = new StringBuilder(); str.Append("
                      "); foreach (var i in items) { str.Append($"
                    • {i.Item.Description} - "); if (i.Outline != null) { str.Append("
                        "); foreach (var o in i.Outline.Attributes) { str.Append($"
                      • {o.Key} - {o.Value}
                      • "); } str.Append("
                      "); } str.Append("
                    • "); } str.Append("
                    "); context.Response.Headers.Append("Content-Type", "text/html"); await context.Response.WriteAsync($@" {str.ToString()} "); }); app.Run(); public class Outline { public string Text { get; set; } public string this[string key] => Attributes.ContainsKey(key) ? Attributes[key] : null; public Dictionary Attributes { get; set; } = new Dictionary(); } public class OutlineSyndicationItem { public ISyndicationItem Item { get; } public Outline Outline { get; } public OutlineSyndicationItem(ISyndicationItem basic, ISyndicationContent outline) { Item = basic; if (outline != null) { Outline = new Outline { Text = outline.Attributes.FirstOrDefault(x => x.Name.Equals("text", StringComparison.OrdinalIgnoreCase))?.Value, Attributes = outline.Attributes.ToDictionary(x => x.Name, x => x.Value) }; } } } ================================================ FILE: projects/syndications/syndication-2/syndication-2.csproj ================================================ net10.0 true ================================================ FILE: projects/testing/README.md ================================================ # Testing (1) The projects in this folder show how to write tests using the `WebApplicationFactory` found in the `Microsoft.AspNetCore.Mvc.Testing` package. - [NUnit 1](/projects/testing/nunit-1) shows how to create a simple unit test. ================================================ FILE: projects/testing/nunit-1/README.md ================================================ # NUnit 1 This sample consists of two projects: - a simple ASP.NET Core Hello world application - a NUnit test project that uses WebApplicationFactory The test project uses the `WebApplicationFactory` to start an in-proc instance of the web application. The unit tests will query the web application via an instance of `HttpClient` that skips the wire and queries directly the web application. To run the test, go to `tests` folder and run `dotnet test`. Sample made by: [@Kralizek](https://github.com/Kralizek) ================================================ FILE: projects/testing/nunit-1/src/Program.cs ================================================ public class Startup { public void Configure(IApplicationBuilder app) { app.Run(async context => { // Duplicate the code below and write more messages. Save and refresh your browser to see the result. await context.Response.WriteAsync("Hello world. Make sure you run this app using 'dotnet watch run'."); }); } } public class Program { public static void Main(string[] args) => CreateHostBuilder(args).Build().Run(); public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup() ); } ================================================ FILE: projects/testing/nunit-1/src/Src.csproj ================================================ net10.0 true ================================================ FILE: projects/testing/nunit-1/tests/Tests.csproj ================================================ net10.0 true ================================================ FILE: projects/testing/nunit-1/tests/UnitTest1.cs ================================================ using NUnit.Framework; using Microsoft.AspNetCore.Mvc.Testing; using System.Net; public class Tests { private WebApplicationFactory _factory; private HttpClient _client; [OneTimeSetUp] public void OneTimeSetUp() { _factory = new WebApplicationFactory(); } [SetUp] public void Setup() { _client = _factory.CreateClient(); } [Test] public async Task ReturnsTextStartingWithHelloWorld() { var result = await _client.GetStringAsync("/"); Assert.That(result, Does.StartWith("Hello world")); } [Test] public async Task Returns200() { using var request = new HttpRequestMessage(HttpMethod.Get, "/"); using var response = await _client.SendAsync(request); Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK)); } } ================================================ FILE: projects/unpoly/README.md ================================================ # Unpoly JS (5) These examples show how to integrate [UnpolyJS](https://unpoly.com/) with your Minimal API application * [up-poll](up-poll) Use `up-poll` attribute to poll content fragment in specific interval. * [up-target](up-target) Use `up-target` to load specific content fragment and show it at targetted HTML element using tag, id, and class selectors. * [up-target-2](up-target-2) Use `up-target` to load content fragments at multiple elements the same time using tag, id, and class selectors. * [up-hungry](up-hungry) Use `up-hungry` to load content fragement at untargeted elements. If the server returns a matching fragment, the untargeted elements will be loaded. * [up-flashes](up-flashes) Use `up-flashes` to provide flash message functionality. ================================================ FILE: projects/unpoly/up-flashes/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#5e5365", "activityBar.background": "#5e5365", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#302310", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#5e5365", "statusBar.background": "#443c49", "statusBar.debuggingBackground": "#41493c", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#5e5365", "statusBarItem.remoteBackground": "#443c49", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#443c49", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#443c4999", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#443c49" } ================================================ FILE: projects/unpoly/up-flashes/Program.cs ================================================ var app = WebApplication.Create(); app.MapGet("/", () => { var html = """
                    Default Content 1
                    """; return Results.Content(html, "text/html"); }); int clicked = 0; app.MapGet("/unpoly/{idx}", (HttpRequest request, int idx) => { if (request.IsUnpolyJs() is false) return Results.Content(""); return Results.Content($"""
                    You have clicked {clicked++} times at {idx}
                    """); }); app.Run(); public static class UnpolyJs { public static class Headers { public const string UpVersion = "X-Up-Version"; } public static bool IsUnpolyJs(this HttpRequest self) => !string.IsNullOrWhiteSpace(UpVersion(self)); public static string UpVersion(HttpRequest request) { var header = request.Headers[Headers.UpVersion].ToString(); return header; } } ================================================ FILE: projects/unpoly/up-flashes/README.md ================================================ # Load flash message using up-flashes We are using the `up-flashes` attribute as documented [here](https://unpoly.com/flashes). ```html
                    Default Content 1
                    ``` > [!NOTE] > > We use `up-cache` to prevent unpoly from caching the content. > We also set the selector with `:maybe` to tell unpoly not to throw error because we are not returning any matching element for article. ================================================ FILE: projects/unpoly/up-flashes/up-flashes.csproj ================================================ net10.0 true ================================================ FILE: projects/unpoly/up-flashes/up-flashes.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "up-flashes", "up-flashes.csproj", "{D77C0F65-1E25-4E23-9248-70F1AB716100}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {D77C0F65-1E25-4E23-9248-70F1AB716100}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D77C0F65-1E25-4E23-9248-70F1AB716100}.Debug|Any CPU.Build.0 = Debug|Any CPU {D77C0F65-1E25-4E23-9248-70F1AB716100}.Release|Any CPU.ActiveCfg = Release|Any CPU {D77C0F65-1E25-4E23-9248-70F1AB716100}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {53BA3C48-8B70-48C2-9170-F2399D11509E} EndGlobalSection EndGlobal ================================================ FILE: projects/unpoly/up-hungry/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#5e5365", "activityBar.background": "#5e5365", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#302310", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#5e5365", "statusBar.background": "#443c49", "statusBar.debuggingBackground": "#41493c", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#5e5365", "statusBarItem.remoteBackground": "#443c49", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#443c49", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#443c4999", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#443c49" } ================================================ FILE: projects/unpoly/up-hungry/Program.cs ================================================ var app = WebApplication.Create(); app.MapGet("/", () => { var html = """
                    Default Content 1
                    Default Content 2
                    """; return Results.Content(html, "text/html"); }); app.MapGet("/unpoly/{idx}", (HttpRequest request, int idx) => { if (request.IsUnpolyJs() is false) return Results.Content(""); return Results.Content($"""
                    Tag Selector (article){DateTime.UtcNow}
                    This is not targeted explicitly but it will show up anyway because the response contains a matching element (#show)
                    """); }); app.Run(); public static class UnpolyJs { public static class Headers { public const string UpVersion = "X-Up-Version"; } public static bool IsUnpolyJs(this HttpRequest self) => !string.IsNullOrWhiteSpace(UpVersion(self)); public static string UpVersion(HttpRequest request) { var header = request.Headers[Headers.UpVersion].ToString(); return header; } } ================================================ FILE: projects/unpoly/up-hungry/README.md ================================================ # Load fragment of content on untargeted element via up-hungry We are using the `up-hungry` attribute as documented [here](https://unpoly.com/up-hungry). In this example we use a tag selector. ```html
                    Default Content 1
                    Default Content 2
                    ``` ================================================ FILE: projects/unpoly/up-hungry/up-hungry.csproj ================================================ net10.0 true ================================================ FILE: projects/unpoly/up-hungry/up-hungry.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "up-hungry", "up-hungry.csproj", "{96B40B47-75E1-441C-BE63-BC3452283D13}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {96B40B47-75E1-441C-BE63-BC3452283D13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {96B40B47-75E1-441C-BE63-BC3452283D13}.Debug|Any CPU.Build.0 = Debug|Any CPU {96B40B47-75E1-441C-BE63-BC3452283D13}.Release|Any CPU.ActiveCfg = Release|Any CPU {96B40B47-75E1-441C-BE63-BC3452283D13}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {94753A04-3182-4B35-AA10-8258D8C07D9D} EndGlobalSection EndGlobal ================================================ FILE: projects/unpoly/up-poll/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#5e5365", "activityBar.background": "#5e5365", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#302310", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#5e5365", "statusBar.background": "#443c49", "statusBar.debuggingBackground": "#41493c", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#5e5365", "statusBarItem.remoteBackground": "#443c49", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#443c49", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#443c4999", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#443c49" } ================================================ FILE: projects/unpoly/up-poll/Program.cs ================================================ var app = WebApplication.Create(); app.MapGet("/", () => { var html = """
                    ..wait for 0.5 seconds
                    """; return Results.Content(html, "text/html"); }); app.MapGet("/unpoly", (HttpRequest request) => { if (request.IsUnpolyJs() is false) return Results.Content(""); return Results.Content($"
                    Hello world {DateTime.UtcNow} from UnpolyJS
                    "); }); app.Run(); public static class UnpolyJs { public static class Headers { public const string UpVersion = "X-Up-Version"; } public static bool IsUnpolyJs(this HttpRequest self) => !string.IsNullOrWhiteSpace(UpVersion(self)); public static string UpVersion(HttpRequest request) { var header = request.Headers[Headers.UpVersion].ToString(); return header; } } ================================================ FILE: projects/unpoly/up-poll/README.md ================================================ # Polling in specific interval using up-poll We are using the `up-poll` attribute as documented [here](https://unpoly.com/up-poll). ```html
                    ..wait for 0.5 seconds
                    ``` >[!NOTE] > >It is importat that the API returns a matching response otherwise you will not get the desired result (polling). ================================================ FILE: projects/unpoly/up-poll/up-poll.csproj ================================================ net10.0 true ================================================ FILE: projects/unpoly/up-poll/up-poll.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "up-poll", "up-poll.csproj", "{B5069453-D190-4C99-8FD3-5184A34B6532}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {B5069453-D190-4C99-8FD3-5184A34B6532}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B5069453-D190-4C99-8FD3-5184A34B6532}.Debug|Any CPU.Build.0 = Debug|Any CPU {B5069453-D190-4C99-8FD3-5184A34B6532}.Release|Any CPU.ActiveCfg = Release|Any CPU {B5069453-D190-4C99-8FD3-5184A34B6532}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {0359680C-D59A-4CE8-BD43-6265F74929DF} EndGlobalSection EndGlobal ================================================ FILE: projects/unpoly/up-target/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#5e5365", "activityBar.background": "#5e5365", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#302310", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#5e5365", "statusBar.background": "#443c49", "statusBar.debuggingBackground": "#41493c", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#5e5365", "statusBarItem.remoteBackground": "#443c49", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#443c49", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#443c4999", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#443c49" } ================================================ FILE: projects/unpoly/up-target/Program.cs ================================================ var app = WebApplication.Create(); app.MapGet("/", () => { var html = """
                    Default Content 1
                    Default Content 2
                    Default Content 3
                    """; return Results.Content(html, "text/html"); }); app.MapGet("/unpoly/{idx}", (HttpRequest request, int idx) => { if (request.IsUnpolyJs() is false) return Results.Content(""); return idx switch { 1 => Results.Content($"
                    Tag Selector (article){DateTime.UtcNow}
                    "), 2 or 3 => Results.Content($"Id Selector (#show) {DateTime.UtcNow}"), 4 => Results.Content($"Class Selector (.show) {DateTime.UtcNow}"), 5 => Results.Content($""), _ => Results.Content("n/a") }; }); app.Run(); public static class UnpolyJs { public static class Headers { public const string UpVersion = "X-Up-Version"; } public static bool IsUnpolyJs(this HttpRequest self) => !string.IsNullOrWhiteSpace(UpVersion(self)); public static string UpVersion(HttpRequest request) { var header = request.Headers[Headers.UpVersion].ToString(); return header; } } ================================================ FILE: projects/unpoly/up-target/README.md ================================================ # Load fragment of content via up-target We are using the `up-target` attribute as documented [here](https://unpoly.com/up.link). In this example we use tag, id, and class selectors. ```html
                    Default Content 1
                    Default Content 2
                    Default Content 3
                    ``` >[!NOTE] > >It is importat that the API returns a matching target otherwise you will not get the desired result. ```csharp return Results.Content($"{text} {DateTime.UtcNow} from UnpolyJS"); ``` If in above example you change the `id` value to the one not specified in `up-target`, you will not get the right result. ================================================ FILE: projects/unpoly/up-target/up-target.csproj ================================================ net10.0 true ================================================ FILE: projects/unpoly/up-target/up-target.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "up-target", "up-target.csproj", "{898C4D60-51BB-459F-AB0E-03ADA62B4534}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {898C4D60-51BB-459F-AB0E-03ADA62B4534}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {898C4D60-51BB-459F-AB0E-03ADA62B4534}.Debug|Any CPU.Build.0 = Debug|Any CPU {898C4D60-51BB-459F-AB0E-03ADA62B4534}.Release|Any CPU.ActiveCfg = Release|Any CPU {898C4D60-51BB-459F-AB0E-03ADA62B4534}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BC1A8F1E-80E4-48CF-953B-EFF822FF5A93} EndGlobalSection EndGlobal ================================================ FILE: projects/unpoly/up-target-2/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#5e5365", "activityBar.background": "#5e5365", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#302310", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#5e5365", "statusBar.background": "#443c49", "statusBar.debuggingBackground": "#41493c", "statusBar.debuggingForeground": "#e7e7e7", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#5e5365", "statusBarItem.remoteBackground": "#443c49", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#443c49", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#443c4999", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#443c49" } ================================================ FILE: projects/unpoly/up-target-2/Program.cs ================================================ var app = WebApplication.Create(); app.MapGet("/", () => { var html = """

                    Multiple Targets

                    Default Content 1
                    Default Content 2
                    Default Content 3
                    """; return Results.Content(html, "text/html"); }); app.MapGet("/unpoly/{idx}", (HttpRequest request, int idx) => { if (request.IsUnpolyJs() is false) return Results.Content(""); return Results.Content( $"""
                    Tag Selector (article){DateTime.UtcNow}
                    Id Selector (#show) {DateTime.UtcNow} """); }); app.Run(); public static class UnpolyJs { public static class Headers { public const string UpVersion = "X-Up-Version"; } public static bool IsUnpolyJs(this HttpRequest self) => !string.IsNullOrWhiteSpace(UpVersion(self)); public static string UpVersion(HttpRequest request) { var header = request.Headers[Headers.UpVersion].ToString(); return header; } } ================================================ FILE: projects/unpoly/up-target-2/README.md ================================================ # Load multiple fragments of content via up-target We are using the `up-target` attribute as documented [here](https://unpoly.com/up.link). In this example we use tag, id, and class selectors all at the same time. ```html
                    Default Content 1
                    Default Content 2
                    Default Content 3
                    ``` ================================================ FILE: projects/unpoly/up-target-2/up-target-2.csproj ================================================ net10.0 true ================================================ FILE: projects/unpoly/up-target-2/up-target-2.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "up-target-2", "up-target-2.csproj", "{9E332BD6-6E0F-4520-9054-35ECBD8D55BB}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {9E332BD6-6E0F-4520-9054-35ECBD8D55BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9E332BD6-6E0F-4520-9054-35ECBD8D55BB}.Debug|Any CPU.Build.0 = Debug|Any CPU {9E332BD6-6E0F-4520-9054-35ECBD8D55BB}.Release|Any CPU.ActiveCfg = Release|Any CPU {9E332BD6-6E0F-4520-9054-35ECBD8D55BB}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {944EE2BE-45FC-430A-8DD1-3789F516B154} EndGlobalSection EndGlobal ================================================ FILE: projects/uri-helper/README.md ================================================ # Uri Helper (5) This section shows various methods available at `Microsoft.AspNetCore.Http.Extensions.UriHelper`. * [Get Display Url](/projects/uri-helper/uri-helper-get-display-url) `Request.GetDisplayUrl()` shows complete url with host, path and query string of the current request. It's to be used for display purposes only. * [Get Encoded Url](/projects/uri-helper/uri-helper-get-encoded-url) `Request.GetEncodedUrl()` returns the combined components of the request URL in a fully escaped form suitable for use in HTTP headers and other HTTP operations. * [Get Encoded Path and Query](/projects/uri-helper/uri-helper-get-encoded-path-and-query) `UriHelper.GetEncodedPathAndQuery` returns the relative URL of a request. * [From Absolute](/projects/uri-helper/uri-helper-from-absolute) `UriHelper.FromAbsolute` separates the given absolute URI string into components. * [Build Absolute](/projects/uri-helper/uri-helper-build-absolute) `UriHelper.BuildAbsolute` combines the given URI components into a string that is properly encoded for use in HTTP headers. This sample shows 9 ways on how to use it. dotnet8 ================================================ FILE: projects/uri-helper/build.bat ================================================ dotnet build uri-helper-build-absolute dotnet build uri-helper-from-absolute dotnet build uri-helper-get-display-url dotnet build uri-helper-get-encoded-path-and-query dotnet build uri-helper-get-encoded-url ================================================ FILE: projects/uri-helper/build.sh ================================================ #!/bin/bash dotnet build uri-helper-build-absolute dotnet build uri-helper-from-absolute dotnet build uri-helper-get-display-url dotnet build uri-helper-get-encoded-path-and-query dotnet build uri-helper-get-encoded-url ================================================ FILE: projects/uri-helper/uri-helper-build-absolute/Program.cs ================================================ using Microsoft.AspNetCore.Http.Extensions; var app = WebApplication.Create(); app.Run(context => { context.Response.Headers.Append("Content-Type", "text/html"); var url1 = UriHelper.BuildAbsolute(scheme: " http", host: new HostString("localhost:5000")); var url2 = UriHelper.BuildAbsolute(scheme: "http", host: new HostString("localhost:5000"), pathBase: new PathString("/admin")); var url3 = UriHelper.BuildAbsolute(scheme: "http", host: new HostString("localhost:5000"), pathBase: new PathString("/admin"), path: new PathString("/index")); var url4 = UriHelper.BuildAbsolute(scheme: "http", host: new HostString("localhost:5000"), pathBase: new PathString("/admin"), path: new PathString("/index"), query: new QueryString("?greeting=Annie&age=32")); var query5 = new QueryString() .Add("greeting", "Annie") .Add("age", "32"); var url5 = UriHelper.BuildAbsolute(scheme: "http", host: new HostString("localhost:5000"), pathBase: new PathString("/admin"), path: new PathString("/index"), query: query5); var url6 = UriHelper.BuildAbsolute(scheme: "http", host: new HostString("localhost:5000"), pathBase: new PathString("/admin"), path: new PathString("/index"), query: new QueryString("?greeting=Annie&age=32"), fragment: new FragmentString("#phd")); var url7 = UriHelper.BuildAbsolute(scheme: "http", host: new HostString("localhost:5000"), pathBase: null, path: new PathString("/index"), query: new QueryString("?greeting=Annie&age=32"), fragment: new FragmentString("#phd")); var url8 = UriHelper.BuildAbsolute(scheme: "http", host: new HostString("localhost:5000"), pathBase: null, path: null, query: new QueryString("?greeting=Annie&age=32"), fragment: new FragmentString("#phd")); var url9 = UriHelper.BuildAbsolute(scheme: "http", host: new HostString("localhost:5000"), pathBase: null, path: null, query: QueryString.Empty, fragment: new FragmentString("#phd")); return context.Response.WriteAsync($@"

                    UriHelper.BuildAbsolute

                    Combines the given URI components into a string that is properly encoded for use in HTTP headers. doc "); }); app.Run(); ================================================ FILE: projects/uri-helper/uri-helper-build-absolute/README.MD ================================================ # UriHelper.BuildAbsolute Combines the given URI components into a string that is properly encoded for use in HTTP headers. [doc](https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.extensions.urihelper.buildabsolute?view=aspnetcore-2.2). This sample shows 9 ways on how to use the method helper. ================================================ FILE: projects/uri-helper/uri-helper-build-absolute/uri-helper-build-absolute.csproj ================================================ net10.0 true ================================================ FILE: projects/uri-helper/uri-helper-from-absolute/Program.cs ================================================ using Microsoft.AspNetCore.Http.Extensions; var app = WebApplication.Create(); app.Run(context => { context.Response.Headers.Append("Content-Type", "text/html"); var requestUrl = context.Request.GetEncodedUrl(); UriHelper.FromAbsolute(requestUrl, out string scheme, out HostString host, out PathString path, out QueryString queryString, out FragmentString fragment); return context.Response.WriteAsync($@"

                    From Absolute

                    Separates the given absolute URI string into components. Assumes no PathBase. Doc

                    { requestUrl }

                    Click on the links to see what the helper method shows

                    Scheme {scheme}
                    Host {host}
                    Path {path}
                    QueryString {queryString}
                    Fragment String
                    (This is always empty because URL fragment is never sent to the server)
                    {fragment}
                    "); }); app.Run(); ================================================ FILE: projects/uri-helper/uri-helper-from-absolute/README.MD ================================================ # UriHelper.FromAbsolute `UriHelper.FromAbsolute` separates the given absolute URI string into components. ================================================ FILE: projects/uri-helper/uri-helper-from-absolute/uri-helper-from-absolute.csproj ================================================ net10.0 uri-helper-from-absolute uri-helper-from-absolute true ================================================ FILE: projects/uri-helper/uri-helper-get-display-url/Program.cs ================================================ using Microsoft.AspNetCore.Http.Extensions; var app = WebApplication.Create(); app.Run(context => { context.Response.Headers.Append("Content-Type", "text/html"); return context.Response.WriteAsync($@"

                    Get Display Url

                    Returns the combined components of the request URL in a fully un-escaped form (except for the QueryString) suitable only for display. This format should not be used in HTTP headers or other HTTP operations. Doc

                    { context.Request.GetDisplayUrl() }

                    Click on the links to see what the helper method shows

                    "); }); app.Run(); ================================================ FILE: projects/uri-helper/uri-helper-get-display-url/uri-helper-get-display-url.csproj ================================================ net10.0 true ================================================ FILE: projects/uri-helper/uri-helper-get-encoded-path-and-query/Program.cs ================================================ using Microsoft.AspNetCore.Http.Extensions; var app = WebApplication.Create(); app.Run(context => { context.Response.Headers.Append("Content-Type", "text/html"); var requestUrl = context.Request.GetEncodedPathAndQuery(); return context.Response.WriteAsync($@"

                    Get Encoded Path and Query

                    Returns the relative url Doc

                    { requestUrl }

                    Click on the links to see what the helper method shows

                    "); }); app.Run(); ================================================ FILE: projects/uri-helper/uri-helper-get-encoded-path-and-query/README.MD ================================================ # UriHelper.GetEncodedPathAndQuery `UriHelper.GetEncodedPathAndQuery` returns the relative URL. ================================================ FILE: projects/uri-helper/uri-helper-get-encoded-path-and-query/uri-helper-get-encoded-path-and-query.csproj ================================================ net10.0 true ================================================ FILE: projects/uri-helper/uri-helper-get-encoded-url/Program.cs ================================================ using Microsoft.AspNetCore.Http.Extensions; var app = WebApplication.Create(); app.Run(context => { context.Response.Headers.Append("Content-Type", "text/html"); return context.Response.WriteAsync($@"

                    Get Encoded Url

                    Returns the combined components of the request URL in a fully escaped form suitable for use in HTTP headers and other HTTP operations. Doc

                    { context.Request.GetEncodedUrl() }

                    Click on the links to see what the helper method shows

                    "); }); app.Run(); ================================================ FILE: projects/uri-helper/uri-helper-get-encoded-url/README.md ================================================ # Request.GetEncodedUrl `Request.GetEncodedUrl()` returns the combined components of the request URL in a fully escaped form suitable for use in HTTP headers and other HTTP operations. ================================================ FILE: projects/uri-helper/uri-helper-get-encoded-url/uri-helper-get-encoded-url.csproj ================================================ net10.0 true ================================================ FILE: projects/utils/README.md ================================================ # Utils - [Status Codes](http-status-codes) Here we contrast between the usage of `Microsoft.AspNetCore.Http.StatusCodes` and `System.Net.HttpStatusCode`. - [MediaTypeNames](media-type-names) This class provides convenient constants for some common MIME types. It's not extensive by any means however `MediaTypeNames.Text.Html` and `MediaTypeNames.Application.Json` come handy. - [MediaTypeNames - 2](media-type-names-2) Using `FileExtensionContentTypeProvider` to obtain the correct MIME type of a filename extension. ================================================ FILE: projects/utils/build.bat ================================================ dotnet build http-status-codes dotnet build media-type-names dotnet build media-type-names-2 ================================================ FILE: projects/utils/build.sh ================================================ #!/bin/bash dotnet build http-status-codes dotnet build media-type-names dotnet build media-type-names-2 ================================================ FILE: projects/utils/http-status-codes/Program.cs ================================================ using System.Reflection; using System.Net; var app = WebApplication.Create(); static List GetConstants(Type type) { FieldInfo[] fieldInfos = type.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy); return fieldInfos.Where(fi => fi.IsLiteral && !fi.IsInitOnly).ToList(); } app.Run(async context => { context.Response.Headers.Append("Content-Type", "text/html"); await context.Response.WriteAsync(@"

                    Battle of the Http Status Codes

                    "); await context.Response.WriteAsync(@""); await context.Response.WriteAsync("
                    Microsoft.AspNetCore.Http.StatusCodes System.Net.HttpStatusCode
                      "); foreach (var code in GetConstants(typeof(StatusCodes))) { await context.Response.WriteAsync($"
                    • {code.Name} = {code.GetValue(code)}
                    • \n"); } await context.Response.WriteAsync("
                      "); foreach (var code in Enum.GetNames(typeof(HttpStatusCode))) { var status = (HttpStatusCode)Enum.Parse(typeof(HttpStatusCode), code); await context.Response.WriteAsync($"
                    • {code} = {(int)status}
                    • \n"); } await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync(@""); }); app.Run(); ================================================ FILE: projects/utils/http-status-codes/README.MD ================================================ # Comparison between the two ways of return HTTP Status Code in ASP.NET Core Here we contrast between the usage of `Microsoft.AspNetCore.Http.StatusCodes` and `System.Net.HttpStatusCode`. ================================================ FILE: projects/utils/http-status-codes/http-status-codes.csproj ================================================ net10.0 true ================================================ FILE: projects/utils/media-type-names/Program.cs ================================================ using System.Reflection; using System.Net.Mime; using Microsoft.Net.Http.Headers; var app = WebApplication.Create(); static List GetConstants(Type type) { FieldInfo[] fieldInfos = type.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy); return fieldInfos.Where(fi => fi.IsLiteral && !fi.IsInitOnly).ToList(); } app.Run(async context => { context.Response.Headers.Append(HeaderNames.ContentType, MediaTypeNames.Text.Html); await context.Response.WriteAsync(""); await context.Response.WriteAsync("

                    System.Net.Mime.MediaTypeNames

                    "); await context.Response.WriteAsync("

                    MediaTypeNames.Application

                    "); await context.Response.WriteAsync("
                      "); foreach (var h in GetConstants(typeof(MediaTypeNames.Application))) { await context.Response.WriteAsync($"
                    • {h.Name} = {h.GetValue(h)}
                    • "); } await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync("

                    MediaTypeNames.Text

                    "); await context.Response.WriteAsync("
                      "); foreach (var h in GetConstants(typeof(MediaTypeNames.Text))) { await context.Response.WriteAsync($"
                    • {h.Name} = {h.GetValue(h)}
                    • "); } await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync("

                    MediaTypeNames.Image

                    "); await context.Response.WriteAsync("
                      "); foreach (var h in GetConstants(typeof(MediaTypeNames.Image))) { await context.Response.WriteAsync($"
                    • {h.Name} = {h.GetValue(h)}
                    • "); } await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync(""); }); app.Run(); ================================================ FILE: projects/utils/media-type-names/README.MD ================================================ # System.Net.Mime.MediaTypeNames This class provides convenient constants for some common MIME types. It's not extensive by any means however `MediaTypeNames.Text.Html` and `MediaTypeNames.Application.Json` come handy. ================================================ FILE: projects/utils/media-type-names/media-type-names.csproj ================================================ net10.0 true ================================================ FILE: projects/utils/media-type-names-2/Program.cs ================================================ using System.Net.Mime; using Microsoft.Net.Http.Headers; using Microsoft.AspNetCore.StaticFiles; var app = WebApplication.Create(); var provider = new FileExtensionContentTypeProvider(); string GetMime(string ext) { if (provider.TryGetContentType(ext, out string mime)) return mime; else return ""; } app.Run(async context => { context.Response.Headers.Append(HeaderNames.ContentType, MediaTypeNames.Text.Html); await context.Response.WriteAsync(""); await context.Response.WriteAsync("

                    Geting MIME type based on a file extension

                    "); await context.Response.WriteAsync("
                      "); await context.Response.WriteAsync($"
                    • .pdf = {GetMime(".pdf")}"); await context.Response.WriteAsync($"
                    • .doc = {GetMime(".doc")}"); await context.Response.WriteAsync($"
                    • .docx = {GetMime(".docx")}"); await context.Response.WriteAsync($"
                    • .json = {GetMime(".json")}"); await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync(""); }); app.Run(); ================================================ FILE: projects/utils/media-type-names-2/README.MD ================================================ # Finding Mime type based on a file extension Using `FileExtensionContentTypeProvider` to obtain the correct MIME type of a filename extension. ================================================ FILE: projects/utils/media-type-names-2/media-type-names-2.csproj ================================================ net10.0 true ================================================ FILE: projects/version/Program.cs ================================================ using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore; using Microsoft.Extensions.Hosting; using System; using System.Runtime.InteropServices; using System.Reflection; var app = WebApplication.Create(); app.Run(async context => { context.Response.Headers["Content-Type"] = "text/html"; await context.Response.WriteAsync(""); await context.Response.WriteAsync("

                    .NET Core Info

                    "); await context.Response.WriteAsync($"Environment.Version: {Environment.Version}"); await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync($"RuntimeInformation.FrameworkDescription: {RuntimeInformation.FrameworkDescription}"); await context.Response.WriteAsync("
                    "); var coreCLR = ((AssemblyInformationalVersionAttribute[])typeof(object).Assembly.GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false))[0].InformationalVersion; await context.Response.WriteAsync($"CoreCLR Build: {coreCLR.Split('+')[0]}"); await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync($"CoreCLR Hash: {coreCLR.Split('+')[1]}"); await context.Response.WriteAsync("
                    "); var coreFX = ((AssemblyInformationalVersionAttribute[])typeof(Uri).Assembly.GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false))[0].InformationalVersion; await context.Response.WriteAsync($"CoreFX Build: {coreFX.Split('+')[0]}"); await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync($"CoreFX Hash: {coreFX.Split('+')[1]}"); await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync("

                    Environment info

                    "); await context.Response.WriteAsync($"Environment.OSVersion: {Environment.OSVersion}"); await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync($"RuntimeInformation.OSDescription: {RuntimeInformation.OSDescription}"); await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync($"RuntimeInformation.OSArchitecture: {RuntimeInformation.OSArchitecture}"); await context.Response.WriteAsync("
                    "); await context.Response.WriteAsync($"Environment.ProcessorCount: {Environment.ProcessorCount}"); await context.Response.WriteAsync(""); }); app.Run(); ================================================ FILE: projects/version/README.md ================================================ # Show Runtime Information Show various runtime information of your system. The code is a modified version of this [code by Rich Lander](https://github.com/richlander/testapps/blob/master/versioninfo/Program.cs). ================================================ FILE: projects/version/version.csproj ================================================ net10.0 true ================================================ FILE: projects/web-sockets/README.md ================================================ # Web Sockets (6) **Warning**: These samples are low level websocket code. For production, use [SignalR](https://github.com/aspnet/signalr). Yes I will work on SignalR samples soon. * [Echo Server](/projects/web-sockets/web-sockets-1) This is the simplest web socket code you can write. It simply returns what you sent. It does not handle the closing of the connection. It does not handle data that is larger than buffer. It only handles text payload. * [Echo Server 2](/projects/web-sockets/web-sockets-2) We improve upon the previous sample by adding console logging (requiring ```Microsoft.Extensions.Logging.Console``` package) and handling data larger than the buffer. I set the buffer to be very small (4 bytes) so you can see how it works. * [Echo Server 3](/projects/web-sockets/web-sockets-3) We improve upon the previous sample by enabling broadcast. What you see here is a very crude chat functionality. * [Echo Server 4](/projects/web-sockets/web-sockets-4) We improve upon the previous sample by handling closing event initiated by the web client. * [Echo Server 5](/projects/web-sockets/web-sockets-6) Use Mvc Controller to handle websocket request * [Chat Server](/projects/web-sockets/web-sockets-5) Implement a rudimentary single channel chat server. dotnet8 ================================================ FILE: projects/web-sockets/build.bat ================================================ dotnet build web-sockets-1 dotnet build web-sockets-2 dotnet build web-sockets-3 dotnet build web-sockets-4 dotnet build web-sockets-5 dotnet build web-sockets-6 ================================================ FILE: projects/web-sockets/build.sh ================================================ #!/bin/bash dotnet build web-sockets-1 dotnet build web-sockets-2 dotnet build web-sockets-3 dotnet build web-sockets-4 dotnet build web-sockets-5 dotnet build web-sockets-6 ================================================ FILE: projects/web-sockets/web-sockets-1/Program.cs ================================================ using System.Net.WebSockets; using System.Text; var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.UseWebSockets(); app.Use(async (context, next) => { if (!context.WebSockets.IsWebSocketRequest) { // Not a web socket request await next(context); return; } var socket = await context.WebSockets.AcceptWebSocketAsync(); var bufferSize = new byte[1024 * 4]; var receiveBuffer = new ArraySegment(bufferSize); var result = await socket.ReceiveAsync(receiveBuffer, CancellationToken.None); while (!result.CloseStatus.HasValue) { if (result.MessageType == WebSocketMessageType.Text) { var clientRequest = Encoding.UTF8.GetString(receiveBuffer.Array, receiveBuffer.Offset, result.Count); var serverReply = Encoding.UTF8.GetBytes("Echo " + clientRequest); var replyBuffer = new ArraySegment(serverReply); await socket.SendAsync(replyBuffer, WebSocketMessageType.Text, true, CancellationToken.None); receiveBuffer = new ArraySegment(bufferSize); result = await socket.ReceiveAsync(receiveBuffer, CancellationToken.None); } } }); app.Run(async context => { context.Response.Headers.Append("content-type", "text/html"); await context.Response.WriteAsync(@"

                    Web Socket


                    "); }); app.Run(); ================================================ FILE: projects/web-sockets/web-sockets-1/web-sockets.csproj ================================================ net10.0 true ================================================ FILE: projects/web-sockets/web-sockets-2/Program.cs ================================================ using System.Net.WebSockets; using System.Text; var builder = WebApplication.CreateBuilder(); builder.Logging.ClearProviders(); builder.Logging.AddConsole(); builder.Logging.AddFilter((provider, category, logLevel) => { return !category.Contains("Microsoft.AspNetCore"); }); var app = builder.Build(); app.UseWebSockets(); app.Use(async (context, next) => { var log = context.RequestServices.GetService().CreateLogger("websocket"); if (!context.WebSockets.IsWebSocketRequest) { // Not a web socket request await next(context); return; } var socket = await context.WebSockets.AcceptWebSocketAsync(); var bufferSize = new byte[4]; var receiveBuffer = new ArraySegment(bufferSize); WebSocketReceiveResult result; while (socket.State == WebSocketState.Open) { using (var ms = new MemoryStream()) { int count = 0; do { result = await socket.ReceiveAsync(receiveBuffer, CancellationToken.None); if (result.MessageType != WebSocketMessageType.Text) throw new Exception("Unexpected Message"); ms.Write(receiveBuffer.Array, receiveBuffer.Offset, result.Count); receiveBuffer = new ArraySegment(bufferSize); log.LogDebug($"Reading incoming data with buffer(size {bufferSize.Length}) {++count} times"); } while (!result.EndOfMessage && !result.CloseStatus.HasValue); ms.Seek(0, SeekOrigin.Begin); string clientRequest = string.Empty; using (var reader = new StreamReader(ms, Encoding.UTF8)) { clientRequest = await reader.ReadToEndAsync(); } log.LogDebug($"Receive: {clientRequest}"); var serverReply = Encoding.UTF8.GetBytes("Echo " + clientRequest); var replyBuffer = new ArraySegment(serverReply); await socket.SendAsync(replyBuffer, WebSocketMessageType.Text, true, CancellationToken.None); if (result.CloseStatus.HasValue) break; } } }); app.Run(async context => { context.Response.Headers.Append("content-type", "text/html"); await context.Response.WriteAsync(@"

                    Web Socket


                    "); }); app.Run(); ================================================ FILE: projects/web-sockets/web-sockets-2/web-sockets-2.csproj ================================================ net10.0 true ================================================ FILE: projects/web-sockets/web-sockets-3/Program.cs ================================================ using System.Net.WebSockets; using System.Text; using System.Collections.Concurrent; var builder = WebApplication.CreateBuilder(); builder.Services.AddSingleton(); async Task ReceiveAsync(ILogger log, WebSocket socket, string socketId, Func responseHandlerAsync) { var bufferSize = new byte[4]; //This is especially small just to exercise the code that handles data that is larger than buffer var receiveBuffer = new ArraySegment(bufferSize); WebSocketReceiveResult result; while (socket.State == WebSocketState.Open) { using (var ms = new MemoryStream()) { do { result = await socket.ReceiveAsync(receiveBuffer, CancellationToken.None); if (result.MessageType != WebSocketMessageType.Text) throw new Exception("Unexpected Message"); ms.Write(receiveBuffer.Array, receiveBuffer.Offset, result.Count); } while (!result.EndOfMessage && !result.CloseStatus.HasValue); ms.Seek(0, SeekOrigin.Begin); string clientRequest = string.Empty; using (var reader = new StreamReader(ms, Encoding.UTF8)) { clientRequest = reader.ReadToEnd(); } log.LogDebug($"Socket Id {socketId} : Receive: {clientRequest}"); await responseHandlerAsync(clientRequest); if (result.CloseStatus.HasValue) break; } } } var app = builder.Build(); app.UseWebSockets(); int count = 0; app.Use(async (context, next) => { var log = context.RequestServices.GetService().CreateLogger("app"); var cm = context.RequestServices.GetService(); if (!context.WebSockets.IsWebSocketRequest) { await next(context); return; } var socket = await context.WebSockets.AcceptWebSocketAsync(); var socketId = cm.AddSocket(socket); await ReceiveAsync(log, socket, socketId, async (clientRequest) => { var serverReply = Encoding.UTF8.GetBytes($"Echo {++count} {clientRequest}"); var replyBuffer = new ArraySegment(serverReply); await socket.SendAsync(replyBuffer, WebSocketMessageType.Text, true, CancellationToken.None); var broadcastReply = Encoding.UTF8.GetBytes($"Broadcast {count} {clientRequest}"); var broadcastBuffer = new ArraySegment(broadcastReply); var socketTasks = new List(); foreach (var (s, sid) in cm.Other(socketId)) { socketTasks.Add(s.SendAsync(broadcastBuffer, WebSocketMessageType.Text, true, CancellationToken.None)); log.LogDebug($"Broadcasting to : {sid}"); } await Task.WhenAll(socketTasks); }); }); app.Run(async context => { context.Response.Headers.Append("content-type", "text/html"); await context.Response.WriteAsync(@"

                    Web Socket (please open this page at 2 tabs at least)


                      "); }); app.Run(); public class ConnectionManager { ConcurrentDictionary _sockets = new ConcurrentDictionary(); public string AddSocket(WebSocket socket) { var id = Guid.NewGuid().ToString(); if (!_sockets.TryAdd(id, socket)) throw new Exception($"Problem in adding socket with Id {id}"); return id; } public List<(WebSocket socket, string id)> Other(string id) => _sockets.Where(x => x.Key != id).Select(x => (socket: x.Value, id: x.Key)).ToList(); } ================================================ FILE: projects/web-sockets/web-sockets-3/web-sockets-3.csproj ================================================ net10.0 true ================================================ FILE: projects/web-sockets/web-sockets-4/Program.cs ================================================ using System.Net.WebSockets; using System.Text; using System.Collections.Concurrent; var builder = WebApplication.CreateBuilder(); var app = builder.Build(); app.UseWebSockets(); var cm = new ConnectionManager(); int count = 0; app.Use(async (context, next) => { if (!context.WebSockets.IsWebSocketRequest) { await next(); return; } var log = context.RequestServices.GetService().CreateLogger("app"); var socket = await context.WebSockets.AcceptWebSocketAsync(); var socketId = cm.AddSocket(socket); await ReceiveAsync(cm, log, socket, socketId, async (connectionManager, clientRequest) => { var serverReply = Encoding.UTF8.GetBytes($"Echo {++count} {clientRequest}"); var replyBuffer = new ArraySegment(serverReply); await socket.SendAsync(replyBuffer, WebSocketMessageType.Text, true, CancellationToken.None); var broadcastReply = Encoding.UTF8.GetBytes($"Broadcast {count} {clientRequest}"); var broadcastBuffer = new ArraySegment(broadcastReply); var socketTasks = new List(); foreach (var (s, sid) in connectionManager.Other(socketId)) { socketTasks.Add(s.SendAsync(broadcastBuffer, WebSocketMessageType.Text, true, CancellationToken.None)); log.LogDebug($"Broadcasting to : {sid}"); } await Task.WhenAll(socketTasks); }); if (socket.State != WebSocketState.Open) { log.LogDebug($"Socket Id {socketId} with status {socket.State}"); } }); app.Run(async context => { context.Response.Headers.Append("content-type", "text/html"); await context.Response.WriteAsync(@"

                      Web Socket (please open this page at 2 tabs at least)


                        "); }); app.Run(); async Task ReceiveAsync(ConnectionManager cm, ILogger log, WebSocket socket, string socketId, Func responseHandlerAsync) { var bufferSize = new byte[4]; //This is especially small just to exercise the code that handles data that is larger than buffer var receiveBuffer = new ArraySegment(bufferSize); WebSocketReceiveResult result; while (socket.State == WebSocketState.Open) { using (var ms = new MemoryStream()) { do { result = await socket.ReceiveAsync(receiveBuffer, CancellationToken.None); if (result.MessageType == WebSocketMessageType.Close) { log.LogDebug($"Socket Id {socketId} : Receive closing message."); var removalStatus = cm.RemoveSocket(socketId); log.LogDebug($"Socket Id {socketId} removal status {removalStatus}."); break; } if (result.MessageType != WebSocketMessageType.Text) throw new Exception("Unexpected Message"); ms.Write(receiveBuffer.Array, receiveBuffer.Offset, result.Count); } while (!result.EndOfMessage && !result.CloseStatus.HasValue); if (result.MessageType == WebSocketMessageType.Text) { ms.Seek(0, SeekOrigin.Begin); string clientRequest = string.Empty; using (var reader = new StreamReader(ms, Encoding.UTF8)) { clientRequest = reader.ReadToEnd(); } log.LogDebug($"Socket Id {socketId} : Receive: {clientRequest}"); await responseHandlerAsync(cm, clientRequest); } if (result.CloseStatus.HasValue) break; } } } public class ConnectionManager { ConcurrentDictionary _sockets = new ConcurrentDictionary(); public string AddSocket(WebSocket socket) { var id = Guid.NewGuid().ToString(); if (!_sockets.TryAdd(id, socket)) throw new Exception($"Problem in adding socket with Id {id}"); return id; } public bool RemoveSocket(string id) => _sockets.TryRemove(id, out WebSocket socket); public List<(WebSocket socket, string id)> Other(string id) => _sockets.Where(x => x.Key != id).Select(x => (socket: x.Value, id: x.Key)).ToList(); } ================================================ FILE: projects/web-sockets/web-sockets-4/web-sockets-4.csproj ================================================ net10.0 true ================================================ FILE: projects/web-sockets/web-sockets-5/Program.cs ================================================ using System.Net.WebSockets; using System.Text; using System.Collections.Concurrent; var builder = WebApplication.CreateBuilder(); async Task ReceiveAsync(ConnectionManager cm, ILogger log, WebSocket socket, string socketId, Func responseHandlerAsync) { var bufferSize = new byte[4]; //This is especially small just to exercise the code that handles data that is larger than buffer var receiveBuffer = new ArraySegment(bufferSize); WebSocketReceiveResult result; while (socket.State == WebSocketState.Open) { using (var ms = new MemoryStream()) { do { result = await socket.ReceiveAsync(receiveBuffer, CancellationToken.None); if (result.MessageType == WebSocketMessageType.Close) { log.LogDebug($"Socket Id {socketId} : Receive closing message."); var removalStatus = cm.RemoveSocket(socketId); log.LogDebug($"Socket Id {socketId} removal status {removalStatus}."); break; } if (result.MessageType != WebSocketMessageType.Text) throw new Exception("Unexpected Message"); ms.Write(receiveBuffer.Array, receiveBuffer.Offset, result.Count); } while (!result.EndOfMessage && !result.CloseStatus.HasValue); if (result.MessageType == WebSocketMessageType.Text) { ms.Seek(0, SeekOrigin.Begin); string clientRequest = string.Empty; using (var reader = new StreamReader(ms, Encoding.UTF8)) { clientRequest = reader.ReadToEnd(); } log.LogDebug($"Socket Id {socketId} : Receive: {clientRequest}"); await responseHandlerAsync(cm, clientRequest); } if (result.CloseStatus.HasValue) break; } } } ArraySegment Reply(string content) => new ArraySegment(Encoding.UTF8.GetBytes(content)); var app = builder.Build(); app.UseWebSockets(); var cm = new ConnectionManager(); app.Use(async (context, next) => { if (!context.WebSockets.IsWebSocketRequest) { await next(); return; } var log = context.RequestServices.GetService().CreateLogger("app"); var socket = await context.WebSockets.AcceptWebSocketAsync(); var socketId = cm.AddSocket(socket); var cmdHandler = new CommandHandler(); await ReceiveAsync(cm, log, socket, socketId, async (connectionManager, clientRequest) => { var (isOK, cmd) = cmdHandler.Parse(clientRequest); if (isOK) { switch (cmd.Type) { case CommandType.List: { var others = connectionManager.Other(socketId).Select(x => string.IsNullOrWhiteSpace(x.nickname) ? "NoNick" : x.nickname).ToList(); if (others.Count > 0) await socket.SendAsync(Reply(string.Join(",", others)), WebSocketMessageType.Text, true, CancellationToken.None); else await socket.SendAsync(Reply("No other user on this channel"), WebSocketMessageType.Text, true, CancellationToken.None); break; } case CommandType.Nick: { var isOk = connectionManager.SetNickName(socketId, cmd.Data.Item1); if (isOK) await socket.SendAsync(Reply($"Nickname now {cmd.Data.Item1}"), WebSocketMessageType.Text, true, CancellationToken.None); else await socket.SendAsync(Reply($"#nick fails"), WebSocketMessageType.Text, true, CancellationToken.None); break; } case CommandType.Send: { var (isFound, sck) = connectionManager.GetByNick(cmd.Data.Item1); if (isFound) { var (isOk, sender) = connectionManager.GetNickNameById(socketId); if (isOK) await sck.SendAsync(Reply($"From {sender}: {cmd.Data.Item2}"), WebSocketMessageType.Text, true, CancellationToken.None); else await sck.SendAsync(Reply($"From Unknown: {cmd.Data.Item2}"), WebSocketMessageType.Text, true, CancellationToken.None); await socket.SendAsync(Reply($"Message sent to {cmd.Data.Item1}"), WebSocketMessageType.Text, true, CancellationToken.None); } else await socket.SendAsync(Reply($"{cmd.Data.Item1} not found"), WebSocketMessageType.Text, true, CancellationToken.None); break; } case CommandType.Quit: { connectionManager.RemoveSocket(socketId); await socket.SendAsync(Reply("Quitting chat"), WebSocketMessageType.Text, true, CancellationToken.None); await socket.CloseAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None); break; } default: { await socket.SendAsync(Reply("Command not understood"), WebSocketMessageType.Text, true, CancellationToken.None); break; } } } else await socket.SendAsync(Reply("Command not understood"), WebSocketMessageType.Text, true, CancellationToken.None); }); if (socket.State != WebSocketState.Open) log.LogDebug($"Socket Id {socketId} with status {socket.State}"); }); app.Run(async context => { context.Response.Headers.Append("content-type", "text/html"); await context.Response.WriteAsync(@"

                        Web Socket (please open this page at 2 tabs at least)

                        Commands

                        • #list
                        • #nick nickname
                        • #talk nickname text
                        • #quit

                          "); }); app.Run(); public class ConnectionManager { ConcurrentDictionary _sockets = new ConcurrentDictionary(); public string AddSocket(WebSocket socket) { var id = Guid.NewGuid().ToString(); if (!_sockets.TryAdd(id, (socket, string.Empty))) throw new Exception($"Problem in adding socket with Id {id}"); return id; } public bool SetNickName(string id, string nickname) { if (_sockets.TryGetValue(id, out var x)) { _sockets[id] = (x.socket, nickname); return true; } else return false; } public (bool, string) GetNickNameById(string id) { if (_sockets.TryGetValue(id, out var x)) return (true, x.nickname); else return (false, null); } public (bool, WebSocket socket) GetByNick(string nickname) { var found = _sockets.Where(x => x.Value.nickname.Equals(nickname, StringComparison.CurrentCultureIgnoreCase)).Take(1).ToList(); if (found.Count == 0) return (false, null); else return (true, found[0].Value.socket); } public bool RemoveSocket(string id) => _sockets.TryRemove(id, out (WebSocket, string) _); public List<(WebSocket socket, string id, string nickname)> Other(string id) => _sockets.Where(x => x.Key != id) .Select(x => (x.Value.socket, x.Key, x.Value.nickname)) .ToList(); } public enum CommandType { List, Send, Nick, Quit } public class Command { public CommandType Type { get; set; } public (string, string, string) Data { get; set; } } public class CommandHandler { public (bool, Command) Parse(string cmd) { try { if (cmd.StartsWith("#")) { var segment = cmd.Split(new[] { ' ' }); if (segment.Length > 0) { switch (segment[0]) { case "#list": return (true, new Command { Type = CommandType.List, Data = ("", "", "") }); case "#quit": return (true, new Command { Type = CommandType.Quit, Data = ("", "", "") }); case "#nick": return (true, new Command { Type = CommandType.Nick, Data = (segment[1], "", "") }); case "#talk": return (true, new Command { Type = CommandType.Send, Data = (segment[1], string.Join(" ", segment.Skip(2)), "") }); default: return (false, null); } } } return (false, null); } catch { return (false, null); } } } ================================================ FILE: projects/web-sockets/web-sockets-5/web-sockets-5.csproj ================================================ net10.0 true ================================================ FILE: projects/web-sockets/web-sockets-6/Program.cs ================================================ using System.Net.WebSockets; using System.Text; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); var app = builder.Build(); app.MapDefaultControllerRoute(); app.UseWebSockets(); app.Run(); public class HomeController : Controller { [HttpGet] public IActionResult Index() { return new ContentResult { Content = @"

                          Web Socket (please open this page at 2 tabs at least)


                            ", ContentType = "text/html" }; } [HttpGet("/ws")] public async Task Websocket(CancellationToken token) { if (!HttpContext.WebSockets.IsWebSocketRequest) { return NotFound(); } var socket = await HttpContext.WebSockets.AcceptWebSocketAsync(); var bufferSize = new byte[1024 * 4]; var receiveBuffer = new ArraySegment(bufferSize); var result = await socket.ReceiveAsync(receiveBuffer, token); while (!result.CloseStatus.HasValue && !token.IsCancellationRequested) { if (result.MessageType == WebSocketMessageType.Text) { var clientRequest = Encoding.UTF8.GetString(receiveBuffer.Array, receiveBuffer.Offset, result.Count); var serverReply = Encoding.UTF8.GetBytes("Echo " + clientRequest); var replyBuffer = new ArraySegment(serverReply); await socket.SendAsync(replyBuffer, WebSocketMessageType.Text, true, token); receiveBuffer = new ArraySegment(bufferSize); result = await socket.ReceiveAsync(receiveBuffer, token); } } return Ok(); } } ================================================ FILE: projects/web-sockets/web-sockets-6/README.md ================================================ # Handle Web Socket request via MVC controller This is a simple example of a web socket request handler via MVC controller. By [ZJKung](https://github.com/ZJKung) ================================================ FILE: projects/web-sockets/web-sockets-6/web-sockets-6.csproj ================================================ net10.0 enable ================================================ FILE: projects/web-utilities/README.md ================================================ # Web Utilities (3) This section shows various functions available at `Microsoft.AspNetCore.WebUtilities`. * [Query Helpers](/projects/web-utilities/web-utilities-query-helpers) This utility helps you generate query string for your url safely (ht [Rehan Saeed](https://rehansaeed.com/asp-net-core-hidden-gem-queryhelpers/)). * [Parse Query String](/projects/web-utilities/web-utilities-query-helpers-2) `QueryHelpers.ParseQuery` allows you to parse a raw query string and access its individual key and values. * [Reason Phrases](/projects/web-utilities/web-utilities-reason-phrases) This utility returns HTTP response phrases given a status code number. dotnet8 ================================================ FILE: projects/web-utilities/build.bat ================================================ dotnet build web-utilities-query-helpers dotnet build web-utilities-query-helpers-2 dotnet build web-utilities-reason-phrases ================================================ FILE: projects/web-utilities/build.sh ================================================ #!/bin/bash dotnet build web-utilities-query-helpers dotnet build web-utilities-query-helpers-2 dotnet build web-utilities-reason-phrases ================================================ FILE: projects/web-utilities/web-utilities-query-helpers/Program.cs ================================================ using Microsoft.AspNetCore.WebUtilities; var app = WebApplication.Create(); var arguments = new Dictionary() { {"greetings", "hello-world"}, {"origin", "cairo"} }; var path = QueryHelpers.AddQueryString("/greet", arguments); var path2 = QueryHelpers.AddQueryString(path, "name", "annie"); app.Run(async context => { await context.Response.WriteAsync($"{path}\n{path2}"); }); app.Run(); ================================================ FILE: projects/web-utilities/web-utilities-query-helpers/web-utilities-query-helper.csproj ================================================ net10.0 true ================================================ FILE: projects/web-utilities/web-utilities-query-helpers-2/Program.cs ================================================ using Microsoft.AspNetCore.WebUtilities; var app = WebApplication.Create(); app.Run(async context => { var queryString = QueryHelpers.ParseQuery(context.Request.QueryString.ToString()); var output = ""; foreach (var qs in queryString) { output += qs.Key + " = " + qs.Value + "
                            "; } await context.Response.WriteAsync($@"

                            Parsing Raw Query String

                            "); }); app.Run(); ================================================ FILE: projects/web-utilities/web-utilities-query-helpers-2/README.md ================================================ # Parse raw query string `QueryHelpers.ParseQuery` (from `Microsoft.AspNetCore.WebUtilities`) allows you to parse a raw query string and access individual key and values. ================================================ FILE: projects/web-utilities/web-utilities-query-helpers-2/web-utilities-query-helper-2.csproj ================================================ net10.0 true ================================================ FILE: projects/web-utilities/web-utilities-reason-phrases/Program.cs ================================================ using Microsoft.AspNetCore.WebUtilities; var app = WebApplication.Create(); app.Run(context => { return context.Response.WriteAsync($"{ReasonPhrases.GetReasonPhrase(200)} : {ReasonPhrases.GetReasonPhrase(500)}"); }); app.Run(); ================================================ FILE: projects/web-utilities/web-utilities-reason-phrases/web-utilities-reason-phrases.csproj ================================================ net10.0 true ================================================ FILE: projects/windows-service/README.md ================================================ # Windows Service (1) * [Hosting Kestrel from Windows Service](/projects/windows-service/windows-service-1) This sample shows how to host Kestrel from Windows Service. dotnet8 ================================================ FILE: projects/windows-service/windows-service-1/Program.cs ================================================ using Microsoft.Extensions.Hosting.WindowsServices; // https://stackoverflow.com/questions/69909593/asp-net-6-custom-webapplicationfactory-throws-exception var options = new WebApplicationOptions { Args = args, ContentRootPath = WindowsServiceHelpers.IsWindowsService() ? AppContext.BaseDirectory : default, WebRootPath = "wwwroot", ApplicationName = typeof(Program).Assembly.FullName }; var builder = WebApplication.CreateBuilder(options); builder.Host.UseWindowsService(); builder.WebHost.UseUrls("http://localhost:5300"); var app = builder.Build(); app.Run(async context => { await context.Response.WriteAsync($"This is hello world running from a Windows Service"); }); app.Run(); ================================================ FILE: projects/windows-service/windows-service-1/README.md ================================================ # Hosting Kestrel from Windows Service This sample shows how to create a Windows Service that runs a Kestrel server. Further documentation is [here](https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/windows-service?view=aspnetcore-6.0&tabs=visual-studio). This sample requires dependency from [Microsoft.Extensions.Hosting.WindowsServices](https://www.nuget.org/packages/Microsoft.Extensions.Hosting.WindowsServices). ## How to install the windows service Run Visual Studio Command Line under administrator mode. ![Run VS Studio Command Line](part-1.png) Run the following command `sc create "{Fill Service Name} binpath="{Full path to your Windows Service EXE}"` ![Run the command](part-2.png) Open Windows Services Manager and start the service. ![Validate](part-3.png) or you can execute this command `sc start "{Fill Service Name}"` to start the service from the VS Command Line. To stop the service, execute this command `sc stop "{Fill Service Name}"`. ## How to remove the windows service. Run Visual Studio Command Line under administrator mode. Run the following command `sc delete "{Fill Service Name}"`. dotnet6 ================================================ FILE: projects/windows-service/windows-service-1/windows-service-1.csproj ================================================ net10.0 true ================================================ FILE: projects/xml/README.md ================================================ # XML (1) This section shows XML related samples. * [XML Validation using xsd](/projects/xml/xml-validation/) XML validation against XML Schema i.e. XSD. dotnet6 ================================================ FILE: projects/xml/xml-validation/Controllers/HomeController.cs ================================================ using System.Diagnostics; using System.Xml; using System.Xml.Linq; using System.Xml.Schema; using Microsoft.AspNetCore.Mvc; using XmlValidation.Models; namespace XmlValidation.Controllers { public class HomeController : Controller { private readonly ILogger _logger; public HomeController(ILogger logger) { _logger = logger; } public IActionResult Index() { var model = new IndexViewModel { XmlSchema = @" ", XmlDocument = @" content1 content2 ", XmlValidated = false }; return View(model); } [HttpPost] public IActionResult Index([Bind("XmlSchema, XmlDocument")]IndexViewModel viewModel) { if(ModelState.IsValid) { viewModel.SchemaErrors = ValidateSchema(viewModel.XmlSchema); viewModel.XmlErrors = ValidateDocument(viewModel.XmlSchema, viewModel.XmlDocument, viewModel.SchemaValid); viewModel.XmlValidated = true; } return View(viewModel); } private IList ValidateDocument(string xmlSchema, string xmlDoc, bool schemaValid) { IList errors = new List(); try { var xDocument = XDocument.Parse(xmlDoc); if (!string.IsNullOrEmpty(xmlSchema) && schemaValid) { var schemaSet = new XmlSchemaSet(); schemaSet.Add("",XmlReader.Create(new StringReader(xmlSchema))); xDocument.Validate(schemaSet, (o, e) => { errors.Add(e.Message); }); } } catch (Exception e) { errors.Add(e.Message); } return errors; } private IList ValidateSchema(string xmlSchema) { IList errors = new List(); if (!string.IsNullOrEmpty(xmlSchema)) { try { _ = XDocument.Parse(xmlSchema); } catch (Exception ex) { errors.Add(ex.Message); } } return errors; } [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] public IActionResult Error() { return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); } } } ================================================ FILE: projects/xml/xml-validation/Models/ErrorViewModel.cs ================================================ using System; namespace XmlValidation.Models { public class ErrorViewModel { public string RequestId { get; set; } public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); } } ================================================ FILE: projects/xml/xml-validation/Models/IndexViewModel.cs ================================================ using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; namespace XmlValidation.Models { public class IndexViewModel { public string XmlSchema { get; set; } [Required] public string XmlDocument { get; set; } public bool XmlValidated { get; set; } public IList SchemaErrors { get; set; } = new List(); public IList XmlErrors { get; set; } = new List(); public bool SchemaValid => SchemaErrors.Count() == 0; public bool XmlValid => XmlErrors.Count() == 0; } } ================================================ FILE: projects/xml/xml-validation/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.UseStaticFiles(); app.UseAuthorization(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run(); ================================================ FILE: projects/xml/xml-validation/README.md ================================================ # XML Validation Demo **About:** This sample showcases validating XML Document using XML Schema i.e. XSD **Screenshot:** main page schema validation xml validation validation scuccess **Credits**: [Lohith GN](https://github.com/lohithgn) ================================================ FILE: projects/xml/xml-validation/ViewComponents/DangerAlertViewComponent.cs ================================================ using System.Collections.Generic; using Microsoft.AspNetCore.Mvc; namespace XmlValidation.ViewComponents { public class DangerAlertViewComponent : ViewComponent { public IViewComponentResult Invoke(string text, IEnumerable errors) { ViewData["AlertText"] = text; ViewData["Errors"] = errors; return View(); } } } ================================================ FILE: projects/xml/xml-validation/ViewComponents/SuccessAlertViewComponent.cs ================================================ using Microsoft.AspNetCore.Mvc; namespace XmlValidation.ViewComponents { public class SuccessAlertViewComponent : ViewComponent { public IViewComponentResult Invoke(string text) { ViewData["AlertText"] = text; return View(); } } } ================================================ FILE: projects/xml/xml-validation/Views/Home/Index.cshtml ================================================ @model IndexViewModel @{ ViewData["Title"] = "Home Page"; } @if (Model.XmlValidated) {
                            @if (!string.IsNullOrEmpty(Model.XmlSchema)) { if(Model.SchemaValid) { } if (!Model.SchemaValid) { } } @if (Model.SchemaValid) { if(Model.XmlValid) { } else { } }
                            }
                            @section Scripts { @{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); } } ================================================ FILE: projects/xml/xml-validation/Views/Home/Privacy.cshtml ================================================ @{ ViewData["Title"] = "Privacy Policy"; }

                            @ViewData["Title"]

                            Use this page to detail your site's privacy policy.

                            ================================================ FILE: projects/xml/xml-validation/Views/Shared/Components/DangerAlert/Default.cshtml ================================================ @using System.Collections.Generic; ================================================ FILE: projects/xml/xml-validation/Views/Shared/Components/SuccessAlert/Default.cshtml ================================================  ================================================ FILE: projects/xml/xml-validation/Views/Shared/Error.cshtml ================================================ @model ErrorViewModel @{ ViewData["Title"] = "Error"; }

                            Error.

                            An error occurred while processing your request.

                            @if (Model.ShowRequestId) {

                            Request ID: @Model.RequestId

                            }

                            Development Mode

                            Swapping to Development environment will display more detailed information about the error that occurred.

                            The Development environment shouldn't be enabled for deployed applications. It can result in displaying sensitive information from exceptions to end users. For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development and restarting the app.

                            ================================================ FILE: projects/xml/xml-validation/Views/Shared/_Layout.cshtml ================================================  @ViewData["Title"] - Xml Validator
                            @RenderBody()
                            © 2021 - XmlValidator
                            @await RenderSectionAsync("Scripts", required: false) ================================================ FILE: projects/xml/xml-validation/Views/Shared/_ValidationScriptsPartial.cshtml ================================================  ================================================ FILE: projects/xml/xml-validation/Views/_ViewImports.cshtml ================================================ @using XmlValidation @using XmlValidation.Models @using XmlValidation.ViewComponents @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers @addTagHelper *, XmlValidation ================================================ FILE: projects/xml/xml-validation/Views/_ViewStart.cshtml ================================================ @{ Layout = "_Layout"; } ================================================ FILE: projects/xml/xml-validation/XmlValidation.csproj ================================================ net10.0 true ================================================ FILE: projects/xml/xml-validation/XmlValidation.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.31320.298 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlValidation", "XmlValidation.csproj", "{510DE14B-DAAA-4F65-968E-2F3761579E6C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {510DE14B-DAAA-4F65-968E-2F3761579E6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {510DE14B-DAAA-4F65-968E-2F3761579E6C}.Debug|Any CPU.Build.0 = Debug|Any CPU {510DE14B-DAAA-4F65-968E-2F3761579E6C}.Release|Any CPU.ActiveCfg = Release|Any CPU {510DE14B-DAAA-4F65-968E-2F3761579E6C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {DABB3689-B9CF-47F9-BDCE-70B8428830EA} EndGlobalSection EndGlobal ================================================ FILE: projects/xml/xml-validation/appsettings.Development.json ================================================ { "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } } } ================================================ FILE: projects/xml/xml-validation/appsettings.json ================================================ { "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*" } ================================================ FILE: projects/yarp/Readme.md ================================================ YARP Reverse Proxy =========== This section showcases demoes on creating reverse proxy using YARP. * [Basic Demo](/projects/yarp/basic-demo) Basic demo showcasing simple routing. dotnet6 ================================================ FILE: projects/yarp/basic-demo/Readme.md ================================================ YARP Demo =========== This demo showcases creating reverse proxy in asp.net core by making use of YARP package. From the official documentation [here](https://microsoft.github.io/reverse-proxy/index.html), YARP is: A library to help create reverse proxy servers that are high-performance, production-ready, and highly customizable ## Demo Details: - BackEnd: - File > New > ASP.NET Web API project with Weather controller. - Runs on `https://localhost:9004;http://localhost:9005`. - FrontEnd: - File > New > Blazor WASM project. - Runs on `https://localhost:9002;http://localhost:9003`. - Connects to BackEnd to get weather data and displays in a table. - Proxy: - YARP reverse proxy implementation. Proxies FrontEnd & BackEnd - Runs on `https://localhost:9000;http://localhost:9001`. - YARP Configuration is set up in appsettings.json: ``` "ReverseProxy": { "Routes": { "allrouteprops": { "ClusterId": "allclusterprops", "Match": { "Path": "{**catch-all}" } }, "api": { "ClusterId": "api", "Match": { "Path": "/api/{**slug}" } } }, "Clusters": { "allclusterprops": { "Destinations": { "frontend": { "Address": "https://localhost:9002" } } }, "api": { "Destinations": { "backend": { "Address": "https://localhost:9004" } } } } } ``` - YARP is configured using Minimal API design in `Program.cs` ``` var builder = WebApplication.CreateBuilder(args); var yarpConfigSection = builder.Configuration.GetSection("ReverseProxy"); builder.Services.AddReverseProxy() .LoadFromConfig(yarpConfigSection); var app = builder.Build(); app.MapReverseProxy(); app.Run(); ``` ## Running the Demo - Start `Yarp.Demo.BackEnd` - Open a terminal window and navigate to Yarp.Demo.BackEnd folder. - Execute command `dotnet run`. - Start `Yarp.Demo.FrontEnd` - Open a terminal window and navigate to Yarp.Demo.FrontEnd folder. - Execute command `dotnet run`. - Start `Yarp.Demo.Proxy` - Open a terminal window and navigate to Yarp.Demo.Proxy folder. - Execute command `dotnet run`. - Open a browser. Navigate to `https://localhost:9000` ## Screenshots * Main Page main page * Proxy Logs proxy logs ## Credits [Lohith GN](https://github.com/lohithgn) ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.BackEnd/Controllers/WeatherForecastController.cs ================================================ using Microsoft.AspNetCore.Mvc; namespace Yarp.Demo.BackEnd.Controllers { [ApiController] [Route("api/[controller]")] public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; private readonly ILogger _logger; public WeatherForecastController(ILogger logger) { _logger = logger; } [HttpGet] public IEnumerable Get() { var rng = new Random(); return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateTime.Now.AddDays(index), TemperatureC = rng.Next(-20, 55), Summary = Summaries[rng.Next(Summaries.Length)] }) .ToArray(); } } } ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.BackEnd/Program.cs ================================================ var builder = WebApplication.CreateBuilder(); builder.Services.AddControllers(); var app = builder.Build(); app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run(); ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.BackEnd/WeatherForecast.cs ================================================ namespace Yarp.Demo.BackEnd { public class WeatherForecast { public DateTime Date { get; set; } public int TemperatureC { get; set; } public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); public string Summary { get; set; } } } ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.BackEnd/Yarp.Demo.BackEnd.csproj ================================================ net10.0 true ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.BackEnd/appsettings.Development.json ================================================ { "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } } } ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.BackEnd/appsettings.json ================================================ { "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*" } ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.FrontEnd/App.razor ================================================ 

                            Sorry, there's nothing at this address.

                            ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.FrontEnd/Pages/Counter.razor ================================================ @page "/counter"

                            Counter

                            Current count: @currentCount

                            @code { private int currentCount = 0; private void IncrementCount() { currentCount++; } } ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.FrontEnd/Pages/FetchData.razor ================================================ @page "/fetchdata" @inject HttpClient Http

                            Weather forecast

                            This component demonstrates fetching data from the server.

                            @if (forecasts == null) {

                            Loading...

                            } else { @foreach (var forecast in forecasts) { }
                            Date Temp. (C) Temp. (F) Summary
                            @forecast.Date.ToShortDateString() @forecast.TemperatureC @forecast.TemperatureF @forecast.Summary
                            } @code { private WeatherForecast[] forecasts; protected override async Task OnInitializedAsync() { forecasts = await Http.GetFromJsonAsync("api/weatherforecast"); } public class WeatherForecast { public DateTime Date { get; set; } public int TemperatureC { get; set; } public string Summary { get; set; } public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); } } ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.FrontEnd/Pages/Index.razor ================================================ @page "/"

                            Hello, world!

                            Welcome to your new app. ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.FrontEnd/Program.cs ================================================ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using Yarp.Demo.FrontEnd; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("#app"); builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); await builder.Build().RunAsync(); ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.FrontEnd/Shared/MainLayout.razor ================================================ @inherits LayoutComponentBase
                            @Body
                            ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.FrontEnd/Shared/MainLayout.razor.css ================================================ .page { position: relative; display: flex; flex-direction: column; } .main { flex: 1; } .sidebar { background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%); } .top-row { background-color: #f7f7f7; border-bottom: 1px solid #d6d5d5; justify-content: flex-end; height: 3.5rem; display: flex; align-items: center; } .top-row ::deep a, .top-row .btn-link { white-space: nowrap; margin-left: 1.5rem; } .top-row a:first-child { overflow: hidden; text-overflow: ellipsis; } @media (max-width: 640.98px) { .top-row:not(.auth) { display: none; } .top-row.auth { justify-content: space-between; } .top-row a, .top-row .btn-link { margin-left: 0; } } @media (min-width: 641px) { .page { flex-direction: row; } .sidebar { width: 250px; height: 100vh; position: sticky; top: 0; } .top-row { position: sticky; top: 0; z-index: 1; } .main > div { padding-left: 2rem !important; padding-right: 1.5rem !important; } } ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.FrontEnd/Shared/NavMenu.razor ================================================ 
                            @code { private bool collapseNavMenu = true; private string NavMenuCssClass => collapseNavMenu ? "collapse" : null; private void ToggleNavMenu() { collapseNavMenu = !collapseNavMenu; } } ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.FrontEnd/Shared/NavMenu.razor.css ================================================ .navbar-toggler { background-color: rgba(255, 255, 255, 0.1); } .top-row { height: 3.5rem; background-color: rgba(0,0,0,0.4); } .navbar-brand { font-size: 1.1rem; } .oi { width: 2rem; font-size: 1.1rem; vertical-align: text-top; top: -2px; } .nav-item { font-size: 0.9rem; padding-bottom: 0.5rem; } .nav-item:first-of-type { padding-top: 1rem; } .nav-item:last-of-type { padding-bottom: 1rem; } .nav-item ::deep a { color: #d7d7d7; border-radius: 4px; height: 3rem; display: flex; align-items: center; line-height: 3rem; } .nav-item ::deep a.active { background-color: rgba(255,255,255,0.25); color: white; } .nav-item ::deep a:hover { background-color: rgba(255,255,255,0.1); color: white; } @media (min-width: 641px) { .navbar-toggler { display: none; } .collapse { /* Never collapse the sidebar for wide screens */ display: block; } } ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.FrontEnd/Shared/SurveyPrompt.razor ================================================ @code { // Demonstrates how a parent component can supply parameters [Parameter] public string Title { get; set; } } ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.FrontEnd/Yarp.Demo.FrontEnd.csproj ================================================ net10.0 true ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.FrontEnd/_Imports.razor ================================================ @using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.AspNetCore.Components.WebAssembly.Http @using Microsoft.JSInterop @using Yarp.Demo.FrontEnd @using Yarp.Demo.FrontEnd.Shared ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.FrontEnd/wwwroot/css/app.css ================================================ @import url('open-iconic/font/css/open-iconic-bootstrap.min.css'); html, body { font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; } a, .btn-link { color: #0366d6; } .btn-primary { color: #fff; background-color: #1b6ec2; border-color: #1861ac; } .content { padding-top: 1.1rem; } .valid.modified:not([type=checkbox]) { outline: 1px solid #26b050; } .invalid { outline: 1px solid red; } .validation-message { color: red; } #blazor-error-ui { background: lightyellow; bottom: 0; box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); display: none; left: 0; padding: 0.6rem 1.25rem 0.7rem 1.25rem; position: fixed; width: 100%; z-index: 1000; } #blazor-error-ui .dismiss { cursor: pointer; position: absolute; right: 0.75rem; top: 0.5rem; } ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.FrontEnd/wwwroot/css/open-iconic/FONT-LICENSE ================================================ SIL OPEN FONT LICENSE Version 1.1 Copyright (c) 2014 Waybury PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.FrontEnd/wwwroot/css/open-iconic/ICON-LICENSE ================================================ The MIT License (MIT) Copyright (c) 2014 Waybury Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.FrontEnd/wwwroot/css/open-iconic/README.md ================================================ [Open Iconic v1.1.1](http://useiconic.com/open) =========== ### Open Iconic is the open source sibling of [Iconic](http://useiconic.com). It is a hyper-legible collection of 223 icons with a tiny footprint—ready to use with Bootstrap and Foundation. [View the collection](http://useiconic.com/open#icons) ## What's in Open Iconic? * 223 icons designed to be legible down to 8 pixels * Super-light SVG files - 61.8 for the entire set * SVG sprite—the modern replacement for icon fonts * Webfont (EOT, OTF, SVG, TTF, WOFF), PNG and WebP formats * Webfont stylesheets (including versions for Bootstrap and Foundation) in CSS, LESS, SCSS and Stylus formats * PNG and WebP raster images in 8px, 16px, 24px, 32px, 48px and 64px. ## Getting Started #### For code samples and everything else you need to get started with Open Iconic, check out our [Icons](http://useiconic.com/open#icons) and [Reference](http://useiconic.com/open#reference) sections. ### General Usage #### Using Open Iconic's SVGs We like SVGs and we think they're the way to display icons on the web. Since Open Iconic are just basic SVGs, we suggest you display them like you would any other image (don't forget the `alt` attribute). ``` icon name ``` #### Using Open Iconic's SVG Sprite Open Iconic also comes in a SVG sprite which allows you to display all the icons in the set with a single request. It's like an icon font, without being a hack. Adding an icon from an SVG sprite is a little different than what you're used to, but it's still a piece of cake. *Tip: To make your icons easily style able, we suggest adding a general class to the* `` *tag and a unique class name for each different icon in the* `` *tag.* ``` ``` Sizing icons only needs basic CSS. All the icons are in a square format, so just set the `` tag with equal width and height dimensions. ``` .icon { width: 16px; height: 16px; } ``` Coloring icons is even easier. All you need to do is set the `fill` rule on the `` tag. ``` .icon-account-login { fill: #f00; } ``` To learn more about SVG Sprites, read [Chris Coyier's guide](http://css-tricks.com/svg-sprites-use-better-icon-fonts/). #### Using Open Iconic's Icon Font... ##### …with Bootstrap You can find our Bootstrap stylesheets in `font/css/open-iconic-bootstrap.{css, less, scss, styl}` ``` ``` ``` ``` ##### …with Foundation You can find our Foundation stylesheets in `font/css/open-iconic-foundation.{css, less, scss, styl}` ``` ``` ``` ``` ##### …on its own You can find our default stylesheets in `font/css/open-iconic.{css, less, scss, styl}` ``` ``` ``` ``` ## License ### Icons All code (including SVG markup) is under the [MIT License](http://opensource.org/licenses/MIT). ### Fonts All fonts are under the [SIL Licensed](http://scripts.sil.org/cms/scripts/page.php?item_id=OFL_web). ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.FrontEnd/wwwroot/index.html ================================================ Yarp.Demo.FrontEnd
                            Loading...
                            An unhandled error has occurred. Reload 🗙
                            ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.FrontEnd/wwwroot/sample-data/weather.json ================================================ [ { "date": "2018-05-06", "temperatureC": 1, "summary": "Freezing" }, { "date": "2018-05-07", "temperatureC": 14, "summary": "Bracing" }, { "date": "2018-05-08", "temperatureC": -13, "summary": "Freezing" }, { "date": "2018-05-09", "temperatureC": -16, "summary": "Balmy" }, { "date": "2018-05-10", "temperatureC": -2, "summary": "Chilly" } ] ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.Proxy/Program.cs ================================================ using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; var builder = WebApplication.CreateBuilder(args); var yarpConfigSection = builder.Configuration.GetSection("ReverseProxy"); builder.Services.AddReverseProxy() .LoadFromConfig(yarpConfigSection); var app = builder.Build(); app.MapReverseProxy(); app.Run(); ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.Proxy/Yarp.Demo.Proxy.csproj ================================================ net10.0 true ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.Proxy/appsettings.Development.json ================================================ { "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } } } ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.Proxy/appsettings.json ================================================ { "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*", "ReverseProxy": { "Routes": { "allrouteprops": { "ClusterId": "allclusterprops", "Match": { "Path": "{**catch-all}" } }, "api": { "ClusterId": "api", "Match": { "Path": "/api/{**slug}" } } }, "Clusters": { "allclusterprops": { "Destinations": { "frontend": { "Address": "https://localhost:9002" } } }, "api": { "Destinations": { "backend": { "Address": "https://localhost:9004" } } } } } } ================================================ FILE: projects/yarp/basic-demo/Yarp.Demo.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.6.30114.105 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yarp.Demo.Proxy", "Yarp.Demo.Proxy\Yarp.Demo.Proxy.csproj", "{F1900980-EC0F-4BB5-B20D-9515953173E0}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yarp.Demo.FrontEnd", "Yarp.Demo.FrontEnd\Yarp.Demo.FrontEnd.csproj", "{32F44A39-DDBD-4B85-AE63-6EBD4E4FD711}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Yarp.Demo.BackEnd", "Yarp.Demo.BackEnd\Yarp.Demo.BackEnd.csproj", "{92A1D7C1-CC99-4DF7-B2DA-72383105BD98}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {F1900980-EC0F-4BB5-B20D-9515953173E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F1900980-EC0F-4BB5-B20D-9515953173E0}.Debug|Any CPU.Build.0 = Debug|Any CPU {F1900980-EC0F-4BB5-B20D-9515953173E0}.Debug|x64.ActiveCfg = Debug|Any CPU {F1900980-EC0F-4BB5-B20D-9515953173E0}.Debug|x64.Build.0 = Debug|Any CPU {F1900980-EC0F-4BB5-B20D-9515953173E0}.Debug|x86.ActiveCfg = Debug|Any CPU {F1900980-EC0F-4BB5-B20D-9515953173E0}.Debug|x86.Build.0 = Debug|Any CPU {F1900980-EC0F-4BB5-B20D-9515953173E0}.Release|Any CPU.ActiveCfg = Release|Any CPU {F1900980-EC0F-4BB5-B20D-9515953173E0}.Release|Any CPU.Build.0 = Release|Any CPU {F1900980-EC0F-4BB5-B20D-9515953173E0}.Release|x64.ActiveCfg = Release|Any CPU {F1900980-EC0F-4BB5-B20D-9515953173E0}.Release|x64.Build.0 = Release|Any CPU {F1900980-EC0F-4BB5-B20D-9515953173E0}.Release|x86.ActiveCfg = Release|Any CPU {F1900980-EC0F-4BB5-B20D-9515953173E0}.Release|x86.Build.0 = Release|Any CPU {32F44A39-DDBD-4B85-AE63-6EBD4E4FD711}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {32F44A39-DDBD-4B85-AE63-6EBD4E4FD711}.Debug|Any CPU.Build.0 = Debug|Any CPU {32F44A39-DDBD-4B85-AE63-6EBD4E4FD711}.Debug|x64.ActiveCfg = Debug|Any CPU {32F44A39-DDBD-4B85-AE63-6EBD4E4FD711}.Debug|x64.Build.0 = Debug|Any CPU {32F44A39-DDBD-4B85-AE63-6EBD4E4FD711}.Debug|x86.ActiveCfg = Debug|Any CPU {32F44A39-DDBD-4B85-AE63-6EBD4E4FD711}.Debug|x86.Build.0 = Debug|Any CPU {32F44A39-DDBD-4B85-AE63-6EBD4E4FD711}.Release|Any CPU.ActiveCfg = Release|Any CPU {32F44A39-DDBD-4B85-AE63-6EBD4E4FD711}.Release|Any CPU.Build.0 = Release|Any CPU {32F44A39-DDBD-4B85-AE63-6EBD4E4FD711}.Release|x64.ActiveCfg = Release|Any CPU {32F44A39-DDBD-4B85-AE63-6EBD4E4FD711}.Release|x64.Build.0 = Release|Any CPU {32F44A39-DDBD-4B85-AE63-6EBD4E4FD711}.Release|x86.ActiveCfg = Release|Any CPU {32F44A39-DDBD-4B85-AE63-6EBD4E4FD711}.Release|x86.Build.0 = Release|Any CPU {92A1D7C1-CC99-4DF7-B2DA-72383105BD98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {92A1D7C1-CC99-4DF7-B2DA-72383105BD98}.Debug|Any CPU.Build.0 = Debug|Any CPU {92A1D7C1-CC99-4DF7-B2DA-72383105BD98}.Debug|x64.ActiveCfg = Debug|Any CPU {92A1D7C1-CC99-4DF7-B2DA-72383105BD98}.Debug|x64.Build.0 = Debug|Any CPU {92A1D7C1-CC99-4DF7-B2DA-72383105BD98}.Debug|x86.ActiveCfg = Debug|Any CPU {92A1D7C1-CC99-4DF7-B2DA-72383105BD98}.Debug|x86.Build.0 = Debug|Any CPU {92A1D7C1-CC99-4DF7-B2DA-72383105BD98}.Release|Any CPU.ActiveCfg = Release|Any CPU {92A1D7C1-CC99-4DF7-B2DA-72383105BD98}.Release|Any CPU.Build.0 = Release|Any CPU {92A1D7C1-CC99-4DF7-B2DA-72383105BD98}.Release|x64.ActiveCfg = Release|Any CPU {92A1D7C1-CC99-4DF7-B2DA-72383105BD98}.Release|x64.Build.0 = Release|Any CPU {92A1D7C1-CC99-4DF7-B2DA-72383105BD98}.Release|x86.ActiveCfg = Release|Any CPU {92A1D7C1-CC99-4DF7-B2DA-72383105BD98}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {76FE095C-9F02-43EC-BA93-DA1511FAB7CD} EndGlobalSection EndGlobal ================================================ FILE: skills-checklist.md ================================================ #Skills Checklist The following are the checklist of ASP.NET Core that you need to know (WIP)